Files
multi-agent-mux/.agents/reports/reviewer-grok-01/report-8900db9e.md
T

79 lines
8.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# PR #79 (Issue #68) 리뷰
검증 경로는 `/var/folders/q_/68sxgw3j073dgjg8wl9s08vw0000gn/T/mam-review/loop-20261029T045625Z-74296d/1` 뿐이다. HEAD `3b81f9973223d2a910369711c08adc772003639d`, tree `ff705b61bf25fe40d0ff054c372a399eacc79730`, base `b9c828f09214b4bed6651a223cbb941e7b432647` 는 조상이다. 작업 트리는 깨끗하고 `git diff --check` 도 깨끗하다. 변경은 9파일, +277/−22 이다. 스냅샷에는 `.venv` 가 없다. 테스트는 제어 평면 Python 3.9.6 과 `/bin/bash` 3.2.57 로 돌렸다.
## 확인한 것
결정 1–4 는 코드와 같다.
| 완료 조건 | 구현 | 테스트 |
|---|---|---|
| create 의 `--no-onboard` 유지, 기본은 onboarding | `create_session.sh:51` 도움말, `:67` `ONBOARD=1` | dry-run 기본 경로는 경고 0줄 (`test_issue68_onboard_default.py:84-91`) |
| `worktree_prepare.sh --creator-agent` 는 기본 onboarding. `--no-onboard` 는 create 로 넘기고, `--onboard` 는 같은 뜻 | `:30` `ONBOARD=1`, `:42-43` 마지막 플래그가 이김, `:232` 둘 중 하나만 전달. 44/45 는 `:247-248`, `exit "$rc"` 는 `:251` | 전달 4건, 기본 e2e 1건, `--no-onboard` 면 잡 없음 1건 |
| 경고는 agy·codex·hermes·opencode 만. claude·grok 는 없다. 종료 코드와 행은 그대로 | `:208-210`. 판정은 facts 의 `MAM_ID_POST_DISCOVERED` | dry-run 6, 실제 행 6, 이후 거절 1 |
| 문서 변경은 create SKILL.md 옵션 표와 worktree 절 | `SKILL.md:173`, `:205`, `:210`, `:213` | `tests/test_issue42_skill_blocks.py` 핀이 현재 본문과 일치 (아래 1건 스킵) |
경고 판정은 셸의 에이전트 목록이 아니다. `__main__.py:75` 가 `adapter.id_lifecycle == POST_DISCOVERED` 이면 `MAM_ID_POST_DISCOVERED=1`, 아니면 `0` 을 찍는다. 기본값은 `base.py:379-382` 의 `post_discovered` 이고, `claude.py:188-190` 과 `grok.py:18-20` 만 `pre_assigned` 다. 기대표(`test_issue68_onboard_default.py:30-37`)와 같다.
facts 를 통째로 eval 하는 `lib.sh:2957` 은 토큰 변수만 읽고, `_mam_load_dialog_facts` (`lib.sh:3157`) 는 `MAM_STARTUP_DIALOGS` 줄만 꺼낸다. 추가 대입 한 줄은 그 두 경로의 결과를 바꾸지 않는다. `MAM_DELEGATION_PY=0` 은 `lib.sh:2323` 근처의 레거시 헬퍼 스위치이고, create 의 facts 호출(`create_session.sh:207`)은 그 스위치 밖에 있다. facts 가 실패하면 `|| true` 로 변수가 비고, `${MAM_ID_POST_DISCOVERED:-0}` 이라 경고는 나오지 않는다.
경고는 spawn 전이다. `--dry-run` 종료는 `create_session.sh:286` 이고, `#63` 대기는 `:291` 이다. 그래서 dry-run 에도 경고가 나오고, 이후 거절보다 경고가 먼저다.
`--creator-agent` 호출:
- `tests/test_issue21_acceptance.py:47`, `:207` 과 `tests/test_issue21_phase2_loop_a.py:422` 는 `--no-onboard` 를 넘긴다. `:339` 는 원래 `--onboard` 다.
- `test_w6c` (`test_issue21_phase2_loop_a.py:355`) 는 플래그가 없다. 서브모듈 초기화가 `:356` 에서 실패하고 `:360` 에서 행이 비어, creator 까지 가지 않는다.
- `tests/test_issue50_onboard.py:192` 와 `tests/test_issue57_logs_follow_registry.py:276` 은 `--onboard` 다.
- `tests/test_issue50_dispatch_herdr.py:868` 은 `--onboard` 이고 실제 herdr 를 띄운다. 이번 리뷰에서는 실행하지 않았다.
- 다른 스크립트가 `worktree_prepare.sh` 를 호출하지는 않는다. `docs/design/worktree-creator-model.md:50` 의 claude 예시는 플래그가 없어서 이제 기본 onboarding 이다. `README.md:51` 은 `--onboard` 와 준비 스크립트만 언급한다. `VERSIONS.md` 는 당시 기록이다.
`tests/data/skill_code_blocks.json` 의 create 핀은 경고 4줄이 들어간 뒤쪽 범위가 +4 다 (`360`→`364`, `518-545`→`522-549`, `259-274`→`263-278`, `490-608`→`494-612`, exit 4 핀 `550`→`554`). worktree 의 `exit "$rc"` 핀은 옵션 한 줄 때문에 `250`→`251` 이고, `:24` 는 그대로다. sha `38836d31bf38`→`8bfabafb0328` 은 줄 이동이 아니라 SKILL 예시가 `--no-onboard` 로 바뀐 것이다 (`skill_code_blocks.json:90-102`, `SKILL.md:202-206`). 핀 테스트는 그 본문과 맞춰 통과했다.
새 테스트 25건을 base 에 올려 놓지 않고 단정만 세면, facts 6건, dry-run 경고 4건, 행 검사의 경고 단계 4건(`:150-152`. 행 단정은 그 앞에 있어 base 는 경고에서 실패), 거절 1건, 전달 4건 중 명시적 `--onboard` 를 뺀 3건, 기본 e2e 1건, `--no-onboard` 준비 1건이 실패한다. 20실패·5통과로 작성자 주장과 같다. 통과하는 5건은 claude·grok 의 경고 없음(dry-run 과 행) 4건과 명시적 `--onboard` 전달 1건이다.
## 실행한 테스트와 결과
스냅샷에 `.venv` 가 없어 제어 평면 인터프리터를 썼다. cwd 는 스냅샷, basetemp 는 `/tmp/mam-i68-8900db9e` 이다.
```
env -u HERDR_SOCKET_PATH -u HERDR_PANE_ID -u HERDR_TAB_ID -u HERDR_WORKSPACE_ID -u HERDR_SESSION_NAME -u HERDR_SESSION -u WORKSPACE_ROOT -u MAM_ENV_FILE -u MAM_JOBS_DIR -u DELEGATE_JOB_LOGS_DIR \
PYTHONDONTWRITEBYTECODE=1 \
/Users/godopu16/PuKi/laa/canary_projects/multi-agent-mux/.venv/bin/python -m pytest \
-p no:cacheprovider --basetemp=/tmp/mam-i68-8900db9e \
tests/test_issue68_onboard_default.py \
tests/test_issue21_acceptance.py \
tests/test_issue21_phase2_loop_a.py \
tests/test_issue26_ints.py \
tests/test_issue42_skill_blocks.py \
tests/test_issue50_onboard.py \
tests/test_issue57_logs_follow_registry.py \
-q --tb=line
```
결과: `238 passed, 1 skipped, 1 error in 497.36s (0:08:17)`, 프로세스 종료 코드 1. 제품 단정이 실패한 테스트는 없다. `test_issue26_ints.py` 는 `MAM_ID_POST_DISCOVERED` 를 문자열 비교로 분류한다 (`:111`).
스킵 1건은 quiet 로그가 노드 이름을 찍지 않는다. 스냅샷에 `.claude/skills` 가 없고, 그 조건의 스킵은 `tests/test_issue42_skill_blocks.py:263-266` `test_claude_skills_link_resolves_to_agents_skills` 이다.
세션 종료 오류는 `tests/test_issue57_logs_follow_registry.py::test_a_symlinked_registry_dir_resolves_to_one_audit_log` 에 붙어 있고, 본문 단정이 아니다. `conftest.py:1581` 의 `agent_home_leak_guard` 가 세션 동안 생긴 agy 홈 항목 10개(brain 디렉터리 5, conversation db 5)를 보고했다. 가드는 이름을 읽고 지우지 않는다 (`conftest.py:1586-1592`). claude 만 예외이고 그 외 디렉터리는 예외가 없다 (`tests/_agent_home_guard.py:106`).
그 10개 항목의 mtime 은 pytest 구간(로그 생성 1793252159, 종료 1793252657, 약 14:36–14:44) 안이다. 다섯 db 를 연 프로세스는 pid 83251, `agy --hub`, 시작 13:50:53, 부모는 Antigravity IDE 헬퍼(82581)이다. pytest 자식이 아니다. 이번 테스트의 agy 경로는 `mock_agents` 이다. 파일은 열거나 지우지 않았고 그 자리에 두었다. 이 오류는 동작 중인 agy 가 자기 홈에 새 대화를 쓴 경우이고, 제품 결함으로 보지 않는다.
테스트 뒤 pytest 프로세스와 mock herdr, 추가 `reconcile.sh` 는 없었다. 체크아웃 모니터 pid 3714 (`reconcile.sh --subscribe --idle-timeout 0`, 부모 1) 는 그대로다. 신호를 보내지 않았다. `tests/test_issue50_dispatch_herdr.py` 는 실제 herdr 를 띄우므로 돌리지 않았다. 전체 스위트와 `test_issue34_job_tree.py` 도 돌리지 않았다.
## 발견 사항
차단: 없다.
비차단:
- `tests/test_issue68_onboard_default.py:17` 의 `import yaml` 는 쓰이지 않는다. 같은 파일의 `agent_sessions_yaml` 은 딕셔너리 키이다.
- `SKILL.md:173` 은 같은 폴더의 같은 종류 create 가 막힌다고 쓰고, `create_session.sh:210` 은 그 생성이 기다린다고 쓴다 (`Issue #63`, `MAM_ID_ORDER_WAIT_S`). 종료 코드와 경고 조건은 스크립트와 결정이 같다.
- 전달 테스트는 `[]`, `--onboard`, `--no-onboard`, `--no-onboard --onboard` 네 가지다 (`:186-193`). `--onboard --no-onboard` 순서는 같은 while 루프(`worktree_prepare.sh:31-43`)라 마지막이 이기고, 파라미터에는 없다.
- 위의 세션 가드 오류. 재현하려면 동작 중인 agy 를 끄거나, 그 홈을 가드 범위 밖으로 두어야 한다. 제품 수정 대상은 아니다.
## 사용자 확인 필요
없다. 본문의 `--no-onboard` 삭제 제안은 2026-10-28 결정으로 대체됐고, 구현은 그 결정(플래그 유지, worktree 기본 onboarding, 네 에이전트 경고, 문서 최소 변경)을 따른다.
[VERDICT: PASS]