Skip to content

check-cross-package-test-inputs' @objectstack/spec entry cites sync-template-versions.mjs as "named in a comment rather than read" — the same clause #9651 already retired, reintroduced in a second entry #9977

Description

@os-steve

Found while resolving the merge conflict on PR #9826 (issue #9763). Not fixed there — that PR is a reviewed conflict resolution and its ruling 4 forbids re-scoping. Recording only.

The stale clause

scripts/check-cross-package-test-inputs.mjs, in the @objectstack/spec entry, justifying the packages/cli/src/commands/serve.ts glob:

// `serve.ts` is named in a comment rather than read, the same shape as// `check-nul-bytes.mjs` / `sync-template-versions.mjs` / the realtime// protocol page below, and settled the same way: the literal collector// takes quoted paths without parsing, so a mention forces a declaration,

sync-template-versions.mjs is not that shape any more. packages/create-objectstack/src/template-version-stamps.test.ts:47 really reads it:

constSYNC_SCRIPT=path.join(repoRoot,'scripts','sync-template-versions.mjs');

and since #9763 the collector reconstructs split-segment join/resolve paths, so that read is what holds the radius. The create-objectstack entry in the same file now says so in as many words — "What FORCES the glob is now the read itself … The mentions are ordinary prose again — free to reword." Two entries in one file, disagreeing about the same path.

Why it is worth a card rather than a shrug

This is the second instance of the identical clause. #9651 retired it from the create-objectstack entry for exactly this reason ("still calls sync-template-versions.mjs 'named in a comment rather than read', which stopped being true"). It came back because #9782 wrote a fresh rationale in a different entry that reached for sync-template-versions.mjs as its canonical example of the mention shape — correct when written against main, false once #9763 landed.

The cost is not cosmetic: the clause tells the next author that rewording those mentions would unforce a live radius. That was true before #9763 and is the reason the clause exists; it is now advice against a hazard that has been fixed, attached to a path that no longer has it.

Bounded, and stated

No gate is wrongserve.ts genuinely is mention-held, so the @objectstack/spec declaration it justifies is correct and load-bearing (ablated on the PR #9826 merge head: removing it fails the gate, naming packages/spec/scripts/publish-smoke-port-collision.test.ts). Only the cross-reference inside the rationale is stale. Same for the sibling clause in the create-objectstack entry, which PR #9826's conflict resolution had to author and therefore corrected in place — that one is already handled; this card is about the @objectstack/spec copy that git auto-merged untouched.

Shape of a fix

Delete the stale half of the cross-reference, keeping the example that is still true:

 // `serve.ts` is named in a comment rather than read, the same shape as
- // `check-nul-bytes.mjs` / `sync-template-versions.mjs` / the realtime- // protocol page below, and settled the same way: the literal collector+ // `check-nul-bytes.mjs` / the realtime protocol page below, and settled+ // the same way: the literal collector

check-nul-bytes.mjs is still correct — the file's own @objectstack/cli rationale calls it "the one entry no test READS" — and so is the realtime-protocol.mdx reference, which #9651's dev deliberately left alone for the same reason.

Worth considering alongside the recurrence itself: a rationale that names another entry's path as an example goes stale whenever that path's status changes, and nothing mechanical notices. #9651 and this card are the same failure twice in eight days.

Generated by Claude Code

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions