Skip to content

fix(eval): commit each published score to the corpus a reader can download - #9811

Merged
JSONbored merged 2 commits into
mainfrom
fix/eval-scores-corpus-commitment
Jul 29, 2026
Merged

fix(eval): commit each published score to the corpus a reader can download#9811
JSONbored merged 2 commits into
mainfrom
fix/eval-scores-corpus-commitment

Conversation

@JSONbored

Copy link
Copy Markdown
Owner

Closes #9805

Verified live before and after

GET /v1/public/stats        rulePrecision.rules[0] = ai_consensus_defect, decided 460, confirmed 287
                            rulePrecision.latestBacktestRun = null
GET /v1/public/eval-corpus  caseCount 460, truncated false,
                            checksum 470e234e8923461e8642807c46265f01393f6dc9e4e40e52363f41767b5c3c10
GET /v1/public/eval-scores  { "records": [] }

The corpus is real and complete, and I confirmed checksumPublicEvalCorpus over the cases array exactly as downloaded reproduces 470e234e…. The 460 published cases are also the same 460 the decided count is computed from. Yet nothing committed to it.

The commitment came only from a persisted calibration.*_backtest_run audit event. #9804 fixes that writer — but it runs inside a review pass, and hosted review execution is retired (src/index.ts acks-and-drops isReviewExecutionJob messages), so on loopover.ai that event never exists. Meanwhile verify-this-review.mdx §4 tells an anonymous reader to fetch .records and re-derive recordDigest, and the doc explained the empty array as "the latest backtest run's corpus is empty" — which was no longer true.

What changed

Each record falls back to its own rule's published corpus checksum: the exact bytes /v1/public/eval-corpus serves, over the same window. That is not the placeholder commitment #9215 forbids — it is a hash over an artifact the reader downloads and re-hashes, which is precisely what the reproducible trust tier asserts. A persisted run still wins where one exists, so self-host behaviour is untouched.

Resolving per rule also fixes a latent bug: latestBacktestRun.corpusChecksum was a single value stamped onto every record, so with more than one published rule, every record but one would have committed to a different rule's cases. Only one rule clears the floor today, which is why it hadn't surfaced.

The part I did not expect to have to fix

The issue requires "a truncated corpus must not be published as a commitment." Truncation was undetectable:

  • PUBLIC_EVAL_CORPUS_MAX_CASES was 5_000
  • the corpus is built from queryRuleHistory, which passed no limit, so listAuditEventsByType used its default of 500 (hard-clamped at 2000 regardless)

So the cap could never bind and truncated was structurally always false — while /v1/public/stats counts decided with an unbounded SQL COUNT(*). The two surfaces agreed only while the window stayed under 500 cases. At 460, they were 40 cases from silently diverging: stats reporting the true count while the corpus served a 500-case prefix and reported completeness.

That directly undermines this PR's commitment, so it is fixed here rather than deferred:

  • queryRuleHistory takes an explicit limit (defaulted, so every existing caller is byte-identical) and returns saturated — true when either read came back at its bound
  • PUBLIC_EVAL_CORPUS_MAX_CASES is pinned to the real ceiling instead of an unreachable number
  • truncated ORs the cap with read saturation
  • a truncated corpus is never published as a commitment

The interface change ripples to SignalStore and the miner's own store. The miner reads its whole local event ledger in memory with no bound, so it returns saturated: false — a true statement there, not a stub.

Deliverables

  • Records published per rule with no persisted backtest run, each committing to its own checksum
  • Two rules get two different checksums (the per-rule bug, pinned in both the pure builder and over real D1)
  • A truncated corpus yields no record — driven through real saturation (2000 firings + one override, so the omission is truncation and not emptiness), not a stub
  • A persisted backtest run still takes precedence
  • The published checksum re-derives from the /v1/public/eval-corpus payload for the same rule, end to end through both routes with recordDigest re-verified
  • verify-this-review.mdx §4 rewritten: it now gives the reader the two-command loop to tie a record to the corpus they downloaded, and states the three real reasons a rule is omitted

Validation

tsc --noEmit · db:schema-drift:check · dead-source-files:check · import-specifiers:check · validate:no-hand-written-js · docs:drift-check — clean. 176 tests pass across the affected and ripple-affected suites.

Coverage on every changed file — eval-score-records.ts, public-eval-corpus.ts, signal-tracking-wire.ts100% lines, 100% branches.

Note on ordering

Independent of #9804; they touch different sides of the same surface and merge in either order. Together they mean a deployment publishes records whether or not it executes reviews.

Documentation-only change to apps/loopover-ui/content/docs/; no route, component, or style touched, so there is no visual diff to screenshot.

…nload

Verified live on api.loopover.ai: /v1/public/stats publishes
ai_consensus_defect at decided 460 / confirmed 287, /v1/public/eval-corpus
serves 460 real cases whose checksum re-derives from the downloaded bytes, and
/v1/public/eval-scores serves `{"records":[]}`.

The commitment came only from a persisted calibration.*_backtest_run audit
event. #9639 fixes that writer, but it runs inside a review pass, and hosted
review execution is retired (src/index.ts acks-and-drops review-execution jobs
off the queue), so on loopover.ai the event never exists. The walkthrough tells
an anonymous reader to fetch .records and re-derive recordDigest; they got an
empty array, explained by a doc line attributing it to an empty corpus that
demonstrably is not empty.

Each record now falls back to its OWN rule's published corpus checksum -- the
exact bytes /v1/public/eval-corpus serves, over the same window. That is not the
placeholder commitment #9215 forbids: it is a hash over an artifact the reader
downloads and re-hashes, which is what the `reproducible` tier asserts. A
persisted run still wins where one exists, so self-host is unchanged.

Resolving per rule also fixes a latent bug: one run's checksum was stamped onto
every record, so with more than one published rule every record but one would
have committed to a different rule's cases.

TRUNCATION HAD TO BE MADE DETECTABLE FIRST. PUBLIC_EVAL_CORPUS_MAX_CASES was
5_000 while the corpus is built from a rule-history read that
listAuditEventsByType hard-clamps to 2_000 -- and queryRuleHistory passed no
limit at all, so it took the default of 500. The cap could never bind, and
`truncated` was structurally always false, while /v1/public/stats counts
`decided` with an unbounded SQL COUNT(*). The two surfaces agreed only while the
window stayed under 500 cases; at 460 they were 40 from silently diverging, with
the corpus serving a prefix and reporting completeness. queryRuleHistory now
takes an explicit bound and reports `saturated`, the corpus ORs that into
`truncated`, and a truncated corpus is never published as a commitment -- its
checksum would cover a prefix of the window the score covers.

Closes #9805
@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Jul 29, 2026

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Preview URL Updated (UTC)
✅ Deployment successful!
View logs
loopover-ui 3e3e603 Commit Preview URL

Branch Preview URL
Jul 29 2026, 10:56 AM

@loopover-orb

loopover-orb Bot commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

Warning

⏸️ LoopOver review result - manual review recommended

Review updated: 2026-07-29 11:19:15 UTC

16 files · 1 AI reviewer · no blockers · CI green · clean

⏸️ Suggested Action - Manual Review

  • AI review did not produce public notes: The configured AI reviewer returned no usable public assessment for this PR head.

Review summary
AI review is unavailable for this PR head. LoopOver is holding this PR for manual review until the configured AI provider returns a usable public review summary.

Nits — 2 non-blocking
  • PR author also opened the linked issue — Link an issue that was opened by a different contributor, or provide a rationale for why this self-authored issue represents genuine discovery work.
  • AI review did not produce public notes — Fix the configured AI provider, then re-run LoopOver review before relying on the result.

Decision drivers

  • ✅ Code review — No blockers (1 reviewer)
  • ⚠️ Gate result — Not blocking (Advisory; not blocking this PR.)
Context & advisory signals — never blocks the verdict
Signal Result Evidence
Linked issue ✅ Linked #9805
Related work ✅ No active overlap found No same-issue or scoped active PR overlap found.
Change scope ✅ 20/20 Low review scope from cached public metadata (1 linked issue).
Validation posture ✅ 25/25 PR body includes validation/test evidence.
Contributor workload ✅ 10/10 Author activity: 14 registered-repo PR(s), 13 merged, 357 issue(s).
Contributor context ✅ Confirmed Gittensor contributor JSONbored; Gittensor profile; 14 PR(s), 357 issue(s).
Improvement ✅ Minor risk: clean · value: minor
Linked issue satisfaction

Addressed
The diff implements the per-rule fallback commitment to the rule's own /v1/public/eval-corpus checksum, preserves precedence for a persisted backtest run, refuses empty/truncated corpora, fixes the latent truncated-flag/read-bound mismatch, adds tests covering per-rule distinct checksums, truncation omission, backtest-run precedence, and end-to-end corpus/record checksum equality, and updates veri

Review context
  • Author: JSONbored
  • Role context: owner (maintainer lane)
  • Public audience mode: oss maintainer
  • Lane context: Repository is registered but has no active allocation in the current snapshot.
  • Public profile languages: not available
  • Official Gittensor activity: 14 PR(s), 357 issue(s).
  • PR-specific overlap: none found.
Contributor next steps
  • Start here: Treat this as maintainer-lane context rather than normal contributor-lane activity.
  • Then work through the remaining 2 steps in the Signals table above.
Signal definitions
  • Related work = same linked issue, overlapping active PRs, or title/path similarity.
  • Change scope = cached public metadata such as size labels, draft state, and review-burden hints.
  • Validation posture = whether the PR provides enough public validation/test evidence for maintainer review.
  • Contributor workload = public contributor activity and cleanup pressure, not a repo-wide quality failure.
  • Contributor context = public GitHub/Gittensor identity context; non-Gittensor status is not a blocker.
🧪 Chat with LoopOver

Ask LoopOver a question about this PR directly in a comment — grounded only in the same cached, public-safe facts shown above, never a new claim.

  • @loopover ask <question> answers contribution-quality Q&A with source citations and freshness.
  • @loopover chat <question> answers in natural prose from cached decision-pack facts via local inference (maintainer/collaborator; read-only).
  • A plain-language @loopover mention with a real question is routed to the closest matching read-only command automatically — no exact syntax required.

Full command reference: https://loopover.ai/docs/loopover-commands

🧪 Experimental — new and may change.

Decision record
  • action: hold · clause: ai_review_inconclusive
  • config: 284c1d495ab04feb8be135f523157874f5992ad1c4b67a0309a7306e3399b98a · pack: oss-anti-slop · ci: passed
  • record: fd7b93bc45d5cb7937ebbec3769ced4f33890ba7fafa7c5c021a020a53538c07 (schema v5, head 3e3e603)
Visual preview
Route Viewport Before (production) After (this PR's preview) Diff
/ desktop before /
before /
after /
after /
/ mobile before / (mobile)
before / (mobile)
after / (mobile)
after / (mobile)

Click any thumbnail to open the full-size screenshot. Before = production · After = this PR's preview deploy.

Scroll preview
Route Before (production) After (this PR's preview)
/ before / (scroll)
before / (scroll)
after / (scroll)
after / (scroll)

A short scroll-through clip (desktop) — click either thumbnail to open the full animation. Evidence for scroll-linked behavior a single screenshot can't show.

🟩 Safe / merged · 🟦 Advisory · 🟨 Held for review · 🟥 Blocked / closed


💰 Earn for open-source contributions like this. Gittensor lets GitHub contributors earn for the work they already do — register to start earning →.

Checked by LoopOver, a quiet PR intelligence layer for OSS maintainers.

  • Re-run LoopOver review

@JSONbored JSONbored self-assigned this Jul 29, 2026
@superagent-security

Copy link
Copy Markdown
Contributor

Superagent didn't find any vulnerabilities or security issues in this PR.

@loopover-orb loopover-orb Bot added the manual-review Gittensor contributor context label Jul 29, 2026
@codecov

codecov Bot commented Jul 29, 2026

Copy link
Copy Markdown

Bundle Report

Changes will increase total bundle size by 4.5kB (0.06%) ⬆️. This is within the configured threshold ✅

Detailed changes
Bundle name Size Change
loopover-ui 7.89MB 4.5kB (0.06%) ⬆️

Affected Assets, Files, and Routes:

view changes for bundle: loopover-ui

Assets Changed:

Asset Name Size Change Total Size Change (%)
assets/add-scalar-classes-__lw3a1Q.js (New) 2.16MB 2.16MB 100.0% 🚀
assets/tanstack-vendor-BrwBS9AQ.js (New) 928.35kB 928.35kB 100.0% 🚀
assets/docs.fumadocs-spike-api-reference-DhQ2SkSG.js (New) 443.45kB 443.45kB 100.0% 🚀
assets/AgentScalarChatInterface.vue-DsguY_ah.js (New) 201.7kB 201.7kB 100.0% 🚀
assets/modal-Bxn9HwF1.js (New) 184.5kB 184.5kB 100.0% 🚀
assets/client-DsbPWxvL.js (New) 151.47kB 151.47kB 100.0% 🚀
assets/maintainer-panel-Bx7hIFFI.js (New) 78.99kB 78.99kB 100.0% 🚀
assets/verify-this-review-Ck0f0_EJ.js (New) 50.91kB 50.91kB 100.0% 🚀
assets/routes-BgwREAI6.js (New) 35.96kB 35.96kB 100.0% 🚀
assets/owner-panel-CTveB-VB.js (New) 27.97kB 27.97kB 100.0% 🚀
assets/app-BcUiAaSo.js (New) 25.78kB 25.78kB 100.0% 🚀
assets/ui-vendor-C-fQ8rnv.js (New) 24.57kB 24.57kB 100.0% 🚀
assets/miner-panel-ljl7A6c3.js (New) 20.24kB 20.24kB 100.0% 🚀
assets/app.runs-DhKetYxm.js (New) 20.22kB 20.22kB 100.0% 🚀
assets/api._op-nICtfBqj.js (New) 17.57kB 17.57kB 100.0% 🚀
assets/self-hosting-docs-audit-CEPnypqq.js (New) 16.6kB 16.6kB 100.0% 🚀
assets/docs._slug-DyUnhQAm.js (New) 15.52kB 15.52kB 100.0% 🚀
assets/playground-panel-Dza1lTG5.js (New) 14.42kB 14.42kB 100.0% 🚀
assets/fairness-DGXOksNB.js (New) 13.98kB 13.98kB 100.0% 🚀
assets/app.audit-BU2a_xXf.js (New) 10.08kB 10.08kB 100.0% 🚀
assets/app.config-generator-CLRJDbLc.js (New) 10.06kB 10.06kB 100.0% 🚀
assets/maintainers-BfEUervA.js (New) 8.06kB 8.06kB 100.0% 🚀
assets/miners-DzB-kQHm.js (New) 7.91kB 7.91kB 100.0% 🚀
assets/agents-BUoR7thS.js (New) 7.74kB 7.74kB 100.0% 🚀
assets/commands-panel-BtnTkf5c.js (New) 6.65kB 6.65kB 100.0% 🚀
assets/maintainer-workflow-DwfGwcSE.js (New) 6.52kB 6.52kB 100.0% 🚀
assets/digest-panel-CeFFn1_2.js (New) 6.15kB 6.15kB 100.0% 🚀
assets/repos._owner._repo.quality-D9DhYc1H.js (New) 6.14kB 6.14kB 100.0% 🚀
assets/docs-nav-DyOB21Pk.js (New) 6.01kB 6.01kB 100.0% 🚀
assets/docs.index-K7o9JlrN.js (New) 5.95kB 5.95kB 100.0% 🚀
assets/api.index-3xVbbL_Q.js (New) 4.7kB 4.7kB 100.0% 🚀
assets/docs-DgAAbIcT.js (New) 2.7kB 2.7kB 100.0% 🚀
assets/api-CbMYIn2L.js (New) 2.69kB 2.69kB 100.0% 🚀
assets/docs-page-B90lpkRC.js (New) 2.1kB 2.1kB 100.0% 🚀
assets/table-qbMWBcBg.js (New) 1.75kB 1.75kB 100.0% 🚀
assets/app.workbench-BW2lx2VP.js (New) 1.58kB 1.58kB 100.0% 🚀
assets/tabs-BGfnqZbj.js (New) 1.39kB 1.39kB 100.0% 🚀
assets/app.repos-DwAQbao1.js (New) 1.07kB 1.07kB 100.0% 🚀
assets/input-D4jeqmjE.js (New) 796 bytes 796 bytes 100.0% 🚀
assets/file-cog-DuXftnzR.js (New) 758 bytes 758 bytes 100.0% 🚀
assets/app.maintainer-BEilq9CH.js (New) 502 bytes 502 bytes 100.0% 🚀
assets/app.owner-BUGbUujk.js (New) 474 bytes 474 bytes 100.0% 🚀
assets/app.commands-Ct_Ax13w.js (New) 455 bytes 455 bytes 100.0% 🚀
assets/app.playground--INlf4JU.js (New) 442 bytes 442 bytes 100.0% 🚀
assets/index-CI29vBWL.js (New) 438 bytes 438 bytes 100.0% 🚀
assets/app.digest-BKUhrm8Y.js (New) 430 bytes 430 bytes 100.0% 🚀
assets/eye-off-ClkS6yhA.js (New) 430 bytes 430 bytes 100.0% 🚀
assets/app.miner-BTKF2fdv.js (New) 422 bytes 422 bytes 100.0% 🚀
assets/key-round-ExEbVkci.js (New) 355 bytes 355 bytes 100.0% 🚀
assets/bot-wcJbnJ08.js (New) 328 bytes 328 bytes 100.0% 🚀
assets/trash-2-zXMUDmow.js (New) 328 bytes 328 bytes 100.0% 🚀
assets/save-0aYQKZxQ.js (New) 327 bytes 327 bytes 100.0% 🚀
assets/git-pull-request-arrow-iWbZn4v3.js (New) 321 bytes 321 bytes 100.0% 🚀
assets/list-checks-BlH_cxxu.js (New) 279 bytes 279 bytes 100.0% 🚀
assets/compass-BPDoyU6D.js (New) 251 bytes 251 bytes 100.0% 🚀
assets/history-Dm6Ib2hN.js (New) 237 bytes 237 bytes 100.0% 🚀
assets/message-square-16wNJORu.js (New) 233 bytes 233 bytes 100.0% 🚀
assets/lock-B-jLRa16.js (New) 206 bytes 206 bytes 100.0% 🚀
assets/rotate-cw-DV2-Uzg8.js (New) 201 bytes 201 bytes 100.0% 🚀
assets/play-CNRwr52J.js (New) 190 bytes 190 bytes 100.0% 🚀
assets/circle-check-QmonGXY_.js (New) 178 bytes 178 bytes 100.0% 🚀
assets/search-B5MFioyp.js (New) 174 bytes 174 bytes 100.0% 🚀
assets/add-scalar-classes-Co4bxscz.js (Deleted) -2.16MB 0 bytes -100.0% 🗑️
assets/tanstack-vendor-BrLkyrp7.js (Deleted) -928.35kB 0 bytes -100.0% 🗑️
assets/docs.fumadocs-spike-api-reference-DfTn6R6t.js (Deleted) -443.45kB 0 bytes -100.0% 🗑️
assets/AgentScalarChatInterface.vue-NOan_aMG.js (Deleted) -201.7kB 0 bytes -100.0% 🗑️
assets/modal-WOXR3gUX.js (Deleted) -184.5kB 0 bytes -100.0% 🗑️
assets/client-DuA7DV3N.js (Deleted) -151.47kB 0 bytes -100.0% 🗑️
assets/maintainer-panel-D2txyoLr.js (Deleted) -78.99kB 0 bytes -100.0% 🗑️
assets/verify-this-review-D8G2EFth.js (Deleted) -46.41kB 0 bytes -100.0% 🗑️
assets/routes-BUD43Duw.js (Deleted) -35.96kB 0 bytes -100.0% 🗑️
assets/owner-panel-D1grqkVY.js (Deleted) -27.97kB 0 bytes -100.0% 🗑️
assets/app-BUEzAAxm.js (Deleted) -25.78kB 0 bytes -100.0% 🗑️
assets/ui-vendor-C5Zk7cdo.js (Deleted) -24.57kB 0 bytes -100.0% 🗑️
assets/miner-panel-B9ZOgJfW.js (Deleted) -20.24kB 0 bytes -100.0% 🗑️
assets/app.runs-Ekyd81-a.js (Deleted) -20.22kB 0 bytes -100.0% 🗑️
assets/api._op-B9v07T4F.js (Deleted) -17.57kB 0 bytes -100.0% 🗑️
assets/self-hosting-docs-audit-Dl24X7Sh.js (Deleted) -16.6kB 0 bytes -100.0% 🗑️
assets/docs._slug-Laux4Rro.js (Deleted) -15.52kB 0 bytes -100.0% 🗑️
assets/playground-panel-DclhOVAD.js (Deleted) -14.42kB 0 bytes -100.0% 🗑️
assets/fairness-Biy4-HRq.js (Deleted) -13.98kB 0 bytes -100.0% 🗑️
assets/app.audit-_RqbGU90.js (Deleted) -10.08kB 0 bytes -100.0% 🗑️
assets/app.config-generator-iDSNNebO.js (Deleted) -10.06kB 0 bytes -100.0% 🗑️
assets/maintainers-C3GJwuNu.js (Deleted) -8.06kB 0 bytes -100.0% 🗑️
assets/miners-D1zyYrMj.js (Deleted) -7.91kB 0 bytes -100.0% 🗑️
assets/agents-DmTYsj0e.js (Deleted) -7.74kB 0 bytes -100.0% 🗑️
assets/commands-panel-YM6uCe0t.js (Deleted) -6.65kB 0 bytes -100.0% 🗑️
assets/maintainer-workflow-HKB2HzUv.js (Deleted) -6.52kB 0 bytes -100.0% 🗑️
assets/digest-panel-IfWFF3ds.js (Deleted) -6.15kB 0 bytes -100.0% 🗑️
assets/repos._owner._repo.quality-C2P3mODQ.js (Deleted) -6.14kB 0 bytes -100.0% 🗑️
assets/docs-nav-BZW4wpMx.js (Deleted) -6.01kB 0 bytes -100.0% 🗑️
assets/docs.index-Rcc5TwxR.js (Deleted) -5.95kB 0 bytes -100.0% 🗑️
assets/api.index-DJCuwmYz.js (Deleted) -4.7kB 0 bytes -100.0% 🗑️
assets/docs-D3CkX6Y3.js (Deleted) -2.7kB 0 bytes -100.0% 🗑️
assets/api-DGUNEAEd.js (Deleted) -2.69kB 0 bytes -100.0% 🗑️
assets/docs-page-jawKODwl.js (Deleted) -2.1kB 0 bytes -100.0% 🗑️
assets/table-BOvRRjKc.js (Deleted) -1.75kB 0 bytes -100.0% 🗑️
assets/app.workbench-BQ61iCDh.js (Deleted) -1.58kB 0 bytes -100.0% 🗑️
assets/tabs-Cr7FkTc-.js (Deleted) -1.39kB 0 bytes -100.0% 🗑️
assets/app.repos-Bb4hCDDr.js (Deleted) -1.07kB 0 bytes -100.0% 🗑️
assets/input-BeAeWi4a.js (Deleted) -796 bytes 0 bytes -100.0% 🗑️
assets/file-cog-CxWOBttH.js (Deleted) -758 bytes 0 bytes -100.0% 🗑️
assets/app.maintainer-SV2QZgE-.js (Deleted) -502 bytes 0 bytes -100.0% 🗑️
assets/app.owner-BZcFkBha.js (Deleted) -474 bytes 0 bytes -100.0% 🗑️
assets/app.commands-Cf7Jgc82.js (Deleted) -455 bytes 0 bytes -100.0% 🗑️
assets/app.playground-BtOEQUHd.js (Deleted) -442 bytes 0 bytes -100.0% 🗑️
assets/index-BzAArDB0.js (Deleted) -438 bytes 0 bytes -100.0% 🗑️
assets/app.digest-DYxtqglb.js (Deleted) -430 bytes 0 bytes -100.0% 🗑️
assets/eye-off-BFKMYgZr.js (Deleted) -430 bytes 0 bytes -100.0% 🗑️
assets/app.miner-OJ6QJjbG.js (Deleted) -422 bytes 0 bytes -100.0% 🗑️
assets/key-round-hI5MoUun.js (Deleted) -355 bytes 0 bytes -100.0% 🗑️
assets/bot-DbcCDqdg.js (Deleted) -328 bytes 0 bytes -100.0% 🗑️
assets/trash-2-Cfk4PTpD.js (Deleted) -328 bytes 0 bytes -100.0% 🗑️
assets/save-COPHD__w.js (Deleted) -327 bytes 0 bytes -100.0% 🗑️
assets/git-pull-request-arrow-BIq6V7ox.js (Deleted) -321 bytes 0 bytes -100.0% 🗑️
assets/list-checks-DKhy3zDq.js (Deleted) -279 bytes 0 bytes -100.0% 🗑️
assets/compass-D1D2dVCC.js (Deleted) -251 bytes 0 bytes -100.0% 🗑️
assets/history-C7_c8eS9.js (Deleted) -237 bytes 0 bytes -100.0% 🗑️
assets/message-square-pqmOfA5s.js (Deleted) -233 bytes 0 bytes -100.0% 🗑️
assets/lock-DYpBx3vw.js (Deleted) -206 bytes 0 bytes -100.0% 🗑️
assets/rotate-cw-BNWX5pjV.js (Deleted) -201 bytes 0 bytes -100.0% 🗑️
assets/play-UKVcci2r.js (Deleted) -190 bytes 0 bytes -100.0% 🗑️
assets/circle-check-D8Bv-iR2.js (Deleted) -178 bytes 0 bytes -100.0% 🗑️
assets/search-C71-2cOv.js (Deleted) -174 bytes 0 bytes -100.0% 🗑️

@codecov

codecov Bot commented Jul 29, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 90.47%. Comparing base (fa4c6d4) to head (3e3e603).
⚠️ Report is 3 commits behind head on main.
✅ All tests successful. No failed tests found.

Additional details and impacted files
@@           Coverage Diff           @@
##             main    #9811   +/-   ##
=======================================
  Coverage   90.46%   90.47%           
=======================================
  Files         918      918           
  Lines      113940   113970   +30     
  Branches    27053    27060    +7     
=======================================
+ Hits       103079   103109   +30     
  Misses       9533     9533           
  Partials     1328     1328           
Flag Coverage Δ
backend 95.57% <100.00%> (+<0.01%) ⬆️
engine 68.69% <100.00%> (+0.01%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines Coverage Δ
...loopover-engine/src/calibration/signal-tracking.ts 100.00% <100.00%> (ø)
...ckages/loopover-miner/lib/signal-tracking-store.ts 90.00% <100.00%> (ø)
src/api/routes.ts 95.60% <100.00%> (+<0.01%) ⬆️
src/review/eval-score-records.ts 100.00% <100.00%> (ø)
src/review/public-eval-corpus.ts 100.00% <100.00%> (ø)
src/review/signal-tracking-wire.ts 100.00% <100.00%> (ø)

@JSONbored
JSONbored merged commit bcdd2f8 into main Jul 29, 2026
12 checks passed
@JSONbored
JSONbored deleted the fix/eval-scores-corpus-commitment branch July 29, 2026 11:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

manual-review Gittensor contributor context

Projects

None yet

Development

Successfully merging this pull request may close these issues.

api(eval): loopover.ai publishes a 460-case corpus and zero records committing to it

1 participant