docs: Phase R-R2 完成文件更新 + ADR-046 型別統一

- ADR-024: 更新執行進度 (R1 R2 R3 R4待執行)
- ADR-046: 新增跨套件 Incident 型別統一治理 (待決策)
  推薦 Option B: IncidentConverter 轉換層
- Skill 02: v2.5 記錄 Phase R-R2 + R-R2.1 + ADR-046
- LOGBOOK: 更新當前狀態

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
OG T
2026-03-31 22:17:44 +08:00
parent d17b67c823
commit cd91560e0b
4 changed files with 100 additions and 1 deletions

View File

@@ -35,6 +35,7 @@
| v2.2 | 2026-03-30 | Claude Code | 🎯 新增 Phase 19.4 API 整合章節 (Approval + K8s 真實 API) |
| v2.3 | 2026-03-30 | Claude Code | 🤖 新增 AI Fallback 順序章節 (NVIDIA 優先仲裁) |
| v2.4 | 2026-03-31 | Claude Code | 🏛️ Phase 22 首席架構師審查通過 (Mock違規+分層修復全部完成) |
| v2.5 | 2026-04-01 | Claude Code | ♻️ Phase R-R2 完成 (legacy -971行) + R-R2.1 P0/P1修復 + ADR-046 型別統一 |
---

View File

@@ -9,6 +9,9 @@
| 項目 | 狀態 |
|------|------|
| **Phase R-R2.1** | ✅ **架構審查 P0+P1 修復** `d17b67c` (key prefix/型別/死碼) 80→92/100 |
| **Phase R-R3** | ✅ **已完成** (Phase 22 架構修復中建立, 9 repos) |
| **ADR-046** | 📋 **待統帥決策** 跨套件 Incident 型別統一 (Option B: IncidentConverter) |
| **Phase R-R2** | ✅ **完成** (#121 #122 `c7b3f8f` -971 行 legacy code#123 暫緩至 R-R3) |
| **Phase R-R1** | ✅ **已實作** (絞殺者模式 + USE_NEW_ENGINE=True 已驗證) |
| **首席架構師審查** | ✅ **78→85/100** (P0 NVIDIA型別 + P1 IAIRouter Interface) |

View File

@@ -2,7 +2,7 @@
| 項目 | 內容 |
|------|------|
| **狀態** | ✅ 已採用 |
| **狀態** | ✅ 已採用 (Phase R-R2 完成2026-04-01) |
| **日期** | 2026-03-26 |
| **決策者** | 首席架構師 + 統帥 |
| **Phase** | Phase 16 |
@@ -165,9 +165,22 @@ kubectl set env deployment/awoooi-api USE_NEW_LAYER=false
- 短期開發成本增加
- 需要團隊學習新規範
## 執行進度
| Phase | 任務 | 狀態 | Commit |
|-------|------|------|--------|
| R1 | 絞殺者包裝 (USE_NEW_ENGINE) | ✅ | Phase 16 R1 |
| R2 | 移除內嵌重複邏輯 | ✅ | `c7b3f8f` (2026-04-01) |
| R3 | 抽取 Repository 層 | ✅ | Phase 22 (repositories/) |
| R4 | 瘦身 Router 層 | 🔴 待執行 | - |
> Phase R-R2.1 架構審查通過 (80/100)。P0+P1 已修復 (`d17b67c`)。
> P2 技術債 (ADR-013 時間格式) 移至下個 Sprint。
## 相關文件
- ADR-005: BFF Architecture
- ADR-003: leWOOOgo Module Architecture
- ADR-046: 跨套件 Incident 型別統一 (BrainIncident vs local Incident)
- `feedback_strangler_fig_pattern.md`
- `reference_phase16_architecture.md`

View File

@@ -0,0 +1,82 @@
# ADR-046: 跨套件 Incident 型別統一治理
| 項目 | 內容 |
|------|------|
| **狀態** | 📋 待決策 |
| **日期** | 2026-04-01 |
| **決策者** | 首席架構師 + 統帥 |
| **觸發** | Phase R-R2.1 架構審查 P2-01 |
## 背景
Phase R-R2 完成後,系統中同時存在兩種 Incident 型別:
| 型別 | 來源 | 欄位 |
|------|------|------|
| `src.models.incident.Incident` | 本地 (apps/api) | decision_chain, outcome, ttl_days, vectorized, persisted_to_pg |
| `lewooogo_brain.interfaces.incident_processor.Incident` (BrainIncident) | lewooogo-brain 套件 | 精簡欄位,無 decision_chain 等 |
### 問題根源
`IncidentDbAdapter._record_to_incident()` 返回 `BrainIncident`,但靜態型別宣告為本地 `Incident`
`IncidentMemoryAdapter``load_incident()` 通過 `brain.DualIncidentMemory` 返回 `BrainIncident`
部分 Service 層(如 `proposal_service.py``incident_service.py`)期望本地 `Incident` 型別,
導致 `AttributeError` 風險或靜態分析誤報。
## 三種方案
### Option A本地 `Incident` 繼承 `BrainIncident`
```python
# src/models/incident.py
from lewooogo_brain.interfaces.incident_processor import Incident as BrainIncident
class Incident(BrainIncident):
"""AWOOOI 本地擴展 Incident"""
decision_chain: AIDecisionChain | None = None
ttl_days: int = 30
vectorized: bool = False
persisted_to_pg: bool = False
```
- ✅ 型別統一,靜態分析通過
- ⚠️ 強依賴 lewooogo-brain 套件版本
- ⚠️ BrainIncident 變更會影響本地
### Option B建立 `IncidentConverter` 轉換層
```python
# src/utils/incident_converter.py
def brain_to_local(brain_incident: BrainIncident) -> Incident: ...
def local_to_brain(local_incident: Incident) -> BrainIncident: ...
```
- ✅ 兩者保持獨立,變更不互相影響
- ✅ 轉換點明確,可審計
- ⚠️ 每次跨邊界需顯式轉換,增加樣板代碼
### Option C逐步廢棄本地 `Incident`,全面切換至 `BrainIncident`
- ✅ 最終架構最簡潔
- 🔴 需要修改所有使用本地 `Incident` 的程式碼30+ 處)
- 🔴 proposal_service、incident_service 等需要大規模重構
## 建議
**推薦 Option B**IncidentConverter 轉換層),理由:
1. 套件邊界清晰,符合 leWOOOgo 積木化原則
2. 遷移風險最低,可漸進式採用
3. 若未來棄用 lewooogo-brain只需修改 Converter
短期緩解(已實施):
- `_record_to_incident` 返回型別標注為 `Any`P0-01 修復)
- 不阻擋現有業務邏輯
## 後續行動
- [ ] 首席架構師決策選擇方案
- [ ] 若選 Option B建立 `src/utils/incident_converter.py`
- [ ] 更新 `IncidentDbAdapter._record_to_incident` 返回正確型別
- [ ] 更新 `IncidentMemoryAdapter` 型別標注
## 相關文件
- ADR-024: API 分層架構 (Phase 16 絞殺者模式)
- ADR-003: leWOOOgo Module Architecture
- `feedback_lewooogo_modular_enforcement.md`
- Phase R-R2.1 架構審查報告 (commit `d17b67c`)