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
7.9 KiB
7.9 KiB
PR #29 Delta Review Report (Round 2)
- Reviewer: Antigravity (
herdr:reviewer-agy-01) - Job ID:
d9275506 - Target PR: PR #29 (
feat/issue-21-items-4-5-7@08db1da, previous review target46ea4cc, basemain1134d74/ v4.6.0) - Review Target Worktree:
/Users/godopu16/PuKi/laa/canary_projects/multi-agent-mux-wt/pr-29(detached @08db1da) - Base Checkout:
/Users/godopu16/PuKi/laa/canary_projects/multi-agent-mux(main@1134d74, unmodified) - Status: Review Complete
1. Executive Summary
This independent second-round review examines the 3 delta commits (46ea4cc..08db1da) in PR #29 responding to review feedback (specifically Codex R1, R2, R3, host portability fixes for Issue #28, and a wall-clock test timing adjustment):
7a94ba2: Portable test adaptations for Linux/Python 3.14 (#28) and POSIXps -eo pid=,ppid=,args=in process scanners.90a289d: Widened wall-clock close margin (timeout_s + 15) intest_issue14_delivery_ack.pyto eliminate multi-core load timing jitter.08db1da: Codex R1–R3 resolutions:- Added
--untracked-files=allacross all three git status checks (lib_py/worktree.py,worktree_remove.sh, andrunner.py::_dirty_submodules), preventingstatus.showUntrackedFiles=nofrom bypassing safety checks. - Replaced
.venvsymlinking inworktree_prepare.shwith dedicated virtualenv creation ($WT/.venv) via the control root interpreter ($MAIN/.venv/bin/python), including automaticrequirements*.txtinstallation, link refusal (exit 1), and interpreter fallback (VENV=skipped). - Added comprehensive regressions (
test_w1,test_w1b,test_w6e[hidden],test_w6e2,test_l17[untracked-hidden,during-hidden]).
- Added
All 5 checklist verification items were evaluated in worktree pr-29. The delta commits resolve all feedback points without weakening existing contracts or regressing Round 1 functionality.
2. Checklist Item-by-Item Verification
(1) Untracked-Safe Status Checks (Codex R1 & R2)
- Three Inspection Points:
--untracked-files=allhas been added to all 3 critical cleanliness evaluation sites:lib_py/worktree.pyline 167:checks = (("dirty", "git status --porcelain --untracked-files=all"), ...).agents/skills/multi-agent-mux-stop/scripts/worktree_remove.shline 91:if ! dirty="$(git -C "$WT" status --porcelain --untracked-files=all --ignore-submodules=none 2>&1)"; then.agents/skills/lib_py/loop/runner.pyline 718 (_dirty_submodules):r = _git(wt, "submodule", "foreach", "--recursive", "--quiet", "git status --porcelain --untracked-files=all")
- Prevention of Data Loss & Stale Approvals: Standard
git status --porcelainrespectsstatus.showUntrackedFiles=no. Without--untracked-files=all, untracked files in submodules or worktrees with that setting configured were hidden from status checks, allowingworktree_remove.shto execute a destructive forced removal over uncommitted work, and allowing the review loop to treat a dirty tree as clean. The explicit flag forces git to report all untracked files. - Source Tree Snapshot Guard: In
runner.py, the source tree review snapshot is captured usinggit -C <wt> add -A. By git specification,git add -Acaptures all untracked, modified, and deleted files unconditionally, completely ignoringstatus.showUntrackedFiles. Hence, no additional flag is required for snapshot creation. - Regression Tests:
test_w6e[hidden=True]andtest_w6e2_untracked_submodule_file_hidden_by_config_blocks_the_forced_removalintests/test_issue21_phase2_loop_a.py.test_l17[untracked-hidden, during-hidden]intests/test_issue21_loop_b.py. All pass and confirm that config-hidden untracked files fail closed.
(2) Dedicated Worktree Virtualenv (Codex R3)
- Idempotency:
worktree_prepare.shchecksif [ -e "$WT/.venv" ]; then VENV_STATE="kept". Existing virtual environments are preserved without re-creation. - Symlink Refusal:
if [ -L "$WT/.venv" ]; then echo "ERROR: ... is a symbolic link..." >&2; exit 1; fi. Rejects aliased symlinks to guarantee environment isolation. - Interpreter Absent: If
$MAIN/.venv/bin/pythonis unavailable, it outputsWARNING: no interpreter at '$MAIN/.venv/bin/python'; no venv createdand proceeds withVENV_STATE="skipped". - Installation Failure Handling: If
pip install -q -r "$req"fails on requirements files, it exits with code 1 and outputsERROR: ... the worktree was kept - remove it with worktree_remove.sh --path '$WT'. The worktree is preserved for debugging rather than left broken or deleted unexpectedly. - Documentation & Ignore Alignment:
docs/design/worktree-creator-model.mdand SKILL guides (create,stop) have been updated to describe dedicated venvs and interpreter requirements.- The
.gitignoremanaged block (/.venv) andinfo/exclude(/.venv,.pytest_cache/) correctly ignore$WT/.venvas a directory.
(3) Host Portability Fixes (Issue #28)
_normalize_help: Intests/test_issue5_phase1_delegation.py, replacesoptional arguments:withoptions:and normalizes whitespace runs. This accommodates Python 3.10+ argparse formatting without weakening validation of flags, positional arguments, or descriptions.test_deploy_freshness.pySkips: Usesneeds_docker_assets/needs_private_server_docdecorators that skip only when externalnats-dockeror private server documentation assets are missing. On environments with assets present (including this macOS verification host), all 97 tests ran and passed.conftest.pyMAM_ENV_FILEIsolation: AnchorsMAM_ENV_FILEto a non-existent sandbox path (tmp_path / ".mam.env.absent") by default, preventing ambient.mam.envvalues from leaking into test runs. Tests requiring specific env files explicitly override it.- Process Scanning (
ps -eo pid=,ppid=,args=): POSIX-compliant process listing inlib_py/agents/base.pyandlib_py/delegation/heartbeat.pyreplaces BSD-only-wwflags, ensuring identical, untruncated column parsing across macOS and Linux.
(4) Wall-Clock Close Margin (90a289d)
- Test Integrity: In
tests/test_issue14_delivery_ack.py,test_wrapper_idle_grace_never_outlives_the_wall_clockverifies that heartbeats extend the idle window up to the wall-clock deadline (timeout_s = 20), without allowing idle grace to outlive the deadline. - Margin Adjustment: The assertion threshold was updated from
timeout_s + 8totimeout_s + 15(35s). The original bug was counting sleeps, which ran for ~2x TIMEOUT (40s). A 35s ceiling easily catches a 40s overrun while preventing ~50ms timing jitter failures caused by heavy CPU load during full-suite execution with mock latency. Tested directly: passed in 31.35s.
(5) Merge Readiness
git diff 1134d74...HEAD --checkpasses with 0 whitespace/formatting errors.- Version bump to 4.7.0 (MINOR) and
VERSIONS.mdupdate are confirmed as scheduled for the orchestrator release commit. - Zero functional, stability, or security regressions.
3. Test Execution Summary
Executed in worktree /Users/godopu16/PuKi/laa/canary_projects/multi-agent-mux-wt/pr-29:
| Test Suite | Result | Duration |
|---|---|---|
tests/test_version_consistency.py |
3 passed | 0.22s |
tests/test_workspace_scope.py |
2 passed | 0.14s |
tests/test_issue5_phase1_delegation.py + tests/test_deploy_freshness.py |
97 passed | 32.48s |
tests/test_issue21_phase2_loop_a.py |
28 passed | 125.85s |
tests/test_issue21_loop_b.py |
34 passed | 11.01s |
tests/test_issue14_delivery_ack.py (wall-clock test) |
1 passed | 31.35s |
4. Conclusion
The 3 delta commits cleanly resolve Codex review items R1–R3, address host portability under Python 3.14/Linux (Issue #28), and stabilize the wall-clock test under multi-core load. All contracts remain fully preserved.
[VERDICT: PASS]