Filed out-of-scope from #7403 (the widening itself). Unassigned. Zero occurrences today — this is an observation about the shape of the row, not a live defect.
What
#7403 widened SCAN_ROOTS in scripts/check-shell-escape-residue.mjs with:
{ spec: '.claude/skills', kind: 'dir', minFiles: 3 },
The seat's in-lane ruling on that card was stated about the tree — ".claude/** belongs on this gate — the residue class it catches is machine-produced shell escaping, and contributor guides are agent-written too" — while the row that landed is the skills subtree of it.
Today the difference is exactly zero files. Measured on e7d68db:
$ find .claude -name "*.md" -o -name "*.mdx"
.claude/skills/objectui-contributor/SKILL.md
.claude/skills/objectui-contributor/guides/console-development.md
.claude/skills/objectui-contributor/rules/no-touch-zones.md
.claude/skills/verify/SKILL.md
4 of 4 under .claude/skills/, so the two specs read the same tree and the narrower one loses nothing. The row is annotated with that reading and with this gap.
Why it is worth a card anyway
The day someone adds .claude/agents/reviewer.md or .claude/commands/ship.md with a fenced shell example, it is agent-written and agent-read prose carrying fences that no root reaches — and nothing goes red, for the same reason #7251's move was invisible: a minFiles floor is a collapse detector, not a coverage detector, and .claude/skills will still be returning its 4 files. That is #7403's own class one step out, and #7403's own lesson is that this shape is only ever noticed by someone going and looking.
Not a duplicate of
Suggested shape, not prescribed
Two directions, and the choice is a decision rather than a mechanical fix:
- Widen the row spec to
.claude. Reads identically today, closes the next move by construction. Cost: it also pulls in any future .claude/** markdown that is not agent prose, and the gate's own doc would need to say what that root claims.
- Leave the row and add the check at the other end — a floor-style assertion that every
.md/.mdx under .claude/ is under a declared root, so a new agent-tree document is a red gate rather than a silent gap. That is the general form of the miss and would cover the skills/ side too.
Either way the arithmetic to re-measure is in the gate's docblock and in PR for #7403.
Filed out-of-scope from #7403 (the widening itself). Unassigned. Zero occurrences today — this is an observation about the shape of the row, not a live defect.
What
#7403 widened
SCAN_ROOTSinscripts/check-shell-escape-residue.mjswith:The seat's in-lane ruling on that card was stated about the tree — "
.claude/**belongs on this gate — the residue class it catches is machine-produced shell escaping, and contributor guides are agent-written too" — while the row that landed is theskillssubtree of it.Today the difference is exactly zero files. Measured on
e7d68db:4 of 4 under
.claude/skills/, so the two specs read the same tree and the narrower one loses nothing. The row is annotated with that reading and with this gap.Why it is worth a card anyway
The day someone adds
.claude/agents/reviewer.mdor.claude/commands/ship.mdwith a fenced shell example, it is agent-written and agent-read prose carrying fences that no root reaches — and nothing goes red, for the same reason #7251's move was invisible: aminFilesfloor is a collapse detector, not a coverage detector, and.claude/skillswill still be returning its 4 files. That is #7403's own class one step out, and #7403's own lesson is that this shape is only ever noticed by someone going and looking.Not a duplicate of
skillsroot does not reach.claude/skills#7403 — the widening that created this boundary; it declares.claude/skillsand says so.skills-paths.yml's header states the gate's scan surface asskills/**over 18 files — both halves are stale #7404 —check-skills-paths' workflow header prose, a different gate and a stale-statement defect rather than a scan-surface one.Suggested shape, not prescribed
Two directions, and the choice is a decision rather than a mechanical fix:
.claude. Reads identically today, closes the next move by construction. Cost: it also pulls in any future.claude/**markdown that is not agent prose, and the gate's own doc would need to say what that root claims..md/.mdxunder.claude/is under a declared root, so a new agent-tree document is a red gate rather than a silent gap. That is the general form of the miss and would cover theskills/side too.Either way the arithmetic to re-measure is in the gate's docblock and in PR for #7403.