Filed by the domain:spec PM seat (session session_012MNV7ZSCjNfA38eDCjsXQL), 2026-08-13, from a live 7-agent subagent batch. Unassigned; finding — for the skills-lane grading round (the fix lands in .claude/agents/os-dev.md, the skills root, so the eventual PR is human-merge class).
The measured pattern (3/3 of the first three to reach the lock)
Three parallel os-dev subagents in one batch each reached the repo's shared verification flock (multiple agents queue on it; one reported "seven agents are queued"), and each ended its turn with a completion message of the shape:
"the build is still running under the lock — its completion will re-invoke me"
"both watchers are armed — the queued run will notify on completion"
All three were wrong the same way: a subagent that stops with no live background children of its own gets no wake-up — a build owned by another agent, or a watcher that already detached, does not re-invoke it. The result is a silent stall that surfaces to the PM as a completion notification carrying mid-task state — the classic 停摆信号, except now produced by design contention on every multi-agent batch, not by individual agent failure.
Cost: one PM SendMessage round per stalled agent (three this batch), plus latency. The PM-side remedy (immediate SendMessage with a foreground-posture line, no silence threshold) works and is already skill text; the point of this card is the producer side.
The mechanizable fix (proposal, not ruled)
.claude/agents/os-dev.md gains an unconditional clause (unconditional clauses live in the role file, not in per-dispatch prompts):
- When queued on a shared lock (verification flock, build lock, pnpm store): never end the turn to "wait" — wait actively inside the turn with bounded re-checks + sleep; use queue time for lock-free work (tests authoring, changeset, PR body, package-local typecheck).
- End-of-turn self-check: "does my last message describe a wake-up I expect from a process I do not own? If yes, I am about to stall — keep the turn alive instead."
- Lock stuck >20 min with no progress ⇒ report
blocked in the JSON with the holder named, never silence.
Secondary observation for the same grading round: the flock serializes the heavy verification phase of parallel batches, so batch wall-clock degrades toward serial for the build/test tail. Worth one line in the PM skill's resource notes (batch sizing should price the shared-lock tail), but the ratchet forbids casual growth there — grade whether it earns a line.
Refs
Batch: #8350 / #8309 / #8336 (the three stalls), #8284 / #8326 / #8211 / #7751 (same batch, preemptively instructed). PM-side remedy applied per the dispatch-runbook stall protocol.
Filed by the
domain:specPM seat (sessionsession_012MNV7ZSCjNfA38eDCjsXQL), 2026-08-13, from a live 7-agent subagent batch. Unassigned;finding— for the skills-lane grading round (the fix lands in.claude/agents/os-dev.md, the skills root, so the eventual PR is human-merge class).The measured pattern (3/3 of the first three to reach the lock)
Three parallel os-dev subagents in one batch each reached the repo's shared verification flock (multiple agents queue on it; one reported "seven agents are queued"), and each ended its turn with a completion message of the shape:
All three were wrong the same way: a subagent that stops with no live background children of its own gets no wake-up — a build owned by another agent, or a watcher that already detached, does not re-invoke it. The result is a silent stall that surfaces to the PM as a completion notification carrying mid-task state — the classic 停摆信号, except now produced by design contention on every multi-agent batch, not by individual agent failure.
Cost: one PM SendMessage round per stalled agent (three this batch), plus latency. The PM-side remedy (immediate SendMessage with a foreground-posture line, no silence threshold) works and is already skill text; the point of this card is the producer side.
The mechanizable fix (proposal, not ruled)
.claude/agents/os-dev.mdgains an unconditional clause (unconditional clauses live in the role file, not in per-dispatch prompts):blockedin the JSON with the holder named, never silence.Secondary observation for the same grading round: the flock serializes the heavy verification phase of parallel batches, so batch wall-clock degrades toward serial for the build/test tail. Worth one line in the PM skill's resource notes (batch sizing should price the shared-lock tail), but the ratchet forbids casual growth there — grade whether it earns a line.
Refs
Batch: #8350 / #8309 / #8336 (the three stalls), #8284 / #8326 / #8211 / #7751 (same batch, preemptively instructed). PM-side remedy applied per the dispatch-runbook stall protocol.