Files
multi-agent-mux/.agents/reports/planner-reviewer-claude-01/report-48d0a01c.md
T
GodopuandClaude Opus 5.5 6fd417a7b7 release(v4.9.5): a claude purge removes every path the session owns (Issue #31, PR #59) - archive the review reports, bump the lockstep version, load logroot eagerly
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
2026-10-18 01:25:15 +09:00

5.1 KiB
Raw Blame History

리뷰 리포트 — 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, tree ffc291e6fc93822070f2b9f1d17009e83f176fcf 일치. 트리는 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 검증

  1. 보유자 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() 와도 일관된다.
  2. upper/mixed 에서 통과한다. 검증 경로에서 -k any_spelling 을 5회 반복 실행해 5회 모두 2 passed 였다. 관련 모듈 전체 실행에서도 통과했다(아래).
  3. 철자 처리 회귀를 여전히 잡는다. 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개는 통과했으므로, 실패가 해당 테스트에 국한된다.
  4. 정리 동작이 유지된다.
    • 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]