Mindbridge ยท track status

DOC-TRUTH

The feature catalog โ€” the repo's one answer to "what do we actually have" โ€” audited by CI on every pull request, so a label cannot make the document true.

Re-measured 2026-08-16 ยท catalog figures resolve live at build time ยท the open-work prose below decays โ€” verify against gh issue list before acting.

Next โ†’ #3316 The status-page churn's biggest lane is still open โ€” split track-index.html, which holds every track's prose in one file.
Catalog audited green โ€” 0 drifted rows ยท 0 wrong-but-live ยท platform/ and website/ coverage closed โ€” 1 open issues, both status-page mechanics.
2,604
status rows
2,522
cite a real path
0
drifted rows
0
wrong-but-live
5
platform/ uncovered
0
website/ uncovered
Open work Why this order Standing rulings History & forensics

Open work

Status-page churn โ€” split the index
p2 #3316 The status-page churn's biggest lane is still open: every track's prose lives in one file (34 commits/60d) one file, every track collides Dev only
Successor to the tracking-churn issue (#3294), closed 2026-08-14 with only the smallest of its three lanes shipped. Shipped: the counts file stopped being committed (#3310) โ€” build.py now substitutes measured values at publish time. Not shipped: track-index.html, the biggest lane at ~35 commits/60d (~2.3ร— the removed counts file), still holds every track's narrative in one file, so two sessions editing different tracks conflict positionally on a file neither has a semantic disagreement about. Two remaining shapes: one file per track assembled by build.py, and artifacts.json per page or append-only.
Published artifacts โ€” republish
#3351 The published status artifacts (track index, next, board) are stale โ€” republish from docs/status/dist published pages lag the repo Dev only
The track index was reconciled against live labels and counts on 2026-08-16: the attachment-model cluster (attachment-truth) and the connector compliance pair (connector-truth) had no index row, several rows carried dead counts, and the untracked section described a backlog that had drained. The published artifacts still serve the pre-reconciliation pages. The Cloudflare Pages migration's Deploy: Status job rebuilds every page and re-measures every count at deploy time, so a merge ships the reconciled pages โ€” no session republishes dist/ by hand. Stays open with state:not-in-effect until the first deploy carries the reconciled counts.
Why is it in this order?

The index split (#3316) precedes the republish (#3351) because it is the cause and the republish the symptom โ€” splitting track-index.html removes the collision class; republishing stale artifacts treats one instance of drift. Both are internal-doc mechanics, which is why the whole track sits 16th of 17 in track-order.json (impact: the feature catalog describes a product we do not have). Ignored here: every catalog defect โ€” the 98 drifted rows, the wrong-but-live rows, the coverage gaps โ€” is closed, ruled or merged and lives in History.

Standing rulings

History & forensics

The drift that did not move, then did. For four months the catalog was wrong in a way nobody could see: whole product lines had zero rows, and a third of the rows that did exist pointed at files that no longer existed. It called itself authoritative and was read by nobody. It is now audited by CI on every PR โ€” every cited path checked to exist, both summary tables recounted from the rows, and the drift figure ratcheted in both directions. Across ten passes the numerator stayed 98 while the denominator grew 291 โ†’ 1,438 (33.7% โ†’ 6.8%) with not one broken row repaired โ€” the 1,147 rows added over that span all cited resolving paths, so every pass bought a better headline for free. The gate therefore ratchets on drifted rows, not a percentage. The last bar is the first that is not dilution: 63 rows named genuinely-gone code and now carry REMOVED against the removing commit; 35 were relocations re-pointed at a successor asserted to exist. The auditor's baseline moved 98 โ†’ 0 in the same commit so the budget cannot quietly re-open.

What the 98 were. Forty-one distinct paths; 59 of the 98 traced to nine commits. Backend slice refactor (27 paths, 79 rows): "Retire 12 legacy v1 graph-building phases" (ca6d3de93) is 186 deletions and zero renames, so those rows carry REMOVED; the rest were relocations โ€” node_repository.py and edge_repository.py split into packages, mapped from what each row claims. The deleted enterprise/ app (14 paths, 19 rows): removed by 1d43acbd4; all 19 already carried REMOVED and counted as drift only because they kept citing a dead path โ€” they now name the removing commit. A wrong re-point is worse than honest breakage (the source of truth asserts a feature lives somewhere it doesn't, with CI green), so every successor was asserted to exist by a check that refuses to emit the change otherwise โ€” and it earned its place immediately, when five targets read out of the 2026-05 slice-collocation commit had moved again into <slice>/repositories/ packages.

Coverage, and why a closed table is not completeness. Twelve product surfaces returned zero grep hits when the sweep opened; all now have rows (the I12โ€“I25 sections, merged). The gap table only ever listed surfaces someone had named. The backlog got a choke-point in PR #3166 (merged 2026-08-07): check_feature_catalog_drift.py --uncovered <prefix>. The website/ half closed through the public-site section (I22); the platform/ half closed through all six areas of the partition on #2952 โ€” console shell (I23), ingestion-governor cockpit (I24), document extraction (I25), tenants & economics (I26), diagnostic pages (I27), tenant-maintenance remainder (I28). --uncovered platform/ and --uncovered website/ both report 0 now; 1,045 rows cite a platform/ path and 206 cite website/. That zero is a statement about FILES, not completeness โ€” a file with one row and a file with twenty are indistinguishable to it.

How wrong the estimates were. Each surface was sized before cataloguing and the projection was never once close, in both directions. Money rail 101 rows / 63 paths โ†’ 173 / 85 (1.7ร— low); support brain 48 / 30 โ†’ 229 / 74 (4.8ร— low on rows); LLM cost-of-goods "not counted" โ†’ 214 / 86 (the largest section in the document); ingestion-governor cockpit ~44 files โ†’ 305 / 55; document extraction 24 files / ~68 rows โ†’ 140 / 44 (file half exact, rows ~2ร— low). Replaced by a three-pass census โ€” by name, by contents, by import closure โ€” each pass finding files the previous structurally cannot see.

What the adversarial review catches. A four-lens panel runs before every catalog PR, each lens in its own worktree and told to refute; it exists because the automated reviewer skips documentation changes. On the document-extraction section (I25) it ran LATE โ€” after the PR merged โ€” and found a live product defect in the one thing the section had asserted was guarded: a parity test that passed green across the exact drift it exists to catch. The console shows a "FAS target" without polling the autoscaler, so the scaling formula is duplicated in TypeScript; the test read the autoscaler config and should fail if the two diverge โ€” they had already diverged. The section claimed the duplication was safe because the test stops the fork; the test actually asserted two substrings and was blind to the numerator, the autoscaler had gained + work_queue_running while the console still summed pending, and the mirroring helper was never called. The fork mattered because work_queue_pending reaches zero the instant the last unit is claimed โ€” mid-extraction โ€” so a fully-claimed window rendered "FAS target 0" against a real target of one or more. Two guards were blind for two different reasons: the parity test compared constants, and the unit fixture hardcoded running: 0 โ€” a degenerate fixture where every assertion ran at the one value both formulas agree on. Both fixed, mutation-verified.

The pattern, across two sections in one session. Nine defects, every one an over-claim in the author's favour: "100% of calls" (true 55.6%), a metric "in warning" (a percentile over one call), "all" cited paths new (18 of 22), 13 uncovered console files (47), one phase running reasoning (two), a governor that "gates nobody" (holding 91,448 emails). Two that generalise: a stale comment is a load-bearing lie โ€” two draft rows repeated false claims written in the code itself, false for months; and check the mechanism's own lever โ€” a gate judged by its paused flag, off everywhere, while the levers that do the work held 91,448 emails.

What this report does not claim. The gate cannot check that a row's sentence is true โ€” only that its cited file exists and the totals agree with themselves; the defects above were found by people and panels, not CI. A closed gap table is not a complete catalog โ€” it means every surface anyone thought to name has rows. This page is a snapshot, not a live view: the catalog figures resolve at build time, the prose is authored, and the dates below are the honest scope.

Catalog audited by CI on every PR ยท production census 2026-08-07 10:38 UTC ยท report restructured 2026-08-16 ยท document-extraction section (I25) merged 2026-08-08.