Final-round reports of the fix/issue-10-11-13-15 review loop: planner-reviewer-claude-01
(aa16fa5c), reviewer-agy-01 (0f41ea47), reviewer-grok-01 (3ea06fb6) and
planner-reviewer-codex-01 (79204d61), all [VERDICT: PASS] on fae70c1.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VCgu9Fa9iT7TbJUSzdq4Ff
3.7 KiB
🔍 Review Report — Job 3ea06fb6 (fix/issue-10-11-13-15 2회차, HEAD fae70c1)
- Reviewer:
reviewer-grok-01(role: reviewer) · 2026-09-13 - 범위:
git log/git diffbd3df89...HEAD - HEAD:
fae70c1fix(issue-10,13): check every agy artifact for holders and purge orphaned leftovers - 선행:
ba3e3ab5PASS(0282312) →4b113d10NOT PASS(N2) →1752c893PASS(f5a6575). 이번 초점:7610258재확인 +fae70c1Codex R1/R2. - 안전: 실제 홈 purge 없음. 테스트는 uuid4 픽스처만. 다른 worktree 미접촉. 소스 무변경.
커밋: c82ea75 → 0282312 → 7610258 → f5a6575 → fae70c1.
(1) 7610258 conversation_in_use
AGENT_SESSION_ENV5종이 uuid 와 같으면 즉시 in-use.- cmdline 헬퍼 사슬은 자기부터 가장 가까운
_is_agent_cli조상 직전만 제외. 그 조상이 uuid 를 들고 있으면 holder. _is_agent_cli: 첫-옵션 이전 토큰의 basename ∈{claude,agy,hermes,grok,opencode,codex}.
오탐/미탐: python -m <agent> 조상은 이름 매칭이 안 되어 헬퍼로 남을 수 있음(배포 claude/agy 바이너리 경로에서는 env+basename 으로 잡힘). uuid 를 언급만 하는 프로세스도 holder — SKILL.md 가 그렇게 문서화. 자기 세션 purge 거부는 유지.
(2) fae70c1 R1/R2
R1 AgyAgentAdapter.conversation_in_use (agy.py:92-96): _artifact_paths 의 DB·wal/shm/journal·brain·annotation·lock 전부를 conversation_in_use(..., paths) 에 넘김. cmdline/env 없이 lock 만 flock 한 보유자도 lsof 에 잡힘. test_purge_cli_refuses_when_only_the_presence_lock_is_held_open 통과. CLI 는 그 결과로 exit 4, 아무것도 안 지움.
R2 has_artifacts:
- 기본 (
base.py:194-200):uuid in artifact_path and exists. 공유 DB(opencode→opencode.db, 경로에 uuid 없음)는 모든 uuid 에 매치되지 않음. - agy 오버라이드 (
agy.py:86-90):_artifact_paths중 하나라도 있으면 참 (DB 없는 WAL/annotation/lock). _resolve_purge_target2단계:verify_artifact후has_artifacts(옛uuid in path and exists대체). claude/hermes/grok/codex 경로는 uuid 를 포함하므로 기존 폴백과 동등.test_purge_cli_resolves_agy_from_orphaned_leftovers통과.
다른 어댑터는 has_artifacts 를 오버라이드하지 않음. verify 가 먼저이므로 정상 jsonl/session 파일은 1단계에서 해결.
(3) orc_onboard.sh / 문서
흐름 불변: --yes 없으면 exit 4, Python in-use 4 → 셸 5(등록 유지), 미해결 5 → WARN 후 등록 제거, dry-run 무변경, purge 가 YAML 앞. SKILL.md·VERSIONS.md v4.4.3 항목 1–2 가 lock 전 경로 lsof 와 고아 부속을 반영.
(4) #15
MAM_JOBS_DIR → WORKSPACE_ROOT/.mam/… → cwd. job_subscriber --registry-dir 기본값 default_registry_dir() (7610258 R-d). conftest 격리 유지.
(5) 락스텝
lib.sh/eager.py/8 SKILL.md/VERSIONS.md = 4.4.3. verify_framework_version 통과. 릴리스 커밋 0282312 제목 유지. fae70c1 은 changelog 항목 1–2 만.
(6) 테스트
.venv/bin/python -m pytest -q \
tests/test_issue10_13_purge.py tests/test_issue15_registry_isolation.py \
tests/test_orc_onboard.py tests/test_a4_adapter_contract.py \
tests/test_issue5_phase1_delegation.py tests/test_tier1_unit.py \
tests/test_loop_cli.py tests/test_issue5_phase4_runtime.py \
tests/test_version_consistency.py
250 passed in 162.54s (직전 248 + R1/R2 2건). uuid4 픽스처. git diff --check 클린. 전체 스위트 미실행.
종합
Codex R1(lock-only holder)과 R2(고아 부속)가 어댑터 단위로 닫혔고, 1회차 PASS 항목은 회귀 없음. 설계 재작업 불필요.
[VERDICT: PASS]