Files
multi-agent-mux/.agents/reports/reviewer-grok-01/report-db786989.md
T
GodopuandClaude Opus 5.5 121eab71d4 release(v4.9.3): u1e no longer writes the checkout's .mam/shim/herdr - archive the review reports and bump the lockstep version
Review loop (--review-only, --all-reviewer): round 1 (@3a30d7d) 4/4 PASS;
each reviewer reproduced W1 failing on the pre-fix tree. Seven #50/#55 and
leak modules (112 tests) from a clean worktree left no .mam in the
checkout.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VCgu9Fa9iT7TbJUSzdq4Ff
2026-10-13 12:33:02 +09:00

3.9 KiB
Raw Blame History

Review db786989 — u1e workspace root

Head 3a30d7da894cdac26b7ec054b4e66fe9fa3dc8db (tree bd43e4642f0109091f5f497b2703dcbaf8e2616b) is the one commit 3a30d7d fix(tests): u1e gives the wrapper its own WORKSPACE_ROOT - it wrote the checkout's .mam/shim/herdr on base 42e2a7ea9bd3e2770ed8626d789193428ca3aa8b. Two test files, +5/−1. git diff --check is clean. Snapshot porcelain empty, and the snapshot has no .mam directory. Control-plane main is still 42e2a7ea9bd3e2770ed8626d789193428ca3aa8b, porcelain empty.

The cause and the pin

The wrapper sources lib.sh at startup (.agents/skills/multi-agent-mux-delegate-job/multi-agent-mux-delegate-job:53). lib.sh:26 sets WORKSPACE_ROOT to the checkout that contains the sourced file when the variable is unset, and the end of the file calls _init_herdr_isolation (lib.sh:3168). That function creates $WORKSPACE_ROOT/.mam/shim and writes herdr there (lib.sh:149-156). pytest_configure drops WORKSPACE_ROOT only when its real path is some other directory (tests/conftest.py:153-155), so an unset value stays unset and a value that names the checkout is kept.

test_u1e_a_dry_run_record_is_not_an_open_job now puts WORKSPACE_ROOT on the wrapper environment, set to that test's tmp_path (tests/test_issue50_dispatch.py:167-173). The shim is written under the test directory. The dry-run assertions in the same function are unchanged.

W1 runs this node

tests/test_issue17_workspace_root_isolation.py:43 adds the node to NODES. W1 copies the checkout, sets WORKSPACE_ROOT to that copy, runs the nodes, and fails if the copy grows a .mam directory (:57-72). On the fixed tree the node's own pin replaces the copy path, so the copy stays empty.

On an archive of base 42e2a7e (outside the snapshot, deleted afterward) the old function does not mention WORKSPACE_ROOT. With the control-plane interpreter selected via AGENT_PYTHON_BIN (the same variable W1 exports at :62):

  • WORKSPACE_ROOT unset: the node passed in 1.05s and the archive gained .mam/shim/herdr.
  • WORKSPACE_ROOT set to the archive, which is what W1 would pass in: the node passed in 0.97s and the archive again had .mam/shim/herdr.

That directory is what W1's assertion at :70-72 rejects. A passing node is still a W1 failure on the pre-fix tree.

On the snapshot, the fixed node passed in 1.05s. The shim was test_u1e_a_dry_run_record_is_n0/.mam/shim/herdr under a basetemp outside the snapshot. The snapshot had no .mam. W1 itself passed in 30.80s, which includes the inner count of at least len(NODES) and the empty-copy assertion. The snapshot still had no .mam after that run.

The wrapper's interpreter check runs after source lib.sh (multi-agent-mux-delegate-job:69). A first run that left python3 without paho-mqtt exited 1 at that check on both trees, and the shim had already been written: on the archive in the unset and inherited-copy cases, and under the fixed test's basetemp. The snapshot stayed clean in that run too.

Other wrapper callers

The same shape — a checkout wrapper or lib.sh, with the inherited root left unset — is already closed on the other callers checked here. Their child environments pin WORKSPACE_ROOT to the test directory (tests/test_issue17_item4_decisions.py:229-231 and :693-694, tests/test_issue26_ints.py:129, tests/test_issue36_prompt_transport.py:61, tests/test_issue30_stall_watch_stop.py:32, tests/test_issue6_fail_closed.py:38 and :198, tests/test_issue50_dispatch_herdr.py:78). The modules W1 already listed opt into own_workspace_root or that pin. tests/test_issue30_stall_watch.py builds its wrapper environment from mam_sandbox / box, which set WORKSPACE_ROOT before the copy (tests/conftest.py:263). No second unpinned checkout-wrapper call turned up.

No herdr server was started. install.sh was not run. User herdr config mtime stayed 1791858154.

[VERDICT: PASS]