Files
DashBoard/openspec/changes/archive/2026-02-08-post-migration-resilience-governance/design.md
2026-02-08 08:30:48 +08:00

68 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## Context
`DashBoard_vite` 已完成單一 port 的 Flask + Vite 架構整併並具備降級回應、circuit breaker、watchdog 熱重啟與多層快取。
目前主要缺口不是功能不存在,而是「運維可操作性」與「前端治理粒度」:
1. health/admin 雖有狀態,但缺少門檻與建議動作,值班時仍需人工判讀。
2. watchdog 僅保留最後一次重啟紀錄,無法直接判斷短時間 churn。
3. WIP overview/detail 仍有 autocomplete/filter 搜尋邏輯重複,後續擴展成本高。
4. README 需要明確反映最新架構契約與改善策略,避免文件落後於實作。
## Goals / Non-Goals
**Goals:**
- 提供可操作的韌性診斷輸出thresholds、churn、recovery recommendation
- 保持既有單 port 與手動重啟控制模型,不引入高風險自動重啟風暴。
- 抽離 WIP 頁面共用 autocomplete/filter 查詢邏輯到 Vite core降低重複。
- 新增對應測試與文件更新,讓 gate 與 README 可驗證。
**Non-Goals:**
- 不做整站 SPA rewrite。
- 不改動既有 drill-down 路徑與使用者操作語意。
- 不預設啟用「條件達成即自動重啟 worker」的強制策略。
## Decisions
1. 韌性診斷採「可觀測 + 建議」而非預設自動重啟
- Decision: 在 `/health``/health/deep``/admin/api/system-status``/admin/api/worker/status` 增加 thresholds/churn/recommendation。
- Rationale: 目前已具備 degraded response + backoff + admin restart先提升判讀與操作性避免未設防的自動重啟造成抖動。
- Alternative considered: 直接在 pool exhausted 時自動重啟 worker未採用因 root cause 多為慢查詢/瞬時壅塞,重啟治標不治本且有風暴風險。
2. watchdog state 擴充最近重啟歷史
- Decision: 在 state 檔保留 bounded restart history 並計算 churn summary。
- Rationale: 提供運維端可觀測的重啟密度訊號,支援告警與 runbook 決策。
- Alternative considered: 僅依日誌分析;未採用,因 API 需要機器可讀狀態。
3. WIP autocomplete/filter 抽共用核心模組
- Decision: 新增 `frontend/src/core/autocomplete.js`,由 `wip-overview` / `wip-detail` 共用。
- Rationale: 保留既有 API 與頁面互動語意,同時降低重複與 bug 修補成本。
- Alternative considered: 全量頁面元件化框架重寫;未採用,因超出本次風險與範圍。
4. README 架構契約同步
- Decision: 更新 README並提供 `README.mdj` 鏡像)記錄新的韌性診斷與前端共用模組策略。
- Rationale: 交付後文件應可直接支援運維與交接。
## Risks / Trade-offs
- [Risk] 韌性輸出欄位增加可能影響依賴固定 schema 的外部腳本
- Mitigation: 採向後相容擴充,不移除既有欄位。
- [Risk] 共用 autocomplete 模組抽離後可能引入搜尋參數差異
- Mitigation: 保持原有欄位映射與 cross-filter 規則,並補單元測試覆蓋。
- [Risk] restart history 持久化不當可能造成 state 膨脹
- Mitigation: 使用 bounded history固定上限與窗口彙總。
## Migration Plan
1. 實作 resilience diagnosticsthresholds/churn/recommendation與 watchdog state 擴充。
2. 更新 health/admin API 輸出並補測試。
3. 抽離前端 autocomplete 共用模組,更新 WIP 頁面引用並執行 Vite build。
4. 更新 README/README.mdj 與 runbook 對應段落。
5. 執行 focused pytest + frontend build 驗證,確認單 port 契約不變。
## Open Questions
- 是否在下一階段將 recommendation 與告警 webhookSlack/Teams直接整合
- 是否要把 restart churn 門檻與 UI 告警顏色標準化到 admin/performance 頁?