Description
Filed by the PM seat (session session_01NYgmGheCzM6NrHZN436Cxf) while verifying merge-queue recovery after the required-check freeze (see #9283 comment).
What happened
PR #9238 changes .claude/skills/pm-dispatch/** — a skill-surface PR. Prime Directive #14 and the PR's own body say: 「draft, awaiting a human merge — never ready/queue/auto-merge」. Yet:
- merge groups for it were created at 11:50Z and again at 12:48Z on 2026-08-17 — someone flipped it ready and armed/enqueued it (identity unknown; all agents share one GitHub login, and no claim-comment on the PR records the flip);
- the queue freeze coincidentally held it; when the maintainer removed the phantom
CIrequired check (~13:15Z), the already-green 12:48Z group completed and it merged tomainas862eb14, with zero GitHub reviews.
The PM seat re-armed only 9287/9284/9288/9309 during recovery and deliberately excluded #9238 — its group was already in flight from 12:48Z, so the merge could not be prevented from the PM side once the settings unfroze.
Risk reading (honest, not alarmist)
Content risk is low: the diff had been PM-accepted in-thread with gates green (pm-skill-ratchet, skill-frame-sync, etc.), and it implements a maintainer-accepted card (#9226). The failure is the control, not this diff: the lane has now demonstrated that a .claude/skills/** change can reach main with no human click. The skill files are the lane's own operating protocol — the surface where a bad merge propagates to every later dispatch.
Decisions for the maintainer
- docs(pm): label writes re-read current labels in the same action — stale snapshots are invalid snapshots (#9226) #9238 itself: retroactively accept the merge (content was reviewed; re-landing by hand buys nothing), or revert and re-land via human merge to keep the precedent clean. Recommendation: retroactively accept, in one line on this card — the record matters more than the ceremony re-run.
- The guard: the
ADR maintainer approvalgate already implements exactly this control fordocs/adr/**(red while unapproved/armed, [governance] The ADR gate blocks the merge but not the ARMING of auto-merge — an AI seat armed it on a livedocs/adr/**PR today, which would have made the maintainer's approval the merge trigger #8012 clause). Extend its path predicate to.claude/skills/**? That is a gate-strengthening change to contract behavior — not auto-adjudicable, and it would make PD feat: Comprehensive CRM example demonstrating all ObjectStack protocol features #14 enforced rather than declared (the ADR-0049 shape). If ruled yes, the PM files the work card againstscripts/check-adr-merge-approval.mjs+adr-merge-approval.yml.
Follow-up regardless of ruling
The lane seat that flipped #9238 ready should be identified from session transcripts if practical, and the pm-dispatch skill's own text already forbids this — so this is a compliance breach, not a doc gap. No new prose fixes it; only the gate in decision 2 does.
Related: #9226 (the card #9238 implements) · #9283 (the queue freeze that exposed the landing) · Prime Directive #14.
Activity
os-zhuang commentedon Aug 17, 2026
Maintainer ruling recorded — maintainer, 2026-08-17, batch acceptance of the PM decision-inbox recommendations, verbatim: 「同意」. Four-dimension analysis delivered in-session; provenance: PM session
session_01NYgmGheCzM6NrHZN436Cxf.Decision 1 — ruled: the #9238 merge is retroactively accepted. Content was PM-reviewed with gates green and implements a maintainer-accepted card; re-landing by hand buys nothing. This line is the acceptance of record.
Decision 2 — ruled: yes, extend the guard. The
ADR maintainer approvalgate's path predicate extends to.claude/skills/**, making Prime Directive #14 enforced rather than declared (the ADR-0049 shape, applied to the lane's own protocol surface). The #8012 armed-auto-merge clause applies to the extended paths identically. Work card filed as the follow-up to this comment; surface:scripts/check-adr-merge-approval.mjs+.github/workflows/adr-merge-approval.yml.The compliance question (which seat flipped #9238 ready) is subsumed: with the gate extended, the identical act becomes mechanically impossible rather than forensically traceable — the better spend.
Closing as completed: both decisions ruled; the enforcement work tracks in the new card.
Generated by Claude Code
feat(devx): gate .claude/skills/** on the ADR merge-approval check (#…
feat(devx): gate .claude/skills/** on the ADR merge-approval check (o…
ci(pm): refuse governed surfaces at the merge queue (#11704)
ci(pm): refuse governed surfaces at the merge queue — the prevention …
fix(pm): the queue guard's narration and remedy state ruling C, not t…