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
3.8 KiB
3.8 KiB
🔍 Review Report — Job d7e66053 (fix/issue-9-14, HEAD ebe58f6)
- Reviewer:
reviewer-grok-01(role: reviewer) · 2026-09-13 - 범위:
git log/git diff4d444ce...HEAD - HEAD:
ebe58f6fix(issue-14): record every event on disk before the wire publish - 선행: 본 세션
b0591d20[VERDICT: NOT PASS]—publish_event가 MQTT 재시도 뒤에events.log를 써서test_wrapper_idle_timeout_grace_accepts_disk_heartbeat가 2/2 실패. - 리뷰 중 소스 무변경. REBUT 없음 — 지적 수용.
커밋: 497633f … 7c40bf4 → d5a191c → 952657e → ebe58f6.
1. Round-2 차단 항목 반영 (ebe58f6)
| 지적 | 반영 | 교차 확인 |
|---|---|---|
events.log 를 MQTT with_retry 전에 기록 |
record_local_event (publish_event.py:165-175) 가 prepare_event 직후, publish() 직전 (:358-360) |
✅ |
DelegationService 동일 순서 |
service.py:89 local, :94 publish, :95-99 outcome |
✅ |
| 중복 append 금지 | record_outcome(..., local_event_recorded=True) 이면 registry.append_event 생략 (:204-205). 플래그 기본 False 라 다른 호출자는 종전대로 뒤에 기록 |
✅ |
테스트는 publish_event.py 경로 유지 |
test_wrapper_idle_timeout_grace_accepts_disk_heartbeat 여전히 PUBLISH_PY 사용 |
✅ |
| 순서·1회 기록 잠금 | test_publish_event_records_the_heartbeat_before_the_wire_publish: _publish_once 시점에 이미 ["progress"], 이후도 1줄. test_publish_event_failed_publish_keeps_one_local_record: 재시도 2회 내내 디스크 1줄, audit published=False |
✅ |
| VERSIONS.md 항목 6 | "와이어 발행 전에 로컬 기록" 으로 정정 | ✅ |
이전에 2/2 실패하던 래퍼 테스트를 이번 HEAD 에서 관련 스위트에 포함해 다시 돌렸다 → 통과.
2. 항목 (1)–(6) 재확인
| # | 판정 |
|---|---|
| (1) denylist / 설정 상속 | ✅. CLAUDE_CODE_SSE_PORT 미포함은 Non-blocking |
(2) MAM_NO_AUTOSTART + ls |
✅ 7c40bf4 구조화 error.code + 952657e 그 외 실패는 파서에 안 넣음 (state unknown). reconcile is_empty 와 정합 |
(3) send_keys_safe |
✅ timeout/stalled only accepted; transport_error rc 4; 무신호 rc 4; 재전송 없음 |
| (4) R1 | ✅ 디스크 heartbeat(이제 publish 전 기록) + busy token + working. 창은 관측마다 IDLE_TIMEOUT 재개방. 벽시계 START_TIME+TIMEOUT (_within_deadline). 무응답 ~2×IDLE_TIMEOUT 종료는 changelog 에 명시 |
(5) T1-7 transport_error |
✅ |
| (6) 락스텝 4.4.2 | ✅ lib.sh / eager.py / 8 SKILL.md / VERSIONS.md / README·BOOTSTRAP·MESSAGING. 릴리스 커밋 0918917 |
3. 테스트
.venv/bin/python -m pytest -q \
tests/test_issue14_delivery_ack.py tests/test_issue9_server_env.py \
tests/test_issue6_fail_closed.py tests/test_issue6_turn_handshake.py \
tests/test_a4_adapter_contract.py tests/test_loop_cli.py \
tests/test_issue5_phase4_runtime.py tests/test_version_consistency.py
119 passed in 382.64s. (직전 HEAD 는 같은 목록에서 1 fail / 116 pass.)
issue9 함수 9 + issue14 함수 12 = changelog 신규 21과 정합. bash -n lib.sh/wrapper 클린. git diff --check 4d444ce...HEAD 클린.
4. Non-blocking
CLAUDE_CODE_SSE_PORTdenylist 미포함.- 이미 오염된 herdr 서버는 재기동 전까지 pane 에 마커를 물려줌 (create SKILL.md 명시).
- 무응답 잡의 fail-close 가 Issue #6 의
IDLE_TIMEOUT+5s에서 ~2×IDLE_TIMEOUT으로 늘었고 changelog 에 적혀 있음.
5. 종합
지난 NOT PASS 의 원인(디스크 heartbeat 가 브로커 ACK 뒤에 찍힘)은 CLI·라이브러리 양쪽에서 고쳤고, 같은 publish_event.py 경로 테스트가 통과한다. ls unknown 경로와 R1 벽시계는 유지된다. 설계 재작업 불필요.
[VERDICT: PASS]