Uh oh!
There was an error while loading. Please reload this page.
docs(cli-test): scope the production-default header to the pin it describes - #12569
Merged
os-litant merged 1 commit intoAug 26, 2026
Merged
Conversation
…cribes `serve-node-env-production-default.e2e.test.ts`'s header states the oclif reroute mechanism generically and then closes unqualified, while two of the file's own three legs reach the gate from `src/commands`. Apply the already-stated mechanism to this file's own legs, and scope the closing sentence to the unset pin it is the conclusion of. The mechanism itself is not restated and no table is added — the file already carries both. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UjujZN219uFzBhSYfMykCd
Contributor
📓 Docs Drift CheckNothing 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): |
os-litant
marked this pull request as ready for review
August 26, 2026 11:21
os-litant
enabled auto-merge
August 26, 2026 11:30
Uh oh!
There was an error while loading. Please reload this page.
os-litant
deleted the
claude/issue-12561-production-default-header-scope
branch
August 26, 2026 11:50
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes#12561
The header docblock of
packages/cli/test/serve-node-env-production-default.e2e.test.tsonly. No other file, no test body, nohelpers/serve-process.ts, noserve.ts. Net +4 / -2, all inside the/** ... */block.The two edits
1. The mechanism is applied to this file's own legs. The header already states it — the card's own correction comment established that, and it holds. The sentence "Measured, deterministic, not load-dependent: unset and
productionboth fail that way,testanddevelopmentboth resolve fromsrc/" now continues:⛔ No table, and the mechanism is not restated. The
isProd()membership test is already quoted verbatim in this block ("a negated membership test over['development','test']", in the paragraph beginning "That value is also what makes@oclif/core'stsPath()rewrite the command target"), and a second copy is the rot the sibling rule inpackages/cli/vitest.config.tsnames ("counts in exactly one place in this file — a second copy is what rotted last time"). What was missing was never the mechanism; it was the consequence for this file's own legs, which neither this header nor any registry entry said out loud.2. The closing sentence takes a scope word and keeps its force."
bin/run.jsplus a genuinely builtdist/is the only shape that reaches the gate" now reads "...that reaches the gate for this pin."⛔ Not weakened and not deleted. It is still the conclusion of the ⛔ "Do NOT 'fix' a
command serve not foundhere by switching the spawn tobin/run-dev.js" warning, and that warning is why the unset-NODE_ENVinput stays measurable at all. Three words narrow it from a claim about the file (false — two of three legs contradict it) to a claim about the unset pin (true, and it is the pin the surrounding warning is about).Premises re-derived — the order was right about the defect, off on some citations
origin/mainmoved5fbd58e0d→dd4fc6c9dbetween the card and this branch. The file is nonetheless byte-identical across both and my base: blob7cdab640b64a6dd92dd4d3ae06a06d164630fde1at all three, so the card's line numbers are directly checkable. Re-derived ondd4fc6c9d:probeOriginCheckdefinitionprobeOriginCheck({}){ NODE_ENV: 'development' }leg{ NODE_ENV: 'test' }legit(linesproductionboth fail that way..."dist/commandsread under concurrent spawn load")isProd()quotationStill three legs, still
{}/development/test— no fork to report. Both mechanism statements the correction comment cites are present, so the card body's "the header nowhere says so" is false and the correction comment is the accurate version, exactly as it says. The citation drift above is itself the correction's own argument for quoting phrases rather than lines, which is why every citation in this PR body is a quoted phrase.Mechanism verified first-hand, not taken from the card.
packages/cli/node_modules/@oclif/coreis 4.13.3;lib/util/util.js:65-67isisProd()returning a negated membership test over['development','test']againstprocess.env.NODE_ENV ?? '', andlib/config/ts-path.js:252is the site that skips the source lookup on it.DELIBERATE_REROUTEentries as present. PR #12558 is open, not merged (merged: false), and the literalDELIBERATE_REROUTEhas zero hits in this tree (reverse-checked:DELIBERATEreturns 17 hits in that same file). TheDELIBERATEregistry that is onmainholds two entries for a different rule —helpers/serve-process.ts::childEnvandserve-process-child-env.e2e.test.ts::leakedEnv, both bulk-env-copy declarations, neither a reroute. This changes nothing about the repair: the card's point was that a registry entry inscripts/cannot repair a sentence in the test file, and that is true whether the entry has landed or not.The reading owed: is this one cause with #12552, or two unrelated slips?
One cause. PR #12552's edit to this same block and this one are the same operation, on two different axes.
bin/run.jsthrough plainnode— this file's own shape —". False because those three pass--devon the spawn line and this file does not.NODE_ENV.Both sentences say "shape" as though this file has one. It has two axes that vary below file granularity —
--devpresence (the axis #12552 got wrong, measured across sibling files) and childNODE_ENV(the axis this card is about, measured across this file's own legs) — and the docblock's habitual unit of description is the file, while the facts it describes are per leg. Two readers a day apart each found the block collapsing a per-leg fact into a file-level one; that they found different axes is why it reads as two slips, and that they found the same collapse is why it is one cause.What that means for the next person: not a rewrite, a habit. The block is well maintained — both slips were caught within a day and each repaired precisely — and it is the granularity that is wrong, not the prose. So the recommendation is a check, not a restructure: any sentence here that says "this file" or "the only shape" must be held against all three
it()blocks before it ships. Evidence that this is the right level of response: both repairs turned out to be the same tiny shape. #12552 added a scope marker and one connecting clause ("⛔ but NOT this file's own shape, and the difference decides how each one FAILS on a taken port"); this PR adds a scope word and one connecting clause. A block needing a structural rewrite would not be repairable twice by the same three-word move. ⛔ A table would make it worse — a fourth copy of a mechanism already stated three times is what rots next.Verification — all at
96617bbf7, the final commit, clean treeTREE_AT=96617bbf7 dirty=[]. Exit codes captured before any pipe (redirect-then-capture), and each gate's own verdict line read rather than a bare status.pnpm lint(eslint . --no-inline-config, whole repo, not narrowed)VERDICT command-exit 0 · held the lock 58s · waited 22scheck:cli-test-child-envcheck:nul-bytescheck:cross-package-test-inputs+check-cross-package-test-inputs.mjscheck:engine-double-contractcheck:where-matchercheck:query-options-erasurecheck:objectql-double-limit·check:test-source-alias·check:page-declaration-shape·check:published-files·check:slot-lookup·check:type-source-resolution·check:type-check-coveragecheck-comment-mask-adoption.mjs·check-ci-filter-parity.mjs·check-plugin-teardown-shape.mjsGate list derived with
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstackagainst the real change set (1 path, working tree, three-dot vs merge basedd4fc6c9d) — not from a hand-written list. Its provenance line confirms the answer is about this repo at this commit.The change is comment-only — proven, not asserted
Transpiling both blobs with
removeCommentsand hashing the emitted program:Source grew 158 bytes (21912 to 22070); the executable program did not move a byte. Reverse-verified so the identical hash is informative rather than vacuous: mutating one token in a copy (
toBe(403)totoBe(404), injection confirmed on disk by occurrence count before hashing) moves the hash to1927b609ac2cc031. The harness can say no.Two narrowings, declared
⛔ Neither is reported as a green.
packages/cli/dist; the fullpackages/clisuite does not finish in this container's ~10-minute foreground window (SIGTERM, exit 143 — which is nothing ran, never a pass). The justification is the proof above: the emitted program is byte-identical, so the run would measure the same program it measures onmain. CI runs it under@objectstack/cli#test dependsOn buildregardless.pnpm --filter @objectstack/cli typecheckis NOT MEASURED for this edit, not green.packages/cli/tsconfig.jsondeclaresinclude: ["src"], sotsc --listFilesOnlyover that program returns 635 files and 0 hits forserve-node-env-production-default.e2e.test.ts(reverse-checked:packages/cli/src/commands/serve.tsreturns 1). Any "typecheck passed" line here would be true and empty. The structural half is covered —check:type-check-coverageexits 0 above.No changeset —
skip-changesetRule applied: the diff is comment prose inside one
packages/cli/test/file, proven above to leave the emitted program byte-identical. Nothing user-visible changes and this PR publishes nothing, so it takes theskip-changesetlabel rather than a.changeset/*.md.Generated by Claude Code