# Ollama/付費 Critic 容災 Runbook 狀態:`global_product_governance_v2`,2026-07-16 Asia/Taipei。 ## 唯一 production 順序 1. `ollama_gcp_a` — GCP-A Ollama,cloud data boundary。 2. `ollama_gcp_b` — GCP-B Ollama,cloud data boundary。 3. `ollama_local` — host111 Ollama,唯一 local-only hop。 4. `claude` — Anthropic Claude API,付費 canary/fallback。 5. `gemini` — Gemini API,最後付費備援。 Host110 不再是 Ollama provider、proxy 或 fallback。任何告警、runtime manifest、Ansible PlayBook、verifier 或 UI 若將 host110 顯示為 Ollama identity,必須標成 `asset_identity_drift`,不得切換或自動重建舊 transport。 GCP-A/B 目前的 direct public HTTP 是暫時 transport,不能算完整 production closure。P0 replacement 是 WireGuard `10.77.114.x` mesh;完成 replay、canary、 runtime readback 後才能關閉 public listener。 ## 只讀診斷 ```bash bash scripts/ops/ollama111-fallback-proxy-diagnose.sh ``` 輸出只包含 canonical provider、data boundary、HTTP 健康狀態與 production route readback 狀態;不輸出 key、prompt、response 或 host110 proxy 資訊。 判讀: | 證據 | 判定 | 安全下一步 | |---|---|---| | GCP-A healthy | 保持第一順位 | 不切換 | | GCP-A unavailable、GCP-B healthy | 第二順位可用 | 建立 GCP-A transport work item;不改固定順序 | | GCP-A/B unavailable、host111 healthy | local hop 可用 | 保持 local-only privacy boundary | | host111 unavailable | local-only 任務 fail closed | 由 host111 Ansible executor check/apply/verify | | Claude/Gemini 被使用 | 前三跳皆有 bounded unavailable receipts | 驗證 sanitized receipt、token/cost cap、rollback | | 任一 circuit open | 該 candidate 不得滑到別台主機或別 domain | 保留 exact failure receipt,等待 cooldown/同 domain repair | ## Alert 與自動化契約 每個 failover/recovery lifecycle 必須顯示: - canonical source 與 provider identity; - Ollama RCA/Claude 或 Gemini Critic 是否實際呼叫; - deterministic policy decision; - executor(若沒有必須明示 `none`); - independent verifier 與 receipt ID; - token、cost、latency及 paid budget state; - rollback/no-write terminal; - KM、RAG、MCP、PlayBook durable acknowledgement。 只讀 route/status 查詢不得觸發 failover Telegram、切換 provider 或修改 Redis。 同一 canonical transition 依 TTL 去重;selected primary 與 observed fallback 必須 分開呈現,不能把 fallback 說成 primary 已切換。 ## Privacy 與成本 - `require_local=true` 只能使用 host111;GCP-A/B 不得因自架 Ollama 被誤認為 local。 - Claude/Gemini 只接收已提交 synthetic fixture 或具可信 sanitization receipt 的資料。 - provider key 只由 protected runtime secret reference 注入;禁止讀回或記錄明文。 - 付費 lane 必須先有 run-owned TTL lease、request/token/daily/monthly cost cap、 generation accounting receipt 和 paired rollback。 - 單一 canary scenario 只能比較該 fixture 的正確率、延遲與成本,不能宣稱模型全面勝出。 ## Runtime closure 不能用「health 200」、「CD success」或 Telegram 卡片單獨結案。完整 terminal: `Detect → Normalize → Correlate → Decide → Check → Controlled Apply → Verify → Retry/Rollback → Learn/Writeback` 若 GCP mesh、host111 reachability、paid accounting、independent verifier 或 learning ack 任一缺失,狀態維持 `partial/degraded/blocked_with_safe_next_action`。