Skip to content

docs(hygiene): drop the .mjs/.md counts from the header-position pin's prose (#1346) - #1349

Merged
os-trump merged 1 commit into
mainfrom
claude/issue-1346-header-position-prose-integers
Aug 27, 2026
Merged

docs(hygiene): drop the .mjs/.md counts from the header-position pin's prose (#1346)#1349
os-trump merged 1 commit into
mainfrom
claude/issue-1346-header-position-prose-integers

Conversation

@os-trump

Copy link
Copy Markdown
Collaborator

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 the does not judge .d.ts pin explains why the header check reads .ts only, and propped that explanation on two hand-maintained integers.

-    // no header today — 3 of 5 `.mjs` under scripts/, the `.sh`, the four
-    // `src/docs/*.md` pages — so widening this check would demand headers in
-    // files nobody has decided about. Pinned here so that widening it later is
-    // a deliberate edit to this file rather than an accident.
+    // no header today — some of the `.mjs` under scripts/, plus the `.sh` and
+    // the `src/docs/*.md` pages — so widening this check would demand headers
+    // in files nobody has decided about. Pinned here so that widening it later
+    // is a deliberate edit to this file rather than an accident.

Four comment lines. No fixture, no assertion, no describe block. scripts/check-source-hygiene.mjs and scripts/lib/source-hygiene-surface.mjs are 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_HEADER on line 1, or line 2 when a shebang comes first — scripts/check-source-hygiene.mjs:346,425-433):

when reading .mjs under scripts/ lacking a header
prose as written 3 of 5
card filed, origin/main @ 08613ad PM 2 of 7
dispatch, origin/main @ 16d5d3c PM 2 of 8
this branch, base 41232dc gate's rule 3 of 8

Three re-measurements, three answers, one sentence. Two separate mechanisms moved it:

  1. 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.

  2. A spelling. My reading differs from the dispatch's by one because scripts/publish-marketplace.mjs opens

    // Copyright (c) 2026 ObjectStack contributors. Licensed under the Apache-2.0 license.
    

    and the gate's anchor is /^\/\/ Copyright \(c\) \d{4} ObjectStack\./ — it wants the period directly after ObjectStack, so contributors breaks 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:

kind total lacking a header claim in the sentence
.mjs under scripts/ (incl. scripts/lib/) 8 3check-stackblitz-lock.mjs, publish-marketplace.mjs, sync-docs-screenshots.mjs "some of the .mjs under scripts/" ✅
.sh (whole repo) 1 1scripts/wow1-live-schema.sh "the .sh" ✅
src/docs/*.md 4 4crm_admin, crm_overview, crm_sales, crm_service "the src/docs/*.md pages" ✅

The enumeration is also still complete. Non-.ts files across the four SCANNED trees (src, test, e2e, scripts) are exactly .mjs (8), .md (4), .sh (1) and one .d.mts — and scripts/lib/main-module.d.mts carries 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 .mjs clause gained a quantifier

⚠️ Deleting the numerals alone would have left a false sentence, which the card ruled out explicitly. "3 of 5" was not only arithmetic — it said some, not all. Five of the eight .mjs under scripts/ do carry the header, so a bare "the .mjs under scripts/" would have asserted that none of them does.

"Some of the .mjs under scripts/" carries that meaning with no figure, and — usefully — is true under either reading of the publish-marketplace.mjs spelling 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 verify green on 5b4149e, the head of this branch, re-run after the final commit:

os-verify-lock: VERDICT command-exit 0 · held the lock 118s (1m58s)

  ✓ Validation passed (1046ms)
  ✓ i18n lint gate: 0 `i18n/missing-*` issues
  ✓ copyright header at the top of every .ts file
  ✓ source hygiene clean
  ✓ source token ratchet clean
  ✓ Build complete (1215ms)
  Test Files  142 passed (142)
       Tests  3002 passed | 1 skipped (3003)

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 reads src/**/*.ts, and this change is in test/.

Checklist

  • Changeset added — .changeset/header-position-prose-integers.md, empty frontmatter (comment text only, releases nothing to HotCRM users)
  • No counting guard added, deliberately
  • Scope held: the prose at :250 only
  • pnpm verify green on the head commit

Generated by Claude Code


Generated by Claude Code

…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
@vercel

vercel Bot commented Aug 27, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
hotcrm Ignored Ignored Aug 27, 2026 4:27am

Request Review

@github-actions github-actions Bot added the ci/cd CI plumbing and the verification pipeline label Aug 27, 2026
@os-trump
os-trump marked this pull request as ready for review August 27, 2026 04:30
@os-trump
os-trump added this pull request to the merge queue Aug 27, 2026
Merged via the queue into main with commit b38ab72 Aug 27, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci/cd CI plumbing and the verification pipeline

Projects

None yet

2 participants