Skip to content

[finding] ci-cd-pipeline.md carries a fourth hand-copied copy of the two self-test case counts (100 / 32), with no derivation and nothing that re-checks it #6100

Description

@yinlianghui-tw

Found while implementing #6089 (drop the case counts from hook-selftests.yml's step names). Out of scope there — that card and its dispatch ruling are scoped to .github/workflows/hook-selftests.yml, and this is a different file with a different gate family — so recorded here instead of folded in.

The observation

#6089 enumerated three copies of the self-test case counts, all inside .github/workflows/hook-selftests.yml (the cost note plus the two step names). There is a fourth, in the docs:

content/docs/guide/ci-cd-pipeline.md:1135:Runs `.claude/hooks/guard-main-checkout-bash.selftest.sh` (100 cases) and
content/docs/guide/ci-cd-pipeline.md:1136:`.claude/hooks/guard-shared-stash.selftest.sh` (32 cases) — the hermetic self-test matrices for

Same shape as the one #6089 ruled on: a hand-copied number, no derivation recipe, and nothing that re-checks it. scripts/__tests__/ci-cd-pipeline-doc.test.ts pins this page hard — the workflow inventory, the ci.yml job table, the name: each job reports under, and (what each job runs) the commands each ci.yml job runs — but every one of those pins is scoped to ci.yml or to workflow filenames. Nothing reads a case count, so these two numbers are unpinned.

Both numbers are stale or about to be

Same timing as #6089, and this file is not touched by either PR:

#6089's fix (PR linked below) removed the workflow's copies, so after it lands this page is the only remaining hand-copied copy — and the one a contributor reads to learn what the gate does.

Why this is worth a card rather than a shrug

The page itself already carries the opposite principle, enforced: ci-cd-pipeline-doc.test.ts has a test named "states no job count, 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 (#3451, #3212) was made for the ci.yml job count on the same page. These two case counts are the same construction one section down.

Options, not a recommendation to implement blind

  1. Drop both counts from the prose — "Runs guard-main-checkout-bash.selftest.sh and guard-shared-stash.selftest.sh". Consistent with [finding] hook-selftests.yml hard-codes both self-test case counts in its step names, with no derivation recipe and nothing that re-checks them #6089's ruling and with the page's own no-job-count pin; the numbers are available from each run's tail (N passed, N failed) and from guard-shared-stash.sh's header, which carries its count with the recipe to re-derive it.
  2. Keep the counts and add a pin to ci-cd-pipeline-doc.test.ts deriving them from the self-test matrices (grep -c '^expect ' + inline specials). Turns the drift red instead of removing it, at the cost of a new pin over governed-surface content (.claude/**) from a docs test.
  3. Leave it — accept prose drift on a docs page.

Option 1 mirrors the ruling already made on #6089 one file over; option 2 is the only one that would make the numbers self-correcting. Whichever is chosen, it is a maintainer/PM call, not a dev-agent one — hence unassigned.

⛔ Not fixed in PR for #6089: that PR is scoped to the workflow file, and widening it would put a docs page (a hot merge-conflict file) into a CI-only diff.

Refs: #6089 · #5754 / PR #6022 · #3721 · #3451 · #3212 · #6042 / PR #6087 · #5789 / PR #6046.

Metadata

Metadata

Labels

documentationImprovements or additions to documentationdomain:devxobjectui devx stream: fix lands on .github/, scripts/ or release pipeline — devx lane cross-repopm:dispatched

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions