Measured while implementing #15056 (branch claude/issue-15056-frame-sync-scan-references, PR #15060) at origin/main 82291fba. Unassigned, bare, for triage. File surface: scripts/check-role-word.mjs and scripts/check-corpus-claim-drift.mjs.
What
#15056 is check:skill-frame-sync skipping every directory named references, which hid 44% of its scan population. The same entry sits in two other gates whose roots include the published catalog, and there it hides the same kind of file:
| gate |
ROOTS |
SKIP_DIRS |
scripts/check-role-word.mjs |
['content/docs', 'skills'] |
node_modules, .git, dist, references |
scripts/check-corpus-claim-drift.mjs |
['content/docs', 'skills'] |
node_modules, .git, dist, references |
The reason for the entry is stated in check-corpus-claim-drift.mjs itself and is true of only one of its two roots:
Generated references/ is skipped: the spec source is the fix site there, so a finding in a generated file names the wrong file.
content/docs/references/ is indeed generated from spec (AGENTS.md marks it AUTO-GEN). skills/*/references/ is not the same population, and this repo has already ruled on it twice:
scripts/check-skill-identifier-liveness.mjs keeps references out of its skip set and pins the difference in its self-test: "under skills/** those files are hand-authored published content, unlike content/docs/references which is generated".
scripts/check-doc-authoring.mjs gave its published-catalog rule a second walk rather than reuse its own skipping one, because reusing it "would have produced a gate that runs, passes, and cannot see a ninth of the population it exists to guard" — and it names skills/objectstack-data/references/data-hooks.md as a file that "alone carried 15 of these ids when the corpus was measured". It also refuses any exemption for the generated pages there: "A red here is fixed AT THE SPEC SOURCE, never by hand-editing the artifact".
Measured
Markdown under skills/ (.md + .mdx, the extension set both gates use):
| population |
files |
all markdown under skills/ |
46 |
invisible to both gates (references/ only) |
12 (26%) |
| of those 12: hand-authored companions |
2 |
| of those 12: generator-owned index pages |
10 |
The 2 hand-authored companions are skills/objectstack-data/references/data-hooks.md and skills/objectstack-platform/references/plugin-hooks.md. Both ship verbatim to third-party projects via npx skills add, which is the distribution path both gates give as their reason to read skills/ at all. The 10 generator-owned pages are the nine references/_index.md files plus skills/objectstack-ui/references/react-blocks.md.
Not asserted
No claim that a role-word violation or a stale corpus claim is present in those 12 files today — this card was not the place to run either detector over a widened population, and #15056's flight was scoped to exactly one file. The defect asserted is the missing coverage.
Suggested shape (for triage, not a decision)
The narrow reading is that references belongs in the skip set for a content/docs root and not for a skills root, so a directory-name skip set is the wrong shape for a gate with both: skip by path prefix (content/docs/references) rather than by bare directory name, or give the published catalog its own walk the way check-doc-authoring.mjs did. Whether the generated pages under skills/** then earn an exemption is the same question check-doc-authoring.mjs already answered no to, and answering it differently here would need a reason.
Dedup
Complete enumeration of open items, 2026-09-03: REST GET /repos/objectstack-ai/objectstack/issues?state=open&per_page=100&page=1..6 returned 100+100+100+100+100+32 = 532, reconciled against the repository's own open_issues_count of 532 (508 issues, 24 PRs); local grep over titles and bodies for check-role-word, role-word, corpus-claim-drift, SKIP_DIRS, references/, reference companion, check-doc-authoring. One targeted search_issues covering closed items as well returned 18 results with the control (#15056) hitting, so the channel was live. Nearest neighbours, none of them this: #14659 (the role-word baseline is keyed by file path), #10107 (check-role-word's skills root is invisible to dispatch-gates derivation — a derivation-visibility defect, not a scan-population one), #13335 and #11705 (both about skills/**/references/_index.md being generator-owned, in the merge-driver and governed-fence senses). No carrier found.
Generated by Claude Code
Measured while implementing #15056 (branch
claude/issue-15056-frame-sync-scan-references, PR #15060) atorigin/main82291fba. Unassigned, bare, for triage. File surface:scripts/check-role-word.mjsandscripts/check-corpus-claim-drift.mjs.What
#15056 is
check:skill-frame-syncskipping every directory namedreferences, which hid 44% of its scan population. The same entry sits in two other gates whose roots include the published catalog, and there it hides the same kind of file:ROOTSSKIP_DIRSscripts/check-role-word.mjs['content/docs', 'skills']node_modules,.git,dist,referencesscripts/check-corpus-claim-drift.mjs['content/docs', 'skills']node_modules,.git,dist,referencesThe reason for the entry is stated in
check-corpus-claim-drift.mjsitself and is true of only one of its two roots:content/docs/references/is indeed generated from spec (AGENTS.md marks it AUTO-GEN).skills/*/references/is not the same population, and this repo has already ruled on it twice:scripts/check-skill-identifier-liveness.mjskeepsreferencesout of its skip set and pins the difference in its self-test: "underskills/**those files are hand-authored published content, unlike content/docs/references which is generated".scripts/check-doc-authoring.mjsgave its published-catalog rule a second walk rather than reuse its own skipping one, because reusing it "would have produced a gate that runs, passes, and cannot see a ninth of the population it exists to guard" — and it namesskills/objectstack-data/references/data-hooks.mdas a file that "alone carried 15 of these ids when the corpus was measured". It also refuses any exemption for the generated pages there: "A red here is fixed AT THE SPEC SOURCE, never by hand-editing the artifact".Measured
Markdown under
skills/(.md+.mdx, the extension set both gates use):skills/references/only)The 2 hand-authored companions are
skills/objectstack-data/references/data-hooks.mdandskills/objectstack-platform/references/plugin-hooks.md. Both ship verbatim to third-party projects vianpx skills add, which is the distribution path both gates give as their reason to readskills/at all. The 10 generator-owned pages are the ninereferences/_index.mdfiles plusskills/objectstack-ui/references/react-blocks.md.Not asserted
No claim that a role-word violation or a stale corpus claim is present in those 12 files today — this card was not the place to run either detector over a widened population, and #15056's flight was scoped to exactly one file. The defect asserted is the missing coverage.
Suggested shape (for triage, not a decision)
The narrow reading is that
referencesbelongs in the skip set for acontent/docsroot and not for askillsroot, so a directory-name skip set is the wrong shape for a gate with both: skip by path prefix (content/docs/references) rather than by bare directory name, or give the published catalog its own walk the waycheck-doc-authoring.mjsdid. Whether the generated pages underskills/**then earn an exemption is the same questioncheck-doc-authoring.mjsalready answered no to, and answering it differently here would need a reason.Dedup
Complete enumeration of open items, 2026-09-03: REST
GET /repos/objectstack-ai/objectstack/issues?state=open&per_page=100&page=1..6returned 100+100+100+100+100+32 = 532, reconciled against the repository's ownopen_issues_countof 532 (508 issues, 24 PRs); local grep over titles and bodies forcheck-role-word,role-word,corpus-claim-drift,SKIP_DIRS,references/,reference companion,check-doc-authoring. One targetedsearch_issuescovering closed items as well returned 18 results with the control (#15056) hitting, so the channel was live. Nearest neighbours, none of them this: #14659 (the role-word baseline is keyed by file path), #10107 (check-role-word'sskillsroot is invisible to dispatch-gates derivation — a derivation-visibility defect, not a scan-population one), #13335 and #11705 (both aboutskills/**/references/_index.mdbeing generator-owned, in the merge-driver and governed-fence senses). No carrier found.Generated by Claude Code