# ๐Ÿ” 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 `1e78dae` head `f4ba205` tree `88cb4f3` (์ผ์น˜) - **๋ณธ ์ฒดํฌ์•„์›ƒ**: `main` `1e78dae` ์œ ์ง€. ์†Œ์Šค ์›ŒํฌํŠธ๋ฆฌยท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//herdr.sock` โ†’ ``. 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]