wait-discipline: an idle signal is not completion — name the tree-state check #44
Labels
No labels
component:adapters
component:lifecycle
component:qa
component:setup
component:shared
component:worktrees
phase/accepted
phase/backlog
phase/deployed
phase/developing
phase/integrating
phase/planning
phase/qa
phase/requirements
phase/uat
priority:critical
priority:critical
priority:high
priority:high
priority:low
priority:low
priority:medium
priority:medium
type:bug
type:chore
type:docs
type:feature
type:infra
type:tech-debt
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
jbr870/devwork-skills#44
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Rank 8 of 13 in #37 · harness defect + suite-side hardening
Evidence
Across
/developand QA on #230, five agents went idle without sending their completion report:d80ff97, no reporttest-quality(QA Stage A)fixer(QA round 1)3bf3eed, no reportfixer2(QA round 2)sweep-hunter2(QA final)The orchestrator's handling was correct every time — check the tree first, then ask, never assume —
and it named the pattern explicitly: "Fourth agent to idle without reporting — that's a consistent
harness behaviour this session, and pinging has recovered it every time."
Prior sighting: implementer report-delivery friction already recorded as a comment on #11.
Why this is worth an issue rather than a watchlist entry
The recovery is only safe because
wait-discipline.mdalready says silence means ask, not assume.But the cost is real (minutes per occurrence, six occurrences in one feature), and one case —
WU-230-3-3 — would have been recorded as complete by a lead that trusted the idle signal.
Proposed change
report dropped).
wait-discipline.mdrather than a principle, with the explicit rule that an idle signal isnever evidence a unit finished — only committed work plus a verified gate run is.
Acceptance
wait-discipline.mdcarries the named step and the "idle is not completion" rule./meta-amend outcome — suite-side half amended; issue stays OPEN for the upstream report
Commit
8440c90onmain. Acceptance criterion 1 is met; criterion 2 is not, and I have deliberately not done it — see below.Verified at HEAD (
7879495)The gap held.
wait-discipline.md§1 carried the liveness caveat — "an agent that has sent nothing is unobserved, not dead" — which covers silence. It said nothing about the different failure mode this issue records: the idle notification arrives and the final report is dropped. Nothing in the file connected an idle signal to what may be written into a completion record, and the recovery the orchestrator performed correctly six times was a principle to be re-derived each occurrence, not a step.The amendment (AC1)
New §1a — "An idle signal is not a completion signal — check the tree, then ask", placed inside rule 1 so the existing
rules 1, 3, 5consumer references keep their numbering:git logfor its commit marker,git statusfor uncommitted/untracked work, and the result of whatever gate that unit owes. "Committed work plus a verified gate run is the only evidence a unit finished."Closing rule: "Never write a completion record on the strength of an idle notification — not a work-unit outcome, not a domain report, not a Phase Outcome. If the record cannot name the commits, there is nothing to record yet."
Consumers updated to point at it (not restate it):
develop/SKILL.md§3.2 Waiting on the team — "an idle teammate is not a finished work unit", naming 3.4's completion record as what must not be reached;qa-playbook.md§2 — the existing pair of spawn-prompt rules gains one rule for the driver, since §1a is the driver's job, not the spawned role's.Gate
scripts/lint-conventions.sh— clean.Desk-check against the originating scenario (verity #230)
Walking each of the five recorded occurrences against §1a:
d80ff97, no report3bf3eed, no reportThe orchestrator's improvised handling was already correct every time — what the amendment buys is that it no longer has to be re-derived, and that the one dangerous case (row 2) is caught by the ordering rather than by the lead's judgement.
AC2 — the upstream report is NOT filed
"The upstream report is filed and linked here" asks for a defect report against the Claude Code harness (idle notification delivered, final report dropped). I have not filed it: that is an outward-facing report to a third party, not a skill-text amendment, and it is the operator's to make and sign. It is also outside
/meta-amend's lane by definition.This issue therefore stays open for that criterion alone. What a filer needs is all here: six occurrences in one feature across two skills, both
Task-spawned subagents and Agent-Team teammates, idle notification delivered in each case, final report absent, and a direct message to the agent recovering the report every time. Prior sighting recorded as a comment on #11.What validates it next
The next multi-teammate
/dev:developrun that hits an unreported idle. The signal to watch is whether the tree read happens before the ping — the ordering is the whole value, and it is the part most likely to be skipped when the ping feels faster.Upstream half resolved — issue closed
Acceptance criterion 2 is met in adapted form: the defect was already reported upstream, so we confirmed rather than filed.
The canonical upstream report is anthropics/claude-code#84527 (open, active) — identical fingerprint: report fully written, payload-less idle notification delivered, final message dropped. Cluster context: #80727, #86471, #85047; earlier mechanism investigation #78338 (closed).
Our confirmation was posted on #84527 (2026-08-25, operator-pasted): Linux / 2.1.245, 9/9 idle notices delivered with 0/9 report messages (the two-panel evidence from #43, comment 1327), and — additive to their thread — the SendMessage resend also failed to deliver on 2.1.245 where it had recovered 6/6 on an older build, corroborating their reported ping-recovery regression; transcript extraction (
subagents/*.jsonl) recovered all 9 reports.Suite side was already done:
wait-discipline.mdcarries the "idle is not completion" rule (commit8440c90, comment 1286). Both AC halves are now met.