Observation filed while implementing #9395. No action proposed here; recording the gap so it is a decision rather than an oversight.
What was measured
The pm-dispatch skill's ACCEPT fork treats three prefixes as human-merge-only (.claude/skills/pm-dispatch/SKILL.md, verbatim):
路径面一条命中docs/adr/**、.claude/skills/** 或 skills/** ⇒ ACCEPT 换终局三件套 … ⛔ 不合并不入队不挂auto-merge
After #9395 the ADR maintainer approval gate enforces the first two. skills/** — the published catalog that ships to customer projects — remains convention only: a skills/**-only PR passes the gate on the zero-lookup clean path and can be flipped ready, armed and queued exactly as PR #9238 was on the internal surface.
This was deliberate in #9395, not an omission: the #9319 decision-2 ruling names .claude/skills/**, and the gate script's header states the exclusion out loud rather than quietly widening past the ruling.
Why it is worth a decision rather than a shrug
- The risk profile differs from
.claude/skills/** in an interesting direction: the internal skills steer this repo's own agents, while skills/** ships to customer projects — a bad landing propagates outward instead of inward. - If the answer is "convention is enough for the published catalog", that is a fine answer, but it should be a recorded one; the three-prefix fork currently reads as one rule with an unexplained two-thirds enforcement.
- Mechanically this is a one-entry change:
GOVERNED_SURFACES in scripts/check-adr-merge-approval.mjs takes a third row with its own rule wording, and the self-test's "the published skills catalog is NOT governed" assertion would invert.
Refs: #9395 (where the two-of-three state was created) · #9319 (the ruling) · #7548.
Observation filed while implementing #9395. No action proposed here; recording the gap so it is a decision rather than an oversight.
What was measured
The pm-dispatch skill's ACCEPT fork treats three prefixes as human-merge-only (
.claude/skills/pm-dispatch/SKILL.md, verbatim):After #9395 the
ADR maintainer approvalgate enforces the first two.skills/**— the published catalog that ships to customer projects — remains convention only: askills/**-only PR passes the gate on the zero-lookup clean path and can be flipped ready, armed and queued exactly as PR #9238 was on the internal surface.This was deliberate in #9395, not an omission: the #9319 decision-2 ruling names
.claude/skills/**, and the gate script's header states the exclusion out loud rather than quietly widening past the ruling.Why it is worth a decision rather than a shrug
.claude/skills/**in an interesting direction: the internal skills steer this repo's own agents, whileskills/**ships to customer projects — a bad landing propagates outward instead of inward.GOVERNED_SURFACESinscripts/check-adr-merge-approval.mjstakes a third row with its own rule wording, and the self-test's "the published skills catalog is NOT governed" assertion would invert.Refs: #9395 (where the two-of-three state was created) · #9319 (the ruling) · #7548.