Measured while implementing #11052 (the ruled strip of internal issue ids from the published catalog). Filed unassigned — out of that card's scope, which was the hand-authored corpus.
Sub-issue of #11052: same ruling, same citation kind, one source-layer over. The 2026-08-23 ruling was «strip the internal issue-id references from the published skill corpus»; these 14 sites are in that corpus but are not authored there.
What
After the strip, skills/** still carries 14 #NNNN references, all in generator-owned files:
3 skills/objectstack-data/references/_index.md #4410 ×2, #6345
3 skills/objectstack-platform/references/_index.md #4410 ×2, #6345
3 skills/objectstack-ui/contracts/react-blocks.contract.json #11284 ×2, #4413
3 skills/objectstack-ui/references/react-blocks.md #11284 ×2, #4413
1 skills/objectstack-automation/references/_index.md #4661
1 skills/objectstack-i18n/references/_index.md #4001
Every one of these files says so in its own header — > **Auto-generated** — do not edit for _index.md, {/* GENERATED by packages/spec/scripts/build-react-blocks-contract.ts — do not edit. */} for the react-blocks pair.
Why the cleanup PR did not fix them
The ids are not written in skills/. They are projected from .describe() / TSDoc text in packages/spec/src/** by gen:skill-refs and gen:react-blocks. So the fix is a spec-source edit plus a regeneration, and that has a materially wider blast radius than the card it would have ridden on:
Doing it inside the cleanup PR would have been an unmeasured widening riding on a measured card, so it was deliberately left and exempted by path in the new gate, with the reason recorded in scripts/check-doc-authoring.mjs next to the exemption rather than left implicit. The exemption is exact: 9 _index.md + 1 react-blocks.md, each verified to carry a generated marker, leaving 38 of the 48 .md files in scope.
What a card here would do
- Strip the ids from the source
.describe() / TSDoc in packages/spec/src/** (keeping the teaching, per the 2026-08-12 ruling: 「处理 issue 时犯的错应该总结成经验,保留 issue id没有意义」), then regenerate.
- Decide whether the doc-authoring gate's
GENERATED_SKILL_ARTIFACTS exemption can then be narrowed or removed — once the source is clean the generated files are clean, and keeping a permanent exemption over a surface that no longer needs one is how the next id gets in unseen.
- Consider whether the ban belongs on the spec-source side too, where the text is actually authored — that is the only place a regeneration cannot reintroduce it from.
⚠️ skills/** and the generated artifacts under it are a governed surface, so whatever lands here is draft + human merge.
Measured while implementing #11052 (the ruled strip of internal issue ids from the published catalog). Filed unassigned — out of that card's scope, which was the hand-authored corpus.
Sub-issue of #11052: same ruling, same citation kind, one source-layer over. The 2026-08-23 ruling was «strip the internal issue-id references from the published skill corpus»; these 14 sites are in that corpus but are not authored there.
What
After the strip,
skills/**still carries 14#NNNNreferences, all in generator-owned files:Every one of these files says so in its own header —
> **Auto-generated** — do not editfor_index.md,{/* GENERATED by packages/spec/scripts/build-react-blocks-contract.ts — do not edit. */}for the react-blocks pair.Why the cleanup PR did not fix them
The ids are not written in
skills/. They are projected from.describe()/ TSDoc text inpackages/spec/src/**bygen:skill-refsandgen:react-blocks. So the fix is a spec-source edit plus a regeneration, and that has a materially wider blast radius than the card it would have ridden on:.describe()strings also feedcontent/docs/references/(the public docs site) viabuild-docs.ts, so the edit changes customer-facing text in two places at once;check:docs,check:authorable-surface,check:api-surface,check:react-blocks) than the skills families;skills/*/references/_index.mdsits inside theskills/**governed-merge fence while being generator-owned — the exact friction [finding]skills/*/references/_index.mdis generator-owned (gen:skill-refs) yet sits inside theskills/**governed-merge fence — every spec PR touching an indexed headline is forced to carry a governed-surface file #11705 is about — so a spec PR that moves one of these headlines is forced to carry a governed-surface file.Doing it inside the cleanup PR would have been an unmeasured widening riding on a measured card, so it was deliberately left and exempted by path in the new gate, with the reason recorded in
scripts/check-doc-authoring.mjsnext to the exemption rather than left implicit. The exemption is exact: 9_index.md+ 1react-blocks.md, each verified to carry a generated marker, leaving 38 of the 48.mdfiles in scope.What a card here would do
.describe()/ TSDoc inpackages/spec/src/**(keeping the teaching, per the 2026-08-12 ruling: 「处理 issue 时犯的错应该总结成经验,保留 issue id没有意义」), then regenerate.GENERATED_SKILL_ARTIFACTSexemption can then be narrowed or removed — once the source is clean the generated files are clean, and keeping a permanent exemption over a surface that no longer needs one is how the next id gets in unseen.skills/**and the generated artifacts under it are a governed surface, so whatever lands here is draft + human merge.