Merge-workspace review loop (--all-reviewer): round 1 (@d198dd5) claude agy PASS, grok codex NOT PASS (the same inherited WORKSPACE_ROOT in eleven more modules; test_orc_onboard's import-time env); fixed in8b47cc7. Round 2 claude grok NOT PASS (test_o2_race_free_lock, test_o1_rebuttal missed), agy codex PASS; fixed inac48cb7. Round 3 (@ac48cb7) 4/4 PASS. Full suite atac48cb7on macOS / Python 3.9 / herdr 0.9.3 with WORKSPACE_ROOT set to an empty sentinel: 1751 passed / 0 failed / 38 skipped; the sentinel stayed empty and the main checkout's shim was not touched. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VCgu9Fa9iT7TbJUSzdq4Ff
3.9 KiB
리뷰 리포트 — Job 1364df46 (Issue #17 후속 3회차: 상속 WORKSPACE_ROOT, 6b00b6e..ac48cb7)
- 리뷰어: planner-reviewer-claude-01 (claude)
- 리뷰 identity: loop-20261008T133858Z-9e7f5b / base
6b00b6e/ headac48cb7/ treeb043034— 검증 경로(…/3)에서git rev-parse HEAD 'HEAD^{tree}'일치, 미커밋 변경 없음 - 범위: 2회차 head
8b47cc7위에 커밋 1개(ac48cb7, +9줄): test_o2_race_free_lock.py 의 o2_12 에 테스트 단위own_workspace_root마크, test_o1_rebuttal.py 에 모듈 마크, W1 NODES 에 두 노드 추가. 제품 코드·버전·VERSIONS 변경 없음.
결론 요약
2회차의 차단 지적(test_o2_race_free_lock.py:196-203 이 run_loop.sh → lib.sh 로 자기 체크아웃의 .mam/shim/herdr 를 씀)이 닫혔고, grok 이 지적한 test_o1_rebuttal 도 같은 방식으로 덮였다. 2회차에서 깨끗했던 나머지 후보들은 그대로 깨끗하다. 차단 결함 없음.
1. 지적 종결
| 지적 | 수정 | 확인 |
|---|---|---|
claude(2회차): o2_12 가 dict(os.environ) 로 run_loop.sh 실행, 마크·sandbox 없음 → 체크아웃 shim 재작성 |
test_o2_race_free_lock.py:196-198 — o2_12 에만 @pytest.mark.usefixtures("own_workspace_root")(모듈 마크를 피한 이유: o2_7 이 tmp_path 항목 수를 센다 — 타당); W1 NODES 에 o2_12 추가(:41) |
HEAD 사본에서 WORKSPACE_ROOT=<사본> 으로 o2_12 단독·파일 전체(22 passed) 모두 .mam 미생성; WORKSPACE_ROOT 미설정으로도 미생성(2회차에는 두 경우 모두 생성) |
| grok: test_o1_rebuttal 도 run_loop.sh 실행 | 모듈 마크(:10-12), W1 NODES 에 v3 노드 추가(:42) | HEAD 사본 파일 전체(10 passed) 미생성. 새 W1 노드가 의미 있는지: base 트리에서 그 노드 1개를 WORKSPACE_ROOT=<base 사본> 으로 실행 → .mam/shim/herdr 생성 — 수정 전 결함을 실제로 고정한다 |
2. 놓친 모듈이 더 없는가 (2회차 방법 반복)
HEAD 트리 사본에서 WORKSPACE_ROOT=<사본> 으로 내 후보 13개 파일(test_o2, test_o1, test_issue30_stall_watch_stop, test_issue36_prompt_transport, test_issue19, test_a4, test_issue21_acceptance, test_issue20, test_issue34, test_issue23_24, test_b4, test_issue15, test_issue10_13; lib.sh 를 source 하는 코드를 실행하면서 sandbox 인자가 없는 테스트 50개)을 파일별로 돌리고 매번 .mam 을 확인: 13개 모두 clean. 2회차에 유일하게 썼던 o2 가 이제 깨끗하다.
3. 할 일 4 — 실행 (검증 경로, 워크트리 .venv Python 3.9.6, env -i 로 HERDR_·MAM_·MQTT_* 제거)
| 실행 | 결과 |
|---|---|
| (a) WORKSPACE_ROOT 없이: 수정 16개 파일(W1·W2 포함) + test_issue33_budget, test_issue5_phase1_delegation, test_tier1_unit | 675 passed / 0 failed (862 s) |
| (b) WORKSPACE_ROOT=<워크트리 밖 센티널>: 수정 16개 파일 | 522 passed / 0 failed (707 s); 실행 뒤 센티널 비어 있음 |
| 본 체크아웃 .mam/shim/herdr mtime | 전후 동일(1791480333); 실제 .mam/jobs 항목 수 불변 |
- W1 은 (a)(b) 양쪽에서 통과했고, 이제 15개 노드(모듈 15개)를 체크아웃 사본에서 돌려
.mam미생성을 고정한다. - 이식성: Python 테스트 코드만. bash 3.2·macOS 영향 없음.
4. 1·2회차 판단 유지
_env 의 tmp_path 지정(lib.sh:26 기본값 때문), conftest pytest_configure 의 "다른 체크아웃만 제거" 정책과 opt-in fixture 설계(autouse 불가 이유 포함), unittest 클래스의 명시 env, test_orc_onboard 의 호출 시점 root — 모두 이전 리포트대로 타당하다. W1·W2 가 base 에서 실패함은 2회차에 확인했다.
5. 비차단
- W1 의 모듈 목록은 수동 유지다(2회차 비차단 그대로). 새 테스트가 lib.sh 를 source 하는 모듈을 추가하면 목록도 늘려야 한다는 점을 conftest 의 fixture docstring 이나 W1 머리말에 한 줄 적어 두면 좋다.
- 새 관찰 없음.
[VERDICT: PASS]