Files
multi-agent-mux/.agents/reports/planner-reviewer-codex-01/report-f6b21a0d.md
T
GodopuandClaude Fable 5.1 cf5d1142e9 release(v4.7.0): bump framework and eight skills to 4.7.0 in lockstep; archive PR #29 reviews
Issue #21 items 4, 5, 7 (worktree helpers, review identity, acceptance
A1-A8), #20 test isolation, #27 .gitignore managed block, #28 host
portability. VERSIONS.md carries the entry; the eight review reports of
PR #29 (two rounds plus the codex re-review) are archived under
.agents/reports/<session>/.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VCgu9Fa9iT7TbJUSzdq4Ff
2026-09-20 21:43:25 +09:00

40 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# PR #29 delta review — 2nd pass
Reviewer: planner-reviewer-codex-01. Job: f6b21a0d.
Reviewed the detached worktree `multi-agent-mux-wt/pr-29` at `80a5614`, comparing `46ea4cc..HEAD` (commits `7a94ba2`, `90a289d`, `08db1da`, and `80a5614`). The three findings from the first review are closed by the delta. I found no additional merge-blocking defect in the reviewed changes.
## R1/R2: hidden untracked submodule files
The removal guard now uses `git status --porcelain --untracked-files=all --ignore-submodules=none` for the worktree, and `lib_py.worktree.submodule_findings()` uses `git status --porcelain --untracked-files=all` inside every checked submodule. The identity runner's `_dirty_submodules()` uses the same explicit flag. This defeats `status.showUntrackedFiles=no` and remains independent of `submodule.*.ignore` and `diff.ignoreSubmodules`.
The source-tree snapshot still uses a temporary index and `git add -A`; that operation already sees untracked files independent of display settings, so no extra snapshot change is needed. The new regression cases cover hidden files before removal, files written while stopping, hidden files that appear during a review, and hidden files present before a review. The prior destructive probes were repeated against disposable fixtures: with the delta, removal returned exit 3 and preserved the untracked file; review identity refused before dispatch and produced no sidecar. R1 and R2 are therefore resolved.
## R3: worktree virtual environments
`worktree_prepare.sh` now refuses an existing `.venv` symlink, creates an independent venv with the control root's `.venv/bin/python`, installs the delegate-job requirements plus root `requirements.txt`/`requirements-dev.txt` when present, and reports `VENV=created`. A usable existing environment is idempotently retained as `VENV=kept`. When the control interpreter is absent it warns and reports `VENV=skipped`; it does not invent a link. If dependency installation fails, the half-created venv is removed and the worktree remains for correction and retry. The tests cover creation, the kept path, link refusal, missing interpreter, and failed-install cleanup.
The design document and create/stop skill documentation now describe the independent environment, network requirement, link refusal, and cleanup semantics. The managed `.gitignore` block and shared Git `info/exclude` still ignore `.venv` and `.pytest_cache`; the new environment is not tracked. I found the implementation and documentation consistent.
## Portability delta (#28)
The `bash -c` change in `test_workspace_scope.py` is appropriate because the test invokes the Bash `source` builtin. Help-output normalization collapses layout-only whitespace and the Python 3.9/3.14 option-group spelling while still comparing the actual normalized content. The deployment freshness markers skip only when the relevant `nats-docker` assets are absent. This checkout does not contain the optional `nats-docker/docker-compose.yaml`, so those asset-dependent cases skip here; `PRIVATE_SERVER.md` is present and its checks run. The test suite must still run those checks when a checkout has the assets. The process scanners now use POSIX `ps -eo pid=,ppid=,args=`, which is available on macOS and Linux and preserves the command text needed by the scanners. `MAM_ENV_FILE` is pinned to a deliberately absent per-test path, while tests that need broker configuration can override it.
## Wall-clock test change
The close-delay allowance changed from `timeout_s + 8` to `timeout_s + 15`. This is a test-only adjustment for observed suite load; it still rejects the original roughly 2× timeout failure mode (40 seconds against a 35-second limit in the test's 20-second scenario). The previously failing scenario now passes in an isolated rerun, and the remote acceptance test also passes. The wider allowance is a reasonable host-load calibration, though future runs should retain the measured close-delay evidence rather than relying on the assertion alone.
## Verification
All tests were run in the requested detached worktree with its `.venv/bin/python`, `PYTHONDONTWRITEBYTECODE=1`, and `pytest -p no:cacheprovider`.
- Delta-focused suites (`test_issue21_phase2_loop_a.py`, `test_issue21_loop_b.py`, `test_issue21_acceptance.py`, `test_issue21_worktree_prereqs.py`, `test_issue5_phase1_delegation.py`, `test_workspace_scope.py`, `test_deploy_freshness.py`, `test_version_consistency.py`): **209 passed** in 323.16 s. Asset-dependent freshness tests skip because this checkout has no `nats-docker` assets; this is the intended skip condition.
- Isolated wall-clock close and remote acceptance rerun: **2 passed** in 49.79 s.
- `bash -n` on all eight changed shell files: passed.
- `git diff --check 1134d74...HEAD`: passed.
- Direct snapshots before/after testing found no new entries in either checkout's real `.mam/jobs` or `.mam/delegate_job_logs`.
The known release prerequisite remains outside this delta: the orchestrator must perform the 4.7.0 version lockstep bump and release entry before merge. Main stayed at `1134d74`; the review worktree stayed at `80a5614`; no source, checkout, production registry, monitor, or session state was modified.
[VERDICT: PASS]