Files

9.8 KiB

Code Review Report — PR #79 (Issue #68: worktree_prepare.sh Default Creator Onboarding & create --no-onboard Warning)

  • Job ID: ace63ec3
  • Reviewer: agy (herdr:reviewer-agy-01)
  • Loop ID: loop-20261029T045625Z-74296d (Round 1)
  • Review Snapshot Path: /var/folders/q_/68sxgw3j073dgjg8wl9s08vw0000gn/T/mam-review/loop-20261029T045625Z-74296d/1
  • Branch: fix/issue-68
  • Base Commit: b9c828f09214b4bed6651a223cbb941e7b432647
  • Head Commit: 3b81f9973223d2a910369711c08adc772003639d (5 commits)
  • Tree Hash: ff705b61bf25fe40d0ff054c372a399eacc79730

1. 확인한 것 (Files & Line Ranges Inspected in Review Snapshot)

  • 기준 문서 대조 (INSTRUCTION.md, tea issues 68 --comments, tea pulls 79):
    • INSTRUCTION.md:1-13 (스크립트·테스트 우선 원칙 및 SKILL.md와 코드의 줄 단위 일치 원칙 확인)
    • Issue #68 댓글("구현 전에 정한 것", 결정 1–4 및 완료 조건)과 PR #79 설명 대조
  • 어댑터 id_lifecycle 및 facts 브리지:
    • .agents/skills/lib_py/agents/__main__.py:4, 75 (from lib_py.agents.base import POST_DISCOVERED, MAM_ID_POST_DISCOVERED={1 if adapter.id_lifecycle == POST_DISCOVERED else 0})
    • .agents/skills/lib_py/agents/base.py:174-175, 379 (기본값 POST_DISCOVERED: agy, codex, hermes, opencode)
    • .agents/skills/lib_py/agents/adapters/claude.py:188, grok.py:18 (PRE_ASSIGNED: claude, grok)
    • 다른 lib_py.agents facts 호출 지점 영향 확인:
      • .agents/skills/lib.sh:2596-2598 (wait_for_tui_ready eval "$_facts")
      • .agents/skills/lib.sh:2957 (send_keys_safe eval ...)
      • .agents/skills/lib.sh:3156-3170 (_mam_load_dialog_facts — sed -n으로 특정 키만 추출)
      • tests/test_issue23_24_startup_path.py:480-500 (MAM_STARTUP_DIALOGS= 행만 필터링)
      • 모든 기존 호출자가 새 MAM_ID_POST_DISCOVERED 키 추가에 전혀 영향받지 않음을 확인.
  • create_session.sh 및 worktree_prepare.sh 구현·문서 대조:
    • .agents/skills/multi-agent-mux-create/scripts/create_session.sh:67, 88, 207-211:
      • ONBOARD=1 기본 유지, --no-onboard 유지.
      • eval "$("$(_delegate_py_bin)" -m lib_py.agents facts "$AGENT" 2>/dev/null || true)" 직후 if [ "$ONBOARD" = 0 ] && [ "${MAM_ID_POST_DISCOVERED:-0}" = 1 ]; then으로 stderr 경고 1줄 출력(create_session.sh:209-211).
      • facts 호출이 실패하거나 빈 값일 때도 ${MAM_ID_POST_DISCOVERED:-0} 기본값 0으로 set -u 아래 안전하게 통과.
      • spawn 및 --dry-run 분기(219)보다 앞에 위치하여 --dry-run이나 이후 #63 대기 거부(225) 시에도 경고가 먼저 출력되며, 종료 코드와 레지스트리 행은 전혀 바꾸지 않음.
    • .agents/skills/multi-agent-mux-create/scripts/worktree_prepare.sh:6-19, 30, 42-43, 231-232:
      • ONBOARD=1로 기본값 변경(30), --onboard는 ONBOARD=1로 계속 허용(42), --no-onboard는 ONBOARD=0 설정(43), create_session.sh에 --onboard 또는 --no-onboard 전달(232).
      • 상단 주석(6-19, usage()가 sed -n '2,15p'로 출력하는 범위 포함)이 코드와 정확히 일치.
    • .agents/skills/multi-agent-mux-create/SKILL.md:173, 202-214:
      • 옵션 표(173)와 worktree_prepare.sh 시놉시스(205), --creator-agent 설명(210), 종료 코드 설명(213)을 줄 단위로 코드와 대조하여 일치 확인.
  • 저장소 전체 --creator-agent 호출 전수 조사 (git grep -- "--creator-agent"):
    • tests/test_issue21_acceptance.py:47, 207: --no-onboard 명시 추가됨.
    • tests/test_issue21_phase2_loop_a.py:339: 기존 --onboard 명시.
    • tests/test_issue21_phase2_loop_a.py:355: 서브모듈 초기화 실패(단계 4) 테스트로 creator 단계(단계 5)에 도달하지 않음.
    • tests/test_issue21_phase2_loop_a.py:422: --no-onboard 명시 추가됨.
    • tests/test_issue50_dispatch_herdr.py:868, tests/test_issue50_onboard.py:192, tests/test_issue57_logs_follow_registry.py:276: 모두 기존 --onboard 명시.
    • docs/design/worktree-creator-model.md:50: 실제 워크트리 creator 생성 예시로 기본 온보딩 의도와 부합.
  • 핀 이동 및 정수 환경변수 분류:
    • tests/data/skill_code_blocks.json: create_session.sh 208행 이후 참조들이 정확히 +4행, worktree_prepare.sh 43행 이후 참조가 +1행(250→251), SKILL.md:202-206 블록 해시가 8bfabafb0328로 내용 그대로 이동됨을 확인.
    • tests/test_issue26_ints.py:111: NOT_ARITHMETIC에 "MAM_ID_POST_DISCOVERED" 등록 확인.
  • 신규 테스트 (tests/test_issue68_onboard_default.py:1-247) 검증:
    • 총 25개 케이스: test_facts_expose_post_discovered(6), test_no_onboard_warning_dry_run(6), test_no_onboard_warning_keeps_exit_and_row(6), test_no_onboard_warning_precedes_a_later_refusal(1), test_prepare_forwards_onboarding_choice(4), test_prepare_onboards_by_default_end_to_end(1), test_prepare_no_onboard_sends_none(1).
    • base b9c828f 기준 대조 결과: claude·grok 경고 없음 4건(dry_run 2 + keeps_exit_and_row 2)과 --onboard 전달 1건을 제외한 20건이 base에서 정확히 실패함을 코드로 확인(작성자 주장 일치).

2. 결정 1–4 및 완료 조건 대조표

항목 요구사항 요약 구현 위치 테스트 커버리지 상태
결정 1 create_session.sh의 --no-onboard 유지, 기본값 온보딩(ONBOARD=1) 유지 create_session.sh:67, 88 test_no_onboard_warning_dry_run, test_no_onboard_warning_keeps_exit_and_row 충족
결정 2 worktree_prepare.sh --creator-agent 기본을 온보딩(ONBOARD=1)으로 변경, --no-onboard 추가 및 전달, 기존 --onboard도 동일 동작으로 수용 worktree_prepare.sh:30, 42-43, 232 test_prepare_forwards_onboarding_choice, test_prepare_onboards_by_default_end_to_end, test_prepare_no_onboard_sends_none 충족
결정 3 create --no-onboard 시 후발견 ID 에이전트(agy·codex·hermes·opencode)에만 #63 대기 가능성 경고 1줄 출력, claude·grok에는 미출력, 종료 코드·레지스트리 행 불변 lib_py/agents/__main__.py:75, create_session.sh:207-211 test_facts_expose_post_discovered, test_no_onboard_warning_dry_run, test_no_onboard_warning_keeps_exit_and_row, test_no_onboard_warning_precedes_a_later_refusal 충족
결정 4 multi-agent-mux-create/SKILL.md 옵션 표와 worktree 준비 절의 기본값 설명만 최소 수정 multi-agent-mux-create/SKILL.md:173, 205, 210, 213 tests/test_issue42_skill_blocks.py 충족
완료 조건 3 기존 worktree 테스트 중 기본 미온보딩을 전제하던 호출 수정 및 macOS 통과 test_issue21_acceptance.py:47, 207, test_issue21_phase2_loop_a.py:422, test_issue26_ints.py:111 아래 macOS 실측 265 passed 충족

빠진 완료 조건: 없음.


3. 실행한 테스트와 결과 (macOS 실측)

검증 경로(/var/folders/q_/68sxgw3j073dgjg8wl9s08vw0000gn/T/mam-review/loop-20261029T045625Z-74296d/1)에서 브리프의 격리 실행 명령으로 바뀐 테스트 파일과 create/worktree 관련 테스트를 모두 실행했습니다.

명령 1 (test_issue68_onboard_default.py, test_issue26_ints.py, test_issue42_skill_blocks.py, test_issue50_onboard.py)

BT="$(mktemp -d "${TMPDIR:-/tmp}/mam-rev-ace63ec3-1.XXXXXX")"
trap 'rm -rf "$BT"' EXIT
cd /var/folders/q_/68sxgw3j073dgjg8wl9s08vw0000gn/T/mam-review/loop-20261029T045625Z-74296d/1 && \
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="$BT/pytest" \
  tests/test_issue68_onboard_default.py \
  tests/test_issue26_ints.py \
  tests/test_issue42_skill_blocks.py \
  tests/test_issue50_onboard.py
  • 결과: 177 passed, 1 skipped in 245.18s (0:04:05) (exit code 0)

명령 2 (test_issue21_acceptance.py, test_issue21_phase2_loop_a.py, test_issue57_logs_follow_registry.py, test_issue63_same_cwd_ids.py)

BT="$(mktemp -d "${TMPDIR:-/tmp}/mam-rev-ace63ec3-2.XXXXXX")"
trap 'rm -rf "$BT"' EXIT
cd /var/folders/q_/68sxgw3j073dgjg8wl9s08vw0000gn/T/mam-review/loop-20261029T045625Z-74296d/1 && \
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="$BT/pytest" \
  tests/test_issue21_acceptance.py \
  tests/test_issue21_phase2_loop_a.py \
  tests/test_issue57_logs_follow_registry.py \
  tests/test_issue63_same_cwd_ids.py
  • 결과: 88 passed in 485.68s (0:08:05) (exit code 0)

명령 3 (/bin/bash -n 구문 검사 및 프로세스·워크트리 무결성 확인)

  • create_session.sh, worktree_prepare.sh /bin/bash -n 통과 (exit 0).
  • git status --short: 출력 없음 (검증 스냅샷 깨끗함).
  • ps -ef: 본 체크아웃의 기존 reconcile.sh --subscribe 데몬(PID 3714)만 정상 유지 중이며, 테스트가 남긴 자식·더미 프로세스 없음.

4. 발견 사항 (차단 / 비차단)

  • 차단 (Blocking): 없음.
  • 비차단 (Non-Blocking):
    • [N-1] tests/test_issue68_onboard_default.py:18: 쓰이지 않는 import yaml 1줄이 남아 있습니다(PR #79 본문에서도 인지됨, 동작에 영향 없음).

5. 사용자 확인 필요

  • 없음.

[VERDICT: PASS]