fix(engine): post-delta 전송 오류를 안전하게 재시도한다 - #2
Open
rainstorm0907 wants to merge 1 commit into
Open
rainstorm0907 wants to merge 1 commit into
rainstorm0907 wants to merge 1 commit into
Conversation
Co-Authored-By: Codex <noreply@openai.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
왜 바꿨나
모델이 글을 조금 내보낸 뒤 WebSocket이 끊기면 Rubato가 모든 post-delta 오류에
senpi:no-turn-retry:를 붙였어. 그 결과 글만 쓰던 턴이나 아직 실행되지 않은 일반 toolCall도 재시도하지 못하고, 해당 세션을 기다리던 다른 세션까지 그대로 멈췄어.원래 막으려던 건 텍스트 중복이 아니라 provider가 stream 안에서 이미 실행한 도구의 중복 실행이야. 재시도 경계를 delta 유무가 아니라 실제 provider 실행 여부로 좁혔어.
어떻게 바꿨나
kCursorExecResolved가 보이면 call state에 latch하고 기존senpi:no-turn-retry:를 유지해.toolUse로 바꾸는 기존 방어는 그대로 유지해.AgentSession._isRetryableError판정까지 회귀 테스트에 넣었어.검증
node --test harness/rubato-pi/test/unit/rubato-stream.test.mjs— 34/34 통과npm --prefix harness/rubato-pi test— exit 1npm --prefix harness/rubato-pi run test:integration— exit 1bun run typecheck— exit 1마지막 세 검사는 변경분을 전부 stash한 최신
rubato/base원본에서도 각각 같은 자리에서 exit 1이었어. 이번 수정이 만든 회귀는 아니야. 자세한 실패와 판단 근거는cycles/2026-09/wk1/09-01/1917-post-delta-websocket-retry-wrap.md에 남겼어.남은 위험
실제 네트워크를 강제로 끊는 live fault injection은 하지 않았어. 테스트는 설치된 Senpi의 실제 retry 판정과 pi-ai의 실제 module-local Symbol을 사용해.