@@ -1045,6 +1045,52 @@ jobs:
10451045 - name : React pages honour the useAdapter() query and result contracts
10461046 run : pnpm check:react-page-adapter-contract
10471047
1048+ # #10830 form-section `name` in docs examples: the docs pages that TEACH
1049+ # the i18n-anchor convention were the one surface where nothing enforced
1050+ # it. `packages/lint`'s `translation-section-name-missing` walks app
1051+ # METADATA — `collectionEntries`, `walkPageComponents`, `viewContainerSites`
1052+ # — and never sees an `.mdx` fence, and its severity is `'warning'` besides.
1053+ # `{/* os:check */}` fences ARE type-checked against the live spec by
1054+ # `packages/spec/scripts/check-skill-examples.ts`, but `name` is
1055+ # `.optional()` in the schema — deliberately, and it STAYS (#10709) — so a
1056+ # nameless section type-checks CLEAN. `content/docs/ui/forms.mdx`'s first
1057+ # block carried an `os:check` marker over a nameless section for months.
1058+ #
1059+ # A gate rather than a fourth sweep, decided by the card's own history:
1060+ # the same population was hand-counted three times and produced three
1061+ # numbers — #10579 "3 of 5 over four ui/ pages" (single-line scan), #10709
1062+ # "7 of 15 across 5 pages" (multi-line, but required `{` to start a fresh
1063+ # line, so it missed `sections: [{`), PR #10827 "8 of 16 across 5 pages".
1064+ # Each pass corrected its predecessor's matcher and introduced a subtler
1065+ # version of the same error.
1066+ #
1067+ # This gate's landing census found the error all three SHARED and none
1068+ # noticed: all three scoped to `content/docs/ui/**`, and six more nameless
1069+ # literals were sitting in TS fences under `content/docs/concepts/` and
1070+ # `content/docs/protocol/objectui/`. The real population is 22 literals
1071+ # across 8 pages, not 16 across 5 — a hand-derived SCOPE is defeated the
1072+ # same way a hand-derived matcher is, and that is the argument for a
1073+ # mechanical one. `CENSUS_ANCHORS` pins one of those out-of-`ui/` pages, so
1074+ # re-narrowing the scope REFUSES instead of reporting a clean corpus.
1075+ #
1076+ # Invoked as `node` rather than through a `pnpm check:*` alias, same as the
1077+ # doc-frontmatter and aggregator-roster steps: that alias belongs in root
1078+ # package.json, declared territory of the @changesets/cli v3 migration lane
1079+ # (#9465) while it runs. Dependency-free filesystem read, sub-second over
1080+ # the whole corpus.
1081+ #
1082+ # Its --self-test runs FIRST and is where the rule is observed FAILING:
1083+ # this PR swept the live corpus, so a passing run over real data cannot
1084+ # distinguish a working matcher from one that matches nothing. The verdict
1085+ # line prints the POPULATION it judged, and `run()` REFUSES — never exits 0
1086+ # — when the corpus falls below its floors or a census anchor stops
1087+ # contributing. A silent zero here would be this gate committing the exact
1088+ # defect it exists to catch.
1089+ - name : Docs form-section examples carry a `name`
1090+ run : |
1091+ node scripts/check-docs-section-name.mjs --self-test
1092+ node scripts/check-docs-section-name.mjs
1093+
10481094 # #9632 published-README links: a README in a package's `files` array with
10491095 # `private` unset is rendered on npm and on GitHub as well as here, and
10501096 # NOTHING read its links. Measured before the gate was written: the lychee
0 commit comments