PR #48 already carries the 4.8.5 lockstep bump. Merge-workspace review: round 1 (@35935f9) claude agy grok NOT PASS (test portability: tomllib on Python 3.9, /proc and /tmp on macOS), codex no verdict (model at capacity, budget spent); fixed in36f0b8dande8d9151. Round 2 (@e8d9151) codex NOT PASS (unrunnable config check passed an unchecked merge, odd pids closed a pane, nan dropped the user's settings); fixed inab93776. Round 3 (@ab93776) 4/4 PASS. Full suite atab93776on macOS / Python 3.9: 1456 passed / 0 failed / 38 skipped. Reports and the round-3 identity sidecars go to .agents/reports/<session>/. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VCgu9Fa9iT7TbJUSzdq4Ff
7.5 KiB
PR #48 (fix/issue-45, Closes #45) Round 2 Delta Review Report
- Reviewer Agent:
agy(session:herdr:reviewer-agy-01) - Job ID:
3f82b402 - Verification Directory:
/var/folders/q_/68sxgw3j073dgjg8wl9s08vw0000gn/T/mam-review/loop-20261005T081844Z-e92124/1 - Base Commit:
c5c7eff6f758c76ac37a138dbc3c301f3f7e10cf(main, v4.8.4) - Head Commit:
e8d9151226d8139c7b5688e83d035a3a747aeb2d(v4.8.5) - Delta Under Inspection:
35935f9..e8d9151(commits36f0b8dande8d9151)
1. Executive Summary
In Round 1 (f3699a96), the review concluded with [VERDICT: NOT PASS] strictly due to cross-platform and environment compatibility issues on macOS under Python 3.9 (missing tomllib in Python < 3.11, /proc/{pid}/environ absence on macOS, and /tmp vs /private/tmp symlink divergence causing test assertion failures).
The Creator has applied targeted, high-quality fixes across commits 36f0b8d and e8d9151. The changes are strictly confined to test suites and documentation, leaving production code (lib.sh, lib_py/herdr_config.py, lib_py/herdr_restore.py, resume_session.sh) stable and untouched.
All 5 issues identified during Round 1 by agy have been completely and cleanly resolved. The test suite passes cleanly both under the host's Python 3.9 environment (152 passed, 30 skipped) and Python 3.11 (51 passed, 0 skipped).
2. Round 1 Findings Resolution Matrix
| # | Round 1 Finding (Job f3699a96) |
File & Line | Round 2 Resolution (Commits 36f0b8d, e8d9151) |
Verification Status |
|---|---|---|---|---|
| 1 | Unconditional import tomllib crashing pytest collection under Python 3.9 |
tests/test_issue45_herdr_config.py:16 |
Wrapped import tomllib in a try...except ImportError block; defined @needs_tomllib decorator skipping tests requiring TOML parsing when tomllib is None (22 passed, 29 skipped under 3.9; 51 passed under 3.11). |
CLOSED (Verified) |
| 2 | Hardcoded import tomllib causing execution failure in test_bootstrap_hands_the_server_a_no_restore_config under Python 3.9 |
tests/test_issue9_server_env.py:154 |
Removed inline import tomllib. Replaced with a dynamic subprocess parser invoking the active python3 binary on PATH. Verifies full JSON parsed output when tomllib is present, or asserts fallback to minimal config and stderr warning when absent. |
CLOSED (Verified) |
| 3 | Linux-specific /proc/{pid}/environ path causing FileNotFoundError on macOS |
tests/test_issue45_restore.py:227 |
Added helper function _process_env(pid) that detects /proc/{pid}/environ existence, falling back gracefully to ps -E -ww -o command= -p <pid> on macOS / BSD environments. |
CLOSED (Verified) |
| 4 | macOS /tmp vs /private/tmp symlink mismatch causing failure in assert cwd == str(rig.root) |
tests/test_issue45_restore.py:263 |
In fixture rig, resolved the temporary directory with .resolve() (root = Path(tempfile.mkdtemp(prefix="m45", dir="/tmp")).resolve()), ensuring canonical /private/tmp alignment with herdr's reported cwd. |
CLOSED (Verified) |
| 5 | macOS /tmp vs /private/tmp symlink mismatch causing StopIteration during pane cwd search |
tests/test_issue45_restore.py:325 |
Resolving root via Path(...).resolve() resolved the cwd mismatch for next(p for p in ... if p.get('cwd') == str(rig.root)). |
CLOSED (Verified) |
3. Delta Code Review Details (35935f9..e8d9151)
3.1. tests/test_issue45_herdr_config.py (Commit 36f0b8d)
- Import Guarding: Gracefully handles missing
tomllibstandard library on Python < 3.11. - Skipping Strategy: 29 unit tests asserting deep AST / dictionary equivalence of merged TOML configs are decorated with
@needs_tomllib. Tests testing paths, file naming, collision avoidance, and permissions continue to execute under Python 3.9. - Verification: Under Python 3.9, 22 tests pass and 29 skip without errors. Under Python 3.11, all 51 tests pass.
3.2. tests/test_issue45_restore.py (Commit e8d9151)
- Canonical Root Resolution:
root = Path(tempfile.mkdtemp(prefix="m45", dir="/tmp")).resolve()resolves macOS symlinks cleanly. - Cross-Platform Process Inspection:
_process_env(pid: int)cleanly splits/proc/{pid}/environby\0when present, or extracts environment variables fromps -E -ww -o command= -p <pid>.
3.3. tests/test_issue9_server_env.py (Commit e8d9151)
- Seamlessly validates dual behavior:
- If
python3onPATHhastomllib, confirms full configuration merge{"ui": {"confirm_close": False}, "session": {"resume_agents_on_restore": False}}. - If
python3lackstomllib, confirms minimal config fallback (resume_agents_on_restore = false), absence of unmerged user keys (confirm_close), and emission of the"no tomllib"warning on stderr.
- If
3.4. Documentation (SKILL.md & VERSIONS.md)
multi-agent-mux-create/SKILL.md:121explicitly documents the runtime requirement:"Building that file needs
tomllib(Python 3.11+) in thepython3on PATH; with an olderpython3(macOS ships 3.9) restore is still off, but the file holds only that key, so the MAM server runs without your other herdr settings and the bootstrap prints a warning saying so."VERSIONS.mdunderv4.8.5changelog reflects both the Python 3.11+ requirement and the test suite portability improvements across macOS and Linux.
4. Verification & Test Execution Results
All verification was conducted strictly inside the designated review worktree (/var/folders/q_/68sxgw3j073dgjg8wl9s08vw0000gn/T/mam-review/loop-20261005T081844Z-e92124/1).
4.1. Primary Test Suite (Python 3.9 Host Environment)
AGENT_PYTHON_BIN=/Users/godopu16/PuKi/laa/canary_projects/multi-agent-mux-wt/pr-48/.venv/bin/python \
PYTHONDONTWRITEBYTECODE=1 \
/Users/godopu16/PuKi/laa/canary_projects/multi-agent-mux-wt/pr-48/.venv/bin/python \
-m pytest -p no:cacheprovider -q --basetemp=/tmp/pytest-pr48-r2 \
tests/test_issue45_herdr_config.py \
tests/test_issue45_restore.py \
tests/test_issue9_server_env.py \
tests/test_issue23_24_startup_path.py \
tests/test_issue42_skill_blocks.py \
tests/test_version_consistency.py
Result:
- Exit Code:
0 - Output:
152 passed, 30 skipped in 211.50s (0:03:31)
4.2. Python 3.11 Compatibility Sanity Check
PYTHONPATH=.agents/skills:/Users/godopu16/PuKi/laa/canary_projects/multi-agent-mux-wt/pr-48/.venv/lib/python3.9/site-packages \
/opt/homebrew/bin/python3.11 \
-m pytest -p no:cacheprovider -q --basetemp=/tmp/pytest-pr48-py311 \
tests/test_issue45_herdr_config.py
Result:
- Exit Code:
0 - Output:
51 passed in 0.40s
5. Non-Blocking Architectural Note
- Python < 3.11 Config Merging: In Round 1, grok suggested bundling a
tomlibackport for environments with Python < 3.11. The project decision to rely on standard librarytomllib(Python 3.11+) and fall back to minimal config with an explicit warning is well-founded:- Multi-Agent-Mux relies on zero extra external runtime dependencies for core shell shims.
- On hosts running macOS default Python 3.9, the default user
herdrconfiguration is minimal, and restoring without extra settings safely satisfies Issue #45. - The behavior is fully documented in
create/SKILL.mdandVERSIONS.md. Therefore, this design choice is accepted as complete and non-blocking.
6. Final Verdict
All Round 1 blockers have been resolved with precision. No regressions or unintended mutations were introduced.
[VERDICT: PASS]