cwkPippa brain fallback은 task마다 Codex → Claude → Gemini 순서로 시도하고 필요하면 task별로 바꿀 수 있어. provider마다 성능이 떨어지는 시간이 서로 달라서 chain이 한 곳의 장애를 흡수해.
같은 provider 재시도만으로는 부족해
provider 장애는 한 요청만의 우연한 실패가 아닐 수 있어. Claude가 degraded된 시간에 Claude를 다섯 번 다시 부르면 같은 이유로 모두 실패할 가능성이 커. 다른 provider로 넘어가야 독립된 복구 경로가 생겨.
한 provider 안에서도 다른 failure mode를 나눠
- native vision + Read-tool fallback — 모델의 vision degradation을 막아.
- OAuth + API-key — identity layer 장애를 막아.
- SQLite + JSONL — query store 손상을 복구해.
각 쌍은 다른 실패 원인을 방어하려고 의도적으로 존재해. 중복처럼 보인다고 하나를 없애면 single point of failure가 생겨.
try_chain helper로 정책을 한곳에 모아
try_chain(providers, op)에서 provider마다 timeout을 두고 차례로 시도한 뒤 모두 실패하면 원인을 모은 error를 반환해. 일부러 불안정한 중간 provider를 넣어 chain이 실제로 넘어가는지 시험해.