Skip to content

feat(stats): publish a fleet accuracy trend, so the weekly table means something again - #9775

Merged
JSONbored merged 1 commit into
mainfrom
feat/fleet-accuracy-trend
Jul 29, 2026
Merged

feat(stats): publish a fleet accuracy trend, so the weekly table means something again#9775
JSONbored merged 1 commit into
mainfrom
feat/fleet-accuracy-trend

Conversation

@JSONbored

Copy link
Copy Markdown
Owner

Summary

After #9718 and #9768 the own-ledger weekly trend is correct and, for recent weeks, correctly null — the hosted Worker doesn't execute reviews, so that ledger is frozen while Orb volume keeps growing. A column of nulls beside a rising volume column is honest and tells a reader nothing about how the gate behaves today.

orb_signals already carries everything needed, with no new ingest, no new column and no new secret: self-host runtimes already export gate_verdict/outcome/reversal_flag per PR, the hosted side already validates and stores them, and computeFleetAnalytics already turns them into the 90-day headline. This buckets the same rows weekly.

Refs #9676

Two deliberate non-choices

Both would have reintroduced the bug class this surface is being corrected for:

It is a SEPARATE series, never blended. orb_signals is keyed by per-instance HMACs of repo/PR; audit_events and orb_pr_outcomes use raw owner/repo#number. The populations cannot be joined, so a reversal from one can never be attributed to a decided row in the other. One number over a mixed denominator is exactly the defect #9676 reports.

It does NOT use 1 - reversalRate. #8820 established decisionAccuracy as the fleet estimand, because the reversal formula divides by holds — deferrals that can be neither right nor wrong — and misses mispredictions carrying no reversal marker. A weekly series on a different estimand than the headline directly above it would make the page disagree with itself. There's an invariant test pinning this: 5 confirmed merges plus 95 holds reports 5 decisions at 100%, not ~100% over 100.

The weekly fold calls foldInstance rather than reimplementing the confusion matrix. That function is already exported for the federated bundle with a doc comment warning that a second copy makes comparisons apples-to-oranges — and the accounting is subtle: policy_action rows are excluded from scoring but still count as activity (#8825), and a superseded close is disconfirmed exactly like a literal reopen (#8166). Both have tests.

Only registered instances count, matching computeFleetAnalytics' own trust gate — the ingest is open, so a stranger's signals must not move a published number until a human opts them in. Pinned by an invariant test seeding 40 rows from an unregistered instance and asserting every week stays null.

Validation

Check Result
public-fleet-accuracy-trend.ts 100% stmts / branches / funcs / lines (34/34, 16/16, 5/5, 29/29)
Backend suites 67 tests green
UI suites 1052 green (645 + 407), 2 new
typecheck · ui:typecheck · ui:openapi:check · contract:api-schemas:check · ui-derived-types:check · docs:drift-check · ui:lint (0 errors) · ui:build all clean

Bucketing is by when the gate decided, not when the row arrived — a late export must not pile weeks of decisions into the week it landed. There's a test for that, and one for a malformed decision_timestamp (the column is TEXT with no format constraint, so it's reachable) being dropped rather than bucketed to the epoch.

Scope

  • The PR title follows type(scope): short summary Conventional Commit format, for example fix(api): restore profile access checks.
  • This PR is focused and does not mix unrelated backend, UI, MCP, docs, dependency, and deploy changes.
  • This follows CONTRIBUTING.md and does not reintroduce GitHub Pages, VitePress, site/, or CNAME.
  • I linked a currently open issue this PR resolves (e.g. Closes #123) — a linked open issue is required for every contributor PR.

Safety

  • No secrets, wallet details, hotkeys, coldkeys, user PATs, private keys, raw trust scores, private rankings, or private maintainer evidence are exposed.
  • Public GitHub text stays sanitized, low-noise, and does not imply compensation guarantees or optimization tactics.
  • Auth, cookie, CORS, GitHub App, Cloudflare, or session changes include negative-path tests.
  • API/OpenAPI/MCP behavior is updated and tested where needed.
  • UI changes use live API data or real empty/error/loading states, not production mock/demo fallbacks.
  • Visible UI changes include a UI Evidence section below with JPG/JPEG or PNG screenshots arranged as organized, captioned, clickable thumbnails. SVG screenshots are not used as review evidence. Review-only screenshots or recordings are not committed to the repository.
  • Public docs/changelogs are updated where needed; changelogs are only edited for release-prep PRs.

Aggregates only — week, a count, and a percentage. orb_signals' repo/PR columns are per-instance HMACs and are never read here; nothing identifying can reach the response. The registered-instance join is the security-relevant boundary and has its own invariant test. The contract field is added to @loopover/contract, so the UI got a compile error until its fixtures were updated — the intended behaviour of that package.

UI Evidence

Rendered against the real component with a captured production payload plus a representative fleetAccuracyTrend, at 1280×800, deviceScaleFactor: 2. The section is hidden entirely when no week has a scored verdict (tested), so a deployment with no fleet data sees no empty table.

State After
Fleet trend section Weekly trend — self-hosted fleet

There is no "before": this section does not exist on main. The own-ledger table it sits beside is unchanged.

…s something again

After #9718 and #9768 the own-ledger weekly trend is correct and, for recent
weeks, correctly null: the hosted Worker does not execute reviews, so that
ledger is frozen while Orb volume keeps growing. A column of nulls beside a
rising volume column is honest and tells a reader nothing about how the gate
behaves today.

orb_signals already carries everything needed, with no new ingest, no new column
and no new secret: self-host runtimes export gate_verdict/outcome/reversal_flag
per PR, the hosted side validates and stores them, and computeFleetAnalytics
already turns them into the 90-day headline. This buckets the SAME rows weekly.

Two deliberate non-choices, both of which would have reintroduced the bug class
this surface is being corrected for:

  - It is a SEPARATE series, never blended with the own-ledger one. orb_signals
    is keyed by per-instance HMACs of repo/PR; audit_events and orb_pr_outcomes
    use raw owner/repo#number. The populations cannot be joined, so a reversal
    from one can never be attributed to a decided row in the other, and one
    number over a mixed denominator would be exactly the defect #9676 reports.
  - It does NOT use 1 - reversalRate. #8820 established decisionAccuracy as the
    fleet estimand because the reversal formula divides by holds -- deferrals
    that cannot be right or wrong -- and misses mispredictions carrying no
    reversal marker. A weekly series on a different estimand than the headline
    directly above it would make the page disagree with itself.

The weekly fold calls foldInstance rather than reimplementing the confusion
matrix. That function is already exported for the federated bundle with a doc
comment warning that a second copy makes comparisons apples-to-oranges, and the
accounting is subtle: policy_action rows are excluded from scoring but still
count as activity, and a superseded close is disconfirmed exactly like a reopen.

Only registered instances count, matching computeFleetAnalytics' own trust gate
-- the ingest is open, so a stranger's signals must not move a published number
until a human opts them in. There is a test pinning that.

Refs #9676
@cloudflare-workers-and-pages

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 f7777b1 Commit Preview URL

Branch Preview URL
Jul 29 2026, 07:55 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 08:20:19 UTC

8 files · 1 AI reviewer · 2 blockers · CI green · clean

⏸️ Suggested Action - Manual Review

Review summary
This adds a fleet-population weekly accuracy trend (orb_signals, decisionAccuracy over registered instances) as a separate series alongside the existing own-ledger weekly trend, wired through routes.ts, the shared zod contract, openapi.json, and the fairness-report UI. The design explicitly avoids blending the two populations and explicitly uses decisionAccuracy rather than 1-reversalRate, both choices are justified against prior incidents (#9676, #8820) and pinned with an invariant test (5 confirmed merges + 95 holds → 5 decisions at 100%). The implementation reuses foldInstance rather than reimplementing confusion-matrix accounting, and loadPublicFleetAccuracyTrend fails safe via safeAll so a bad query degrades to all-null weeks instead of breaking the whole public-stats payload.

Nits — 5 non-blocking
  • src/services/public-fleet-accuracy-trend.ts's SQL groups by gate_reasoncode_bucket, which foldInstance presumably needs to exclude policy_action rows, but verify foldInstance's bucketing key matches the raw column values written by the self-host collector so a mismatched enum value wouldn't silently miscount.
  • fairness-report-page.tsx guards rendering with `data.fleetAccuracyTrend && data.fleetAccuracyTrend.some(...)`, but the contract now marks `fleetAccuracyTrend` as required/non-optional — the `&&` null-check is effectively dead code against the current contract, worth simplifying or explaining why it's still needed for stale-payload safety.
  • The PR description was truncated and doesn't fully confirm every call site (e.g. computeFleetAnalytics reuse) was traced, though the visible diff appears internally consistent.
  • Consider adding a short comment or test asserting that `gate_reasoncode_bucket` values written by the self-host collector (src/selfhost/orb-collector.ts) match what foldInstance expects, since that's the one piece of this PR not visible in the diff.
  • If `fleetAccuracyTrend` is truly required in the contract now, drop the `data.fleetAccuracyTrend &&` guard in fairness-report-page.tsx:305 for clarity, or add a comment noting it's defensive against stale cached payloads.

Concerns raised — review before merging

  • No linked issue detected: No closing reference or linked issue number was found in the PR metadata/body. — If this PR is intended to solve an issue, link it explicitly in the PR body.
  • Maintainer requires a linked issue: This repo's maintainer focus manifest requires every PR to reference a tracked issue. — Link the relevant issue (for example Closes #123) before opening the PR.
📋 Copy for AI agents — paste into your coding agent
Fix the following blocker(s) from this PR review:

1. No linked issue detected: No closing reference or linked issue number was found in the PR metadata/body. — If this PR is intended to solve an issue, link it explicitly in the PR body.

2. Maintainer requires a linked issue: This repo's maintainer focus manifest requires every PR to reference a tracked issue. — Link the relevant issue (for example `Closes #123`) before opening the PR.

Decision drivers

  • ❌ Code review — 2 blockers (1 reviewer)
  • ❌ Gate result — Blocking (Repo-configured hard blocker found.)
Context & advisory signals — never blocks the verdict
Signal Result Evidence
Linked issue ⚠️ Missing No linked issue or no-issue rationale found.
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 (no linked issue context).
Validation posture ✅ 25/25 PR body includes validation/test evidence.
Contributor workload ✅ 10/10 Author activity: 14 registered-repo PR(s), 13 merged, 370 issue(s).
Contributor context ✅ Confirmed Gittensor contributor JSONbored; Gittensor profile; 14 PR(s), 370 issue(s).
Improvement ✅ Minor risk: clean · value: minor
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), 370 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 3 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: missing_linked_issue
  • config: 2046c2befcb188136eda47922635ce1862f7ca1310dccda67b1a8693ce83a397 · pack: oss-anti-slop · ci: passed
  • record: 9e82b4b7e61cfb0b7e2a8ef87bc2a82c490af32b431e6b46fed261cc2699b947 (schema v5, head f7777b1)
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

@superagent-security

Copy link
Copy Markdown
Contributor

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

@codecov

codecov Bot commented Jul 29, 2026

Copy link
Copy Markdown

Bundle Report

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

Detailed changes
Bundle name Size Change
loopover-ui 7.83MB 2.43kB (0.03%) ⬆️

Affected Assets, Files, and Routes:

view changes for bundle: loopover-ui

Assets Changed:

Asset Name Size Change Total Size Change (%)
assets/add-scalar-classes-CLxMN5T_.js (New) 2.16MB 2.16MB 100.0% 🚀
assets/tanstack-vendor-CGaZzQOL.js (New) 916.61kB 916.61kB 100.0% 🚀
openapi.json 682 bytes 719.13kB 0.09%
assets/docs.fumadocs-spike-api-reference-Cli-sMKy.js (New) 443.45kB 443.45kB 100.0% 🚀
assets/AgentScalarChatInterface.vue-Dto7Po8k.js (New) 201.7kB 201.7kB 100.0% 🚀
assets/modal-B5sk7jcn.js (New) 184.5kB 184.5kB 100.0% 🚀
assets/client-B7JePOy3.js (New) 151.47kB 151.47kB 100.0% 🚀
assets/self-hosting-configuration-CZNNH3OE.js (New) 115.98kB 115.98kB 100.0% 🚀
assets/maintainer-panel-CL0u_V8I.js (New) 78.99kB 78.99kB 100.0% 🚀
assets/routes-CC2etF8O.js (New) 35.96kB 35.96kB 100.0% 🚀
assets/owner-panel-DOscqJyP.js (New) 27.97kB 27.97kB 100.0% 🚀
assets/app-BnYhy1kE.js (New) 25.78kB 25.78kB 100.0% 🚀
assets/ui-vendor-DOIY9I67.js (New) 24.57kB 24.57kB 100.0% 🚀
assets/miner-panel-BNxKl9uI.js (New) 20.24kB 20.24kB 100.0% 🚀
assets/app.runs-CgmGcwlf.js (New) 20.22kB 20.22kB 100.0% 🚀
assets/api._op-DQ4sgbCw.js (New) 17.57kB 17.57kB 100.0% 🚀
assets/self-hosting-docs-audit-GWCh1ReV.js (New) 16.6kB 16.6kB 100.0% 🚀
assets/docs._slug-Bswunloc.js (New) 15.52kB 15.52kB 100.0% 🚀
assets/playground-panel-Bqa928Tn.js (New) 14.42kB 14.42kB 100.0% 🚀
assets/fairness-HUn1ytIe.js (New) 13.98kB 13.98kB 100.0% 🚀
assets/app.audit-Bw4Tvgfw.js (New) 10.08kB 10.08kB 100.0% 🚀
assets/app.config-generator-Dqh-gkl6.js (New) 10.06kB 10.06kB 100.0% 🚀
assets/maintainers-CAvo8pzp.js (New) 8.06kB 8.06kB 100.0% 🚀
assets/miners-yUZsgty1.js (New) 7.91kB 7.91kB 100.0% 🚀
assets/agents-Djl2uoPE.js (New) 7.74kB 7.74kB 100.0% 🚀
assets/commands-panel-CYhBSJu9.js (New) 6.65kB 6.65kB 100.0% 🚀
assets/maintainer-workflow-B8yYA-_m.js (New) 6.52kB 6.52kB 100.0% 🚀
assets/digest-panel-DSMXf3EY.js (New) 6.15kB 6.15kB 100.0% 🚀
assets/repos._owner._repo.quality-CMjAjIiK.js (New) 6.14kB 6.14kB 100.0% 🚀
assets/docs-nav-qA6dLDnX.js (New) 6.01kB 6.01kB 100.0% 🚀
assets/docs.index-C_WU_CRC.js (New) 5.95kB 5.95kB 100.0% 🚀
assets/api.index-CjaILFLO.js (New) 4.7kB 4.7kB 100.0% 🚀
assets/docs-MQmyQr1Z.js (New) 2.7kB 2.7kB 100.0% 🚀
assets/api-Cv7fz-wY.js (New) 2.69kB 2.69kB 100.0% 🚀
assets/docs-page-Bt2FXQD3.js (New) 2.1kB 2.1kB 100.0% 🚀
assets/table-B0elkjKI.js (New) 1.75kB 1.75kB 100.0% 🚀
assets/app.workbench-BB9xtIwW.js (New) 1.58kB 1.58kB 100.0% 🚀
assets/tabs-BK8efjMa.js (New) 1.39kB 1.39kB 100.0% 🚀
assets/app.repos-CW-oZHsb.js (New) 1.07kB 1.07kB 100.0% 🚀
assets/input-BaRLs70A.js (New) 796 bytes 796 bytes 100.0% 🚀
assets/file-cog-s4yxlXVJ.js (New) 758 bytes 758 bytes 100.0% 🚀
assets/app.maintainer-C0d7a1X2.js (New) 502 bytes 502 bytes 100.0% 🚀
assets/app.owner-CU77n92p.js (New) 474 bytes 474 bytes 100.0% 🚀
assets/app.commands-Ost-h3K-.js (New) 455 bytes 455 bytes 100.0% 🚀
assets/app.playground-CZ3UgwG0.js (New) 442 bytes 442 bytes 100.0% 🚀
assets/index-4ork-0jK.js (New) 438 bytes 438 bytes 100.0% 🚀
assets/app.digest-B3QtLRGc.js (New) 430 bytes 430 bytes 100.0% 🚀
assets/eye-off-BFJnI16l.js (New) 430 bytes 430 bytes 100.0% 🚀
assets/app.miner-CM5fnA61.js (New) 422 bytes 422 bytes 100.0% 🚀
assets/key-round-B-JnpluK.js (New) 355 bytes 355 bytes 100.0% 🚀
assets/bot-BeXa6ILU.js (New) 328 bytes 328 bytes 100.0% 🚀
assets/trash-2-Cct-ntyt.js (New) 328 bytes 328 bytes 100.0% 🚀
assets/save-HDBs21FE.js (New) 327 bytes 327 bytes 100.0% 🚀
assets/git-pull-request-arrow-B5hTshuU.js (New) 321 bytes 321 bytes 100.0% 🚀
assets/list-checks-DhuXx2h8.js (New) 279 bytes 279 bytes 100.0% 🚀
assets/compass-IvjZhxsl.js (New) 251 bytes 251 bytes 100.0% 🚀
assets/history-DEtx3VBL.js (New) 237 bytes 237 bytes 100.0% 🚀
assets/message-square-BNPdhDch.js (New) 233 bytes 233 bytes 100.0% 🚀
assets/lock-BoHgVGO9.js (New) 206 bytes 206 bytes 100.0% 🚀
assets/rotate-cw-BxDRZar_.js (New) 201 bytes 201 bytes 100.0% 🚀
assets/play-BYp-Vp-R.js (New) 190 bytes 190 bytes 100.0% 🚀
assets/circle-check-CAsJuDJn.js (New) 178 bytes 178 bytes 100.0% 🚀
assets/search-8NEuLKwS.js (New) 174 bytes 174 bytes 100.0% 🚀
assets/add-scalar-classes-sskq6ZRJ.js (Deleted) -2.16MB 0 bytes -100.0% 🗑️
assets/tanstack-vendor-CZ029yOl.js (Deleted) -916.33kB 0 bytes -100.0% 🗑️
assets/docs.fumadocs-spike-api-reference-BbPViHvS.js (Deleted) -443.45kB 0 bytes -100.0% 🗑️
assets/AgentScalarChatInterface.vue-iUF71LKW.js (Deleted) -201.7kB 0 bytes -100.0% 🗑️
assets/modal-iE1WQuzt.js (Deleted) -184.5kB 0 bytes -100.0% 🗑️
assets/client-BJAX_3sJ.js (Deleted) -151.47kB 0 bytes -100.0% 🗑️
assets/self-hosting-configuration-DoE8md-d.js (Deleted) -116.33kB 0 bytes -100.0% 🗑️
assets/maintainer-panel-WyZs5Uoa.js (Deleted) -78.99kB 0 bytes -100.0% 🗑️
assets/routes-D0LzIKAD.js (Deleted) -35.96kB 0 bytes -100.0% 🗑️
assets/owner-panel-DytTdKbJ.js (Deleted) -27.97kB 0 bytes -100.0% 🗑️
assets/app-BJNPBVhG.js (Deleted) -25.78kB 0 bytes -100.0% 🗑️
assets/ui-vendor-kusqOwc9.js (Deleted) -24.57kB 0 bytes -100.0% 🗑️
assets/miner-panel-BEgBFhhm.js (Deleted) -20.24kB 0 bytes -100.0% 🗑️
assets/app.runs-DxUQLEcl.js (Deleted) -20.22kB 0 bytes -100.0% 🗑️
assets/api._op-BMM6Z3lC.js (Deleted) -17.57kB 0 bytes -100.0% 🗑️
assets/self-hosting-docs-audit-DYdaACki.js (Deleted) -16.6kB 0 bytes -100.0% 🗑️
assets/docs._slug-BLw5CsCB.js (Deleted) -15.52kB 0 bytes -100.0% 🗑️
assets/playground-panel-vI_RROzc.js (Deleted) -14.42kB 0 bytes -100.0% 🗑️
assets/fairness-h6pR1Npm.js (Deleted) -12.16kB 0 bytes -100.0% 🗑️
assets/app.audit-C1xIYH4r.js (Deleted) -10.08kB 0 bytes -100.0% 🗑️
assets/app.config-generator-BH2zCY_-.js (Deleted) -10.06kB 0 bytes -100.0% 🗑️
assets/maintainers-hbRHbNV7.js (Deleted) -8.06kB 0 bytes -100.0% 🗑️
assets/miners-CIbTuVpc.js (Deleted) -7.91kB 0 bytes -100.0% 🗑️
assets/agents-D2sLp4A_.js (Deleted) -7.74kB 0 bytes -100.0% 🗑️
assets/commands-panel-CeZKRgar.js (Deleted) -6.65kB 0 bytes -100.0% 🗑️
assets/maintainer-workflow-D3z4Uxdz.js (Deleted) -6.52kB 0 bytes -100.0% 🗑️
assets/digest-panel-Bp4wEHfT.js (Deleted) -6.15kB 0 bytes -100.0% 🗑️
assets/repos._owner._repo.quality-DlLjHocg.js (Deleted) -6.14kB 0 bytes -100.0% 🗑️
assets/docs-nav-_db8xFPD.js (Deleted) -6.01kB 0 bytes -100.0% 🗑️
assets/docs.index-CKLaD7ON.js (Deleted) -5.95kB 0 bytes -100.0% 🗑️
assets/api.index-DG11yNLv.js (Deleted) -4.7kB 0 bytes -100.0% 🗑️
assets/docs-DQwAxcLz.js (Deleted) -2.7kB 0 bytes -100.0% 🗑️
assets/api-DFsJfMI-.js (Deleted) -2.69kB 0 bytes -100.0% 🗑️
assets/docs-page-CXmtyZB4.js (Deleted) -2.1kB 0 bytes -100.0% 🗑️
assets/table-lUgN9R_h.js (Deleted) -1.75kB 0 bytes -100.0% 🗑️
assets/app.workbench-CYcDwNEi.js (Deleted) -1.58kB 0 bytes -100.0% 🗑️
assets/tabs-DYo7aM-u.js (Deleted) -1.39kB 0 bytes -100.0% 🗑️
assets/app.repos-DHPU1XIS.js (Deleted) -1.07kB 0 bytes -100.0% 🗑️
assets/input-BdoTRLOZ.js (Deleted) -796 bytes 0 bytes -100.0% 🗑️
assets/file-cog-CnuYjl98.js (Deleted) -758 bytes 0 bytes -100.0% 🗑️
assets/app.maintainer-DuEjktwH.js (Deleted) -502 bytes 0 bytes -100.0% 🗑️
assets/app.owner-B8s-VXQA.js (Deleted) -474 bytes 0 bytes -100.0% 🗑️
assets/app.commands-BdcH7_Fc.js (Deleted) -455 bytes 0 bytes -100.0% 🗑️
assets/app.playground-CbVJB5iU.js (Deleted) -442 bytes 0 bytes -100.0% 🗑️
assets/index-CB9T0iZ7.js (Deleted) -438 bytes 0 bytes -100.0% 🗑️
assets/app.digest-DD3bxS0H.js (Deleted) -430 bytes 0 bytes -100.0% 🗑️
assets/eye-off-C3gSPoMq.js (Deleted) -430 bytes 0 bytes -100.0% 🗑️
assets/app.miner-DXMcJ4ts.js (Deleted) -422 bytes 0 bytes -100.0% 🗑️
assets/key-round-Ccz0_pAR.js (Deleted) -355 bytes 0 bytes -100.0% 🗑️
assets/bot-Duk5so47.js (Deleted) -328 bytes 0 bytes -100.0% 🗑️
assets/trash-2-D3CjboRw.js (Deleted) -328 bytes 0 bytes -100.0% 🗑️
assets/save-0_bxdT_7.js (Deleted) -327 bytes 0 bytes -100.0% 🗑️
assets/git-pull-request-arrow-WV1bGWdB.js (Deleted) -321 bytes 0 bytes -100.0% 🗑️
assets/list-checks-Cq-aHpb5.js (Deleted) -279 bytes 0 bytes -100.0% 🗑️
assets/compass-D6GX2vIE.js (Deleted) -251 bytes 0 bytes -100.0% 🗑️
assets/history-BS3aVyKz.js (Deleted) -237 bytes 0 bytes -100.0% 🗑️
assets/message-square-DjmWTenN.js (Deleted) -233 bytes 0 bytes -100.0% 🗑️
assets/lock-BiWaW8rt.js (Deleted) -206 bytes 0 bytes -100.0% 🗑️
assets/rotate-cw-CKUmDZ2O.js (Deleted) -201 bytes 0 bytes -100.0% 🗑️
assets/play-Dk26A3H3.js (Deleted) -190 bytes 0 bytes -100.0% 🗑️
assets/circle-check-CdyK79-A.js (Deleted) -178 bytes 0 bytes -100.0% 🗑️
assets/search-_HQp4lwd.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 89.47%. Comparing base (8e02fab) to head (f7777b1).
⚠️ Report is 7 commits behind head on main.
✅ All tests successful. No failed tests found.

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #9775      +/-   ##
==========================================
- Coverage   90.28%   89.47%   -0.82%     
==========================================
  Files         907      908       +1     
  Lines      113354   113385      +31     
  Branches    26893    26899       +6     
==========================================
- Hits       102339   101446     -893     
- Misses       9683    10849    +1166     
+ Partials     1332     1090     -242     
Flag Coverage Δ
backend 94.07% <100.00%> (-1.48%) ⬇️

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

Files with missing lines Coverage Δ
packages/loopover-contract/src/public-api.ts 100.00% <ø> (ø)
src/api/routes.ts 95.62% <100.00%> (ø)
src/services/public-fleet-accuracy-trend.ts 100.00% <100.00%> (ø)

... and 3 files with indirect coverage changes

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.

1 participant