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
4.4 KiB
🔍 Review Report — Job 5f1486ee (PR #29 @ 46ea4cc)
- Reviewer:
reviewer-grok-01· 2026-09-14 - 트리: 워크트리
/Users/godopu16/PuKi/laa/canary_projects/multi-agent-mux-wt/pr-29detached46ea4cc - 베이스: main
1134d74(본 체크아웃은 그대로main) - 범위:
git log/git diff1134d74...HEAD(워크트리) - 안전: 워크트리·본 체크아웃 미수정.
worktree_remove.sh미실행(샌드박스 테스트만). 실제.mam미조작.
git diff --check 1134d74...HEAD 클린. 20 커밋.
(1) 워크트리 헬퍼 (항목 4)
prepare .venv: 실제 venv 가 아니라 컨트롤 루트 .venv 의 심링크 (worktree_prepare.sh:111-117). 설계 문서의 ln -s 와 같음. 인터프리터는 컨트롤 루트 경로. 공유 info/exclude 에 /.venv, .pytest_cache/ (:120-129) — 본 체크아웃 exclude 에도 들어가며, 비차단 권고(선반영)와 같음.
서브모듈 opt-in (--submodules). 실패 시 이번 시도만 deinit·modules 삭제·config 복원 (:174-198). 비어 있지 않은 미init 경로는 변경 전 거부 (:163-172).
remove R1–R6: 검사 전부 선행, 실패 시 무변경(exit 3). --stop 후 재검사(R1). 서브모듈 stash 거부. git worktree remove --force 는 submodule trace 가 있고 judge 가 통과한 뒤에만 (:158-163). 미커밋/미push 는 UNPUSHED_REVS (worktree.py:27-30: HEAD + --all − stash − remotes, 태그 포함 R6) 로 거부. 강제 제거가 보존된 커밋을 삼키는 경로는 검사 통과를 전제로 막혀 있다. 잠긴 워크트리는 force 도 거부.
(2) resume (2679ddf)
원래 pane.cwd 와 --workspace 불일치·경로 없음 → exit 2 (resume_session.sh:61-69). 단일 워크스페이스 사용자는 cwd=체크아웃이라 기존과 같다. ROW_CWD 없는 레거시 행은 검사를 건너뜀. 컨트롤 평면 바인딩은 행 값이 이김; 계산 실패는 워크트리면 exit 2, 컨트롤 루트면 경고 (:92-98). 이미 실행 중 경로에도 영속화(주석 A13). 기존 resume 을 깨지 않음.
(3) 리뷰 identity (항목 5)
(loop_id, base_sha, head_sha) 기록·stale (runner.py:831-840). --review-isolation 기본 worktree 이지만 --worktree/--base 없을 때 _worktree_context 는 빈 문자열 (:564-570) — 프롬프트 바이트 동일. 옵션만 주면 경고 후 무시 (:266-267). detached 리뷰 워크트리 add/remove (:775-786). dirty 서브모듈 거부. --remote-review 기본 refuse. 승격 전 재확인 경로 존재. 기본(옵션 없음) 회귀 없음.
(4) #20 격리
pytest_configure 가 ambient MAM_JOBS_DIR/DELEGATE_JOB_LOGS_DIR/AGENT_SESSIONS_YAML 을 수집 전에 pop (conftest.py:139-147). 매 테스트 autouse 가 tmp .mam-test-state 로 보냄 (:161-172). issue15 해석 테스트는 자체 delenv 로 옵트아웃. 세션 가드는 기록된 제어 평면 (mam_state_leak_guard).
직접 확인: 테스트 전후 본 체크아웃 .mam/jobs/*.json 53, delegate_job_logs 547 — 증가 없음. 워크트리 git status 깨끗.
(5) acceptance5
세션·secret 런마다 고유 (test_issue18_liveness_contract.py:1194-1201). skip 은 러너가 started 를 찍고 구독자가 그 job 을 전혀 못 받은 경우만 (:1164-1186). started --heartbeat 계약은 유지. 약화 없음.
(6) A1–A8
test_issue21_acceptance.py: mock herdr / mam_sandbox. 실제 herdr pane 은 stage C. 결정적. 지정 스위트에 loop_b 전체는 없음(작성 측 별도).
(7)–(8) 문서·버전
design doc·SKILL 정합. 비차단 4건(exclude 공유, prune, 서브모듈 거부 중복 출력 등)은 병합 비차단. 락스텝 4.7.0 은 오케스트레이터 예정 — 병합 차단 아님. 브랜치는 4.6.0.
테스트
워크트리:
PYTHONDONTWRITEBYTECODE=1 .venv/bin/python -m pytest -p no:cacheprovider -q \
tests/test_issue21_acceptance.py tests/test_issue21_phase2_loop_a.py \
tests/test_issue21_worktree_prereqs.py tests/test_issue20_state_isolation.py \
tests/test_issue15_registry_isolation.py tests/test_issue6_turn_handshake.py \
tests/test_version_consistency.py
100 passed, 1 skipped in 359.97s. 본 체크아웃 main 1134d74 유지.
종합
항목 4·5·7·#20·#27 이 코드·테스트와 맞다. git worktree remove --force 는 검사 통과 후에만. 설계 재작업 불필요.
[VERDICT: PASS]