[Bug] run_loop.sh 를 --plan 없이 실행하면 자동 선택된 planner 의 옛 계획서(.agents/reports/<planner>/plan-*.md)를 creator 에게 넘김 #25

Closed
opened 2026-09-14 14:42:04 +00:00 by Godopu · 1 comment
Owner

증상

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)
## 증상 `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)
Author
Owner

해결 — 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 으로 등록했다.

## 해결 — 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 으로 등록했다.
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: tmpl/multi-agent-mux#25