Repository navigation
Commit 7ba2ce4
test(spec): the first root-level test file group's titles state each cited decision in words instead of a tracker number (stage 28) (#22342)
Part of #20749
Clause-②: no
Stage 28 of this card: the next area of class (e), the test strings
shipped under `packages/spec/src`, as ruled in `5902360492` on #20513.
This stage takes the first name-ordered group of the test files directly
in `packages/spec/src/`: 20 files, `assembled-package-body.test.ts`
through `inline-grid-column-carriers.test.ts`. 18 of them carried 61
tracker ids in test titles. All 61 now either state what their record
decided, in words (form D), or drop the number where the title already
says it. No declared string or expect message in the group carries an
id, so no needle is in play. Text only: no assertion, identifier, test
count, code comment, file name or non-test file changes. The card stays
open for the second group.
## Census (re-taken first)
The census instruments of stages 10-27 are not on disk in this
container, so `census28.cjs` (md5 `31d8488b5194b8d3048e3fcaec0efaed`)
was rebuilt from the definition those stage reports give: an AST walk
over the `packages/spec/src` test files, one message per folded string
(a lone literal, a template, or a plus chain) that matches the gate's id
pattern, a title when the folded root is argument 0 of a describe / it /
test / suite / bench call (each, skip, only chains included), comments
never read. It was calibrated against two published readings before it
was trusted: 128 messages / 130 ids in 37 files at stage 27's landing
`f7b8a5932b`, and 191 / 200 in 53 files (titles 162 / 168, other 29 /
32) at `aa09db58c9`. Both reproduce exactly.
| reading | messages / ids | files |
|:--|--:|--:|
| the group, base `28bff18d0` | 61 / 61 (all titles) | 18 |
| class (e) whole, base `28bff18d0` | 134 / 137 (titles 122 / 125, other
12 / 12) | 42 |
| class (e) whole, this head | 73 / 76 (titles 61 / 64, other 12 / 12) |
24 |
| the group, this head | 0 / 0 | 0 |
| files directly in `src/`, base then head | 118 / 120 in 30 files, then
57 / 59 in 12 | |
The group reads 61, the claim's figure: no re-cut. The whole class reads
6 messages / 7 ids above stage 27's landing reading (128 / 130) because
five new files outside this group landed since, all in subdirectories:
`api/meta-item-response-shapes`, `automation/builtin-node-config` (2 /
3), `kernel/manifest`, `ui/action-description` and
`ui/view-submit-redirect-url`.
Controls: lit, outside the group, at base and head:
`ai/build-progress.test.ts` 2 / 2, `stack-artifact-crossref.test.ts` 11
/ 12 and `stack-inline-action-crossref.test.ts` 13 / 13. Lit at base and
dark at head, inside the group: the three stage-27 controls,
`assembled-package-body.test.ts` 4 / 4,
`compose-key-dispositions-export.pin.test.ts` 5 / 5 and
`compose-stacks-action-collision-shape.test.ts` 3 / 3 (identical to
stage 27's readings of them). Dark: five stage-27 files under `system/`
read 0 while their comment lines still carry ids, and the 20 group files
read 0 at head while 84 comment lines in them still carry ids (a wider
pattern, any `#` plus digits, reads only the `(stack #0)` index
positions of composeStacks refusal text, unchanged). Planted, in a
scratch tree: ids in a describe title, a plus-chain title, an expect
message, an it.each row name, a template title and a declared string
each read once; a comment, a six-digit number, an HTML entity and a
markdown heading read 0.
Per file, messages at base: assembled-package-body 4,
compose-key-dispositions-export.pin 5,
compose-stacks-action-collision-shape 3, compose-stacks-action-echo 4,
compose-stacks-action-key-collision 2,
compose-stacks-collection-pipe-arm 5,
compose-stacks-concat-shape-refusal 1, compose-stacks-i18n-merge 2,
compose-stacks-key-loss 8, compose-stacks-manifest-preserve 7,
compose-stacks-merge-collection-refusal 1,
compose-stacks-objects-shape-refusal 1, compose-stacks-refusal-envelopes
1, cron-typed-positions-retirement 5,
define-stack-non-strict-actions-shape-refusal 3,
define-stack-non-strict-objects-shape-refusal 1, eager-entry-import 1,
inline-grid-column-carriers 7. `compose-stacks.test.ts` and
`compose-stacks-merge-config-object-refusal.test.ts` carry ids only in
comments.
## What changed
61 title literals, one line each, in 18 files: +61 / -61.
- 8 state the decision in words: the assembled body "declared apart from
the authoring manifest" and "the mismatch that is the reason two
declarations exist" (assembled-package-body 125 and 168), "defineStack's
scope-qualified action-key refusal" in place of a rule number
(compose-stacks-action-echo 176 and 224), "the 'merge' collection
refusal, not an action-key collision"
(compose-stacks-action-key-collision 222), "as read before the `pipe`
arm took the authored side" (compose-stacks-collection-pipe-arm 211),
"the inbound rate limiting config" (compose-stacks-key-loss 64), and
"the export-job family, `ScheduleState`, the connector `DataSyncConfig`"
(cron-typed-positions-retirement 347).
- 8 get their subject back where the number was the only subject: the
five "compose-key dispositions export, pin N" describes and the three
"composition rule N" describes.
- 45 drop a number the title already explains, with its connector: a `#N
— ` prefix, a `[#N] ` prefix, or a trailing `(#N)`.
## Cited records
24 distinct ids. 23 answer 200 and were read with every comment the API
serves. #14686 answers 404; its decision was read from its landing
commit `279431e7a3` and that commit's changeset: `defineStack` refuses
two actions that resolve to one scope-qualified runtime key. The
comments counter of three records exceeds what the comments endpoint and
the timeline serve (#5051 serves 2 of 5, #14848 7 of 8, #19150 5 of 6);
everything served was read. What each record decided, as the titles now
say it: #4910 the `server` key carries the inbound rate limiting config;
#5005 the three composition rules (same value passes, a conflict throws
a prescriptive error, an undeclared key warns); #5051 `i18n` joins them
(option A, no last-wins); #14242 option B, the assembled body gets its
own declaration (option C refused); #14512 a multi-package artifact
carries its collections once in the package bodies, and keeps the
flattened copy where the bodies cannot reproduce it; #14847 a bound
standalone action appears once in the composed object; #14848 ruling 4,
`objectConflict: 'merge'` refuses a differing collection; #14877 ruling
1, the compose-key table is a frozen public export; #15219 ruling A,
`plugins` and `devPlugins` are envelope keys; #16075 option 1, the
refusal extends to fixed-shape config objects; #16320 the seven
cron-typed positions are deleted; #16348 composeStacks conflict refusals
carry ADR-0112 envelopes; #17158 ruling A, the export-job family retires
whole; #18239 ruling B, a non-array `objects` is refused with the
envelope; #19150 a `pipe` is read on its authored side; #19784 ruling C,
a non-array concat key is refused; #19785 and #19799 the non-strict
`defineStack` door refuses a non-array `objects` and a malformed
`actions` with the envelope; #19816 the collision pass skips a malformed
`actions` and step 7 refuses it; #19930 every published entry imports
first under `OS_EAGER_SCHEMAS=1`; #20901, #20928 and #21142 each inline
grid column carrier references `InlineGridColumnSchema`.
## Readers
184 needles (each old literal, a 24-character window around each id, and
the text left and right of each id) were searched with `git grep -F`
over the tracked tree at the base outside the 20 files, with a lit
control (a known string, hit) and a dark control (a nonsense string, no
hit). 7 needles hit, 24 lines: prose, changelog and code-comment lines
elsewhere that share a short phrase, two `//` comment lines in
`migrations/` that quote the old #20901 header, and one twin title. No
gate, doc table, `-t` filter, snapshot, `currentTestName` read or
self-test reads a rewritten title. The twin:
`stack-artifact-packages.test.ts:355` carries the same old title as
`compose-stacks-manifest-preserve.test.ts:308`. It belongs to the second
name-order group; to keep the pair equal its rewrite should read `does
not warn about an undeclared composition rule`.
## Text-only proof
- `textonly28.cjs` (md5 `957eff6b3837d762b8e03d070155930a`), per file,
base text against head text: both texts with every string token masked
are byte-equal (code and comments), the string-token counts are equal,
and every changed token sits in a describe / it / test title position,
carried an id at base and carries no `#` plus digits at head. 20 / 20
files SAME; 61 changed tokens, all titles, 0 declared; per-file counts
exactly as predicted in writing at 2026-10-08T17:34:10Z, before the
edit.
- 14 / 14 controls on scratch copies of the head files behave as
predicted on the first run: an identifier rename, a numeric literal, a
comment edit, a non-title string given an id, a rewritten title given a
new id, a title that was id-free at base edited, one rewritten title
reverted to base (SAME, 0 changed), an it.each row given an id, an
expect message changed, a title re-split into a plus chain, a template
title given an id, a test added, an id appended to a key-loss title, and
an untouched file (SAME, 0 changed).
- `git diff -U0`: 61 plus and 61 minus lines, each the planned line; 0
added lines carry `#` plus digits; every file keeps its line count.
## Tests
- The 20 files with `--project local --project repo` and the JSON
reporter, at the base (same worktree, before the edit) and at the head
`437b4778f`: 594 / 594 passed in 20 files, 146 suites each side;
per-file test count and status sequence identical in 20 / 20; 409 full
names changed, 0 mismatches against the plan; 0 duplicate full names
either side; names with `#` plus digits 409 at base, 0 at head.
- spec `vitest run --project local`: 626 files passed, 18720 tests
passed | 1 todo, exit 0.
- spec `typecheck`: exit 0 (`VERDICT command-exit 0`);
`check:test-typecheck` 52 files / 246 errors / 135 pinned signatures
held, unchanged; `tsc --listFilesOnly -p tsconfig.test.json` holds 20 of
20 group files.
- turbo build of all packages: `Tasks: 71 successful, 71 total`. Heavy
runs went through `scripts/pm/os-verify-lock.sh` (slot `dev-20749-s28`).
- No reverse verification or ablation applies: no assertion, gate or
reader moved.
## Gates
All at `437b4778f`. The dispatch list (77 commands, derived at
`fe98cc63a`) equals the list re-derived from the real change set at this
head, 18 paths against merge base `28bff18d0`: nothing added, nothing
dropped. All 77 exit 0 and `dispatch-gates --ran` reads "77 derived, 77
run, 0 NOT-MEASURED, 0 UNRUN". Also run, exit 0: the five roster
families that share a directory with the diff
(`check:meta-url-spelling`, `check:spec-changes`,
`check:authz-resolver`, `check:error-code-casing`,
`check:filter-alias-parity`) and `check:generated` ("All 15 generated
artifacts are up to date"). ESLint, narrowed and proven: 20 files linted
with `--no-inline-config`, 0 errors, 0 warnings; the population read
from ESLint's own config is 20 configured, 0 ignored; no file has
`parserOptions.project` or `projectService`, so type-aware linting is
not enabled and this diff cannot move the verdict of a file it did not
touch.
## Packaging and landing
- No changeset: `skip-changeset`. `npm pack --dry-run --json
--ignore-scripts` in `packages/spec` lists 2069 files, none of the 18
changed files and no `*.test.ts`; controls `src/stack.zod.ts`,
`dist/index.mjs` and `package.json` are present; an old and a new title
phrase read 0 files in `dist/`, the control `Unrecognized key` reads 42.
- Not governed: `check-governed-merges --test` on the 18 paths reads 0
of 18; 122 changed lines.
- `git merge-tree` onto `origin/main` `e36ee5351`: clean. None of the 19
open PRs touches any of the 20 files (file lists read; 7 of them touch
`packages/spec/src`, so the reader sees them).
## Acceptance notes
- The next group is `root-entry-migrations-split.pin.test.ts` through
`stack.test.ts`, 12 files, 57 messages / 59 ids at this head, with the
one "other" string at `stack-cross-reference-envelope.test.ts` to be
needle-checked there. The five new subdirectory files named above carry
6 messages / 7 ids; the cutting seat decides where they go.
- Code comments in these files still carry live ids (84 lines across the
20 files). Comments are not this card's share. Carrier: none.
- Same-id titles in other packages were not re-measured here; stage 27's
list stands.
---
_Generated by [Claude
Code](https://claude.ai/code/session_01DhTqaEHqPVSVnAkjG3jywn)_
Co-authored-by: Claude <noreply@anthropic.com>1 parent 54c3ce1 commit 7ba2ce4
18 files changed
Lines changed: 61 additions & 61 deletions
File tree
- packages/spec/src
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
122 | 122 | | |
123 | 123 | | |
124 | 124 | | |
125 | | - | |
| 125 | + | |
126 | 126 | | |
127 | 127 | | |
128 | 128 | | |
| |||
156 | 156 | | |
157 | 157 | | |
158 | 158 | | |
159 | | - | |
| 159 | + | |
160 | 160 | | |
161 | 161 | | |
162 | 162 | | |
| |||
165 | 165 | | |
166 | 166 | | |
167 | 167 | | |
168 | | - | |
| 168 | + | |
169 | 169 | | |
170 | 170 | | |
171 | 171 | | |
| |||
281 | 281 | | |
282 | 282 | | |
283 | 283 | | |
284 | | - | |
| 284 | + | |
285 | 285 | | |
286 | 286 | | |
287 | 287 | | |
| |||
Lines changed: 5 additions & 5 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
98 | 98 | | |
99 | 99 | | |
100 | 100 | | |
101 | | - | |
| 101 | + | |
102 | 102 | | |
103 | 103 | | |
104 | 104 | | |
| |||
135 | 135 | | |
136 | 136 | | |
137 | 137 | | |
138 | | - | |
| 138 | + | |
139 | 139 | | |
140 | 140 | | |
141 | 141 | | |
| |||
163 | 163 | | |
164 | 164 | | |
165 | 165 | | |
166 | | - | |
| 166 | + | |
167 | 167 | | |
168 | 168 | | |
169 | 169 | | |
| |||
189 | 189 | | |
190 | 190 | | |
191 | 191 | | |
192 | | - | |
| 192 | + | |
193 | 193 | | |
194 | 194 | | |
195 | 195 | | |
| |||
264 | 264 | | |
265 | 265 | | |
266 | 266 | | |
267 | | - | |
| 267 | + | |
268 | 268 | | |
269 | 269 | | |
270 | 270 | | |
| |||
Lines changed: 3 additions & 3 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
101 | 101 | | |
102 | 102 | | |
103 | 103 | | |
104 | | - | |
| 104 | + | |
105 | 105 | | |
106 | 106 | | |
107 | 107 | | |
| |||
123 | 123 | | |
124 | 124 | | |
125 | 125 | | |
126 | | - | |
| 126 | + | |
127 | 127 | | |
128 | 128 | | |
129 | 129 | | |
| |||
165 | 165 | | |
166 | 166 | | |
167 | 167 | | |
168 | | - | |
| 168 | + | |
169 | 169 | | |
170 | 170 | | |
171 | 171 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
85 | 85 | | |
86 | 86 | | |
87 | 87 | | |
88 | | - | |
| 88 | + | |
89 | 89 | | |
90 | 90 | | |
91 | 91 | | |
| |||
137 | 137 | | |
138 | 138 | | |
139 | 139 | | |
140 | | - | |
| 140 | + | |
141 | 141 | | |
142 | 142 | | |
143 | 143 | | |
| |||
173 | 173 | | |
174 | 174 | | |
175 | 175 | | |
176 | | - | |
| 176 | + | |
177 | 177 | | |
178 | 178 | | |
179 | 179 | | |
| |||
221 | 221 | | |
222 | 222 | | |
223 | 223 | | |
224 | | - | |
| 224 | + | |
225 | 225 | | |
226 | 226 | | |
227 | 227 | | |
| |||
Lines changed: 2 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
219 | 219 | | |
220 | 220 | | |
221 | 221 | | |
222 | | - | |
| 222 | + | |
223 | 223 | | |
224 | 224 | | |
225 | 225 | | |
| |||
259 | 259 | | |
260 | 260 | | |
261 | 261 | | |
262 | | - | |
| 262 | + | |
263 | 263 | | |
264 | 264 | | |
265 | 265 | | |
| |||
Lines changed: 5 additions & 5 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
189 | 189 | | |
190 | 190 | | |
191 | 191 | | |
192 | | - | |
| 192 | + | |
193 | 193 | | |
194 | 194 | | |
195 | 195 | | |
| |||
208 | 208 | | |
209 | 209 | | |
210 | 210 | | |
211 | | - | |
| 211 | + | |
212 | 212 | | |
213 | 213 | | |
214 | 214 | | |
| |||
230 | 230 | | |
231 | 231 | | |
232 | 232 | | |
233 | | - | |
| 233 | + | |
234 | 234 | | |
235 | 235 | | |
236 | 236 | | |
| |||
264 | 264 | | |
265 | 265 | | |
266 | 266 | | |
267 | | - | |
| 267 | + | |
268 | 268 | | |
269 | 269 | | |
270 | 270 | | |
| |||
287 | 287 | | |
288 | 288 | | |
289 | 289 | | |
290 | | - | |
| 290 | + | |
291 | 291 | | |
292 | 292 | | |
293 | 293 | | |
| |||
Lines changed: 1 addition & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
72 | 72 | | |
73 | 73 | | |
74 | 74 | | |
75 | | - | |
| 75 | + | |
76 | 76 | | |
77 | 77 | | |
78 | 78 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
63 | 63 | | |
64 | 64 | | |
65 | 65 | | |
66 | | - | |
| 66 | + | |
67 | 67 | | |
68 | 68 | | |
69 | 69 | | |
| |||
172 | 172 | | |
173 | 173 | | |
174 | 174 | | |
175 | | - | |
| 175 | + | |
176 | 176 | | |
177 | 177 | | |
178 | 178 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
50 | 50 | | |
51 | 51 | | |
52 | 52 | | |
53 | | - | |
| 53 | + | |
54 | 54 | | |
55 | 55 | | |
56 | 56 | | |
| |||
61 | 61 | | |
62 | 62 | | |
63 | 63 | | |
64 | | - | |
| 64 | + | |
65 | 65 | | |
66 | 66 | | |
67 | 67 | | |
| |||
101 | 101 | | |
102 | 102 | | |
103 | 103 | | |
104 | | - | |
| 104 | + | |
105 | 105 | | |
106 | 106 | | |
107 | 107 | | |
| |||
157 | 157 | | |
158 | 158 | | |
159 | 159 | | |
160 | | - | |
| 160 | + | |
161 | 161 | | |
162 | 162 | | |
163 | 163 | | |
| |||
188 | 188 | | |
189 | 189 | | |
190 | 190 | | |
191 | | - | |
| 191 | + | |
192 | 192 | | |
193 | 193 | | |
194 | 194 | | |
| |||
217 | 217 | | |
218 | 218 | | |
219 | 219 | | |
220 | | - | |
| 220 | + | |
221 | 221 | | |
222 | 222 | | |
223 | 223 | | |
| |||
294 | 294 | | |
295 | 295 | | |
296 | 296 | | |
297 | | - | |
| 297 | + | |
298 | 298 | | |
299 | 299 | | |
300 | 300 | | |
| |||
319 | 319 | | |
320 | 320 | | |
321 | 321 | | |
322 | | - | |
| 322 | + | |
323 | 323 | | |
324 | 324 | | |
325 | 325 | | |
| |||
0 commit comments