Skip to content

test(spec): the second root-level test file group's titles state each cited decision in words instead of a tracker number (stage 29) - #22376

Merged
objectstack-fleet[bot] merged 2 commits into
mainfrom
claude/issue-20749-test-strings-s29
Oct 9, 2026
Merged

objectstack-fleet[bot] merged 2 commits into
mainfrom
claude/issue-20749-test-strings-s29

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Part of #20749
Clause-②: no

Stage 29 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 second name-ordered group of the test files directly in packages/spec/src/: 15 files, root-entry-migrations-split.pin.test.ts through stack.test.ts. 12 of them carried 57 tracker ids in test titles (59 ids), one of which sits in a declared describe label rather than a literal title. All 57 now either state what their record decided, in words (form D), or drop the number where the title already says it. Text only: no assertion, identifier, test count, code comment, file name or non-test file changes. No file directly in src/ carries an id in a string any more (type-alias-convention.pin.test.ts, which sorts after the group, reads 0); the card stays open for the subdirectory files named under Acceptance notes.

Census (re-taken first)

The instrument is stage 28's census28.cjs, byte-identical (md5 31d8488b5194b8d3048e3fcaec0efaed, the value stage 28 published): 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, comments never read. It was run against the three published readings before it was trusted, and all three reproduce exactly: 128 messages / 130 ids in 37 files at stage 27's landing f7b8a5932b, 191 / 200 in 53 files (titles 162 / 168, other 29 / 32) at aa09db58c9, and 73 / 76 in 24 files at stage 28's landing b7e01fbbd.

reading messages / ids files
the group, base 43fc50051 57 / 59 (titles 56 / 58, other 1 / 1) 12 of 15
class (e) whole, base 43fc50051 73 / 76 (titles 61 / 64, other 12 / 12) 24
class (e) whole, this head 16 / 17 (titles 5 / 6, other 11 / 11) 12
the group, this head 0 / 0 0 of 15

The group reads 57 / 59, stage 28's landing figure: no re-cut. The census at 3f80f1716 (the dispatch base) and at stage 28's landing read the same per file as at 43fc50051.

Per file, messages at base: root-entry-migrations-split.pin 1, stack-artifact-crossref 11 (12 ids), stack-artifact-packages 3, stack-cross-reference-envelope 2 (one title, one declared label), stack-dev-logins 4, stack-email-template-locale-floor 6, stack-inline-action-crossref 13, stack-json-stage-package-body 4, stack-refusal-envelopes 2, stack-requires 4 (5 ids), stack-top-level-strict 5, stack 2. stack-conversions-record, stack-duplicate-action-key and stack-provenance carry no id in any literal.

Controls:

  • Pathspec: the 15 named paths hit the control word describe( in 15 of 15 files, and a nonsense word in none; the census scanned 15 of 15.
  • Lit outside the group, at base and head: ai/build-progress.test.ts 2 / 2 and ui/dashboard.test.ts 2 / 2.
  • Lit at base and dark at head, inside the group: stack-artifact-crossref 11 / 12, stack-inline-action-crossref 13 / 13, stack-requires 4 / 5 and stack-cross-reference-envelope 2 / 2 each read 0.
  • Dark at both ends: stack-conversions-record has no id anywhere; stack-duplicate-action-key and stack-provenance carry an id in one comment line each and read 0. The 15 group files read 0 at head while 55 of their comment lines still carry ids (112 id-bearing lines at base, comments included, 14 files).
  • Planted, in a scratch tree: an id 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 (6 / 6); a comment, a six-digit number, an HTML entity and a markdown heading read 0.

What changed

57 literals, one line each, in 12 files: +57 / -57. Every file keeps its line count.

  • 6 state the decision in words: "a modal target names a page, only" for the inline and the embedded modal-target refusals (stack-inline-action-crossref 133 and 330); "it was never built by a stack producer" for the hand-built stack object composeStacks refuses before either artifact-scoped rule runs (stack-artifact-crossref 380); "compatibility with the multi-package artifact" (stack-artifact-crossref 270); "unchanged from before the dangling-objectName refusal" (stack-inline-action-crossref 399); and the declared label "hooks[].object (the hook-ownership rule)", the rule ADR-0130 states as "the split must follow hook ownership" (stack-cross-reference-envelope 91).
  • 4 get their subject back where the number was the only subject: "the no-floor report: warn-once bookkeeping" and "the floor guard's declared scope boundary" (stack-email-template-locale-floor 159 and 179), "the strict top-level door: the accept side does not move" and "defineStack surfaces the unknown-top-level-key refusal" (stack-top-level-strict 173 and 225).
  • 47 drop a number the title already explains, with its connector: a #N — or #N prefix, a [#N] prefix, or a trailing (#N). That includes the twin title stack-artifact-packages.test.ts:355, which read does not warn about an undeclared composition rule (#5005 rule 3) and now reads does not warn about an undeclared composition rule, the same text stage 28 gave its copy at compose-stacks-manifest-preserve.test.ts:308.

Cited records

26 distinct ids. 25 answer 200 and were read: the body and the comment thread as the API serves it, with the rulings and landings that the rewritten titles state read in full. #10485 answers 404; its decision was read from its landing commit 35ad101bc (the themes carrier retired under ADR-0049 enforce-or-remove; app.branding is the one colour surface) and from the unknown-key strictness ledger, which records the maintainer's 2026-08-21 disposition as retiring the authorable surface, the phrase the title keeps verbatim. The comments counter of four records differs from what the comments endpoint serves (#14122 serves 21 of 22, #17614 5 of 6, #16449 0 of 5, #18056 5 against a counter of 4); everything served was read, and #16449's decision is in its body.

What each record decided, as the titles now say it:

Readers

173 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 15 files, with a lit control (composeStacks in stack.zod.ts, hit) and a dark control (a nonsense string, no hit). One needle hit, one line: a // comment in packages/qa/dogfood/test/fixtures/override-composite-fixture.ts that quotes the tail of one title with its id. It is a comment, not a reader. The only reader of the declared label is the file's own describe(row.label, ...). No group file reads a test name (currentTestName, expect.getState, snapshots: 0). The 15 file names appear elsewhere only in prose and comment lines, in packages/spec/test-typecheck-debt.json (keyed by file and error text, not by title) and in two dispatch-gates.mjs / check-changeset-no-major.mjs fixtures that name a path or a changeset file. Every old literal occurs exactly once across the 15 files (its own site).

Text-only proof

  • textonly28.cjs (stage 28's, 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 or on a declared line, carried an id at base and carries no # plus digits at head. 15 / 15 files SAME; 57 changed tokens, 56 titles and 1 declared label (run with --declared 91); per-file counts exactly as predicted in writing at 2026-10-08T22:57Z, before the edit. The 3 untouched files read SAME with 0 changed.
  • 17 / 17 controls on scratch copies of the head files behave as predicted: 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 title 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 rewritten title in a many-title file, an untouched file (SAME, 0 changed), the declared label run without --declared (refused), the declared line plus another changed string (refused) and the declared line alone (SAME, 2 changed).
  • git diff -U0: 57 plus and 57 minus lines, each the planned line; 0 added lines carry # plus digits; control-byte scan of the 12 files and of this body: 0 hits.

Tests

  • The 15 files with --project local --project repo and the JSON reporter, at the base (same worktree, before the edit) and at the head 65b42b7d1: 405 / 405 passed in 15 files, 108 suites each side; per-file test count and status sequence identical in 15 / 15; 229 full names changed, 0 mismatches against the plan (each head name equals the base name with the planned replacement applied); 0 duplicate full names either side; names with # plus digits 229 at base, 0 at head.
  • spec vitest run --project local: 626 files passed, 18740 tests passed | 1 todo, exit 0.
  • spec typecheck: VERDICT command-exit 0; check:test-typecheck 52 files / 246 errors / 135 pinned signatures held, unchanged; tsc --listFilesOnly -p tsconfig.test.json holds 15 of 15 group files.
  • turbo build of all packages before the gates: Tasks: 71 successful, 71 total. Heavy runs went through scripts/pm/os-verify-lock.sh (slot dev-20749-s29).
  • No reverse verification or ablation applies: no assertion, gate or reader moved.

Gates

All at 65b42b7d1. The dispatch list (77 commands, derived at 3f80f1716) equals the list re-derived from the real change set at this head, 12 paths against merge base 43fc50051 (114 changed lines): 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", measured against the dist the full build wrote at this head). ESLint, narrowed and proven: 15 files linted with --no-inline-config, 0 errors, 0 warnings; the population read from ESLint's own config is 15 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 12 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 12 paths reads 0 of 12; 114 changed lines.
  • git merge-tree onto origin/main 6a53564b9: clean. None of the 17 open PRs touches any of the 15 files (file lists read; 6 of them touch packages/spec/src, so the scan sees spec files).

Acceptance notes


Generated by Claude Code

… cited decision in words instead of a tracker number (stage 29)

Stage 29 of the class (e) burn-down: the test strings shipped under
packages/spec/src. The group is the 15 test files directly in src/, from
root-entry-migrations-split.pin.test.ts through stack.test.ts; 12 of them
carried 57 tracker ids in test titles and one declared label. Each title now
either states the decision its record made, in words, or drops the number
where the title already says it. Text only: no assertion, identifier, test
count, code comment, file name or non-test file changes.

Claude-Session: https://claude.ai/code/session_01DhTqaEHqPVSVnAkjG3jywn
Co-authored-by: Claude <noreply@anthropic.com>
@github-actions github-actions Bot added the size/m label Oct 8, 2026
@github-actions

github-actions Bot commented Oct 8, 2026 •

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

Nothing in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 0 changed package(s)), so this run has no opinion about the docs.

What this run could not see

Coarse fallback — 0 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): node scripts/docs-audit/affected-docs.mjs --json 345d3f3d86305eb3b5614a1788ef46598648e4f5 → packageMentionDocs.

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

CI on 65b42b7d1: Test Core (3/6) red on a runtime test's 5 s timeout, not this PR's; one re-run by a merge-main push · domain:spec seat 2 (#18549) · session session_01DhTqaEHqPVSVnAkjG3jywn · 2026-10-09T00:35Z.

  • Signature:
    • Failed step: "Run this shard's tests".
    • Error: @objectstack/runtime src/package-uninstall-org-scope.integration.test.ts:347 ("allows an org-scoped uninstall that spells allTenants:false explicitly"), Error: Test timed out in 5000ms. No assertion failed.
    • Counts: 1 failed / 4775 passed in the package; 14265 tests accounted for on the shard.
    • The shard's import phase took 1096.9 s, a loaded runner.
  • The three facts for the one re-run, each read:
    1. The failing file's import closure is disjoint from this diff, which changes string literals in 12 packages/spec/src/*.test.ts files.
    2. main is green on Test Core (3/6) on its last 8 commits. The test file is unchanged since 2026-08-12.
    3. The first error is a timeout, not an assertion.
  • Action: the stage's dev merges origin/main and pushes, which is the one re-run. A second red on the same signature is not re-run. It goes to the triage seat as this test's timing margin, the third load-timeout family member this week after hourly full run: red on main (CI) #22292 and hourly full run: red on main (CI) #22346.

Generated by Claude Code

@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review October 9, 2026 01:20
@objectstack-fleet
objectstack-fleet Bot enabled auto-merge October 9, 2026 01:20
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Oct 9, 2026
Merged via the queue into main with commit 0ef9029 Oct 9, 2026
37 checks passed
@objectstack-fleet
objectstack-fleet Bot deleted the claude/issue-20749-test-strings-s29 branch October 9, 2026 01:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/m skip-changeset PR has no user-facing published change; bypasses the changeset gate tests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants