release(v4.7.1): bump framework and eight skills to 4.7.1 in lockstep; archive PR #32 merge-side reviews

Issue #25: a promoted plan is reused only with --plan-file; the implicit
newest-plan load is gone in both runners, and an empty planner report no
longer passes silently. VERSIONS.md carries the entry; the four merge-side
review reports and their identity sidecars (base 6fc9194 -> head 1e82651,
evidence review-tree) are archived under .agents/reports/<session>/.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VCgu9Fa9iT7TbJUSzdq4Ff
This commit is contained in:
GodopuandClaude Fable 5.1 committed 2026-09-22 00:38:10 +09:00
1 parent 1e826515cc
commit 6b7198f73c
24 files changed
+441 -26

No files matched your search

@@ -0,0 +1,14 @@
{
"loop_id": "loop-20260921T150212Z-97d845",
"base_sha": "6fc9194f896eb2e13e123b8ebe7a9089b629764d",
"head_sha": "1e826515cc2a07ea1f8da0ff1259e1ea4dde86fd",
"tree_sha": "4fd82ad1c2682d12c3f5114818f97291af28a032",
"review_commit": "1e826515cc2a07ea1f8da0ff1259e1ea4dde86fd",
"reviewer": "reviewer-grok-01",
"job_id": "06fb4a9e",
"verdict": "PASS",
"transport": "herdr",
"evidence": "review-tree",
"isolation": "worktree",
"verified_at": "2026-09-21T15:25:44Z"
}
@@ -0,0 +1,59 @@
# 🔍 Review Report — Job 06fb4a9e (PR #32 @ `1e82651`)
- **Reviewer**: `reviewer-grok-01` · 2026-09-22
- **검증 경로**: `/var/folders/q_/68sxgw3j073dgjg8wl9s08vw0000gn/T/mam-review/loop-20260921T150212Z-97d845/1`
- **identity**: base `6fc9194` head `1e82651` tree `4fd82ad` (일치)
- **소스 워크트리·본 체크아웃**: 읽기 전용. 본 체크아웃 `main` `6fc9194` 유지.
`git diff --check 6fc9194...HEAD` 클린. 5커밋.
## (1) 암묵적 로드 제거
Python: Phase 1 else 가 glob/`plan-*.md` 를 쓰지 않음 (`runner.py:1064-1073`). `import glob` 삭제. `resolve_planner_session` (`:990`) 은 세션 이름만 로그하고 파일을 읽지 않음. `--planner` 는 `--plan` 없이 exit 1 (`:244-248`).
레거시 셸 (`MAM_LOOP_PY=0`): `ls -t .agents/reports/.../plan-*.md` 제거 (`run_loop.sh` Phase 1 else). `plan-*.md` 문자열이 두 구현에 없음 (`test_p8`).
## (2) `--plan-file`
상대경로는 `workspace_root / path` (`runner.py:264`); POSIX 에서 절대경로는 `/` 로 치환되어 그대로. `~` 는 `expanduser`. 없는/빈/공백뿐/디렉터리/읽기 실패 → `_plan_text` None → parse_args `sys.exit(1)`, 잡 없음. `--plan` 과 상호 배타. `--review-only` 는 파일 검사 후 경고·무시(`current_plan` 비움). `--planner` 는 `--plan` 필수라 `--plan-file` 과 함께면 먼저 `--planner` 규칙에 걸린다.
레거시 셸은 `--plan-file` 을 Python 전용으로 **명시 거부** exit 1, 루프 락 전 (`run_loop.sh:127-134`, `test_p7b`). 공백 경로는 pathlib 가 처리; 전용 테스트는 없음(비차단).
## (3) `_plan_text` (e551e3b)
한 함수 (`:304-316`)가 `--plan-file`, 초기 planner 리포트, 논의 refine, 에스컬레이션 refine 에 사용. 빈 초기 계획 → `return 1`, Worker 없음 (`test_p9`). 빈 refine → 경고·이전 계획 유지 (`test_p10`, `test_p11` ESCALATE). 수정 프롬프트가 빈 계획을 싣지 않음.
## (4) 체크포인트
`current_plan` 은 기록만 (`_record_checkpoint`). `load_checkpoint` 를 runner 가 호출하지 않음. 새 실행은 `current_plan=""` 에서 시작. 본 체크아웃 `.mam/loop-checkpoint.json` 의 옛 계획은 우회가 아님.
## (5) 옵션 없음
의도된 변화만: 자기계획 프롬프트. 승격은 `--plan` 성공 시 `plan-{id}.md` 기록 유지 (`test_p6`). 기존 테스트는 검증 경로에서 실행.
## (6) 테스트 P1–P11
전부 `tmp_path`. 검증 경로:
```
PYTHONDONTWRITEBYTECODE=1 <control .venv python> -m pytest -p no:cacheprovider --basetemp=/tmp/mam-review-basetemp-...
tests/test_issue25_plan_reuse.py
```
**17 passed** (P1–P11 + p3b/c/d, p5b, p7/p7b, p8). 수정 전 P1 은 옛 glob 을 단언하므로 실패했을 테스트.
같은 인터프리터로 `test_loop_cli`·`test_issue5_phase3`·`test_issue21_worktree_prereqs`·`test_version_consistency` 포함 시 래퍼 서브프로세스가 검증 트리에 `.venv` 가 없어 `paho` 를 못 찾는 실패 2건이 났고, `DELEGATE_JOB_PYTHON` 을 컨트롤 `.venv` 로 주면 **19 passed**. 제품 회귀가 아니라 스냅샷에 venv 가 없는 환경.
## (7) 문서
SKILL.md 에서 "기존에 승격된 계획서가 있다면 이를 로드" 잔존 없음. usage·CLI 표·Workflow 예시가 `--plan-file` 과 일치. `.claude/skills` 는 이 스냅샷에 없음.
## (8) 락스텝
`MAM_VERSION=4.7.0`. 4.7.1 bump 는 오케스트레이터 예정. 병합 차단 아님.
## 종합
암묵적 최신 계획 로드가 Python·레거시 양쪽에서 제거됐고, 재사용은 `--plan-file` 뿐이다. 빈 리포트는 조용히 계획을 지우지 않는다. 설계 재작업 불필요.
[VERDICT: PASS]