model call Unknown class 노출과 provider 동작 고정 테스트, CI no-fail-fast - #59
Merged
Createyouracccount merged 3 commits intoSep 7, 2026
Merged
Conversation
RecoveryReason::ModelCallUnknown이 journal의 ModelCallUnknownReason을 버려 timeout, transport_unavailable, interrupted가 모두 model_call_unknown 하나로 보고됐다. 로컬 27B에서 planner timeout을 진단할 때 저널을 직접 열어야 했던 원인이다. 이제 model_call_unknown.<class>로 보고하며, durable Unknown 상태·process 경계 뒤 남은 reservation(interrupted)·planner port failure(timeout, transport_unavailable) 세 경로가 같은 class로 수렴한다. 실측으로 잡은 provider 동작을 hermetic 테스트로 고정한다: assistant message의 reasoning/reasoning_content 필드는 planner와 probe 양쪽에서 무시되고, 응답을 멈춘 provider는 client 예산(1초)에서 PlannerUnavailable(Timeout)으로 닫히며 journal에 ModelCallBecameUnknown(timeout)을 남기고 재시도하지 않는다. CI와 release quality job의 cargo test에 --no-fail-fast를 추가한다. 한 test binary가 실패하면 나머지 binary 결과가 보고되지 않아 45개 중 14개만 보이던 문제를 없앤다.
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.
배경
PR #57·#58을 검증하면서 planner timeout을 진단할 때마다 Run의 SQLite를 직접 열어야 했습니다.
XGENY_RECOVERY_REQUIRED reason=model_call_unknown은 journal이 이미 구분해 기록하는timeout/transport_unavailable/interrupted를 한 단어로 뭉갰습니다(PR #53·#55가 rejection 경로에서 고친것과 같은 손실). 또 #56 검증에서 한 test binary가 실패하자 CI 방식의
cargo test가 45개 중 14개만보고해, 나머지 binary의 상태를 알 수 없었습니다.
변경 사항
RecoveryReason::ModelCallUnknown이 journal과 동일한ModelCallUnknownReason을 전달하고model_call_unknown.<class>로 보고합니다. Durable Unknown 상태, process 경계 뒤 남은 reservation(interrupted), planner port failure(timeout,transport_unavailable) 세 경로가 같은 class로 수렴합니다. 문제 해결 표를 갱신했습니다.reasoning(Ollama) /reasoning_content(vLLM·llama.cpp) 필드는 planner·probe 양쪽에서 무시됩니다.PlannerUnavailable(Timeout)으로 닫히며 journal에ModelCallBecameUnknown(timeout)을 남기고 재시도하지 않습니다.cargo test --workspace --locked에--no-fail-fast를 추가합니다. Release/npm workflow 계약 검사는 통과합니다.실제로 동작하게 된 것
같은 machine, 재빌드한 바이너리입니다.
이전에는 세 경우 모두
reason=model_call_unknown이었습니다.데이터 경계
노출하는 class는 journal의
model_call_became_unknown이 이미 기록하는 값과 같으며 prompt·model출력·provider 응답 본문을 포함하지 않습니다. Request profile digest·manifest·journal·receipt는 바뀌지
않습니다.
검증
cargo fmt --all -- --checkcargo clippy --workspace --all-targets --locked -- -D warningscargo test --workspace --locked --no-fail-fast(568 passed / 0 failed, 45 binaries)cargo build --workspace --release --lockedxgeny protocol checksh scripts/check-rc3-public-docs.sh,check-release-workflow.sh,check-npm-distribution-workflow.sh,check-third-party-licenses.sh --check실패 테스트를 먼저 추가해 red를 확인한 뒤 구현했습니다(journaled/un-journaled 경로의 class 수렴,
세 class의 코드 문자열). 8B 스모크는 같은 입력에서
COMPLETED/provider_limit/invocation_invalid가번갈아 나와 회귀 기준선으로 쓰지 않았습니다. 이 브랜치는 planner 요청 조립을 건드리지 않습니다.
범위 밖
Planner 경로의
provider_limit(출력 잘림과 HTTP 413/429 동일 class) 분리는 durable journal enum변경이라 별도입니다. 이 PR은 게시나 태그 생성을 수행하지 않습니다.