release(v4.13.0): worktree creator onboards by default; create --no-onboard warns for post-discovered-id agents (Issue #68) - archive the review reports, bump the lockstep version
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VCgu9Fa9iT7TbJUSzdq4Ff
This commit is contained in:
1 parent
a7bf07bb1c
commit
a582934f6a
25 files changed
+529
-28
No files matched your search
@@ -0,0 +1,121 @@
|
||||
# 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`)
|
||||
```bash
|
||||
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`)
|
||||
```bash
|
||||
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]
|
||||
Reference in new issue
Block a user