现象
scripts/check-role-word.mjs 的实际扫描population是 ROOTS = ['content/docs', 'skills'](.md/.mdx,文件名也计数),但 node scripts/pm/dispatch-gates.mjs --residue 对该 gate 只抽取到 names: content/docs, scripts/role-word-baseline.json —— skills 这一半缺失。于是每张只动 skills/** 的卡,派生 union 都把 check:role-word 判为 silent,开发者按派生集跑本地 gate 就会漏掉它。
这不是假设:PR #10038(#9907 的 skills-only 文档修正)正是这样红的 —— dev 的派生 union 全绿,推上去 CI 的 check:role-word 才抓到 role-word count grew 2 → 3,多烧一整个修复轮。
根因(已在 dispatch-gates 文档块里写明,不是新缺陷)
hintCovers 有意拒绝无路径分隔符的裸单段字面量(防伪造线索),对 skills 的判词逐字为:
'<hint>' — the tree HAS it; the covering rule refuses the literal as too generic (no path separator)
即:树里确实有,但覆盖规则按设计拒收。⛔ 不要放宽 extractor / hintCovers —— 这是 #9978 量过的拒绝,放宽会重新引入伪造线索。
补救形状(#9978 已定模式,照抄即可)
在 scripts/check-role-word.mjs 里按 #9978 的 provenance-only 声明模式补一行子树拼法声明(skills/**),与 AGENTS.md 当年获得覆盖的方式相同(参照 check-skill-line-ratchet.mjs 里的 ROOT_FILE_WATCH_HINTS = ['AGENTS.md/**'] 及其注释边界)。声明是纯出处常量,不改 gate 的扫描行为;完成判据 = --residue 里该 gate 的 names 含 skills,且任选一张 skills/** 路径重跑 dispatch-gates.mjs --tier/派生 能把 check:role-word 列进 union。自测(dispatch-gates 334 断言基线)需相应加 pin。
四维分析
出处
热点文件:scripts/check-role-word.mjs(当前无在飞 PR 占用)、scripts/pm/dispatch-gates.mjs 自测。
现象
scripts/check-role-word.mjs的实际扫描population是ROOTS = ['content/docs', 'skills'](.md/.mdx,文件名也计数),但node scripts/pm/dispatch-gates.mjs --residue对该 gate 只抽取到names: content/docs, scripts/role-word-baseline.json——skills这一半缺失。于是每张只动skills/**的卡,派生 union 都把check:role-word判为silent,开发者按派生集跑本地 gate 就会漏掉它。这不是假设:PR #10038(#9907 的 skills-only 文档修正)正是这样红的 —— dev 的派生 union 全绿,推上去 CI 的
check:role-word才抓到role-word count grew 2 → 3,多烧一整个修复轮。根因(已在 dispatch-gates 文档块里写明,不是新缺陷)
hintCovers有意拒绝无路径分隔符的裸单段字面量(防伪造线索),对skills的判词逐字为:即:树里确实有,但覆盖规则按设计拒收。⛔ 不要放宽 extractor / hintCovers —— 这是 #9978 量过的拒绝,放宽会重新引入伪造线索。
补救形状(#9978 已定模式,照抄即可)
在
scripts/check-role-word.mjs里按 #9978 的 provenance-only 声明模式补一行子树拼法声明(skills/**),与 AGENTS.md 当年获得覆盖的方式相同(参照check-skill-line-ratchet.mjs里的ROOT_FILE_WATCH_HINTS = ['AGENTS.md/**']及其注释边界)。声明是纯出处常量,不改 gate 的扫描行为;完成判据 =--residue里该 gate 的 names 含skills,且任选一张 skills/** 路径重跑dispatch-gates.mjs --tier/派生能把check:role-word列进 union。自测(dispatch-gates 334 断言基线)需相应加 pin。四维分析
出处
objectstack-platformskill still teaches that an unknown top-leveldefineStackkey is silently stripped — #8687 made it throw #9907 修复轮 dev 报告(out_of_scope_findings,原文「Deliberately NOT fixed in this PR (out of scope, different gate); noted for the PM to file」),PR docs(skills): objectstack-platform states load-time refusal, not silent stripping #10038 正文「Verification at 8e1b43c」节亦有同一记录。热点文件:
scripts/check-role-word.mjs(当前无在飞 PR 占用)、scripts/pm/dispatch-gates.mjs自测。