Review loop (--review-only, --all-reviewer, focused on this Mac: macOS, /usr/bin/python3 3.9.6, bash 3.2): round 1 (@6f4f40a) agy and grok PASS, claude and codex NOT PASS (a non-uuid id `memory` purged the auto-memory dir, a linked dir below a root was followed, a NaN startedAt counted as dead), sent as a PR comment and fixed by the author in eleven commits; round 2 (@2a8d738) confirmed all three fixed but 4/4 NOT PASS on one test holder (`sh -c "sleep 120" <uuid>` loses the uuid on macOS /bin/sh), fixed in de6f3fc; round 3 (@de6f3fc) 4/4 PASS. Full suite on macOS / Python 3.9.6 @de6f3fc: 1934 passed, 56 skipped, 1 error (the known #55 false positive: agy conversations of another workspace). The real ~/.claude, /private/tmp/claude-<uid> and herdr panes unchanged. Also names lib_py.delegation.logroot in eager.CORE_MODULES (the v4.9.4 review's non-blocking note). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VCgu9Fa9iT7TbJUSzdq4Ff
5.1 KiB
5.1 KiB
리뷰 리포트 — PR #59 3차 (Issue #31) / job 48d0a01c
- 리뷰어: planner-reviewer-claude-01 (Opus 5.5)
- 검증 경로:
/var/folders/q_/68sxgw3j073dgjg8wl9s08vw0000gn/T/mam-review/loop-20261017T145452Z-6c5aa6/1 - identity: HEAD
de6f3fc81f8c33a9d2335320742dc5a47f566cda, treeffc291e6fc93822070f2b9f1d17009e83f176fcf일치. 트리는 clean이고.mam없음(테스트 후에도 동일). - 범위: 26e2c43..de6f3fc 전체.
2a8d738이후 변경은de6f3fc한 커밋으로,tests/test_issue31_purge_residual.py의 +3/−1 뿐이다.git diff 2a8d738 HEAD -- .agents는 비어 있다.
결론
2차의 유일한 차단(T1: macOS /bin/sh 의 단일 명령 exec 로 보유자 argv 에서 uuid 가 사라지던 문제)이 해결됐다. 제품 코드는 2a8d738 과 바이트 단위로 같으므로, 2차에서 이 Mac 에서 확인한 내용이 그대로 유효하다. 확인한 항목은 비-UUID 거부, 링크 경계, 유한하지 않은 startedAt, UTC lstart, exit 4 안내, 삭제 범위, 실제 ~/.claude·/private/tmp/claude-501 레이아웃 정합이다. 판정은 PASS.
(a) de6f3fc 검증
- 보유자 argv 에 uuid 가 남는다.
- 새 보유자는
[sys.executable, "-c", "import time; time.sleep(120)", conv]이다(tests/test_issue31_purge_residual.py:317). - Python 인터프리터는
-c뒤 인자를sys.argv[1]로 받을 뿐 exec 로 자신을 바꾸지 않으므로,ps의 args 에 소문자conv가 그대로 남는다. subprocess.Popen은 자식의 exec 성공을 확인한 뒤에 반환하므로, 이어지는time.sleep(0.05)시점에는 argv 가 이미 보인다(경합 없음).sys는 파일 머리(:22)에서 이미 import 되어 있다. 같은 패턴인test_issue10_13_purge.py의_holder()와도 일관된다.
- 새 보유자는
- upper/mixed 에서 통과한다. 검증 경로에서
-k any_spelling을 5회 반복 실행해 5회 모두2 passed였다. 관련 모듈 전체 실행에서도 통과했다(아래). - 철자 처리 회귀를 여전히 잡는다.
git clone사본에서 claude 어댑터를 한 군데씩 변형해 test 파일 전체를 돌렸다.conversation_in_use의 argv 검색을{canon, uuid}에서{uuid}로 바꿈(소문자 정규화 제거): 2 failed (upper, mixed). 실패 지점은 정확히 새 보유자 단언:320,AssertionError: a command line naming the lowercase id이다. 즉 수정된 보유자가 이 회귀를 잡는 바로 그 장치다._session_files(canon)을_session_files(uuid)로 바꿈: 2 failed (세션 파일 경로 단언에서)._canonical의.lower()제거: 2 failed.- 세 변형 모두 나머지 65개는 통과했으므로, 실패가 해당 테스트에 국한된다.
- 정리 동작이 유지된다.
try/finally: named.kill(); named.wait()구조는 그대로다(:318-323).- 변형 실행(일부러 실패시킨 경우 포함)이 끝난 뒤
ps -axo pid=,args=에서python … import time; time.sleep(120)프로세스는 0개였다. argv0 가 python 인 행만 세어 자기 자신과의 매칭은 배제했다.
(b) 전체 판정을 위한 재확인
- 제품 파일(
.agents/전체)은2a8d738과 동일하므로, 2차 리뷰(job 778fc866)의 확인 결과를 그대로 승계한다. 다시 돌린 것은 위 변형 대조와 아래 관련 모듈이다. - 알려진 비차단 세 가지는 브리프대로 병합 차단이 아니다. 내용은 2차 리포트에 적은 그대로다.
- 링크된
projects/<key>아래 jsonl 은 purge 되지 않고 residual 로만 보고된다. - 소문자 질의는 대문자 argv 보유자를 보지 못한다.
purge_artifacts를 직접 호출하면 in-use 게이트를 거치지 않는다.
- 링크된
테스트
검증 경로에서 env -i(HERDR_·WORKSPACE_ROOT·MAM_·DELEGATE_JOB_LOGS_DIR·CLAUDE_CONFIG_DIR 미설정), 스크래치패드 basetemp, PYTHONDONTWRITEBYTECODE=1 -p no:cacheprovider 로 실행했다.
- 실행 모듈:
test_issue31_purge_residual, test_issue10_13_purge, test_a4_adapter_contract, test_issue42_skill_blocks, test_issue55_agent_homes, test_orc_onboard, test_uuid_target, test_tier1_unit, test_tier2_component - 결과: 332 passed, 1 skipped, 1 error (624 s). 2차의 2 failed 는 사라졌다.
- 1 error 는
test_tier2_component.py::test_comp_codex_create_and_reconcile_and_stop의 teardown 에서 #55 가드가 낸 것으로, 브리프가 밝힌 알려진 오탐이다. 판정 근거로 쓰지 않고 보고만 한다.- 가드가 잡은 경로:
~/.gemini/antigravity-cli/conversations/0dd4a87f-6170-472b-886a-eef6e099b375.db-shm과.db-wal. - 읽기 전용 확인 결과: 이 DB 는 다른 곳에서 돌고 있는 실제
agy프로세스(pid 66733)가 열고 있다(lsof -t). WAL 이 자라는 중이다(mtime Oct 18 00:06, 크기 19.6 MB). 테스트 산출물이 아니다. - 이 테스트는 2차 실행에서는 통과했고, 이번 커밋은 tier2 와 무관한 테스트 한 줄만 바꿨다.
- 가드가 잡은 경로:
비차단 메모
- 2차 리포트의 비차단 사항(
projects/<key>링크 시 동작 문서화 등)은 그대로다. 병합 후 별도 이슈로 다뤄도 된다.
[VERDICT: PASS]