Files
multi-agent-mux/.agents
GodopuandClaude Opus 5 02a89490df docs(issue-5): phase 2a implementation plan (lib_py/loop core and shadow watcher)
An executable plan for P2A-01..04, grounded in live measurement rather than
restating the phase-0 contracts.

Four measurements shaped the design:

  * The job record has no attempt_id, agent_session_uuid or
    pane_process_generation, so the four-fold attribution contract has nowhere
    to live in it. Phase 1 froze the record schema and P2A-03 forbids registry
    writes outright, so attribution goes in a shadow-owned store and the record
    schema question is deferred to 2b.
  * Every status write is already inside python: the shell side only reads. A
    single boundary can therefore cover all writers.
  * update_job_status merges fields unconditionally, and pick_pending is a
    second path around it. pick_pending is not wrong -- it filters on pending
    under the lock, so it is already a correct swap -- it is a duplicate. That
    is the O-1 shape from phase 1, where the copy that drifts is the one that
    breaks. So P2A-01 generalises the swap that exists rather than inventing one.
  * herdr's wait timeout is milliseconds. Phase 0 recorded it correctly; the
    plan names the parameter timeout_ms so the unit cannot be misread.

Two invariants are made structural rather than promised. The shadow runner is
never given a reference to the engine, so it cannot write; and the gate hashes
the whole registry directory before and after a full run, which is a stronger
claim than "status was not changed". Lock discipline follows a pattern already
in the tree: pick_pending finishes its record write under the lock and mirrors
to the audit log after releasing it.

Carries the three phase-1 handoffs forward with explicit gates: no daemon spawn
in 2a so preexec_fn stays unreachable, no frozen-helper calls so the interpreter
resolution gap stays dormant, and a coverage assertion for the connection
fingerprint's field list.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UrDNJkHmm18uu7n7JwV5Qd
2026-09-06 18:45:15 +09:00
..