run_loop.sh 를 --plan 없이 실행하면(Creator 자율 계획 모드), 러너가 현재 작업과 무관한 옛 계획서를 불러와 creator 에게 "이미 수립된 계획서"로 넘길 수 있다.
원인 (코드로 확인, 실행 재현은 하지 않음)
--plan 이 없어도 planner_session 이 자동으로 정해진다: runner.py:668 → resolve_planner_session 이 role 에 planner 가 들어간 첫 번째 running 세션을 고른다.
runner.py:728-731 이 .agents/reports/<planner>/plan-*.md 중 mtime 이 가장 최근인 파일을 current_plan 으로 로드한다.
구현 프롬프트는 "이미 수립된 다음 계획서에 입각하여 ... 계획서:\n{current_plan}\n\n작업 목표: {task}" 가 된다.
저장소에는 .agents/reports/planner-reviewer-claude-01/ 아래에만 다른 이슈의 plan-*.md 15개(2026-08-26 ~ 09-08)가 커밋돼 있다. 또 클론·체크아웃 직후의 mtime 은 체크아웃 순서에 좌우되므로 "가장 최근" 판정도 의미가 없다.
영향
creator 가 무관한 계획을 따라 범위 밖 변경을 할 위험이 있다. 2026-09-14 #21 N2 후속 루프에서는 이를 피하려고 --plan --plan-talk 0 으로 우회했다.
제안
기존 계획 로드는 명시적으로만 한다(예: --plan-file <path>).
또는 승격 시 계획서에 task/이슈 식별자와 base SHA 를 기록하고, 현재 루프와 일치할 때만 로드한다.
최소한 자동 로드 시 경로와 파일 날짜를 경고로 출력하고, --no-plan-reuse 로 끌 수 있게 한다.
환경 정보
main 1134d74 (v4.6.0)
## 증상
`run_loop.sh` 를 **`--plan` 없이** 실행하면(Creator 자율 계획 모드), 러너가 현재 작업과 무관한 옛 계획서를 불러와 creator 에게 "이미 수립된 계획서"로 넘길 수 있다.
## 원인 (코드로 확인, 실행 재현은 하지 않음)
1. `--plan` 이 없어도 `planner_session` 이 자동으로 정해진다: `runner.py:668` → `resolve_planner_session` 이 role 에 `planner` 가 들어간 **첫 번째 running 세션**을 고른다.
2. `runner.py:728-731` 이 `.agents/reports/<planner>/plan-*.md` 중 **mtime 이 가장 최근인 파일**을 `current_plan` 으로 로드한다.
3. 구현 프롬프트는 "이미 수립된 다음 계획서에 입각하여 ... 계획서:\n{current_plan}\n\n작업 목표: {task}" 가 된다.
저장소에는 `.agents/reports/planner-reviewer-claude-01/` 아래에만 **다른 이슈의 plan-*.md 15개**(2026-08-26 ~ 09-08)가 커밋돼 있다. 또 클론·체크아웃 직후의 mtime 은 체크아웃 순서에 좌우되므로 "가장 최근" 판정도 의미가 없다.
## 영향
creator 가 무관한 계획을 따라 범위 밖 변경을 할 위험이 있다. 2026-09-14 #21 N2 후속 루프에서는 이를 피하려고 `--plan --plan-talk 0` 으로 우회했다.
## 제안
1. 기존 계획 로드는 명시적으로만 한다(예: `--plan-file <path>`).
2. 또는 승격 시 계획서에 task/이슈 식별자와 base SHA 를 기록하고, 현재 루프와 일치할 때만 로드한다.
3. 최소한 자동 로드 시 경로와 파일 날짜를 경고로 출력하고, `--no-plan-reuse` 로 끌 수 있게 한다.
## 환경 정보
- main `1134d74` (v4.6.0)
#21 운영 모델대로 워크트리(multi-agent-mux-wt/issue-25, 브랜치 fix/issue-25)의 전용 creator 가 구현하고, --review-only 루프로 리뷰했다. main 6fc9194 기준 5커밋, 4파일 +486/−31.
커밋
내용
a28711c
승격된 계획서의 암묵적 자동 로드 제거, 재사용은 --plan-file <path> 로만
e551e3b
모든 로드 경로에 계획 텍스트 검사. 빈 planner 리포트면 루프 중단, 빈 refine 은 기존 계획 유지
a334083
회귀 테스트 tests/test_issue25_plan_reuse.py
5fa5923
루프 스킬 문서 갱신
1e82651
리뷰 반영: 상대경로 --plan-file 을 제어 루트 기준으로 해석
리뷰
리뷰어 5명(claude·agy·grok·codex·opencode).
1회차: claude·agy·opencode PASS, grok·codex NOT PASS — 둘 다 같은 결함을 지적했다. --plan-file 의 상대경로가 실행 cwd 기준이라, 사용법·문서·테스트가 못 박은 "제어 루트 기준"과 어긋났다. 워크트리에서 루프를 돌리면 다른 파일을 읽을 수 있다.
수정(1e82651) 후 2회차: 5명 전원 PASS. 판정 identity 5건 모두 base 6fc9194 → head 1e82651, evidence: review-tree.
검증
Creator: 전체 스위트를 브랜치·base 각 1회. 새 실패 0건. 이 호스트 기준 실패는 12건(모두 tests/test_issue10_13_purge.py)이며 base 에서도 동일하다.
이 브랜치가 병합되기 전까지 본 체크아웃의 루프는 여전히 옛 동작을 한다(루프는 제어 루트의 스킬 코드로 실행되기 때문). 그때까지는 --plan --plan-talk 0 또는 --review-only 를 쓴다.
작업 중 관측한 별개 문제 — 위임 job 의 전체 제한 시간 3600초를 조절할 수단이 없어 정상 작업이 잘리는 문제 — 는 #33 으로 등록했다.
## 해결 — PR #32 (병합 시 닫힘)
#21 운영 모델대로 워크트리(`multi-agent-mux-wt/issue-25`, 브랜치 `fix/issue-25`)의 전용 creator 가 구현하고, `--review-only` 루프로 리뷰했다. main `6fc9194` 기준 5커밋, 4파일 +486/−31.
| 커밋 | 내용 |
|---|---|
| `a28711c` | 승격된 계획서의 암묵적 자동 로드 제거, 재사용은 `--plan-file <path>` 로만 |
| `e551e3b` | 모든 로드 경로에 계획 텍스트 검사. 빈 planner 리포트면 루프 중단, 빈 refine 은 기존 계획 유지 |
| `a334083` | 회귀 테스트 `tests/test_issue25_plan_reuse.py` |
| `5fa5923` | 루프 스킬 문서 갱신 |
| `1e82651` | 리뷰 반영: 상대경로 `--plan-file` 을 제어 루트 기준으로 해석 |
### 리뷰
리뷰어 5명(claude·agy·grok·codex·opencode).
- 1회차: claude·agy·opencode PASS, grok·codex NOT PASS — 둘 다 같은 결함을 지적했다. `--plan-file` 의 상대경로가 실행 cwd 기준이라, 사용법·문서·테스트가 못 박은 "제어 루트 기준"과 어긋났다. 워크트리에서 루프를 돌리면 다른 파일을 읽을 수 있다.
- 수정(`1e82651`) 후 2회차: **5명 전원 PASS**. 판정 identity 5건 모두 `base 6fc9194 → head 1e82651`, `evidence: review-tree`.
### 검증
- Creator: 전체 스위트를 브랜치·base 각 1회. 새 실패 0건. 이 호스트 기준 실패는 12건(모두 `tests/test_issue10_13_purge.py`)이며 base 에서도 동일하다.
- 오케스트레이터: `test_issue25_plan_reuse.py` + `test_loop_cli.py` + `test_issue5_phase3_loop.py` → 38 passed.
### 참고
이 브랜치가 병합되기 전까지 본 체크아웃의 루프는 여전히 옛 동작을 한다(루프는 제어 루트의 스킬 코드로 실행되기 때문). 그때까지는 `--plan --plan-talk 0` 또는 `--review-only` 를 쓴다.
작업 중 관측한 별개 문제 — 위임 job 의 전체 제한 시간 3600초를 조절할 수단이 없어 정상 작업이 잘리는 문제 — 는 #33 으로 등록했다.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
증상
run_loop.sh를--plan없이 실행하면(Creator 자율 계획 모드), 러너가 현재 작업과 무관한 옛 계획서를 불러와 creator 에게 "이미 수립된 계획서"로 넘길 수 있다.원인 (코드로 확인, 실행 재현은 하지 않음)
--plan이 없어도planner_session이 자동으로 정해진다:runner.py:668→resolve_planner_session이 role 에planner가 들어간 첫 번째 running 세션을 고른다.runner.py:728-731이.agents/reports/<planner>/plan-*.md중 mtime 이 가장 최근인 파일을current_plan으로 로드한다.저장소에는
.agents/reports/planner-reviewer-claude-01/아래에만 다른 이슈의 plan-*.md 15개(2026-08-26 ~ 09-08)가 커밋돼 있다. 또 클론·체크아웃 직후의 mtime 은 체크아웃 순서에 좌우되므로 "가장 최근" 판정도 의미가 없다.영향
creator 가 무관한 계획을 따라 범위 밖 변경을 할 위험이 있다. 2026-09-14 #21 N2 후속 루프에서는 이를 피하려고
--plan --plan-talk 0으로 우회했다.제안
--plan-file <path>).--no-plan-reuse로 끌 수 있게 한다.환경 정보
1134d74(v4.6.0)해결 — PR #32 (병합 시 닫힘)
#21 운영 모델대로 워크트리(
multi-agent-mux-wt/issue-25, 브랜치fix/issue-25)의 전용 creator 가 구현하고,--review-only루프로 리뷰했다. main6fc9194기준 5커밋, 4파일 +486/−31.a28711c--plan-file <path>로만e551e3ba334083tests/test_issue25_plan_reuse.py5fa59231e82651--plan-file을 제어 루트 기준으로 해석리뷰
리뷰어 5명(claude·agy·grok·codex·opencode).
--plan-file의 상대경로가 실행 cwd 기준이라, 사용법·문서·테스트가 못 박은 "제어 루트 기준"과 어긋났다. 워크트리에서 루프를 돌리면 다른 파일을 읽을 수 있다.1e82651) 후 2회차: 5명 전원 PASS. 판정 identity 5건 모두base 6fc9194 → head 1e82651,evidence: review-tree.검증
tests/test_issue10_13_purge.py)이며 base 에서도 동일하다.test_issue25_plan_reuse.py+test_loop_cli.py+test_issue5_phase3_loop.py→ 38 passed.참고
이 브랜치가 병합되기 전까지 본 체크아웃의 루프는 여전히 옛 동작을 한다(루프는 제어 루트의 스킬 코드로 실행되기 때문). 그때까지는
--plan --plan-talk 0또는--review-only를 쓴다.작업 중 관측한 별개 문제 — 위임 job 의 전체 제한 시간 3600초를 조절할 수단이 없어 정상 작업이 잘리는 문제 — 는 #33 으로 등록했다.