Skip to content

docs(fairness): write down what the automation rate actually counts - #10066

Merged
JSONbored merged 1 commit into
mainfrom
docs/automation-rate-methodology-9726
Jul 31, 2026
Merged

docs(fairness): write down what the automation rate actually counts#10066
JSONbored merged 1 commit into
mainfrom
docs/automation-rate-methodology-9726

Conversation

@JSONbored

Copy link
Copy Markdown
Owner

#9726's second sub-issue asked to publish the automation-rate series with a methodology note. The series shipped; the note did not — leaving the metric the 97% target is stated against as the one figure on /fairness whose definition lived only in a source comment.

Three choices a reader would guess wrong

The definition is not obvious, and each of these closes a way the number could be made to look better than it is:

  • Non-deciding verdicts are excluded from both halves, not counted as automated. action also carries label, update_branch, approve and the error classes. Counting them would let work the gate never ruled on read as an automated decision.
  • A PR that was held and later merged is manual. The question is whether a human had to act, not how it ended. Scoring the final disposition would let the rate be inflated by holding everything and merging it by hand.
  • Three human signals count, not just hold — a named reevaluation_actor and a reevaluation_reason of maintainer_request each make a PR manual. Counting only holds would miss both.

The backfill horizon gets its own section

The page already renders a per-week basis field that nothing explained. The re-evaluation provenance fields arrived in migration 0204 on 2026-07-29; earlier weeks can only observe hold, so they can only under-count manual work — which means they can only over-state automation. Those weeks publish as holds_only rather than being quietly mixed in.

The horizon is a stated constant rather than inferred, and the note says why: "the column did not exist yet" and "this was a first evaluation" both read as NULL, so guessing it from the rows would be a fabrication dressed as a derivation.

Verified, not recalled

Every number and date came out of the source, not memory:

  • the bucket definitions and the three human signals — src/review/automation-rate.ts
  • AUTOMATION_RATE_PROVENANCE_HORIZON_ISO = "2026-07-29T00:00:00.000Z" — read from the constant
  • migration 0204 — confirmed with grep -l reevaluation_actor migrations/*.sql

Also

/fairness's automation section now links to the definition, matching the pattern its sibling sections already use, and automation-rate.ts joins the code-pointer list at the foot of the methodology page — which exists so a definition change and a doc change land in the same review.

Scope

Documentation and one link. No behaviour, no computation, no published figure changes.

This does not close the #9726 epic: its third sub-issue is #9729, which is blocked on #9991 (the ledger records reason_code: "success" for 518 holds, so the manual-review surface cannot yet be split by cause).

Verification

ui:typecheck, ui:lint, docs:drift-check and the full ui:test suite green.

Closes #10065

#9726's second sub-issue asked to publish the series WITH a methodology note.
The series shipped and the note did not, so the metric the 97% target is stated
against was the one figure on /fairness whose definition existed only in a source
comment.

Its definition contains three choices a reader cannot guess, and would plausibly
assume the other way round:

  Non-deciding verdicts are excluded from BOTH halves rather than counted as
  automated. `action` also carries label, update_branch, approve and the error
  classes; counting those would let work the gate never ruled on read as an
  automated decision.

  A PR that was held and later merged is MANUAL. The question is whether a human
  had to act, not how it ended -- scoring the final disposition would let the
  rate be inflated by holding everything and then merging it by hand.

  Three human signals count, not just `hold`: a named reevaluation_actor, and a
  reevaluation_reason of maintainer_request, each make a PR manual.

The backfill horizon gets its own section, because the page already surfaces a
per-week `basis` field that nothing explained. The provenance fields arrived in
migration 0204 on 2026-07-29; earlier weeks can only observe `hold`, so they can
only under-count manual work and therefore only OVER-state automation. Those
weeks are published as `holds_only` rather than mixed in, and the horizon is a
stated constant rather than inferred -- "the column did not exist yet" and "this
was a first evaluation" both read as NULL, so guessing it from the rows would be
a fabrication dressed as a derivation.

Every number and date here was read out of automation-rate.ts and the migrations
rather than recalled, including which migration added the fields.

/fairness's automation section now links to the definition, as its sibling
sections already do, and the code pointer joins the list at the foot of the
methodology page.

Closes #10065
@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 Updated (UTC)
❌ Deployment failed
View logs
loopover-ui f4a3d4d Jul 31 2026, 06:04 AM

@superagent-security

Copy link
Copy Markdown
Contributor

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

@JSONbored JSONbored self-assigned this Jul 31, 2026
@loopover-orb

loopover-orb Bot commented Jul 31, 2026

Copy link
Copy Markdown
Contributor

Caution

🛑 LoopOver review result - fixes required

Review updated: 2026-07-31 06:12:34 UTC

2 files · 1 AI reviewer · no blockers · CI failing · unstable

🛑 Suggested Action - Manual Review

Review summary
This is a docs-only PR that adds a methodology section to fairness-methodology.mdx explaining the automation-rate buckets (decided/manual/automated), the three human signals, and the pre-2026-07-29 backfill horizon, plus a one-line cross-link from the fairness report page. The prose accurately describes the actual implementation in src/review/automation-rate.ts (verdictShowsHumanAction, AUTOMATION_RATE_PROVENANCE_HORIZON_ISO, holds_only basis) — I traced the claims against the real source and they match. This closes issue #10065 as intended and is a low-risk, well-targeted addition to the existing methodology doc.

Nits — 6 non-blocking
  • The date string "2026-07-29" in fairness-report-page.tsx:466 is a plain text literal describing the ISO horizon rendered elsewhere from `data.automationRate.provenanceHorizon` — worth double-checking it stays in sync if the horizon constant ever changes, since it's now stated in two places (the code-driven table note and this hardcoded link paragraph).
  • The automation-rate.ts fetchRows brief mentions the file lacks explicit test coverage, but since this PR touches no code under src/, that's out of scope here — just flagging that the underlying module referenced by this doc isn't verified by this diff.
  • Consider linking the new '### The backfill horizon' subsection anchor directly from the report page's 'reduced basis' tooltip text, since that's the one term a reader is most likely to want defined immediately.
  • 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.
  • Diff looks like trivial or whitespace-only churn — Reduce whitespace-only or formatting-only churn and keep the diff focused on substantive changes.
  • Code changes lack test evidence — Add focused regression tests or explain why existing coverage is sufficient.

CI checks failing

  • Workers Builds: loopover-ui — Workers Builds: loopover-ui

Decision drivers

  • ✅ Code review — No blockers (1 reviewer)
  • ✅ Gate result — Passing (No configured blocker found.)
Context & advisory signals — never blocks the verdict
Signal Result Evidence
Linked issue ✅ Linked #10065
Related work ✅ No active overlap found No same-issue or scoped active PR overlap found.
Change scope ❌ 8/20 High 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: 9 registered-repo PR(s), 8 merged, 272 issue(s).
Contributor context ✅ Confirmed Gittensor contributor JSONbored; Gittensor profile; 9 PR(s), 272 issue(s).
Improvement ℹ️ None detected risk: elevated · value: none
Linked issue satisfaction

Addressed
The PR adds a dedicated methodology section documenting the three buckets, explicitly calls out the three deliberate choices (non-deciding verdicts excluded, held-then-merged counted manual, three human signals), and documents the backfill horizon with the same date/language as the issue, plus links the /fairness page's automation section to the methodology doc.

Review context
  • Author: JSONbored
  • Role context: owner (maintainer lane)
  • Public audience mode: oss maintainer
  • Lane context: Repository is configured for direct PR review.
  • Public profile languages: Python, TypeScript, Ruby, Go, MDX, Shell, Solidity, JavaScript
  • Official Gittensor activity: 9 PR(s), 272 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: success
  • config: 9c8e69aa293445055a10271d0d763477aac75ef1981f8598d20c1f4de535cea6 · pack: oss-anti-slop · ci: failed
  • record: cb127fc67b695b308d1b2af17dc224b7035c26efc43122df92046124051d978c (schema v6, head f4a3d4d)
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

@codecov

codecov Bot commented Jul 31, 2026

Copy link
Copy Markdown

Bundle Report

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

Detailed changes
Bundle name Size Change
loopover-ui 7.95MB 9.69kB (0.12%) ⬆️

Affected Assets, Files, and Routes:

view changes for bundle: loopover-ui

Assets Changed:

Asset Name Size Change Total Size Change (%)
assets/add-scalar-classes-B3A9YIic.js (New) 2.16MB 2.16MB 100.0% 🚀
assets/tanstack-vendor-BPApl_4I.js (New) 957.52kB 957.52kB 100.0% 🚀
assets/docs.fumadocs-spike-api-reference-rdqmtRpP.js (New) 443.45kB 443.45kB 100.0% 🚀
assets/AgentScalarChatInterface.vue-Ce6IkHxG.js (New) 201.7kB 201.7kB 100.0% 🚀
assets/modal-CvOIL2-9.js (New) 184.5kB 184.5kB 100.0% 🚀
assets/client-0zXTfMHV.js (New) 151.47kB 151.47kB 100.0% 🚀
assets/maintainer-panel-BU4_L9LH.js (New) 78.97kB 78.97kB 100.0% 🚀
assets/fairness-methodology-hmdmhxYp.js (New) 48.34kB 48.34kB 100.0% 🚀
assets/routes-D59yZtLF.js (New) 35.88kB 35.88kB 100.0% 🚀
assets/owner-panel-B4uuaIj-.js (New) 28.26kB 28.26kB 100.0% 🚀
assets/app-B1Teoe7S.js (New) 25.82kB 25.82kB 100.0% 🚀
assets/ui-vendor-aUlCB1c6.js (New) 24.57kB 24.57kB 100.0% 🚀
assets/fairness-CQ0PE3G3.js (New) 23.44kB 23.44kB 100.0% 🚀
assets/miner-panel-D-MstfDw.js (New) 20.49kB 20.49kB 100.0% 🚀
assets/api._op-Df7i77gs.js (New) 17.51kB 17.51kB 100.0% 🚀
assets/self-hosting-docs-audit-D80NmcEW.js (New) 16.6kB 16.6kB 100.0% 🚀
assets/docs-client-loader-CFvVjHpt.js (New) 15.68kB 15.68kB 100.0% 🚀
assets/playground-panel-DE4TAsYD.js (New) 14.35kB 14.35kB 100.0% 🚀
assets/app.audit-BFoxZYGe.js (New) 10.22kB 10.22kB 100.0% 🚀
assets/app.config-generator-DHMhF-Ee.js (New) 10.06kB 10.06kB 100.0% 🚀
assets/maintainers-2cCOhN1y.js (New) 8.06kB 8.06kB 100.0% 🚀
assets/miners-DjEARQMm.js (New) 7.91kB 7.91kB 100.0% 🚀
assets/agents-CzoxFfMF.js (New) 7.74kB 7.74kB 100.0% 🚀
assets/proof._owner._repo-Eic_LRRp.js (New) 7.11kB 7.11kB 100.0% 🚀
assets/commands-panel-DcbW7Ysr.js (New) 6.74kB 6.74kB 100.0% 🚀
assets/maintainer-workflow-BtHK3HeO.js (New) 6.52kB 6.52kB 100.0% 🚀
assets/docs-nav-BBo1xJkf.js (New) 6.19kB 6.19kB 100.0% 🚀
assets/digest-panel-BoF9qKif.js (New) 6.15kB 6.15kB 100.0% 🚀
assets/repos._owner._repo.quality-BxPw4lL8.js (New) 6.14kB 6.14kB 100.0% 🚀
assets/docs.index-DFhthZPH.js (New) 6.01kB 6.01kB 100.0% 🚀
assets/api.index--czkX94l.js (New) 4.7kB 4.7kB 100.0% 🚀
assets/docs-DeZbeViO.js (New) 3.01kB 3.01kB 100.0% 🚀
assets/api-CuJzsFJy.js (New) 2.66kB 2.66kB 100.0% 🚀
assets/docs-page-ebu66vje.js (New) 2.14kB 2.14kB 100.0% 🚀
assets/table-copzXc6T.js (New) 1.75kB 1.75kB 100.0% 🚀
assets/app.workbench-DkiMGw_y.js (New) 1.58kB 1.58kB 100.0% 🚀
assets/tabs-DcstKFOU.js (New) 1.39kB 1.39kB 100.0% 🚀
assets/app.repos-SMh8l0KZ.js (New) 1.07kB 1.07kB 100.0% 🚀
assets/input-DWjbOJrx.js (New) 796 bytes 796 bytes 100.0% 🚀
assets/file-cog-DLuTW0GO.js (New) 758 bytes 758 bytes 100.0% 🚀
assets/docs._slug-CnCWEFHm.js (New) 554 bytes 554 bytes 100.0% 🚀
assets/app.maintainer-iT0-QA7Q.js (New) 502 bytes 502 bytes 100.0% 🚀
assets/app.owner-BVLS9t-1.js (New) 474 bytes 474 bytes 100.0% 🚀
assets/app.commands-axzj5Iot.js (New) 455 bytes 455 bytes 100.0% 🚀
assets/app.playground-DaPQraAa.js (New) 442 bytes 442 bytes 100.0% 🚀
assets/index-BY4iAXKM.js (New) 438 bytes 438 bytes 100.0% 🚀
assets/app.digest-C-f_xmJu.js (New) 430 bytes 430 bytes 100.0% 🚀
assets/eye-off-Dxh5nPiM.js (New) 430 bytes 430 bytes 100.0% 🚀
assets/app.miner-BnsyaRhz.js (New) 422 bytes 422 bytes 100.0% 🚀
assets/key-round-Bc2rvprm.js (New) 355 bytes 355 bytes 100.0% 🚀
assets/bot-yfhOOFW2.js (New) 328 bytes 328 bytes 100.0% 🚀
assets/git-pull-request-arrow-edFcj8Ze.js (New) 321 bytes 321 bytes 100.0% 🚀
assets/list-checks-DKkrLLMh.js (New) 279 bytes 279 bytes 100.0% 🚀
assets/compass-BZNtQq3W.js (New) 251 bytes 251 bytes 100.0% 🚀
assets/history-CEdFTwn0.js (New) 237 bytes 237 bytes 100.0% 🚀
assets/message-square-hMFMcTpi.js (New) 233 bytes 233 bytes 100.0% 🚀
assets/lock-DaHLGDdH.js (New) 206 bytes 206 bytes 100.0% 🚀
assets/play-C2PYXS3A.js (New) 190 bytes 190 bytes 100.0% 🚀
assets/circle-check-CZnli1I9.js (New) 178 bytes 178 bytes 100.0% 🚀
assets/add-scalar-classes-D6I6eGP8.js (Deleted) -2.16MB 0 bytes -100.0% 🗑️
assets/tanstack-vendor-CZ5QUGbc.js (Deleted) -957.52kB 0 bytes -100.0% 🗑️
assets/docs.fumadocs-spike-api-reference-Cv4VXt1P.js (Deleted) -443.45kB 0 bytes -100.0% 🗑️
assets/AgentScalarChatInterface.vue-C5CIjK3w.js (Deleted) -201.7kB 0 bytes -100.0% 🗑️
assets/modal-BGui8I07.js (Deleted) -184.5kB 0 bytes -100.0% 🗑️
assets/client-DluFwMEa.js (Deleted) -151.47kB 0 bytes -100.0% 🗑️
assets/maintainer-panel-BK8ZvFs8.js (Deleted) -78.97kB 0 bytes -100.0% 🗑️
assets/fairness-methodology-D4HZ__bh.js (Deleted) -38.95kB 0 bytes -100.0% 🗑️
assets/routes-Dp5d4JNB.js (Deleted) -35.88kB 0 bytes -100.0% 🗑️
assets/owner-panel-Zb500nLr.js (Deleted) -28.26kB 0 bytes -100.0% 🗑️
assets/app-CbNMyXiT.js (Deleted) -25.82kB 0 bytes -100.0% 🗑️
assets/ui-vendor-DxPLXRNI.js (Deleted) -24.57kB 0 bytes -100.0% 🗑️
assets/fairness-Bn-69tel.js (Deleted) -23.13kB 0 bytes -100.0% 🗑️
assets/miner-panel-DeHF2EMu.js (Deleted) -20.49kB 0 bytes -100.0% 🗑️
assets/api._op-DkRVho1Z.js (Deleted) -17.51kB 0 bytes -100.0% 🗑️
assets/self-hosting-docs-audit-Bo0WfOZq.js (Deleted) -16.6kB 0 bytes -100.0% 🗑️
assets/docs-client-loader-DNqII0ik.js (Deleted) -15.68kB 0 bytes -100.0% 🗑️
assets/playground-panel-D_MtYm4e.js (Deleted) -14.35kB 0 bytes -100.0% 🗑️
assets/app.audit-DNKtnal6.js (Deleted) -10.22kB 0 bytes -100.0% 🗑️
assets/app.config-generator-oRLNvuIf.js (Deleted) -10.06kB 0 bytes -100.0% 🗑️
assets/maintainers-CiRneqgp.js (Deleted) -8.06kB 0 bytes -100.0% 🗑️
assets/miners-DWJQuopJ.js (Deleted) -7.91kB 0 bytes -100.0% 🗑️
assets/agents-BXulCpEV.js (Deleted) -7.74kB 0 bytes -100.0% 🗑️
assets/proof._owner._repo-DlX7EaVK.js (Deleted) -7.11kB 0 bytes -100.0% 🗑️
assets/commands-panel-DPdkETRX.js (Deleted) -6.74kB 0 bytes -100.0% 🗑️
assets/maintainer-workflow-D_eikvOA.js (Deleted) -6.52kB 0 bytes -100.0% 🗑️
assets/docs-nav-BMDSmCLB.js (Deleted) -6.19kB 0 bytes -100.0% 🗑️
assets/digest-panel-Bkk_J_DW.js (Deleted) -6.15kB 0 bytes -100.0% 🗑️
assets/repos._owner._repo.quality-P-OHyPCt.js (Deleted) -6.14kB 0 bytes -100.0% 🗑️
assets/docs.index-7NSxnB5S.js (Deleted) -6.01kB 0 bytes -100.0% 🗑️
assets/api.index-LqEYDEwb.js (Deleted) -4.7kB 0 bytes -100.0% 🗑️
assets/docs-BwSKZaiG.js (Deleted) -3.01kB 0 bytes -100.0% 🗑️
assets/api-DCNesAkX.js (Deleted) -2.66kB 0 bytes -100.0% 🗑️
assets/docs-page-CRT0MPPT.js (Deleted) -2.14kB 0 bytes -100.0% 🗑️
assets/table-ejHwg8DN.js (Deleted) -1.75kB 0 bytes -100.0% 🗑️
assets/app.workbench-DhXnGrSL.js (Deleted) -1.58kB 0 bytes -100.0% 🗑️
assets/tabs-ETZW4OBh.js (Deleted) -1.39kB 0 bytes -100.0% 🗑️
assets/app.repos-DXEVJp2x.js (Deleted) -1.07kB 0 bytes -100.0% 🗑️
assets/input-B3dIBjai.js (Deleted) -796 bytes 0 bytes -100.0% 🗑️
assets/file-cog-DlQTcXLr.js (Deleted) -758 bytes 0 bytes -100.0% 🗑️
assets/docs._slug-emb3ZkTD.js (Deleted) -554 bytes 0 bytes -100.0% 🗑️
assets/app.maintainer-BDlBp-Gy.js (Deleted) -502 bytes 0 bytes -100.0% 🗑️
assets/app.owner-B3uyPZNN.js (Deleted) -474 bytes 0 bytes -100.0% 🗑️
assets/app.commands-BkpBLrYt.js (Deleted) -455 bytes 0 bytes -100.0% 🗑️
assets/app.playground-CJmMCPw_.js (Deleted) -442 bytes 0 bytes -100.0% 🗑️
assets/index-hFIgwJRs.js (Deleted) -438 bytes 0 bytes -100.0% 🗑️
assets/app.digest-3tIiktem.js (Deleted) -430 bytes 0 bytes -100.0% 🗑️
assets/eye-off-w-yA7zyo.js (Deleted) -430 bytes 0 bytes -100.0% 🗑️
assets/app.miner-vtRFbH98.js (Deleted) -422 bytes 0 bytes -100.0% 🗑️
assets/key-round-DpjhSqzL.js (Deleted) -355 bytes 0 bytes -100.0% 🗑️
assets/bot-Crgun8BP.js (Deleted) -328 bytes 0 bytes -100.0% 🗑️
assets/git-pull-request-arrow-BSDzl6iD.js (Deleted) -321 bytes 0 bytes -100.0% 🗑️
assets/list-checks-DVTMj6d6.js (Deleted) -279 bytes 0 bytes -100.0% 🗑️
assets/compass-DMUFLBPD.js (Deleted) -251 bytes 0 bytes -100.0% 🗑️
assets/history-xz2u800Z.js (Deleted) -237 bytes 0 bytes -100.0% 🗑️
assets/message-square-CUCj7Uio.js (Deleted) -233 bytes 0 bytes -100.0% 🗑️
assets/lock-DDWtGOzO.js (Deleted) -206 bytes 0 bytes -100.0% 🗑️
assets/play-BCA48tZL.js (Deleted) -190 bytes 0 bytes -100.0% 🗑️
assets/circle-check-BYzLHzro.js (Deleted) -178 bytes 0 bytes -100.0% 🗑️

@loopover-orb loopover-orb Bot added the manual-review Gittensor contributor context label Jul 31, 2026
@JSONbored
JSONbored merged commit 5a19aa1 into main Jul 31, 2026
9 of 10 checks passed
@JSONbored
JSONbored deleted the docs/automation-rate-methodology-9726 branch July 31, 2026 06:12
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.

docs(fairness): the automation rate is published without a methodology note

1 participant