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
106 lines
7.5 KiB
Markdown
106 lines
7.5 KiB
Markdown
# 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` (commits `36f0b8d` and `e8d9151`)
|
|
|
|
---
|
|
|
|
## 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 `tomllib` standard 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}/environ` by `\0` when present, or extracts environment variables from `ps -E -ww -o command= -p <pid>`.
|
|
|
|
### 3.3. `tests/test_issue9_server_env.py` (Commit `e8d9151`)
|
|
- Seamlessly validates dual behavior:
|
|
- If `python3` on `PATH` has `tomllib`, confirms full configuration merge `{"ui": {"confirm_close": False}, "session": {"resume_agents_on_restore": False}}`.
|
|
- If `python3` lacks `tomllib`, 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.
|
|
|
|
### 3.4. Documentation (`SKILL.md` & `VERSIONS.md`)
|
|
- `multi-agent-mux-create/SKILL.md:121` explicitly documents the runtime requirement:
|
|
> *"Building that file needs `tomllib` (Python 3.11+) in the `python3` on PATH; with an older `python3` (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.md` under `v4.8.5` changelog 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)
|
|
```bash
|
|
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
|
|
```bash
|
|
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 `tomli` backport for environments with Python < 3.11. The project decision to rely on standard library `tomllib` (Python 3.11+) and fall back to minimal config with an explicit warning is well-founded:
|
|
1. Multi-Agent-Mux relies on zero extra external runtime dependencies for core shell shims.
|
|
2. On hosts running macOS default Python 3.9, the default user `herdr` configuration is minimal, and restoring without extra settings safely satisfies Issue #45.
|
|
3. The behavior is fully documented in `create/SKILL.md` and `VERSIONS.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]
|