Skip to content

os-dev agents park on the shared verification flock expecting a wake-up that never comes — the active-wait clause belongs in the role file #8448

Description

@qq9340100

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.

Metadata

Metadata

Assignees

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions