Repository navigation
test(spec): the six reader-bound needles move with their readers, naming each cited decision in words instead of a tracker number (stage 31) - #22511
Conversation
…, stating each cited decision in words instead of a tracker number (stage 31) Each needle and every reader site it matched move in lockstep, one span per line: the build-progress module docblock and its two liveness-watch needles, the continueRestoredRun docblock sibling citation, the ./ui notification tombstone label and its anchor, the no-door retirement both ui modules record, and the ComponentPropsMap opaque-member ruling with its assertion. Two class (e) titles that regrew since stage 30 drop a number the title already explains. Text only: no schema shape, key, describe string or behaviour moves. Claude-Session: https://claude.ai/code/session_01DhTqaEHqPVSVnAkjG3jywn Co-authored-by: Claude <noreply@anthropic.com>
… from their docblocks, and add the patch changeset (stage 31) gen:docs output only: the two pages follow the module docblocks that now name their decisions in words. The changeset records the shipped comment text. Claude-Session: https://claude.ai/code/session_01DhTqaEHqPVSVnAkjG3jywn Co-authored-by: Claude <noreply@anthropic.com>
📓 Docs Drift CheckThis PR changes 1 package(s): 1 hand-written doc(s) NAME something this change touched and may need an implementation-accuracy re-verification:
What this run could not see
Coarse fallback — 139 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): Which tree this was computed onThis run read A worktree cut from an older # while this PR is open — GitHub drops the merge commit once it closes
git fetch origin 81b61a597b8360d84aee075a2397a61e70e78b04 && git checkout 81b61a597b8360d84aee075a2397a61e70e78b04
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin 446c8b2a6420a61a2862e6f5140dda71a53316d1 a766d439f48953f3404f6d3d7afed0cd2617ada1 && git checkout -B drift-repro 446c8b2a6420a61a2862e6f5140dda71a53316d1 && git merge --no-ff a766d439f48953f3404f6d3d7afed0cd2617ada1
node scripts/docs-audit/affected-docs.mjs --json 446c8b2a6420a61a2862e6f5140dda71a53316d1
|
…rd and letter, without a tracker number (stage 31 patch round) One span on one line: the why value keeps ruling record 6070963704 and says letter A in place of the card number. Text only; no assertion reads the text. Claude-Session: https://claude.ai/code/session_01DhTqaEHqPVSVnAkjG3jywn Co-authored-by: Claude <noreply@anthropic.com>
Contract reviewServed-tier: PR #22511 (stage 31 of #20749, the needles stage): a draft against Check-runs on the head at this reading: 42 runs; 38 ① Derived judgments
② Semver level
③ Boundary flags
Not a flag, noted for the landing seat: the PR is a draft (ready first, arm second), and the ACCEPT orders the card to close when this stage lands, since its end state is then reached. Implemented-by: VERDICT: PASS |
Part of #20749
Clause-②: no
Stage 31 of this card, the needles stage: answer A in the seat's ACCEPT
6074213330, under the claim6084058576. Six test strings carried a tracker id that a reader matches. Each one moves with its reader in this PR, and the match stays exactly as strong: the new words sit in the same reader places the old id did. Three class (e) strings that regrew since stage 30 drop a number: two titles that already explain it, and one ledgerwhy:value that keeps its ruling record id (the claim amendment in ACCEPT6085085283). Text only: no schema shape, key,.describe()string or behaviour moves.Census, re-taken at the base
Stage 28's
census28.cjs, byte-identical (md531d8488b…), calibrated first against nine published readings, all reproduced exactly: 128/130, 191/200 and 73/76 (stages 27 to 28), 73/76 and 16/17 (stage 29's base and head), 17/18 and 10/10 (stage 30's base and head), 17/18 ate75dcedddand 10/10 at stage 30's landing961d365f1.At the base
e148ca984: 13 messages / 13 ids in 10 files (titles 2/2, other 11/11).ui/dashboard-chart-structure-refusal.test.ts:94x2,ui/dashboard.test.ts:124x2);automation/end-node-outcome.test.ts:67,automation/io-node-config.test.ts:472), rewritten here;why:value from PR 22425 (system/metadata-form-zod-reconciliation.test.ts:497). The claim amendment in ACCEPT6085085283admitted it, and the patch round rewrote it:#22211 Abecomesletter A, and the ruling record id it cites stays.At the head
a766d439f: 4 / 4 in 2 files, the 4 hex colours only, which is the card's end state. Titles 0/0. (fbec38c32, before the patch round, read 5 / 5 in 3 files.)No file is deferred. At 15:45Z there were 11 open PRs (418 file rows, each list complete against the PR's
changed_files). None touches any of the 14 files in this diff, or the 3 files that still carry an id. The lit control,ui/component.zod.ts, is found in 2 of them (22421 and 22496).The six pairs
Each needle and every reader place it matched move together, one span per line. "Places" are the reader lines where the needle matched inside the exact text the test reads.
ai/build-progress.test.ts:236ai/build-progress.zod.ts, the whole file (SOURCE)cloud#2172→the cloud build-progress cardai/build-progress.test.ts:237objectui#7388 block 2→block 2 of the objectui build-panel cardcontracts/approval-service.test.ts:274continueRestoredRundocblock incontracts/approval-service.ts#16495→the automation-service contractui/notification.test.ts:123, plus its own anti-vacuity regex at:134ui/notification.zod.ts// [#4610]→// [dual-source removal](and the regex^\[#4610\]→^\[dual-source removal\])ui/strictness-batch14.test.ts:395ui/notification.zod.tsandui/sharing.zod.ts, each whole#5015→no-door retirementui/component-props-unknown-members.pin.test.ts:322(the opaque line'sruling):417#21704→the five members the last typing stage stopped on(the regex follows)rulingvalue → the sameWhat each number meant, now said in words:
verifyinextractBuildProgress, the consumer's strict parse.IAutomationService.cancelRun/restoreConsumedSuspension, as the automation-service contract declared them../uiNotification/NotificationConfigwrappers were removed as dual-source, and the note's label now says so.NotificationActionSchemaandEmbedConfigSchemawere retired because they had no authoring door (ADR-0049 enforce-or-remove). Both modules record that retirement in the same four places as before.ComponentPropsMapmembers the last typing stage stopped on. The record id5979239990stays.Readers beyond the claim's "about" lines. The claim lists
build-progress.zod.tsabout:8,:27,:85andsharing.zod.tsabout:24. The old needles also matchedbuild-progress.zod.ts77, 84, 108, 123 and 177, andsharing.zod.ts114. Leaving any of those would have made the new needle match fewer places than the old one, which is a stronger test, not the same one. So they move too, inside the two files the claim admits. Nothing outside the claim's files moves except the two generated pages, both written bygen:docsonly:ai/build-progress.mdx, as the claim names, andui/sharing.mdx, which renders thesharing.zod.tsmodule docblock.Shipped text that moved. This is listed for the review.
build-progress.zod.ts: the module docblock (lines 8, 27, 77, 84, 85), theBUILD_PROGRESS_PHASESdocblock (108, 123) and thehopfield docblock (177).approval-service.ts: thecontinueRestoredRundocblock (999), whichdist/contracts/index.d.tscarries.notification.zod.ts: comment lines 48, 94 and 103.sharing.zod.ts: module docblock line 24 and comment line 114.ai/build-progressreference page'sdescription:front matter now ends with "(the cloud build-progress card, ruling A)".page-description.tsstrips only a parenthetical that holds a tracker or ADR id, so the words now stay in the description.No
.describe()string moves.Ids that stay on those lines on purpose. These are comment citations that no test matches, so they are not needles:
#15389and decision batch#106beside P3, and the other ids in the same docblocks.Class (e) regrowth
(#22110)is dropped from the two titles. Each already states that card's decision: a flow text slot reads{{ }}holes and refuses a single-brace token. Read with the card's 17 comments and its landing record. There is no reader: agit grep -Fof each old title and of each distinctive head finds only the literal itself. The lit controlcomposeStacksis found instack.zod.ts; the dark control exits 1.Text only, proven
subst31.cjsapplies the plan to the base text and compares the result with the head. The plan was written at 15:48:21Z, before any edit: 31 spans, each required to occur exactly once on its base line. The result is 13/13 SAME, line counts unchanged, including both generated pages and thedescription:line exactly as predicted. Every old span carries an id, and no new span carries#plus digits.textonly28.cjs, byte-identical, on the 7 test files: 5 SAME (2 title, 5 declared changes).notification.test.tsand the component-props pin stop at their regex reader lines (134, 417), because that instrument masks string tokens, not regex literals. With only those two lines put back to base, both read SAME (1 declared change each).--project local --project repo, JSON reporter: 193 / 193, identical in 7/7. Two fullNames change (the two titles) and 0 differ from the plan. There are 0 duplicate fullNames on either side. Names carrying#plus digits: 2 at base, 0 at head.Same strength, proven
Places.
sites31.cjsfinds every place each needle matches, inside the exact text its test reads. The old needles' places at base equal the new needles' places at head, pair by pair (the table above). Each new needle has 0 places at base, and each old needle has 0 at head.Mutations. Each leg goes through
scripts/ablation-replace.mjs, which requires the anchor count, restores toHEADand proves blob == HEAD after every leg. The test reads the source withreadFileSyncfromsrc, so no build sits between the mutation and the test. The predictions were written at 15:55:52Z, before the first run. The same matrix ran at the head and, with the worktree detached at the base, at the base:notification.zod.tssharing.zod.tsrulingvalueablation-replacerefused it, because its replacement was a substring of the anchor. The base P2 leg as first written had the same defect and was not run. Both were re-anchored with a replacement that is not a substring, and that amendment was written down before the re-run, with the prediction unchanged.fbec38c32, andgit statusis clean.Verification at
fbec38c32All heavy runs went through
scripts/pm/os-verify-lock.sh, slotdev-20749-s31. Each exit was written to a file or read from the lock's VERDICT line.pnpm turbo run build --concurrency=2over./packages/*and./packages/*/*gives 71/71 tasks, exit 0. It is the prerequisite for the gates that readdist.check:test-typecheckholds 52 files / 246 errors / 135 pinned signatures, unchanged.tsc --listFilesOnly -p tsconfig.test.jsonholds all 7 edited test files (617 test files in the program).--project local, in full: 630 files passed, 18798 tests passed and 1 todo, exit 0.--project repo, in full: 54 files passed, 915 tests passed, exit 0.check:generated: all 15 generated artifacts are up to date. Beforegen:docsran, it named onlycontent/docs/references/**as stale.dispatch-gates --commandsderives 109 commands from the merge basee148ca984(14 paths). All 109 exit 0, and--ranreconciles 109 derived, 109 run, 0 NOT-MEASURED, a derived zero.check-changeset-fixed,check:meta-url-spelling,check:spec-changes,check:authz-resolver,check:error-code-casing,check:filter-alias-parity).--no-inline-configover the 11 changed.tsfiles gives 0 errors and 0 warnings. ESLint's own config reports 11 configured, 0 ignored and 0 with type-aware parser options, so the diff cannot move a verdict on an untouched file. The 3 Markdown files are outside ESLint's config.check:nul-bytes(in the derived set) exits 0.Patch round at
a766d439f(open question answered A, ACCEPT6085085283)One span on one line,
system/metadata-form-zod-reconciliation.test.ts:497:(ruling record 6070963704, #22211 A):becomes(ruling record 6070963704, letter A):. The commit isa766d439f, on top offbec38c32, with no merge ofmain(the PR reported no conflict, andgit merge-treeontoorigin/main446c8b2a6is clean).fbec38c32, equals the head: SAME, 1616 lines on both sides. A control that re-adds an id inside the span reads DIFFERENT. Stage 28'stextonly28.cjswith line 497 declared reads SAME (552 string tokens, 1 changed, declared); without the declaration it refuses the line, as it should.git grep -Fof the old text, and of the value's opening words, finds only the literal itself. No assertion reads the text, only its length (more than 20).--project local --project repo. The status sequence is identical and no fullName changed.census28.cjsat the head reads 4 / 4 in 2 files, the 4 named hex colours. The same instrument reads 5 / 5 atfbec38c32and 13 / 13 at the basee148ca984.a766d439f:check:test-typecheckat 52 / 246 / 135 held, and the patched file is in thetsconfig.test.jsonprogram;--project local: 630 files, 18798 passed, 1 todo;--project repo: 54 files, 915 passed;check:generated: all 15 up to date.dispatch-gates --commandsderives the same 109 commands, all exit 0, and--ranreads 109 / 109 / 0 NOT-MEASURED. The 6 directory-sharing roster families also exit 0. ESLint over the file: 0 / 0; it is configured, not ignored and not type-aware.a766d439fat 17:05Z: 33 success, 2 skipped, none red. Onfbec38c32, the push ofa766d439fcancelled 14 jobs, and the aggregateTypeScript Type Checkjob failed at its "Verify every type-check lane succeeded" step because its lanes were cancelled. That red is on the superseded head only.Changeset
@objectstack/specpatch: shipped text moved. The package'sfilesshipssrc/**/*.zod.ts, and thecontinueRestoredRundocblock is indist/contracts/index.d.ts.npm pack --dry-run: 2069 files, 0*.test.ts. The three edited.zod.tssources ship, anddist/contracts/index.d.tscarries the new docblock words (the old ones are in 0distfiles).Clause-②: no: no accept-set change.Acceptance notes
why:value (system/metadata-form-zod-reconciliation.test.ts:497, added by PR 22425 after stage 30) was admitted by the claim amendment and rewritten in the patch round. The census now reads only the 4 hex colours.cloud#1838,objectui#7388in other sentences,#4535,#5781,#15389)..changeset/console-f0268ad78485.md) says the chat panel reads cloud's verification loop. The docblock's carrier sentence may be stale. This stage keeps what it says and only replaces the id.#plus digits, 4 titles carryPD #12/batch #58(conversions/conversions.test.ts,system/i18n-resolver.test.ts). These are two-digit labels below the census id pattern, the same at base and head, and outside the census population.Generated by Claude Code