docs(hygiene): drop the .mjs/.md counts from the header-position pin's prose (#1346) - #1349
Merged
Merged
Conversation
…s prose (#1346) The comment above the "does not judge .d.ts" pin explains why the header check reads `.ts` only, and propped that explanation on two hand-maintained integers: "3 of 5 `.mjs` under scripts/, the `.sh`, the four `src/docs/*.md` pages". Sixth instance of the defect the #1338 family collects — a counted fact in prose with no producer and nothing checking it — handled the same way: the numerals go, the claim they propped up stays, and no counting guard is added (ADR-0049 axis 3). This instance came with its own demonstration that renumbering is not a repair. The card was written against "2 of 7"; PR #1343 moved it to "2 of 8" two hours later by adding `scripts/lib/source-hygiene-surface.mjs`; and measuring here with the gate's own rule gives 3 of 8. The third reading differs from the second because `scripts/publish-marketplace.mjs` opens // Copyright (c) 2026 ObjectStack contributors. … while `COPYRIGHT_HEADER` is anchored `/^\/\/ Copyright \(c\) \d{4} ObjectStack\./` — it wants the period directly after `ObjectStack`, so that file is headerless to the check and headered to a reader. Three measurements, three answers. Deleting the numerals alone would have left a false sentence, so the `.mjs` clause gains a quantifier. "3 of 5" was not only arithmetic: it said *some, not all*, and five of the eight `.mjs` under `scripts/` do carry the header. "Some of the `.mjs` under scripts/" says that without a figure and holds under either reading of the `publish-marketplace.mjs` spelling. The other two kinds stay unqualified because they are complete — the one `.sh` and all four `src/docs/*.md` pages have no header at all. Prose only: no fixture, assertion or `describe` block is touched, and the gate itself is untouched. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016ED4cusQ7pxZ7d7TCLKrZb
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
os-trump
marked this pull request as ready for review
August 27, 2026 04:30
This was referenced Aug 27, 2026
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 free
to 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 #1346
Sixth member of the #1338 ruling: delete the hand-maintained integers, keep the claim they propped up, add no counting guard (ADR-0049 axis 3, as with the five landed siblings #1188 · #1282 · #1310 · #1312 · #1315).
Description
test/source-hygiene-header-position.test.ts— prose only. The comment above thedoes not judge .d.tspin explains why the header check reads.tsonly, and propped that explanation on two hand-maintained integers.Four comment lines. No fixture, no assertion, no
describeblock.scripts/check-source-hygiene.mjsandscripts/lib/source-hygiene-surface.mjsare untouched.The measured figure — evidence the sentence no longer depends on it
Recorded here, deliberately not written back into the file. Measured with the gate's own rule (
COPYRIGHT_HEADERon line 1, or line 2 when a shebang comes first —scripts/check-source-hygiene.mjs:346,425-433):.mjsunderscripts/lacking a headerorigin/main@08613adorigin/main@16d5d3c41232dcThree re-measurements, three answers, one sentence. Two separate mechanisms moved it:
A file landed. PR test(hygiene): declare the source-hygiene gate's scan surface once #1343 added
scripts/lib/source-hygiene-surface.mjs, taking the denominator 7 to 8 in the two hours between filing and dispatch — exactly as the card predicted it would.A spelling. My reading differs from the dispatch's by one because
scripts/publish-marketplace.mjsopensand the gate's anchor is
/^\/\/ Copyright \(c\) \d{4} ObjectStack\./— it wants the period directly afterObjectStack, socontributorsbreaks the match. That file is headerless to the check and headered to a reader. No count of this set can be right for both audiences at once, which is the strongest argument available that the numeral had to go rather than be corrected.The kinds I verified — what the surviving claim rests on
Full census at base
41232dc, same rule:.mjsunderscripts/(incl.scripts/lib/)check-stackblitz-lock.mjs,publish-marketplace.mjs,sync-docs-screenshots.mjs.mjsunder scripts/" ✅.sh(whole repo)scripts/wow1-live-schema.sh.sh" ✅src/docs/*.mdcrm_admin,crm_overview,crm_sales,crm_servicesrc/docs/*.mdpages" ✅The enumeration is also still complete. Non-
.tsfiles across the fourSCANNEDtrees (src,test,e2e,scripts) are exactly.mjs(8),.md(4),.sh(1) and one.d.mts— andscripts/lib/main-module.d.mtscarries a header, so it is correctly absent from a list of files that lack one. No kind is missing and none has been retired.Why the
.mjsclause gained a quantifier.mjsunderscripts/do carry the header, so a bare "the.mjsunder scripts/" would have asserted that none of them does."Some of the
.mjsunder scripts/" carries that meaning with no figure, and — usefully — is true under either reading of thepublish-marketplace.mjsspelling above (3 headerless, or 2).plus the ... and the ...closes the scope of "some of" so it does not distribute onto the other two kinds, which are unqualified because they are complete.The load-bearing argument is unchanged and needs no count: widening the header check would demand headers in files nobody has decided about. That holds as long as such files exist, which is what the enumeration of kinds now says — and it survives the next file anyone adds.
Testing
pnpm verifygreen on5b4149e, the head of this branch, re-run after the final commit:The edited suite on its own:
pnpm exec vitest run test/source-hygiene-header-position.test.ts— 1 file, 11 tests passed. The token ratchet is unaffected by construction: it readssrc/**/*.ts, and this change is intest/.Checklist
.changeset/header-position-prose-integers.md, empty frontmatter (comment text only, releases nothing to HotCRM users)pnpm verifygreen on the head commitGenerated by Claude Code
Generated by Claude Code