Repository navigation
Description
Blocked-by: #6720
Filed by the devx seat on accepting PR #6740 (#6586's producer-side half), which deliberately omitted this and declared the omission in its own body. Recording it as an issue rather than trusting anyone to remember it, per the linkage-chore discipline.
What #6740 landed, and what it could not
PR #6740 wrote the dev side into .claude/agents/os-dev.md: the structured report is the terminal action; a monitor is bound to its own deadline and never to its subject's lifetime; a monitor that fires anyway must open by naming what it watched and whether that thing is still alive.
It could not write the PM side, because .claude/skills/pm-dispatch/SKILL.md was in the merge queue under PR #6720 at the time and editing it would have collided. Two things belong there and are currently unwritten:
-
The probe-and-revive loop is the standing backstop, not an exception path. SKILL.md's step 6 already describes probing, but it frames it as what you do when something looks wrong. The 2026-08-08 measurement inverts that framing: 7 of 7 dispatches failed to hand back cleanly after opening a correct PR, and three of those carried the termination clause verbatim in their dispatch prompt and failed anyway (3 of 4 clause-carrying runs). A failure mode that hits every dispatch is not an exception. The text should also carry the consequence that makes it cheap: every death so far was fully recoverable from transcript with zero work lost, so the cost is latency, not correctness — which is why the response is a probe and never a redispatch into a possibly-live worktree.
-
A stale wake should be recognisable without re-reading the deliverable. publish/lint 面对字面量空组合子响亮拒收 —— #5322 拍板单位元后的可选编写期信号(PD #12 形状) #5330 emitted six notifications for one card, five of them redundant replays of the same full JSON report. At arrival each was indistinguishable from a real completion — same shape, same payload — so the PM had to re-adjudicate each one to discover it was a repeat. The dev-side half now asks a monitor to self-identify; the PM-side half should say what to do with that, and should note the cost is paid per arrival by the reader.
Why it is pm:blocked rather than queued
.claude/skills/pm-dispatch/SKILL.md is the repo's hottest serialisation surface — seven cards were batched into #6720 for exactly this reason. This must land on top of #6720, not beside it. Unblock when #6720 merges.
Fixes-vs-Part of rule that this card's own filing follows.
Related
- [finding] os-dev agents systematically fail to terminate cleanly after opening their PR — 4/4 today: two silent deaths, two passive-wait stalls on nonexistent wakers #6586 — the parent finding (producer side shipped, this is its other half).
- PR docs(agents): make the os-dev termination contract explicit and honest about its measured failure rate (#6586) #6740 — the producer-side implementation, whose "Deliberately NOT done" section names this omission with a pointer.
- PR docs(pm-dispatch): sweep of 7 measured SKILL corrections — os-regen list drift, the unlock sweep's three duties, verification blindness, the auto-merge signature #6720 — the blocker; the sweep that already rewrote the surrounding sections.
- publish/lint 面对字面量空组合子响亮拒收 —— #5322 拍板单位元后的可选编写期信号(PD #12 形状) #5330 / PR feat(lint): refuse literal empty combinators at authoring time (#5330) #6703 — the six-notification instance, including the monitor that watched a run the agent had itself cancelled.
Filed unassigned. Dedup before filing: probe-and-revive backstop SKILL pm-dispatch termination over open issues — only #6586 itself, which is the parent, not a duplicate.
Activity