6 cause 분류
C1 schema_drift 모델 출력이 스키마와 어긋남 C2 evidence_missing 주장은 했지만 근거가 없음 C3 score_inconsistent G1-G4 통과했으나 점수가 evidence 와 모순 C4 bias_detected BiasBuster 가 confirmation/recency/anchoring 검출 C5 cross_llm_disagree 다른 프로바이더가 다른 verdict C6 timeout 응답 시간/토큰 초과
5 복구 행동
A1 re-prompt 같은 모델, 보강된 prompt 로 재호출 A2 escalate 상위 모델 (Sonnet → Opus) 로 라우팅 A3 cross-check cross-LLM verifier 호출 A4 abstain verdict 거부, downstream 에 NaN 전달 A5 fail-fast 전체 cycle abort, 운영자 알림
매핑
| cause | 1차 action | fallback |
|---|---|---|
| C1 schema_drift | A1 re-prompt | A4 abstain |
| C2 evidence_missing | A1 re-prompt | A4 abstain |
| C3 score_inconsistent | A3 cross-check | A4 abstain |
| C4 bias_detected | A2 escalate | A3 cross-check |
| C5 cross_llm_disagree | A2 escalate | A5 fail-fast |
| C6 timeout | A1 re-prompt | A5 fail-fast |
왜 트리인가
실패를 분류하지 않은 채 'retry' 한 줄로 처리하면 같은 실패가 무한 반복되거나, 비용 시도만 늘어납니다. cause 분류는 어디서 멈춰야 하는지 + 어디로 escalate 해야 하는지를 명시.
참조: `.claude/skills/geode-verification` (Decision Tree 섹션), `core/verification/`.