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
This commit is contained in:
1 parent
3a30d7da89
commit
121eab71d4
24 files changed
+299
-25
No files matched your search
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"loop_id": "loop-20261013T025803Z-c69408",
|
||||
"base_sha": "42e2a7ea9bd3e2770ed8626d789193428ca3aa8b",
|
||||
"head_sha": "3a30d7da894cdac26b7ec054b4e66fe9fa3dc8db",
|
||||
"tree_sha": "bd43e4642f0109091f5f497b2703dcbaf8e2616b",
|
||||
"review_commit": "3a30d7da894cdac26b7ec054b4e66fe9fa3dc8db",
|
||||
"reviewer": "reviewer-grok-01",
|
||||
"job_id": "db786989",
|
||||
"verdict": "PASS",
|
||||
"transport": "herdr",
|
||||
"evidence": "review-tree",
|
||||
"isolation": "worktree",
|
||||
"verified_at": "2026-10-13T03:32:19Z"
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
# 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]
|
||||
Reference in new issue
Block a user