Your Name
80c36ba801
Code Review / ai-code-review (push) Successful in 11s
CD Pipeline / tests (push) Successful in 1m9s
CD Pipeline / build-and-deploy (push) Successful in 3m29s
CD Pipeline / post-deploy-checks (push) Successful in 1m30s
fix(incident): F2 NO_ACTION 觸發 resolve_incident + 冪等 guard
【根因】INC-20260507-99ADF2 飛輪斷流,566+ stuck incidents(30秒漲 1)核心
原因:NO_ACTION 路徑 (approval_execution.py:251) 提前 return True,跳過
line 482-495 已有的 resolve_incident 呼叫,incident 永遠卡 INVESTIGATING。
【修法】
- approval_execution.py NO_ACTION 分支補 resolve_incident 呼叫 + 成功/失敗
log,背景 log 加 path="no_action" 用於 prod 量化修法生效率(debugger
全鏈分析 + critic 1st/2nd 審查必修 #1)。
- incident_service.py resolve_incident 在 line 1106 加 RESOLVED 冪等 guard,
早於所有副作用(status mutation / Redis / DB / postmortem / KB / KM /
disposition),順帶修 success path line 482-495 重觸 postmortem 的潛在
老風險(critic 必修 #2)。
【遵守 Codex 5/6 設計(feedback_respect_codex_design_intent.md)】
- 不動 flywheel_stats_service.py / heartbeat_report_service.py /
auto_repair_service.record_auto_repair() / metrics_repository UPPER(status)。
- resolve_incident 不寫 auto_repair_executions 表(Codex 5/6 source of
truth),不污染 24h KPI 計算。
【Test 覆蓋】
- test_approval_execution_no_action.py:NO_ACTION → resolve 被呼叫一次 +
resolve raise 時仍 return True(NO_ACTION 不能因 resolve 失敗退化成 False,
否則污染 auto_execute KPI line 207-208 註解契約)。
- test_incident_service_resolve_idempotency.py:RESOLVED → return existing +
save_to_working_memory 不被呼叫;not_found → return None。
【驗收條件(部署後 24h)】
1. grep `path="no_action"` 中 incident_resolved_after_no_action_execution
數量 vs background_execution_noop 數量,1:1 才算修復成功。
2. awoooi_flywheel_incidents_stuck 從每 30 秒漲 1 變平緩。
3. SRE 群 24h 內若湧入 >20 份 NO_ACTION postmortem 觸發 follow-up 評估
resolution_type="no_action" 跳過 postmortem(critic Minor #3 方案 B)。
Refs: INC-20260507-99ADF2, debugger root cause #1 (鏈 A), critic 1st 必修
#1 #2, critic 2nd 必修 #1 #2 #3
Co-Authored-By: Codex (aider) <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-07 18:55:58 +08:00
..
2026-04-25 03:29:38 +08:00
2026-05-06 21:17:25 +08:00
2026-03-26 16:06:20 +08:00
2026-04-25 02:33:43 +08:00
2026-04-05 14:45:02 +08:00
2026-03-31 16:25:00 +08:00
2026-04-10 11:22:57 +08:00
2026-05-01 16:53:02 +08:00
2026-05-01 16:53:02 +08:00
2026-05-01 15:09:57 +08:00
2026-05-06 08:55:14 +08:00
2026-05-03 12:42:40 +08:00
2026-05-06 00:05:51 +08:00
2026-05-06 14:34:48 +08:00
2026-05-06 14:34:48 +08:00
2026-04-22 01:33:30 +08:00
2026-04-29 10:44:39 +08:00
2026-04-20 04:13:02 +08:00
2026-04-22 01:41:34 +08:00
2026-04-20 19:40:01 +08:00
2026-04-20 19:40:01 +08:00
2026-05-06 03:34:24 +08:00
2026-05-07 01:51:31 +08:00
2026-04-30 14:06:09 +08:00
2026-05-01 13:02:07 +08:00
2026-03-29 15:27:49 +08:00
2026-04-29 19:44:04 +08:00
2026-05-06 16:34:39 +08:00
2026-05-07 18:55:58 +08:00
2026-04-14 14:39:14 +08:00
2026-03-29 15:27:49 +08:00
2026-05-01 10:47:42 +08:00
2026-05-06 13:18:43 +08:00
2026-05-06 13:05:51 +08:00
2026-05-07 10:40:14 +08:00
2026-04-27 15:22:31 +08:00
2026-05-06 17:18:52 +08:00
2026-05-07 10:12:52 +08:00
2026-05-05 15:57:26 +08:00
2026-05-03 00:18:57 +08:00
2026-03-29 15:48:03 +08:00
2026-05-05 14:28:18 +08:00
2026-05-03 22:49:23 +08:00
2026-04-27 08:11:40 +08:00
2026-04-30 14:06:09 +08:00
2026-04-30 14:06:09 +08:00
2026-04-27 08:11:40 +08:00
2026-05-02 17:41:28 +08:00
2026-05-06 22:03:19 +08:00
2026-05-06 00:19:35 +08:00
2026-04-30 14:06:09 +08:00
2026-04-27 14:42:29 +08:00
2026-05-06 19:39:01 +08:00
2026-05-06 15:30:31 +08:00
2026-05-01 20:34:33 +08:00
2026-05-07 00:58:20 +08:00
2026-05-06 14:34:48 +08:00
2026-03-31 12:16:54 +08:00
2026-04-15 12:44:53 +08:00
2026-05-05 14:28:18 +08:00
2026-04-29 22:56:12 +08:00
2026-04-11 21:33:19 +08:00
2026-04-26 20:17:17 +08:00
2026-04-01 11:11:50 +08:00
2026-05-05 14:28:18 +08:00
2026-05-03 00:05:04 +08:00
2026-05-03 12:42:40 +08:00
2026-05-03 12:42:40 +08:00
2026-05-03 01:48:57 +08:00
2026-05-06 17:58:56 +08:00
2026-05-03 01:44:58 +08:00
2026-04-07 11:17:40 +08:00
2026-05-07 18:55:58 +08:00
2026-04-29 23:38:30 +08:00
2026-05-06 21:27:46 +08:00
2026-03-31 16:16:16 +08:00
2026-04-27 14:54:19 +08:00
2026-04-29 19:44:04 +08:00
2026-05-06 17:03:22 +08:00
2026-04-29 10:44:39 +08:00
2026-04-29 10:44:39 +08:00
2026-04-26 20:44:19 +08:00
2026-03-31 12:20:29 +08:00
2026-04-26 20:18:33 +08:00
2026-03-26 16:06:20 +08:00
2026-05-05 23:06:07 +08:00
2026-05-06 16:54:14 +08:00
2026-04-29 10:44:39 +08:00
2026-05-06 17:40:42 +08:00
2026-05-06 17:40:42 +08:00
2026-05-04 19:31:53 +08:00
2026-05-06 16:21:43 +08:00
2026-05-06 13:18:43 +08:00
2026-04-15 13:08:38 +08:00
2026-05-06 16:11:26 +08:00
2026-05-06 14:34:48 +08:00
2026-05-06 14:34:48 +08:00
2026-05-06 14:34:48 +08:00
2026-04-30 23:02:17 +08:00
2026-03-29 20:49:23 +08:00
2026-05-05 23:37:33 +08:00
2026-05-05 13:25:27 +08:00
2026-05-06 05:27:55 +08:00
2026-05-06 14:34:48 +08:00
2026-05-06 14:34:48 +08:00
2026-05-06 00:05:51 +08:00
2026-05-06 20:20:58 +08:00
2026-05-01 13:02:07 +08:00
2026-05-05 13:55:52 +08:00
2026-04-29 22:38:57 +08:00
2026-05-02 12:31:37 +08:00
2026-04-29 11:39:36 +08:00
2026-05-05 13:41:41 +08:00
2026-04-27 08:17:59 +08:00
2026-05-06 05:27:55 +08:00
2026-04-09 08:55:21 +08:00
2026-05-07 00:58:20 +08:00
2026-04-05 00:14:50 +08:00
2026-05-07 03:55:01 +08:00
2026-04-30 23:59:39 +08:00
2026-04-30 23:59:39 +08:00
2026-04-14 15:19:54 +08:00
2026-05-06 17:18:52 +08:00
2026-05-06 17:18:52 +08:00
2026-05-06 14:34:48 +08:00
2026-04-27 19:56:51 +08:00
2026-03-29 16:23:30 +08:00
2026-03-23 23:51:37 +08:00
2026-04-14 14:39:14 +08:00
2026-04-30 14:06:09 +08:00
2026-04-29 10:49:25 +08:00
2026-04-15 13:08:38 +08:00
2026-04-20 04:23:09 +08:00
2026-04-29 19:44:04 +08:00
2026-04-27 08:24:59 +08:00
2026-04-27 16:00:00 +08:00
2026-04-09 09:01:59 +08:00
2026-04-27 14:42:29 +08:00
2026-05-02 12:31:37 +08:00
2026-05-07 04:20:26 +08:00
2026-04-10 01:12:00 +08:00
2026-04-30 00:09:25 +08:00
2026-04-30 15:01:23 +08:00
2026-05-06 16:45:47 +08:00
2026-04-27 19:56:51 +08:00
2026-04-12 21:08:48 +08:00
2026-05-07 02:07:43 +08:00
2026-03-31 16:16:16 +08:00
2026-04-22 01:27:39 +08:00
2026-05-03 12:42:40 +08:00
2026-04-27 08:11:40 +08:00
2026-05-03 00:05:04 +08:00