# AWOOOI 架構指引

> 架構相關的核心原則與規範

---

## 文件資訊

| 欄位 | 值 |
|------|-----|
| **版本** | v1.1 |
| **建立日期** | 2026-03-22 (台北) |
| **建立者** | Claude Code |
| **最後修改** | 2026-03-25 23:59 (台北) |
| **修改者** | Claude Code |

### 變更紀錄

| 版本 | 日期 | 執行者 | 變更內容 |
|------|------|--------|----------|
| v1.0 | 2026-03-22 | Claude Code | 初始建立 |
| v1.1 | 2026-03-25 | Claude Code | 加入文件資訊區塊 |

---

## 快速索引

| 主題 | 核心原則 | 詳細章節 |
|------|---------|---------|
| OpenClaw | 產品核心，只能增強不能移除 | [→ OpenClaw](#openclaw-核心架構) |
| 模組化 | Interface → Memory → Brain → Skill | [→ leWOOOgo](#lewooogo-模組化) |
| API 整合 | Props Mapping 五步驟檢查 | [→ API](#api-整合) |
| 防禦性 | 先質疑後實作 | [→ 防禦性工程](#防禦性工程) |

---

## OpenClaw 核心架構

**Memory 來源:** `feedback_architecture_openclaw_core.md`

### 原則

```
✅ OpenClaw 是 AWOOOI 產品核心
✅ 只能增強，不能移除
✅ 決策鏈必須可視化 (ThinkingTerminal)
✅ 雙軌決策: LLM + Expert System Fallback
```

### 決策流程

```
Signal → IncidentEngine → DecisionManager → Telegram/UI
                              ↓
                    LLM 提案 + Expert System 備援
```

### 命名規範

- ✅ 正確: OpenClaw, openclaw
- ❌ 禁止: OpenClaw, clawbot (舊稱)

---

## leWOOOgo 模組化

**Memory 來源:** `feedback_modular_architecture.md`, `feedback_modular_core_spirit.md`

### 四層架構

```
┌─────────────────────────────────────────┐
│  Skill Layer (技能層)                   │
│  - 特定領域知識                          │
│  - 可組合、可替換                        │
├─────────────────────────────────────────┤
│  Brain Layer (決策層)                   │
│  - LLM + Expert System                  │
│  - 決策邏輯                              │
├─────────────────────────────────────────┤
│  Memory Layer (記憶層)                  │
│  - Working: Redis (短期)                │
│  - Episodic: PostgreSQL (長期)          │
├─────────────────────────────────────────┤
│  Interface Layer (介面層)               │
│  - Telegram Gateway                     │
│  - REST API                             │
└─────────────────────────────────────────┘
```

### 核心精神

1. **Interface 先行** - 先定義清晰的介面契約
2. **Memory 分離** - Working Memory ≠ Episodic Memory
3. **Brain 獨立** - 決策邏輯不綁定特定 LLM
4. **Skill 可組合** - 技能可插拔、可替換

---

## API 整合

**Memory 來源:** `feedback_api_response_verification.md`

### Props Mapping 五步驟檢查

新增 API 欄位時，必須確認完整鏈路：

```
1. API Response 有該欄位 ✓
2. Mapper 函數有轉換該欄位 ✓  ← 最常遺漏！
3. TypeScript 型別有定義該欄位 ✓
4. 組件 Props 有接收該欄位 ✓
5. 組件有使用該欄位 ✓
```

### 快速診斷

```bash
# 確認 API 有回傳
curl -s API_URL | jq '.[0].decision'

# 確認 Mapper 有轉換
grep -n "decision" apps/web/src/app/*/page.tsx
```

### 2026-03-23 教訓

Y/n 按鈕灰色無法點擊，因為 `mapToDualState()` 遺漏傳遞 `decision` 欄位。

---

## 防禦性工程

**Memory 來源:** `feedback_defensive_engineering.md`

### 原則

```
1. 先質疑，後實作
2. 看到可疑代碼，先問為什麼存在
3. 不確定的變更，先問統帥
4. 任何刪除操作，三思後行
```

### 常見陷阱

- 「這段代碼看起來沒用」→ 先 grep 確認沒人用
- 「這個 TODO 很久了」→ 先確認是否已完成
- 「這個邏輯很奇怪」→ 可能是特殊 case 處理

---

## 相關 ADR

- [ADR-003: leWOOOgo 模組架構](adr/ADR-003-lewooogo-module-architecture.md)
- [ADR-006: AI Fallback 策略](adr/ADR-006-ai-fallback-strategy.md)
- [ADR-008: Python 模組化](adr/ADR-008-python-modular-packages.md)
- [ADR-009: OpenClaw Agent Teams](adr/ADR-009-openclaw-agent-teams.md)
