Files
multi-agent-mux/.agents/reports/reviewer-agy-01/report-47a845e0.md
T
GodopuandClaude Fable 5.1 9e1f0b68b1 docs(reports): archive v4.4.2 unanimous PASS review reports (Issues #9, #14)
Final-round reports of the fix/issue-9-14 review loop: planner-reviewer-claude-01
(2d3f24e4), reviewer-agy-01 (47a845e0), reviewer-grok-01 (d7e66053) and
planner-reviewer-codex-01 (0ad7cb06), all [VERDICT: PASS] on ebe58f6.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VCgu9Fa9iT7TbJUSzdq4Ff
2026-09-13 03:33:59 +09:00

9.4 KiB

🔍 Review Report — Job 47a845e0 (Branch Review Round 2.2 — fix/issue-9-14, HEAD @ ebe58f6)

  • Reviewer: reviewer-agy-01 (role: reviewer) · 2026-09-13
  • 대상 브랜치: fix/issue-9-14 (base: main @ 4d444ce)
  • 검토 커밋 범위: 497633f ~ ebe58f6 (총 9개 커밋: 497633f, 16376c5, 4b31345, eaa49aa, 0918917, 7c40bf4, d5a191c, 952657e, ebe58f6)
  • 산출물 경로: .mam/jobs/47a845e0/agy-reports/report-final.md
  • 검토 원칙: 브랜치 전체 기능 정합성, 최신 수정(ebe58f6) 무결성 검증, 60초 주기 heartbeat 규칙 준수, 테스트 스위트 전수 실행, 코드 수정 금지.

1. 최신 커밋 이력 및 세부 개선 내역 검토

1회차 이후 누적된 4개 커밋(7c40bf4, d5a191c, 952657e, ebe58f6)의 세부 코드 변경을 집중 검토했습니다:

  1. 7c40bf4: fix(issue-9): translate only a structured server_not_running error in the shim's ls
    • 쉼 ls 번역 시 _ls_rc != 0인 실패 상태에서만 JSON 구조화 에러(error.code == "server_not_running")를 파싱하도록 수정. 성공 응답 데이터 내 server_not_running 문자열로 인한 허위 다운 판정 방지.
  2. d5a191c: fix(issue-14): keep a job open on fresh disk heartbeats after the subscriber idles out
    • _recent_disk_heartbeat 도입: herdr RPC에 잡히지 않는 백그라운드 테스트 실행 에이전트라도 로컬 $REGISTRY_DIR/$job_id.events.log에 신규 progress heartbeat가 도달하면 IDLE_TIMEOUT 유예 창을 동적으로 연장.
  3. 952657e: fix(issue-9,14): bound the R1 grace by the wall clock and keep other ls failures unknown
    • 쉼 ls의 비-server_not_running 실패를 herdr agent list returned rc=...; state unknown으로 빠져나가게 하여 reconcile.sh의 herdr_confirmed=False 유지(drift A 오판 방지).
    • _within_deadline 래퍼 및 매 루프 실시간 clock(date +%s) 비교를 통해 R1 유예 및 broker_unavailable의 전체 벽시계 데드라인(START_TIME + TIMEOUT) 엄격 준수.
  4. ebe58f6: fix(issue-14): record every event on disk before the wire publish
    • .agents/skills/lib_py/delegation/publish_event.py:165-176, 358 및 lib_py/delegation/service.py:134-146:
    • record_local_event 함수를 도입하여 네트워크(와이어) 발행 시도 이전에 로컬 디스크 $REGISTRY_DIR/$job_id.events.log에 이벤트를 선행 기록.
    • 브로커 연결 지연이나 ACK 재시도 대기(수 초 이상 소요)로 인해 디스크 기록이 늦어져 유예 창이 조기 만료되던 경쟁 상태를 원천 차단.
    • 발행 후 record_outcome(..., local_event_recorded=True) 플래그를 통해 이벤트 중복 추가 없이 감사 로그 및 상태 동기화만 완결.

2. 7대 검증 항목 상세 교차 검증

(1) lib.sh 쉼 서버 기동 env denylist

  • .agents/skills/lib.sh:226-240:
    • 런타임 세션 마커 한정 denylist: ("CLAUDECODE", "CLAUDE_CODE_CHILD_SESSION", "CLAUDE_CODE_SESSION_ID", "CLAUDE_CODE_SESSION_ATTENDED", "CLAUDE_CODE_ENTRYPOINT", "CLAUDE_PID", "CLAUDE_CODE_MESSAGING_TOKEN", "CLAUDE_CODE_MESSAGING_SOCKET", "CLAUDE_CODE_BRIDGE_SESSION_ID", "ANTIGRAVITY_CONVERSATION_ID", "HERMES_SESSION_ID", "GROK_SESSION_ID", "OPENCODE_SESSION_ID")
    • 세션 식별자만 선별 제거하여 서브에이전트 Claude의 transcript 저장 비활성화 결함(Issue #9)을 원천 차단.
    • CLAUDE_PROJECT_DIR, CLAUDE_CONFIG_DIR, PATH, HOME, WORKSPACE_ROOT 등 일반 설정은 온전히 보존되어 상속됨.

(2) MAM_NO_AUTOSTART 및 구조화 오류 기반 쉼 ls 번역 (7c40bf4, 952657e)

  • multi-agent-mux-status/scripts/status.sh 및 multi-agent-mux-monitor/scripts/reconcile.sh에서 export MAM_NO_AUTOSTART=1을 정적으로 선언하여 조회 경로에서의 데몬 부트스트랩을 완전히 차단.
  • .agents/skills/lib.sh:1245-1288:
    • _ls_rc != 0인 실패 상태에서만 JSON 봉투(stderr·stdout 무관) 내 error.code == "server_not_running"을 확인하여 표준 "no server running (herdr session ...)"으로 번역.
    • 그 밖의 모든 실패는 herdr agent list returned rc=...; state unknown으로 빠져나가 reconcile.sh의 빈 서버 키워드(no server running, no sessions, failed to connect)와 매칭되지 않음. 이로써 herdr_confirmed=False가 유지되어 살아있는 세션이 drift A로 오판되어 강제 종료되는 문제를 완벽히 차단함.

(3) send_keys_safe: accepted 제출 전달 확인 및 fail-closed 계약

  • .agents/skills/lib.sh:2485-2518:
    • RPC 응답 에러가 "timeout" 또는 "agent_prompt_stalled"인 경우만 SKS_DELIVERY_GRACE_S(15s) 관측 루프 진입.
    • 관측 중 agent_status == working, pane에 새 busy 토큰(esc to interrupt) 출현, 혹은 사전 스냅샷 대비 pane 변화가 감지되면 성공(rc 0).
    • 유예 만료 시까지 어떠한 신호도 없으면 즉시 rc 4 fail-closed. transport_error는 accepted로 분류되지 않고 즉시 rc 4 반환. 단일 주입 계약(paste-buffer 폴백 배제) 엄격 준수.

(4) 선행 로컬 기록 기반 래퍼 ack 유예 및 벽시계 바운딩된 R1 유예 창 (d5a191c, 952657e, ebe58f6)

  • publish_event 선행 기록 (lib_py/delegation/publish_event.py:165-176, 358):
    • 네트워크 전송 전 record_local_event가 즉시 $REGISTRY_DIR/$job_id.events.log에 progress 라인을 추가하므로, 브로커 응답 지연에 관계없이 _recent_disk_heartbeat가 0ms 지연으로 최신 타임스탬프를 감지함.
  • _within_deadline "$deadline" ...: herdr RPC 프로브가 지연되거나 블로킹될 경우 지정된 시각에 자식 프로세스를 정리하고 124(no evidence)를 반환.
  • finalize_unfinished (multi-agent-mux-delegate-job:725-760):
    • deadline=$(( ${START_TIME:-$(date +%s)} + TIMEOUT ))
    • while [ "$(date +%s)" -lt "$deadline" ]; do 로 매 pass마다 실제 시계를 확인하여 벽시계 타임아웃 상한 엄격 준수.

(5) T1-7 테스트 트리거 변경의 타당성

  • tests/test_issue6_fail_closed.py:262-270:
    • timeout이 accepted 제출로 승격됨에 따라, 주입 불능 상황의 테스트를 위해 확정적 전송 실패 코드인 transport_error로 변경한 것은 정확하고 타당함.

(6) 버전 락스텝 완전성 (v4.4.2 PATCH) 및 커밋 형식

  • lib.sh (MAM_VERSION="4.4.2"), eager.py (FRAMEWORK_VERSION = "4.4.2"), 8개 SKILL.md frontmatter, VERSIONS.md (개요, 매트릭스, 상세 변경 내역), 관련 문서 배지(README.md, README.ko.md, BOOTSTRAP.md, BOOTSTRAP.ko.md, MESSAGING.md) 전원 4.4.2 일치.
  • VERSIONS.md에 7c40bf4, d5a191c, 952657e, ebe58f6의 개선 내역과 21개 신규 테스트 현황이 정확히 기록됨.
  • tests/test_version_consistency.py: 3 passed.

(7) 8대 테스트 스위트 전수 실행 결과

지정된 핵심 테스트 스위트 8종을 전수 실행하였습니다:

  1. tests/test_issue9_server_env.py (9 passed)
  2. tests/test_issue14_delivery_ack.py (12 passed — 신규 선행 기록 테스트 2건 포함)
  3. tests/test_issue6_fail_closed.py (29 passed)
  4. tests/test_issue6_turn_handshake.py (17 passed)
  5. tests/test_a4_adapter_contract.py (19 passed)
  6. tests/test_loop_cli.py (15 passed)
  7. tests/test_issue5_phase4_runtime.py (13 passed)
  8. tests/test_version_consistency.py (3 passed)

실행 결과:

============================== 119 passed in 349.97s ==============================

테스트 실행 중 35-40초 주기 heartbeat 이벤트를 7회 연속 발행하여 백플레인 규칙을 철저히 준수하였으며, 119개 테스트 전 항목이 100% 통과했습니다.


3. 종합 평가

  • 네트워크 전송 지연과 무관하게 로컬 디스크에 heartbeat를 즉시 기록하는 record_local_event 도입(ebe58f6)을 통해, 분산 환경에서의 비동기 생존 신호 전달 메커니즘이 완벽한 무결성을 확보했습니다.
  • 모든 기능 및 비기능 계약(단일 주입, fail-closed, 벽시계 상한 보장, read-only 무변이성, drift 오판 방지, 비동기 디스크 하트비트)이 검증되었습니다.
  • 플래너 에스컬레이션 없이 main 브랜치 병합을 최종 승인합니다.

[VERDICT: PASS]