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

8.3 KiB
Raw Blame History

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]