Issue #21 items 4, 5, 7 (worktree helpers, review identity, acceptance A1-A8), #20 test isolation, #27 .gitignore managed block, #28 host portability. VERSIONS.md carries the entry; the eight review reports of PR #29 (two rounds plus the codex re-review) are archived under .agents/reports/<session>/. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VCgu9Fa9iT7TbJUSzdq4Ff
63 lines
3.5 KiB
Markdown
63 lines
3.5 KiB
Markdown
# 🔍 Review Report — Job 19d56cde (PR #29 델타 `46ea4cc...08db1da`)
|
||
|
||
- **Reviewer**: `reviewer-grok-01` · 2026-09-14
|
||
- **트리**: `/Users/godopu16/PuKi/laa/canary_projects/multi-agent-mux-wt/pr-29` @ `08db1da`
|
||
- **델타**: `git log`/`git diff` **`46ea4cc..HEAD`** (3커밋). 1회차 grok PASS @ 46ea4cc 를 뒤집지 않음.
|
||
- **본 체크아웃**: `main` `1134d74` 유지. 워크트리 깨끗. 헬퍼를 실제 트리에 실행하지 않음.
|
||
|
||
`git diff --check 46ea4cc...HEAD` 클린.
|
||
|
||
## (1) Codex R1/R2 — 닫힘
|
||
|
||
`--untracked-files=all` 이 세 검사에 모두 있음:
|
||
|
||
| 위치 | 명령 |
|
||
|---|---|
|
||
| `worktree_remove.sh` `judge_tree` | `status --porcelain --untracked-files=all --ignore-submodules=none` |
|
||
| `lib_py/worktree.py` submodule dirty | `status --porcelain --untracked-files=all` |
|
||
| `runner.py` `_dirty_submodules` | 동일 + `--ignore-submodules=none` |
|
||
|
||
임시 샌드박스: `status.showUntrackedFiles=no` 이면 플래그 없이 porcelain 이 비고, `--untracked-files=all` 이면 `?? secret.bin`. **`git add -A` 는 그 설정과 무관하게 untracked 를 스테이징**하므로 리뷰 스냅샷(`runner.py:698` `("add", "-A")`)은 추가 조치 불필요.
|
||
|
||
회귀: `test_w6e[hidden]`, `test_w6e2`, `test_l17[untracked-hidden,during-hidden]`. 플래그 없이는 숨은 untracked 가 force 제거·스냅샷을 통과했을 테스트.
|
||
|
||
## (2) Codex R3 — 닫힘
|
||
|
||
`worktree_prepare.sh:111-136`: 링크면 exit 1(무변경), 사용 가능한 `bin/python` 이면 `VENV=kept`, 컨트롤 루트 인터프리터로 `python -m venv` + `requirements*.txt` 설치 실패 시 **워크트리 유지·exit 1**, 인터프리터 없으면 경고·`VENV=skipped`. `test_w1` / `test_w1b` 가 created/kept/skip/link 거부. SKILL.md·design doc 일치. `.gitignore` 관리 블록·`info/exclude` `/.venv` 와 정합(자체 venv 는 untracked 로 안 보임).
|
||
|
||
## (3) #28 이식성 — 의도 유지
|
||
|
||
- `test_workspace_scope.py`: `bash -c` (`source` 는 dash 에 없음).
|
||
- argparse help: `_normalize_help` 가 그룹명·공백만 정규화. 옵션 토큰 유실은 여전히 실패.
|
||
- `conftest` autouse `MAM_ENV_FILE` → 없는 파일. 실 `.mam.env` 를 쓰려면 테스트가 직접 set. T1-4 가 공개 브로커를 타던 경로를 막음.
|
||
- deploy d11–d19 / d22–d30 skip 은 자산 부재 시만. **이 워크트리에는 `nats-docker/PRIVATE_SERVER.md` 와 `nats-docker/docker/docker-compose.yaml` 이 있어 skip 없이 실행됨** (아래 스위트 0 skipped).
|
||
- `ps -eo pid=,ppid=,args=`: 이 macOS 에서 BSD `-axo … command=` 와 같은 3열 출력. Linux POSIX 와 맞춤.
|
||
|
||
## (4) 90a289d 여유
|
||
|
||
`timeout_s + 8` → `+ 15`. 핀하는 결함은 ~2×TIMEOUT(~40s, timeout=20). 하한 `elapsed >= timeout_s - 1` 유지. 여유 15s 는 2× 와 겹치지 않음. 계약 검증을 무효화하지 않음.
|
||
|
||
## (5) 락스텝
|
||
|
||
4.7.0 bump 는 오케스트레이터 예정. 병합 차단 아님.
|
||
|
||
## 테스트 (워크트리)
|
||
|
||
```
|
||
PYTHONDONTWRITEBYTECODE=1 .venv/bin/python -m pytest -p no:cacheprovider -q \
|
||
tests/test_issue21_phase2_loop_a.py tests/test_issue21_loop_b.py \
|
||
tests/test_issue21_worktree_prereqs.py tests/test_issue21_acceptance.py \
|
||
tests/test_workspace_scope.py tests/test_issue5_phase1_delegation.py \
|
||
tests/test_deploy_freshness.py tests/test_version_consistency.py
|
||
```
|
||
|
||
(`test_issue28_*.py` 없음, 건너뜀)
|
||
|
||
**208 passed in 314.15s**, skip 0.
|
||
|
||
## 종합
|
||
|
||
1회차 PASS 유지. Codex R1–R3 이 코드·회귀·문서와 맞다. 설계 재작업 불필요.
|
||
|
||
[VERDICT: PASS]
|