08 信頼性設計 — クラッシュしても続く仕組み
長時間の自動実行では、通信が切れたり、途中で落ちたりします。「落ちた=最初からやり直し」では実用になりません。NexusCoreの信頼性設計を解説します。
3つの支柱
flowchart TB
A["🛡️ 信頼性設計"] --> B["🌀 ブレーカー"]
A --> C["💾 状態の保存"]
A --> D["🔁 再開(resume)"]
B --> B1["AIが連続で失敗したら\n一時的に使用を止める"]
C --> C1["進捗をこまめに保存\n原子的な書き込み"]
D --> D1["保存した状態から\n続きから再開"]
ブレーカー(サーキットブレーカー)
AIプロバイダが混雑して連続で失敗しているとき、何度も再試行するのは時間とお金の無駄です。NexusCoreは60秒の窓内で3回失敗したら一時的に使用を止め、冷却時間の後に少しだけ試して回復を確かめてから再開します(電気のブレーカーと同じ発想)。
状態保存の原子的書き込み
保存の途中でクラッシュすると、ファイルが「前半新しくて後半古い」壊れた状態になります。NexusCoreは一時ファイルに完全に書いてから入れ替える方式で、どの瞬間に落ちても状態が壊れないようにしています。壊れた場合は自動で隔離し、誤採用はしません(クリアは人間の手動コマンド限定)。
技術的な土台
<details><summary>▶ 技術的にどうなっているか</summary>
- CircuitBreaker: CLOSED→OPEN→HALF_OPEN の状態機械・60秒窓内threshold=3でOPEN・cooldown後プローブ(試験 shot)2回成功でCLOSED復帰
- RunStateStore: temp書込→fsync→os.replace+ファイルロック+チェックサム。破損時はquarantine(別名保存)
- ループとの連携順序を固定: LLM呼出前チェック→失敗記録→OPEN遷移→状態保存→再送出(round7修正条項)
- SIGINT(Ctrl+C)でも現在の進捗を保存してから終了
- 明示resume機能はPhase 2で対応予定・Phase 1は保存と整合確認まで
</details>