# ops_doctor_decision_contract ## Purpose 冻结 `doctor-decision` 主决策 contract,让页面、CLI、Codex 都消费同一份“当前先看哪一面、先执行什么动作、为什么”的正式结论。 ## Producer - backend service `app.services.ops_service.get_ops_doctor_decision` - API `GET /api/v1/ops/doctor-decision` ## Primary Consumers - `domain-web` Ops Center 顶部总检入口与主决策详情面板 - `domain-api/deploy/multi-region/drive_ops_center.sh doctor-decision` - 海外 Codex 驾驶员 / 自动驾驶策略层 ## Required Payload - `status` - `status_label` - `headline` - `detail` - `decision` - `summary` - `recommended_commands` - `contract_navigation` ## Decision Shape - `decision.status` - `decision.reason_code` - `decision.headline` - `decision.detail` - `decision.preferred_surface` - `decision.next_action_code` - `decision.recommended_commands` ## Summary Shape - `summary.required_failures` - `summary.optional_unavailable` - `summary.scene_log_reports_total` - `summary.scene_log_reports_ok` - `summary.scene_log_status_counts` - `summary.scene_log_problem_node_codes` - `summary.contract_surface_gaps` - `summary.launchpad_recommended_target_node_code` - `summary.launchpad_recommended_recovery_label` - `summary.launchpad_recommended_recovery_summary` ## Notes - 优先读取最新 `go-live bundle` 中的 `doctor_decision` 产物。 - 如果 bundle 尚未导出,后端必须回落到 live `stack-diagnosis + go-live-summary` 兜底,而不是直接返回空。 - `preferred_surface` 必须稳定可消费,不能把面板跳转逻辑继续留给前端猜测。