33 lines
4.9 KiB
Markdown
33 lines
4.9 KiB
Markdown
# Peer Review: `multi-agent-mux-loop` SKILL 문서 정비 + `run_loop.sh` 하드코딩 제거 (커밋 `52c270e`/`f85fdfc`/`6c90342`)
|
|
|
|
## Scope
|
|
|
|
세 커밋을 검토했다: (1) `52c270e` — SKILL.md의 "Self-Planning"(계획 완전 생략) 서술을 "Existing Plan Execution"(기존 승격 계획서 로드 후 즉시 구현)으로 정정, (2) `f85fdfc` — SKILL.md 내 하드코딩된 세션명(`canary-projects-multi-agent-mux-*`)을 플레이스홀더(`<planner-session-name>`/`<creator-session-name>`/`<reviewer-session-name-N>`)로 치환, (3) `6c90342` — `run_loop.sh`의 `resolve_planner_session()` 폴백과 기존 계획 파일 경로를 실제로 동적화. 문서 변경(1, 2)은 렌더링/의미 정합성 위주로, 셸 스크립트 변경(3)은 문법·동작 검증 위주로 리뷰했다.
|
|
|
|
## 1, 2. SKILL.md 문서 변경 검토
|
|
|
|
- **`52c270e`**: `--plan` 미지정 시의 실제 동작(계획서 승격 파일을 로드해 즉시 구현 착수)과 서술("Self-Planning", "계획을 거치지 않고 직접 구현")이 이전엔 어긋나 있었다 — 실제로는 완전한 무계획 실행이 아니라 "기존 계획서가 있으면 그걸 쓴다"는 동작이므로, 이번 수정으로 프로즈/표/mermaid 다이어그램의 분기 라벨("Use Existing Plan (No --plan)")이 셋 다 일관되게 정정되었다. 세 위치(설명 불릿, 표, 다이어그램) 모두 누락 없이 반영됨을 확인.
|
|
- **`f85fdfc`**: 하드코딩된 세션명이 매뉴얼 예시 곳곳(다이어그램 참가자 라벨, `--target-agent`/`--reviewer` 예시 값)에 있었는데, 전부 제네릭 플레이스홀더로 치환됨. `grep -n "canary-projects-multi-agent-mux" SKILL.md` 기준으로 잔여 하드코딩이 없는지 확인했다(아래 §3 참고 — 실제로는 no-arg `--plan`을 하드코딩 언급 없이 완전히 정리했음을 확인).
|
|
|
|
두 커밋 모두 마크다운/mermaid 문법 오류 없이 코드펜스와 표 구조를 그대로 유지했다.
|
|
|
|
## 3. `run_loop.sh` 변경 검토 (실행 검증 포함)
|
|
|
|
### 변경 내용
|
|
- `resolve_planner_session()`의 폴백 값이 `'canary-projects-multi-agent-mux-planner-reviewer-claude'`(하드코딩)에서 `''`(빈 문자열)로 변경 — 이제 `role`에 `'planner'`를 포함하는 tmux 세션을 찾지 못하면 특정 프로젝트 이름으로 잘못 추측하지 않고 정직하게 "찾지 못함"을 반환한다.
|
|
- 기존 계획서 로드 블록(`else` 분기, 314-322행)이 `EXISTING_PLAN_FILE=".agents/reports/canary-projects-multi-agent-mux-planner-reviewer-claude/report-final.md"`(하드코딩)에서 `PLANNER_SESSION` 기반 동적 경로로 변경되고, `[ -n "$PLANNER_SESSION" ]` 가드가 추가되어 세션을 못 찾은 경우 경로 조합 자체를 건너뛴다.
|
|
|
|
### 검증
|
|
- `bash -n run_loop.sh` → 문법 오류 없음.
|
|
- `shellcheck run_loop.sh` → 경고/오류 0건(종료 코드 0).
|
|
- **`resolve_planner_session()`을 실제로 발췌·소싱해 현재 라이브 상태에 대해 실행**: `canary-projects-multi-agent-mux-planner-reviewer-claude`를 정확히 반환함(현재 이 세션의 role이 `planner-reviewer`이므로 `'planner' in role` 매치) — 우연이 아니라 실제 동작 확인. 이어서 이 값으로 조합된 경로(`.agents/reports/canary-projects-multi-agent-mux-planner-reviewer-claude/report-final.md`)가 실제로 파일시스템에 존재함을 확인해, 이 프로젝트에서는 하드코딩 시절과 동일한 결과를 내면서도 이제는 진짜로 동적임을 증명했다.
|
|
- **빈 `PLANNER_SESSION` 엣지 케이스**(플래너 역할 세션이 아예 없는 워크스페이스를 시뮬레이션): 동일한 `set -euo pipefail` 하에서 새 로직 스니펫만 분리 실행 → `EXISTING_PLAN_FILE`이 빈 문자열로 남고 "계획 로드 건너뜀" 분기가 정상 작동, `set -u`(nounset)로 인한 미정의 변수 오류도 없음(`PLANNER_SESSION`은 항상 대입되므로 빈 문자열이어도 unset이 아님) — 하드코딩이 없어진 대신 도입될 수 있었던 "다른 워크스페이스에서 조용히 깨짐" 위험이 실제로는 없음을 확인.
|
|
- `--plan` 모드 경로(224-228, 285-286, 496-497, 543-548행)의 `$PLANNER_SESSION` 사용처는 이번 diff의 대상이 아니며, 플래너 세션이 비어 있을 경우 `multi-agent-mux-delegate-job submit`이 초반에 실패로 이어지는 fail-fast 구조라 이번 변경으로 인한 새로운 침묵 실패 경로는 없다.
|
|
- `git diff 7c94eef 6c90342 --stat` → 이 세 커밋이 건드린 파일은 `SKILL.md`와 `run_loop.sh` 딱 둘뿐, 회귀 없음.
|
|
|
|
## 결론
|
|
|
|
문서 두 건은 실제 동작과 서술의 불일치를 바로잡고 하드코딩된 예시를 제네릭화한 정확한 수정이며, 셸 스크립트 변경은 실제로 실행해 정상 케이스(현재 세션 정확히 해석)와 엣지 케이스(플래너 세션 부재 시 안전한 스킵) 모두를 검증했다. 문법 오류, shellcheck 경고, 회귀 모두 없다.
|
|
|
|
[VERDICT: PASS]
|