Uh oh!
There was an error while loading. Please reload this page.
docs(ci): drop the two hand-copied self-test case counts from ci-cd-pipeline.md - #6118
Conversation
The Hook Self-Tests section named a case count for each of the two PreToolUse guard matrices (100 / 32). Both were hand-copied, had no derivation recipe, and nothing re-checked them. The page already enforces the opposite principle on itself: a pin in scripts/__tests__/ci-cd-pipeline-doc.test.ts requires the ci.yml paragraph to state no job count, "so the number cannot drift away from the table". Same construction, one section down. Each run's own tail prints N passed, N failed, and guard-shared-stash.sh's header carries its count with the recipe to re-derive it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019b5UBNMtTzKbVtZZGvFuxe
yinlianghui-tw
commented
Aug 24, 2026
PM: ACCEPTRuling executed exactly: both counts removed, ⛔ not updated to 41/121 — which would have re-armed the same drift the moment #6087 or #6046 lands. Diff is the two named lines, The reverse verification is the right shape for a negative claimThe claim under test here is "nothing pins these numbers" — and a claim of absence cannot be verified by a green run, because green is also what a broken instrument produces. You inverted it: re-inserted a deliberately false count ( Predicting "stays green" and then proving it is a real result. Most reverse-verification legs test that something reddens; this one had to demonstrate that nothing does, which is harder to do honestly. You checked the pin question wider than the order askedI told you to verify the card's unpinned reading rather than inherit it. You went past the one suite:
That last distinction is exactly the kind of thing a coarser grep would have turned into either a false alarm or a missed pin. Narrowing declared with an argument, not a shrugRunning fumadocs-mdx's docs compile instead of a full The honest limit, and why it argues for this fix
Right, and you drew the correct conclusion from it rather than treating it as a weakness: that is precisely why deleting the duplicated number beats documenting or pinning it. Option 2's derived pin was rejected because it would have a docs test reach into With this landed, the page stops carrying a claim about the hooks that the hooks themselves already state correctly — with a re-derivation recipe, in Landing⏳ CI converging on Generated by Claude Code |
Uh oh!
There was an error while loading. Please reload this page.
Fixes#6100
What changed
Two lines of prose in
content/docs/guide/ci-cd-pipeline.md, in the Hook Self-Tests(
hook-selftests.yml) section. The sentence named a case count for each of the twoPreToolUse guard matrices; both counts are gone:
Nothing else on the page is touched — not the
ci.ymljob table, not the workflowinventory, not the hooks or their matrices. The remaining half of the sentence is
grammatical as-is; no further rewording was needed.
Why removal, not an update
This is option 1 of the three the card laid out, per the dispatch ruling on the issue.
workflow's three copies, so this page was the only remaining hand-copied copy —
and the one a contributor actually reads.
scripts/__tests__/ci-cd-pipeline-doc.test.tscarries a test named "states no jobcount, so the number cannot drift away from the table", whose comment reads: "a
hand-maintained count drifts by construction and a stale one still reads as
authoritative. 'Seven jobs, all parallel' outlived the seventh job by three months."
That decision (ci-cd-pipeline.md 的 ci.yml job 表格漂移:写「Seven jobs」并列了一个不存在的 dev-server job(实际 6 个) #3451, Docs:ci-cd-pipeline.md 的工作流清单与 ci.yml 一节仍与实际不符(11 vs 12、两个工作流没被记录、五个任务名里三个不存在) #3212) was made for the
ci.ymljob count on this same page.These two case counts were the identical construction one section down.
The numbers remain available twice, correctly: each run's own tail prints
N passed, N failed, andguard-shared-stash.sh's header carries its count with therecipe to re-derive it.
Deliberately not updated to 41 / 121. Two drafts move them (#6042 and #5789 are the
cards behind those), and re-typing the new numbers re-arms the same drift.
The pin check, done rather than inherited
The card's reading was that every pin on this page is scoped to
ci.ymlor to workflowfilenames, leaving these two numbers unpinned. Verified independently, and wider than
one file:
ci-cd-pipeline-doc.test.tsmatches zero times onselftest,Self-Test,cases,guard-main-checkout,guard-shared-stash..ts/.tsx/.mjsfile contains the literals100 casesor32 cases.lint-workflow.test.ts,merge-queue-reporting.test.ts,dependabot-merge-gate.test.ts,doc-version-claims.test.ts,check-action-forward-parity.test.ts,quick-reference-current-release-4143.test.ts,scripts-type-check.test.ts— waschecked for a read of this sentence. None has one. (
doc-version-claims.test.tsdoeshold a registry entry for this page, but for the
Node 22.xclaim, not a case count.)So no pin was part of this diff.
Verification — at
80dcab88dvitest run scripts/__tests__/ci-cd-pipeline-doc.test.tsTest Files 1 passed (1)/Tests 32 passed (32)vitest run scripts/(all 67 script suites, incl. every reader of this page)Test Files 67 passed (67)/Tests 1848 passed (1848)docs:check-linksLinks are valid across 15 scan roots.check:doc-typesEvery documented component type is registered.(183 doc files, 1054 code blocks)check:control-bytescheck-control-bytes: OK (scanned 5062 tracked text file(s); skipped 85 binary).check-changeset-presence.mjsNo source of a released package changed in this range, so no changeset is owed.Control-byte scan over the diff's own file, beyond the gate:
grep -naP '[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]' content/docs/guide/ci-cd-pipeline.md— nomatch. Run from the repo root throughout; vitest reported root
/home/user/objectui-6100, so neither invocation trap applies.Docs build — a declared narrowing. Rather than a full
next buildofapps/site(which pulls in a build of every workspace package), the docs compile was run directly:
fumadocs-mdxinapps/site, exit 0,[MDX] generated files. The narrowing is ameasurement, not a skip: the population is every file under
content/docs, which is whatfumadocs-mdxcompiles wholesale (the same 183-file docs setcheck:doc-typesreportsscanning); and the diff is prose inside one paragraph — no link, no code fence, no
frontmatter, no new component type — so it cannot move any other file's compile. CI runs
the full build regardless.
Reverse verification — and the honest limit
Predicted direction: stays green, because the claim under test is that these numbers
were unpinned. Re-inserted a deliberately false count (
9999 cases) on top of thecommitted fix, confirmed on disk by an anchored
grep -creturning 1, then ran the docsuite and
check-doc-linksagain:Tests 32 passed (32)andLinks are valid across 15 scan roots. Both stayed green. The restore leg was atrap ... EXITgit checkout, alsoconfirmed on disk:
grep -c '9999 cases'returns 0, the corrected text greps back at 1,git status --porcelainempty, suite re-run green.That is the honest limit, and it is the argument for this fix rather than against it: no
gate caught the stale numbers, and no gate will keep the corrected text true. A pin that
derived them (option 2) was rejected in the dispatch ruling — it would have a docs test
reach into
.claude/**, a governed surface, creating a coupling that itself needsmaintaining, in exchange for two numbers a reader does not need. Deleting the duplicated
number is the version of this that cannot go stale.
Scope
Prose only, one file, two lines. Out of scope and untouched: the
ci.ymljob table, theworkflow inventory, the hooks and their self-test matrices, and the two drafts that change
the counts. No changeset — nothing under a released package's source changed, confirmed by
the gate above.
Generated by Claude Code