You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Source: P12 adversarial evaluation, finding F1 · HIGH — docs.local/plan/stability-v2/phase-12/evaluation.md:60-83
Evaluated against the deployed build: brew list --versions cmuxlayer → 0.4.46, daemon from /opt/homebrew/Cellar/cmuxlayer/0.4.46/libexec/dist/, git log HEAD = 4a88b43.
Related:#408 (registry marks live idle agents "done") is the upstream cause. This issue tracks the composition consequence: that one stale field silently voids four separate ratified contracts at once, on the default path.
Evidence (verbatim from the evaluation, evaluation.md:60-83)
F1 · HIGH · One stale registry state silently disables four contracts
TERMINAL_AGENT_STATES = new Set(["done","error"]) (server.ts:497) and resolveCurrentCallerAgent filters those records out (server.ts:3541-3556). The registry marks live
agents done within minutes (#408, open, not on the residual list). Consequences, all observed in onelist_agents response for my own live seat:
state = {value:"working", source:"screen"}butdetail.state = "done" (registry).
U6 violated: the child I spawned got parent_agent_id: null, spawn_depth: 0 — because I was
filtered out as a caller. My own record's parent is the malformed "cmuxlayerClaude", not an agent id.
P11 Contract C violated: closure:"artifact_missing" on a working agent, because both call sites
pass the registry agent.state (agent-engine.ts:1723,1847) while U7/P4 established truth is derived
live. PR feat(p11): engine-issued coordination paths + closure state (U10) #454's own table reads artifact_missing as "route a reviewer NOW", and promised it
"actionable on its own, no cross-referencing required" at default detail — yet the disqualifying
caveat lives in health (detail:full only).
Fix direction: resolve callers and closure from the live-derived state (P4 already computes it),
not the registry record. One change closes four contract holes.
The four consequences, restated
U6 identity triple non-null — VIOLATED on the default path. Spawned children get parent_agent_id: null, spawn_depth: 0.
P11 Contract C closure invariant — VIOLATED.closure:"artifact_missing" on a working agent, at default detail, with the disqualifying caveat only visible at healthdetail:"full".
Resolve callers and closure from the live-derived state (P4/U7 already computes it), not the registry record. Per the evaluation's verdict (evaluation.md:196-200): "Fix F1 first: it is one change to the state source, and it closes U6, the U8 false-failure class, P11's closure invariant, and the #378 guard together."
Source: P12 adversarial evaluation, finding F1 · HIGH —
docs.local/plan/stability-v2/phase-12/evaluation.md:60-83Evaluated against the deployed build:
brew list --versions cmuxlayer→ 0.4.46, daemon from/opt/homebrew/Cellar/cmuxlayer/0.4.46/libexec/dist/,git logHEAD =4a88b43.Related: #408 (registry marks live idle agents "done") is the upstream cause. This issue tracks the composition consequence: that one stale field silently voids four separate ratified contracts at once, on the default path.
Evidence (verbatim from the evaluation, evaluation.md:60-83)
The four consequences, restated
parent_agent_id: null,spawn_depth: 0.send_toreturns a terminaldelivery:"failed"against an idle-ready agent at a live prompt — ledger row docs: proper README — 221 tests, 1,423x speedup, 10 MCP tools #4, still live on 0.4.46.closure:"artifact_missing"on a working agent, at default detail, with the disqualifying caveat only visible athealthdetail:"full".callerIsWorkercan never be true for a stale-donecaller, so the fix for the 3×-recurring ledger fix: model extraction for narrow panes and no-cost status lines #13/fix: recover read_screen parser fallbacks #15/fix: infer context for truncated claude panes #16 "reviewer in the lead column" class no-ops.Fix direction
Resolve callers and closure from the live-derived state (P4/U7 already computes it), not the registry record. Per the evaluation's verdict (
evaluation.md:196-200): "Fix F1 first: it is one change to the state source, and it closes U6, the U8 false-failure class, P11's closure invariant, and the #378 guard together."Evaluation:
docs.local/plan/stability-v2/phase-12/evaluation.md— cmuxlayer-issue-filer (worker) · claude-code/claude-opus-5