You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 4fb58de
Browse filesBrowse the repository at this point in the historyBrowse files
fix(pm): declare check-role-word's skills root for dispatch-gates derivation
check-role-word walks ROOTS = ['content/docs', 'skills'], but dispatch-gates
builds its watch hints from path literals carrying a separator, so the bare
word `skills` produced no hint at all: a skills-only card derived the content
half and scored this gate `silent`. PR #10038 paid one repair round for it —
a green local union, then `role-word count grew 2 to 3` in CI.
Adds the provenance-only subtree declaration (`skills/**`) in the gate's own
source, the same pattern root-file populations use, with the coupling to ROOTS
pinned in both self-tests. The extractor and hintCovers are untouched: that
refusal of bare single-segment literals is measured and deliberate.
No scanning behaviour changes.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AeA3nU1B5Q2pgxqxgUrexd
t('the role-word ratchet reaches the published skills catalog it declares',roleWordHints.some((h)=>hintCovers(h,'skills/objectstack-platform/SKILL.md')));
2745
+
t('and still reaches the content half it always named',roleWordHints.some((h)=>hintCovers(h,'content/docs/deployment/cli.mdx')));
2746
+
// The negative halves, and the reason this is a DECLARATION and not an
2747
+
// extractor change. `.claude/skills/` is the live specimen: a real tracked
2748
+
// tree whose last segment IS the declared root, which this gate does not walk
2749
+
// — a widened extractor accepting the bare word `skills` would not tell them
2750
+
// apart, and the collapsed subtree does.
2751
+
t('and claims nothing under the internal .claude skills tree it never walks',!roleWordHints.some((h)=>hintCovers(h,'.claude/skills/pm-dispatch/SKILL.md')));
2752
+
t('nor a package source file',!roleWordHints.some((h)=>hintCovers(h,'packages/spec/src/index.ts')));
2753
+
t('nor the sibling FILE beside the content root',!roleWordHints.some((h)=>hintCovers(h,'content/docs.site.json')));
2754
+
// The pair that makes the declaration worth having: the bare word this gate
2755
+
// actually spells in its ROOTS array stays refused, so the coverage above is
2756
+
// bought by the declaration and by nothing else.
2757
+
t('the bare root word the gate spells in ROOTS is still refused as too generic',!hintCovers('skills','skills/objectstack-platform/SKILL.md'));
2758
+
t('while the declared subtree covers that same path',hintCovers('skills/**','skills/objectstack-platform/SKILL.md'));
2759
+
2729
2760
// ── A trailing sentence period is not part of the path (#8534, half two) ──
2730
2761
//
2731
2762
// Coupled to the rule above: the raw-prefix comparison reached the real file
0 commit comments