Skip to content

Commit 4b23e4f

Browse files
os-warrenclaude
andauthored
docs(gates): record the #17242 re-census — the declined residual is a SPELLING population, not rot (#19733)
Part of #17242 Clause-②: no #17242 asked for three things: re-derive the population, tense-classify it, and answer the ratchet question with numbers. All three are done. **The measurement inverts the card's working assumption**, so the diff is one record rather than a cleanup — there is nothing to repair. ## 1. Re-derived population, with the historical pins reproduced as a lit control | reading | tree | declined | |:--|:--|--:| | the card's original pin | `08e38c6377` | 183 | | the re-measure already on the card | `6465cc0a7c` | 217 | | **this round** | `fa29803417` | **467**, across 39 files | Before today's number was taken, the instrument reproduced `CENSUS_17065` **verbatim at its own sha**: 1,317 files swept, 189 comment-prose line citations, 6 naming a tracked target, 183 declined, by shape 69 bare-filename / 62 directory-qualified / 52 continuation. Every figure matches the constant in the gate, so the instrument could have given another answer and did not. ### The resolver changed, so the growth was re-measured with both `scripts/symbol-anchors.mjs` was rewritten between the 217 reading and today (655 insertions, 40 deletions), which means 217 and 467 were **not comparable on their face**. This tree was therefore swept twice: - the **old** resolver over today's tree: **467** - the **current** resolver over today's tree: **467** Identical, declined-by-shape included. Instrument drift on this axis is **zero** and the three readings are comparable: 183 → 217 → 467 is real population growth. ## 2. What the residual actually IS — the question the card filed as NOT MEASURED The card recorded two gaps explicitly: the objectui cross-repo vs in-repo split, and how many would resolve under a spec-relative base. Both are measured here by binding every declined citation against the sibling objectui checkout and against this repo: | class | count | share | |:--|--:|--:| | names a file that **exists in the sibling objectui repo** | 409 | 87.6% | | names a file that **exists here**, written package-relative | 53 | 11.3% | | binds in **neither** | 5 | 1.1% | **462 of 467 name a file that really exists.** The two sibling trees agree **row by row** — every one of the 467 lands on the same verdict against the `.objectui-sha` pin `87af769e9a3ee28ace099fdd653d3ebd79fe82e2` and against objectui `main` `0cf2d6644bdb96a9a6784ef801ee6a60a5306bd8`, measured on the objectstack tree `cdd68cf15ed863468ce6eecdd5c0824b760ea22a`. ⛔ A moving ref is not an anchor, so all three shas are carried as data in `RECENSUS_17242`, not as prose. ⚠️ **Round 2 moved these cells from 408 / 55 / 4**: the binding predicate is now written out in full in the gate's docblock, and under it the split is 409 / 53 / 5, with a declared sensitivity — relaxing it for directory-qualified tokens gives 410 / 53 / 4, one row. Continuations (191 of the 467) carry no path of their own and are attributed to the antecedent they inherit — **188 inherit a token that way and 3 inherit none**, which is held in `RECENSUS_17242.bindingVia`. ⚠️ An earlier revision of this paragraph added 「for 34 of them that antecedent is named in prose」; **no field and no case carries that 34**, and a re-derivation under one natural definition gives 36 / 152. ⛔ Unheld, so it is withdrawn rather than restated — it was neither confirmed nor refuted. ⇒ this residual is a **SPELLING population** — abbreviated cross-repo and package-relative citations — not the stale-citation rot its headline number suggests. ## 3. Tense classification — the defect cell is EMPTY A citation naming no tracked file is a defect only when the surrounding sentence is live-tense. The classifier asserts on the live / not-live axis and runs two controls first, refusing the population reading if either fails: - **live-tense wrong** — the #17730 text quoted verbatim from that card: classified `live` ✅ - **correct historical** — the `quickAdd` retirement record: classified `dated-measurement` ✅ Over the whole residual: 300 live, 129 dated-measurement, 38 record. Crossed with binding, **the defect cell — binds nowhere AND live-tense — contains 0 rows**. The **five** that bind nowhere are enumerated as data in `RECENSUS_17242.bindingInNeitherRepoRows`, each with its coordinate, citation text, reason and tense: one retirement record naming a file in the `cloud` repo in prose; **two** continuations whose comment block names its file only AFTER the citation (a backward-only walk finds none); **one whose block names no file at all** — it declares from the read point rather than from objectui's mirror, which the row's own `why` says; and one whose token tail-matches in no tree. All five are correct as written. ⛔ Note `record` and `dated-measurement` are **both** correct historical prose; asserting the exact three-way label on a control would pin a sub-classification the rule never asked for, so the controls assert the live / not-live axis only. ## 4. ⛔ The trap, measured — repairing the PATH alone turns this gate RED The obvious cleanup is to rewrite a package-relative citation to its repo-root spelling so it resolves. That makes the path **tracked**, which moves the citation out of the declined set and into the judged one, where a line number is exactly what this gate refuses. One such repair was performed against a single citation in `packages/spec/src/shared/union-author-message-pins.test.ts` (`api/protocol.zod.ts:2853` rewritten to its repo-root spelling), through `scripts/ablation-replace.mjs` so the mutation is proven on disk: ``` anchor x1 -> x0 blob d78fd34 -> 1ac63738d490 ``` The gate went from green to `❌ 1 finding(s)`, then was restored — `blob == HEAD (d78fd34)` and `git diff HEAD` empty. ⇒ **the path is only half the repair**; the citation must also leave anchor form. A round that "works the 467 down" by fixing spellings alone lands one finding per repair. ## 5. The ratchet question — a recommendation, not a decision > should the gate start judging untracked line anchors? **Recommendation: do not flip it**, on these numbers: - the flip would red **all 467** on day one, across 39 files — a migration, which is the disposition the corpus already ruled against; - of those 467, the number that are actual stale-citation defects is **0**; - so the flip's false-positive rate on the axis it exists to police is **467/467**; - and 409 of the 467 are unbindable **by construction** — they name the sibling repo, which a resolver living here cannot see. Its only remedy would be "stop writing that", which is the permanently-red verifier this repo retired. The only judgeable half is the 53 in-repo abbreviations, and §4 shows that repairing them is a two-part change. If the residual is ever worked down, the in-repo 53 are the tractable set and each needs the anchor-form half too. ⛔ Adding a required gate is the maintainer's floor; this PR records the measurement and does not change the scope call. `CENSUS_17065` is untouched and not restated. ## Why the record lives in the gate header The classification above **cannot be re-derived by the gate**: it needs a checkout of the sibling objectui repo, which the gate is deliberately not given — the same reason its cross-repo anchors are reported rather than judged. `--list-unresolvable` enumerates the residual. ⛔ And the stronger, truer statement: the binding harness and the tense classifier exist **nowhere in this tree**, so the three tense totals can be re-derived by **nothing** — not even a reader holding both checkouts. The binding split *is* re-runnable, because the predicate is written out. So it is kept as data beside the census it extends. ## Verification - `pnpm lint` (repo-wide, `eslint . --no-inline-config`) — **exit 0**, dated at `cdd68cf15e` ⚠️ (the round-1 head; ⛔ not re-dated here — CI's `Lint & Repo Gates` is `success` at the current head) - all **31** gate families derived by `scripts/pm/dispatch-gates.mjs` for this change set — **31 run, 0 NOT-MEASURED, 0 UNRUN**, each with its exit code recorded and reconciled via `--ran` - `check-spec-docblock-symbol-anchors` and its `--self-test` — exit 0; the residual arithmetic and the seven pinned day-one rows are unchanged - `check-scripts-symbol-anchors` — exit 0; this file is swept by that corpus. ⚠️ 3,653 → 3,654 was the **round-1** delta; at head `988cf276bb` the corpus reads **3,653 → 3,659** (it read 3,658 at round 3's head; round 4's prose added one resolving anchor), with declined unchanged at **14** throughout, so the added prose contributes resolving anchors and **no new residue** - six gates first reported **exit 3 (PREREQUISITE NOT MET)** on a fresh worktree with no `node_modules`; re-run after `pnpm install`, all exit 0. They are not reported as clean on the exit-3 reading. ## Acceptance notes - **No label written.** The dispatch forbade label writes, so none were made. This PR publishes nothing — the changed path is a repo-root gate script, the root package is private, and none of the 70 packages carrying `files[]` has an entry escaping its own directory — so **`skip-changeset` is the correct disposition** and is owed from the seat. - The binding instrument's weakest leg is the prose-antecedent walk for continuations: on generic basenames it can attribute to the wrong repo (`index.tsx` in a docblock that is plainly about objectui binds to this repo's only file of that name). Every such case still names a file that exists, so it cannot create or hide a defect — it can only shift a row between the 409 and the 53. Noted, not filed. - The one citation binding in neither repo names a file in the `cloud` repo in prose, with a space rather than the grammar's cross-repo prefix. Verifying it needs a `cloud` checkout this container does not have, so its target is **NOT MEASURED**; its sentence is a retirement record either way, so it is not a defect on the tense axis. Noted, not filed. --- _Generated by [Claude Code](https://claude.ai/code)_ --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent 67add13 commit 4b23e4f

1 file changed

Lines changed: 624 additions & 2 deletions

File tree

0 commit comments

Comments
 (0)