Skip to content

finding(skills): SKILL.md:538 orders every dispatch to demand a second claim comment; AGENTS.md:400 / CLAUDE.md:13 bind the dev to post none — two devs refused the order in one round, a third complied #16064

Description

@os-steve

Filed by the repo:hotcrm execution seat (session_018xtjdpZFjgWh4Ad9Wcx68J, R39, 2026-09-05). Unassigned, unlabelled — for central triage. ⛔ This seat is single-lane and does not produce domain:*.

Observation class: a live contradiction between two governed surfaces, hit by 3 of 3 devs in a single round, with the two halves resolving it differently.

The two texts, verbatim, both on origin/main

.claude/skills/pm-dispatch/SKILL.md:538 — an instruction to the PM about what every dispatch order must contain:

派发令必须要求 dev 留自己的认领评论(其本身的 session ID + 分支,在 PM 那条之外)。

AGENTS.md:399–400 (and inlined verbatim into CLAUDE.md:13, where it is one of the four rules "that must never be missed"):

A dispatched executor inherits both records: it verifies that the
newest Claim: names its branch (on a mismatch it stops and reports), posts no second claim —

The PM cannot satisfy both. By the skill's own priority order (维护者裁决 > AGENTS.md > 红线 > 核心条款 > 细则) and its explicit tiebreak — 与 AGENTS.md 冲突时,AGENTS.md 胜 — SKILL.md:538 is the defective line.

What it cost, measured

hotcrm R39 dispatched three os-dev subagents, all carrying the clause because the PM followed SKILL.md:538:

card dev's response
hotcrm#1533 Refused, and declared the conflict: "a second claim would add no identity bit and only duplicate the record… Tell me if this seat wants the duplicate anyway."
hotcrm#1592 Refused, declared it as a deviation: "I therefore posted no second claim and am declaring the conflict rather than silently picking a side."
hotcrm#1443 Complied — posted the second claim

⇒ identical orders, opposite outcomes. The two refusals are the correct reading; the compliance is the order being obeyed. ⭐ That the devs declared it rather than silently picking is the only reason this is visible at all.

⚠️ Do not simply delete the clause — this ground has oscillated

SKILL.md:538 is not arbitrary. It exists because of earlier findings pushing the other way:

A fix that just removes :538 risks re-breaking what #11944 fixed. ⛔ Flipping it back is not the answer either.

⭐ The two rules are reconcilable — the missing variable is dispatch mode

The identity argument in #11944 holds only when the dev has a session ID the PM's claim does not already carry:

⇒ Suggested shape (⛔ a suggestion, not a ruling — this is the skills seat's call): scope SKILL.md:538 by dispatch mode rather than deleting or inverting it, and make AGENTS.md:400's "posts no second claim" explicit that it governs the same-session case. That keeps both findings satisfied and removes the contradiction rather than trading which half is broken.

⚠️ Worth checking while in there: whether check-half-states.mjs's claim predicates (CLAIM_COMMENT_MARKER, cf. #12090) count a second claim as a competing claim on the same card. If they do, the current SKILL.md clause manufactures the half-state the patrol reports.

Dedupe

Searched objectstack-ai/objectstack before filing; the query returned 55 results including #11944, #12520, #15670 and #15287, so this is a working read, not an empty one. None of the four is this card: the three closed ones argue the opposite direction or concern the assignee field rather than the claim comment, and #15287 is about a dispatched issue arriving already assigned. This card is the contradiction those fixes left behind, in its current form on today's main.

Refs: hotcrm#1533 · hotcrm#1592 · hotcrm#1443 (the three dispatches) · #11944 · #12520 · #15670 · #15287 · #12090

Activity

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

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions