Skip to content

거절된 모델 응답을 연속 2번까지 자동 재시도 (ADR-0061) - #113

Merged
SonAIengine merged 1 commit into
mainfrom
feat/planner-response-retry
Oct 26, 2026
Merged

SonAIengine merged 1 commit into
mainfrom
feat/planner-response-retry

Conversation

@SonAIengine

Copy link
Copy Markdown
Contributor

요약

  • 응답 하나가 planner_invalid_response/proposal_rejected로 거절되면 Run이 바로 멈추던 것을, 연속 2번까지 새 model call로 다시 묻게 했다. 세 번째 연속 거절에서는 기존처럼 멈춘다.
  • 재시도는 /resume과 같은 경로라 journal·model call 예산·usage에 그대로 기록된다. protocol·schema 변경 없음.
  • timeout·transport(불확정), provider 한도·4xx·rate limit, 예산 소진 거절은 재시도하지 않는다.

근거

  • Claude Code 비교 실험의 rename 작업이 2/2 거절로 중단(전체 934 call 중 거절 3개, 그중 2개가 이 작업).
  • 새 binary로 재실행 2회: 2회 모두 거절 2개를 넘기고 정상 제안 24개까지 진행. 이번엔 24 turn 예산 소진으로 멈춤(별도 작업).

테스트

  • 1번 거절 뒤 완료되는 headless e2e 추가, 거절 경로 테스트들은 잘못된 응답을 3번 주도록 조정.
  • cargo test --workspace 736 통과, clippy·fmt 통과.

🤖 Generated with Claude Code

Claude Code 비교 실험에서 rename 작업(참조 137개, 17개 파일)이 2회 모두 응답 하나가
planner_invalid_response로 거절되어 파일 4개만 고친 채 멈췄다. 전체 934 call 중 거절은
3개뿐이라 응답 하나 때문에 Run을 버릴 이유가 없다.

- RunDriver가 planner_invalid_response와 proposal_rejected를 연속 2번까지 버리고 다음
  tick을 진행한다. 제안이 받아들여지면 횟수를 0으로 되돌린다.
- 재시도는 /resume과 같은 새 model call이라 journal·예산·usage에 그대로 잡힌다.
- timeout·transport·provider 한도·예산 소진 거절은 재시도하지 않는다.
- 같은 작업 재실행 2회: 2회 모두 거절 2개를 넘기고 정상 제안 24개까지 진행했다(call 26개).
  이번에는 24 turn 예산 소진으로 멈췄고 이는 별도로 다룬다.
- 기존 거절 경로 테스트는 잘못된 응답을 3번 주도록 바꾸고, 1번 거절 뒤 완료되는 e2e를
  추가했다. 테스트 736개 통과.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@SonAIengine
SonAIengine merged commit 53abde3 into main Oct 26, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant