docs: ADR-092 附錄 A+B + LOGBOOK + MASTER §8 記錄四修與 C1-C4 全流程串接

- ADR-092: 附錄 A(B1-B4 四修 root cause + commit)+ 附錄 B(C1-C4 斷點修復表 + 架構鐵律)
- LOGBOOK: 新增 2026-04-20 晚 C1-C4 章節(斷點清單 + commits + 驗收步驟)
- MASTER §8: 追加 C1-C4 changelog(§3/§1.1 對齊 + 修復後行為說明)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Your Name
2026-04-20 20:24:41 +08:00
parent 9a44516bf8
commit 994817a23a
3 changed files with 88 additions and 0 deletions

View File

@@ -1202,3 +1202,32 @@ CR 修補:
- [ ] 生產 7 天監控trust_score 更新、JSONL 累積、null 率)
**下一步:** 7 天生產觀察 Phase 3 退出條件2026-04-22 檢查點)
---
## 2026-04-20 晚(台北)— C1-C4 全流程串接 — Playbook 自動修復鏈路保護
**觸發**:統帥要求全景盤查所有 AI 自動化節點後,發現 Playbook 鏈路有 3 個結構性斷點。
### 斷點清單 → 修復
| # | 斷點 | 根因 | 檔案 | 修復 |
|---|------|------|------|------|
| C1 | evolver 封存 yaml_rule playbooks → 自動修復鏈路斷 | `_archive_low_trust` / `_archive_dormant``YAML_RULE` guard | `playbook_evolver.py` | `if pb.source == PlaybookSource.YAML_RULE: continue` |
| C2 | seeder 不復活已封存 yaml_rule | idempotency SQL 包含 DEPRECATED 記錄 | `playbook_seed_service.py` | SQL 加 `AND status != 'deprecated'` |
| C3 | AI 新規則不即時建立 Playbook等重啟 | `_append_rule_to_yaml` 成功後無 seeder 呼叫 | `alert_rule_engine.py` | 加 `create_task(seed_playbooks_from_rules())` |
| C4 | watchdog 不偵測鏈路斷裂 | W-4 缺失 | `ai_slo_watchdog_job.py` | 加 `_count_approved_playbooks()` W-40 → TYPE-8M |
### Commits
| commit | 說明 |
|--------|------|
| `80aea20` | C1-C4 全流程串接(本機) |
| `de2d34d` | push to Gitearebase 含 ADR-092 四修 `156a52f`|
### 下一步驗收
1. evolver 週期後 → yaml_rule playbooks 仍 APPROVEDC1 保護)
2. 重啟後 → 被封存 yaml_rule playbooks 復活C2 seeder 修復)
3. AI 自動生成新規則 → 立即出現對應 APPROVED PlaybookC3 接線)
4. Watchdog W-4 → APPROVED 數量為 0 時 TYPE-8M 告警C4 感知)

View File

@@ -132,3 +132,43 @@ Grade: mature(90+) / in_progress(70-90) / starter(50-70) / initial(<50)
- ADR-081 PreDecisionInvestigator + EvidenceSnapshot
- ADR-083 學習閉環重建
- ADR-090 監控盲區治理 + 自動化覆蓋矩陣11 張 + 8 張新表)
---
## 附錄 A2026-04-20 四修B1-B4— 全流程斷鏈緊急修復
**觸發**:統帥截圖 Telegram 顯示「採納失敗」+ 兩天無任何告警。
**指令**:全景、全流程、全節點、全架構比對,找到所有斷點再修。
### Root Cause 鏈
| 症狀 | 斷點 | 根因 |
|------|------|------|
| Playbook 學習失敗 163次/48h | `playbook_service.update_with_validation` | `evolver``.value`str`setattr` 不觸發 Pydantic → `.value` 炸 |
| Telegram 永久靜默 2 天 | `approval_db.find_by_fingerprint` | PENDING = 「已發 TG」謊言TG 失敗後 approval 永 PENDING → 永遠收斂跳過 |
| 採納變更失敗 | `telegram_gateway._handle_drift_action` | 呼叫 `DriftAdoptService.adopt_drift()` 但方法不存在AttributeError |
| AI 無法感知自身故障 | main.py 無 background watchdog | MASTER §1.1 盲區SLO 計算只是 API endpoint |
### 修復6 檔 / 230 行 / commit 156a52f
1. **B1** `playbook_service.py``update_with_validation` setattr 前強制 enum 轉型
2. **B2a** `approval_db.py``find_by_fingerprint` debounce 窗外 PENDING 必須 Redis `tg_sent:{fp}` 確認;新 `mark_telegram_confirmed()`
3. **B2b** `webhooks.py``_push_to_telegram_background` 成功後 `setex tg_sent:{fp}` 24h3 call site 傳 fingerprint
4. **Drift** `drift_adopt_service.py` — 新 `adopt_drift(report_id)` wrapper
5. **B3** `jobs/ai_slo_watchdog_job.py` — 新建:每 15 分鐘 W-1/W-2/W-3 → TYPE-8M
6. **B3** `main.py` lifespan 註冊 watchdog loop
---
## 附錄 B2026-04-20 C1-C4 — Playbook 鏈路結構性斷點修復
**觸發**:統帥全景盤查後,發現 Playbook 自動修復鏈路有 3 個結構性斷點。
| # | 斷點 | 根因 | 修復 | commit |
|---|------|------|------|--------|
| C1 | evolver 封存 yaml_rule playbooks | 無 `YAML_RULE` source guard | `playbook_evolver.py` 兩處加 `if source == YAML_RULE: continue` | de2d34d |
| C2 | seeder 不復活 DEPRECATED yaml_rule | idempotency SQL 包含 DEPRECATED | `AND status != 'deprecated'` | de2d34d |
| C3 | AI 新規則不即時建立 Playbook | `_append_rule_to_yaml` 後無 seeder 呼叫 | `create_task(seed_playbooks_from_rules())` | de2d34d |
| C4 | watchdog 不偵測鏈路斷裂 | W-4 缺失 | `_count_approved_playbooks()`;為 0 → TYPE-8M | de2d34d |
**架構鐵律**`PlaybookSource.YAML_RULE` playbooks 是自動修復鏈路的「基礎設施」evolver 的 trust-based 退場邏輯不得觸及此類 playbooks。

View File

@@ -1695,3 +1695,22 @@ Phase 6 完成後
**MASTER §1.1 自主化北極星對齊**B3 watchdog 是「系統必須能感知自身故障」的首個 background 閉環,填補 Phase 6 僅有 API endpoint 的空缺。
**下一步驗收**等真實告警→TG卡片出現等採納→成功等 15 分鐘→Watchdog日誌等 evolver 週期→pg_upsert_failed=0。
---
### 2026-04-20 晚 (台北) — C1-C4 全流程串接 — Playbook 鏈路保護commit de2d34d
**觸發**:統帥全景盤查 AI 自動化節點後,發現 Playbook 自動修復鏈路有 3 個結構性斷點。
**MASTER §3自動修復 + Playbook 演化)對齊**
- §3.4 evolver 不得封存由 yaml_rule seeder 建立的 APPROVED playbooks
- §3.5 seeder 必須在重啟時復活被 evolver 誤封的 yaml_rule playbooks
- §3.6 AI 自動生成規則必須立即建立對應 Playbook不等重啟
- §1.1 watchdog 必須感知 APPROVED playbook 數量為 0 的鏈路斷裂
| 修復 | 結構斷點 | 修復後行為 |
|------|---------|-----------|
| C1: `playbook_evolver.py` YAML_RULE guard | evolver 封存 seeder playbooks | yaml_rule source 永不被 evolver 封存 |
| C2: `playbook_seed_service.py` SQL 排除 DEPRECATED | 重啟不復活 DEPRECATED | `status != 'deprecated'` → 重啟自動復活 |
| C3: `alert_rule_engine.py` 呼叫 seeder | AI 新規則等重啟才有 Playbook | 成功寫入 yaml 後立即 `seed_playbooks_from_rules()` |
| C4: `ai_slo_watchdog_job.py` W-4 | 鏈路斷裂無感知 | `approved_count == 0` → TYPE-8M 自健診 |