Issues #23 and #24: cross-server herdr scope, agent-agnostic start-up dialogs, onboarding delivery judged by the agent's own started event, verified rollback. VERSIONS.md carries the entry; the merge-side reports (round 1: claude/agy/grok; round 2 on05b0ea4: all four, with identity sidecars, basef4ba205-> head05b0ea4, evidence review-tree) are archived under .agents/reports/<session>/. The round-1 codex report was lost to the host sleeping mid-review; its two probes are recorded in the changelog. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VCgu9Fa9iT7TbJUSzdq4Ff
4.1 KiB
🔍 Review Report — Job 59e62ce6 (PR #35 @ f4ba205)
- Reviewer:
reviewer-grok-01· 2026-09-22 - 검증 경로:
/var/folders/q_/68sxgw3j073dgjg8wl9s08vw0000gn/T/mam-review/loop-20260923T142448Z-609954/1 - identity: base
1e78daeheadf4ba205tree88cb4f3(일치) - 본 체크아웃:
main1e78dae유지. 소스 워크트리·herdr 미조작.
git diff --check 1e78dae...HEAD 클린. 13커밋.
(1) #24 다이얼로그
어댑터 startup_dialogs (facts 로 MAM_STARTUP_DIALOGS):
| 에이전트 | 키 | kind |
|---|---|---|
| agy | Enter | trust |
| grok | y |
trust |
| codex trust | Enter (1. Yes, continue 선선택) |
trust |
| codex 업데이트 | 2 (Skip) |
notice |
| claude | Enter / Escape / Down+Enter | 기존 사다리 |
브리프의 “3+Enter” 와 다름. 코드·테스트(test_s4, test_s6)는 2 를 잠근다. 주석: 0.155.1 화면에서 2 가 Skip. --source visible 잔상 때문에 재전송은 MAM_DIALOG_RESEND_S(기본 5s) 이고 수락은 ready 토큰만 (lib.sh handle_startup_dialogs). --no-auto-trust / MAM_AUTO_TRUST=0 은 trust 만 건너뛰고 notice 는 답함. 신뢰는 --workspace 로 연 그 세션의 창. create·resume 둘 다 handle_startup_dialogs "$SESSION" … "$AGENT" 와 MAM_AUTO_TRUST.
(2) #23 교차 서버
_herdr_call_is_cross_server (lib.sh:1437-1446): 대상이 비거나 default 이면 스트립 안 함(같은 서버·#7 패킹의 HERDR_WORKSPACE_ID 유지). 호출자 서버 없음(pane 밖)도 스트립 안 함. HERDR_SESSION 이 있으면 소켓보다 우선. 없으면 HERDR_SOCKET_PATH 모양: …/.config/herdr/herdr.sock → default, …/.config/herdr/sessions/<name>/herdr.sock → <name>. 0.8.2 기본 서버 pane 은 HERDR_SESSION 이 없어도 소켓으로 판별. 0.9 는 소켓 규약이 같고, 주석의 0.9 차이는 agent status 미보고(lib.sh:2792)이지 소켓 형태가 아님. watcher.scoped_env 가 같은 규칙.
(3) 온보딩 전달
delegate_publish_cmd / delegate_started_recorded 를 create 와 래퍼 _wait_started 가 공유. 증거는 이번 dispatch_token 의 events.log started, 또는 감사 events.ndjson 의 dispatch_verified 그리고 dispatch_fingerprint == sha256(token). 지문 없는 옛 기록은 토큰이 있을 때 거부. 레지스트리 status 는 증거가 아님(래퍼 :641-646). 이미 터미널인 잡은 JOB_TERMINALIZED 로 두 번째 close 를 안 함. T 기본 180, heartbeat 계약 유지. create 는 더 이상 대리 started 를 안 찍음.
(4) 실패 처리
롤백: kill-session rc 후 has-session. 살아 있으면 행 status: running, last_visible_status: rollback-failed, delegate_job_id 비움, exit 43. 죽었으면 terminated / rolled-back. 온보딩 미확인은 세션 유지, 잡 error, MAM_ONBOARD_ACK_S 가 대기. create SKILL.md 와 맞음.
(5) 기존 테스트
G9 는 AST 에서 docstring 노드만 빼고 나머지 코드를 unparse (test_issue5_phase2a_loop.py:710-729). test_g9b 가 호출·경로 문자열은 여전히 잡고 주석/독스트링은 놓음을 잠금. 의도 약화 아님. issue14 는 started 증거 계약에 맞춰 조정.
(6) 새 테스트
test_issue23_24_startup_path.py·test_issue24_resume_dialogs.py 는 mock herdr / tmp. 실제 herdr·홈 미접촉. 검증 경로에서 AGENT_PYTHON_BIN 으로 177 passed in 461.74s (위 두 파일 + issue5 phase2a + issue14).
(7)–(8) 문서·락스텝
create SKILL: --no-auto-trust, exit 43, MAM_ONBOARD_ACK_S. resume SKILL: --no-auto-trust 와 같은 핸들러. 비차단: MESSAGING.md 와 delegate-job SKILL.md 본문에 dispatch_fingerprint 단어가 없음. 필드는 job_subscriber.py 주석과 감사 레코드에 있다. 락스텝은 4.7.1; 4.7.2 는 오케스트레이터 예정. 병합 차단 아님.
종합
#23 교차 서버 스코프와 #24 에이전트 무관 다이얼로그, 실제 started 로만 온보딩을 판정하는 계약이 코드·테스트와 맞다. 설계 재작업 불필요.
[VERDICT: PASS]