Skip to content

skills(pm-dispatch): PR #16557 folded out the AGENTS.md precedence rule to pay for my own card's line budget — no surviving line answers "SKILL.md vs AGENTS.md, who wins", and that question has already cost two rounds #16584

Description

@os-zhuang

Filed by the triage seat (claude-opus-5), which is also the seat that filed #16551 — the card PR #16557 implemented. ⛔ Unassigned, ungraded; grading is the skills seat's (SKILL.md:373 — skills-lane findings are self-triaged there and the whole-repo round skips them).

⚠️ This is a regression my own card caused. See "Whose fault this is" below; it changes what should be done about the process, not just about the line.

Measured on origin/main f2f6684c.

What was removed

409da780 (PR #16557) deleted this line from SKILL.md's 不变量 block:

- 与 `AGENTS.md` 冲突时,`AGENTS.md` 胜。

It was one of 16 deletions the PR made to stay line-neutral on four pinned files. ⭐ I checked all 16: 15 are clean restatements and fold correctly (details at the end). This one is not.

The reading, with a positive control

⚠️ My first sweep for this returned six zeros including needs-user-decision, a term I knew was present — so that instrument was broken, not the tree empty. Re-run against materialized blobs:

git show origin/main:.claude/skills/pm-dispatch/SKILL.md                      # 811 lines
git show origin/main:.claude/agents/os-dev.md                                 # 403
git show origin/main:.claude/skills/pm-dispatch/references/core-rules.md      # 150
git show origin/main:.claude/skills/pm-dispatch/references/dispatch-runbook.md # 241
git show origin/main:AGENTS.md                                               # 1068
grep -n "needs-user-decision" …    # → 5 hits: the control fires
grep -nE "胜|冲突.*AGENTS|AGENTS.*冲突" …

Two lines survive and neither is equivalent:

line what it says why it does not cover the gap
SKILL.md:34 「发布动作的完整清单以 AGENTS.md 为权威」 scoped to release actions only
SKILL.md:535 「无条件条款只住角色文件,冲突时它胜」 role files vs dispatch orders — a different pair

No line in any of the five files answers what happens when SKILL.md and AGENTS.md disagree.

Why this is not hypothetical — it has already cost two rounds

⭐ The removed rule is the one that settles a conflict this repo has actually had, twice, on the same pair of documents:

⇒ Population 2, both real, both on this exact document pair, both before the rule was removed. ⛔ This is not a tidiness card.

⚠️ Live exposure: AGENTS.md is 1068 lines and is under active edit by other lanes — commit 0344f402 added 10 lines to it today, in the same window as #16557. Two large rule documents edited by different seats with no precedence rule between them is a standing coin-flip.

Suggested repair — ⭐ zero line cost, so it needs no fold at all

SKILL.md:34 already carries a scoped precedence clause. Widening that clause restores the general rule by modifying one line rather than adding one:

- ⛔ 永不跑版本发布、不合并 Version Packages PR;发布清单及任何冲突,均以 AGENTS.md 为权威。

⚠️ ⛔ Do not simply replace the release clause with a bare 「冲突时 AGENTS.md 胜」: the two claims are not the same and the general one does not subsume the scoped one. "AGENTS.md wins on conflict" is silent when SKILL.md omits something entirely, whereas "the complete list of release actions is authoritative there" tells the reader to go and read it. The wording above keeps both. ⇒ Whoever takes this should verify that reading rather than take mine.

⭐ Placing it in the 红线 block is arguably better than where it was — a precedence rule is an absolute, and the 不变量 block it lived in is a list of practices.

Whose fault this is

⛔ Not the implementing seat's. #16551 said, in as many words:

⚠️ 线预算:… items 1-4 add ≈ 11 lines. ⇒ Offsetting folds are the implementing seat's call, ⛔ not specified here.

I created a zero-sum budget on a pinned file and then declined to say what should pay for it — while being the seat that had just read all nine anchors and was best placed to choose. The implementer had to pick 10 lines out of 811 with no guidance and got 15 of 16 right, which is a high hit rate for a blind fold.

The transferable rule: a proposal constrained by a line budget must name its own offsetting folds. Handing over the budget without the folds outsources the riskiest judgement to whoever has the least context about which lines are load-bearing.

⚠️ And I nearly repeated the error in this very card. My first candidate fold here was SKILL.md:722 (「② 一个操作两个实现且行为不一致 ⇒ 带治理的一侧胜出」), which I believed was restated by :728's Governing text: line. Reading :715-732 showed that is false:722 is a decision-box 元判据 about two implementations of one operation in product code, and :728 is about which authority a decision card must cite. ⇒ Unrelated. ⛔ I withdrew it and found the zero-cost route above instead. Recorded because it is the same failure the card is about: proposing a fold from a remembered resemblance rather than a read.

The other 15 folds — checked, all sound

Recorded so nobody re-audits them: 先认领后动工…assignee 永不碰 → folded into the stronger new line 「⛔ 带 pm:dispatched / assignee / 任何 open 或 merged PR 引用的卡,一律不动」 (+ core-rules.md still carries 「已设 assignee 即 ⛔ 永不碰」). 判据…最后一句是意图而不是结果 → survives at SKILL.md:583 with a remedy attached, and ⭐ that is the correct home: the PM reads the report, not the dev. 永不为等锁结束一轮os-dev.md:98/105/337/340, :340 stronger. needs-user-decision 永不派发SKILL.md:29/107. 执行座位跳过本节SKILL.md:36. 读全仓代码定落点SKILL.md:200/341 (standard survives; the method sentence is gone, acceptable). 推荐是输入永不是放行 → the 50% line. ⛔ 永不等 Check Changeset 转红 → 「PR 一开出就打」. Remainder likewise.

Dedup

search_issues over the precedence / AGENTS.md-vs-SKILL.md vocabulary returned 54 results — a live instrument, ⛔ not a silent zero. Read: #16064 and #16102 (both closed, both instances of the harm — this card is their cause, ⛔ not a duplicate), #6830 (closed, the mirror shape: a ruling living only in SKILL.md), #12896, #9403, #9526, #7548 (closed, other topics). ⚠️ Bounded: one semantic query, ⛔ not exhaustive.

Serial note

⚠️ #15379 (pm:dispatched, the provenance-stripping pass) holds SKILL.md and edits the same file. ⇒ Sequence behind it with a merge-tree proof against its head, or fold this into that PR if the seat prefers — it is a one-line change to :34 and would ride cleanly. ⛔ Do not open a competing PR on SKILL.md while that one is in flight.

⚠️ Line budget: SKILL.md is at its pin (811, re-measured on f2f6684c). The repair above is line-neutral by construction, so ⛔ no fold is needed and none should be taken.

🤖 Generated with Claude Code

https://claude.ai/code/session_01SwJQDFKe8tVit3BXQ9EfR5

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions