# u6u 系統規格書 v1.0
## 給 AI 的架構思考指引

> 本文件用途：讓 AI 理解 u6u 的完整設計意圖、現況、與未來路徑，
> 在實作決策時能自行判斷方向正確性，而不只是執行單一任務。

---

## 一、系統本質（先理解再動手）

u6u 不是 workflow 工具，不是 no-code 平台，不是 iPaaS。

u6u 是一個**「意圖到系統」的生物體積木平台**：

- 人類說出意圖（自然語言）
- AI 從零件宇宙組裝出可運行的系統
- 系統會自動評價、演化、淘汰舊零件
- 累積的零件就是核心資產，越積越有價值

**設計的終極體驗：** 工廠主管拖拉十分鐘，組出具備微服務架構的企業系統，零程式碼，但底層是真正的分散式系統。

---

## 二、四層邏輯架構

```
Polaris（意圖層）
    ↓ 自然語言 → AI 拆解
Prototype（前端層）
    ↓ UI 元件 + 觸發事件
Workflow（編排層）
    ↓ Cypher 語法定義執行順序
Component（零件層）
    ↓ .wasm 實際執行
```

每一層向下只透過標準介面溝通，層與層之間完全解耦。

---

## 三、物理三層部署

```
Tier 1：雲端總部（Cloudflare Workers）
    - CEO AI 讀取 Markdown 戰略文件
    - 全域零件同步至 R2
    - Cloudflare D1 + Vectorize（KBDB）

Tier 2：企業地端（workerd 叢集）
    - 部門主管 AI 派工
    - 工匠 AI 生成並測試新零件
    - Kùzu 或 PostgreSQL + AGE（圖資料庫）
    - pgvector 或 Milvus（向量搜尋）

Tier 3：邊緣載具（無人機、AGV、工廠設備）
    - 極小參數 SLM
    - Go 排程引擎 + 內嵌 Wazero（無 V8）
    - SQLite + sqlite-vss
    - 離線生存，DTN 短點射傳輸
```

**關鍵約束：** Tier 3 沒有 V8，沒有 Node.js，沒有網路。
所有零件必須在 Wazero 上跑，所有資料傳輸透過 stdin/stdout JSON。

---

## 四、零件規格（Component Contract）

這是整個系統最核心的不變量。零件規格定錯，累積的資產會變成技術債。

### 4.1 零件的本質定義

**一個零件只做一件事。**

```
✅ gsheets_create_table
✅ gsheets_delete_table
✅ gsheets_get_entries
❌ gsheets_manager（做太多事，禁止）
```

### 4.2 零件合約格式（component.contract.yaml）

每個零件必須附帶此合約，這是 AI 讀取零件的唯一介面描述：

```yaml
id: "gsheets_get_entries"          # 功能合約名稱（永久不變）
version: "v2"                       # 實作版本
wasi_target: "preview1"             # 明確標記 WASI 版本，未來升級用
stability: "floating"               # floating | stable | pinned

runtime_compat:
  - "cf-workers"
  - "workerd"
  - "wazero"

constraints:
  max_size_kb: 2048                  # 超過視為打包了 runtime
  max_cold_start_ms: 50
  no_network_syscall: true           # 禁止零件自己發 HTTP
  no_filesystem_syscall: true        # 只能 stdin/stdout
  io_model: "stdin_stdout_json"      # 唯一合法的 I/O 模型

input_schema:
  type: object
  required: ["spreadsheet_id", "sheet_name"]
  properties:
    spreadsheet_id: { type: string }
    sheet_name: { type: string }
    limit: { type: integer, default: 100 }

output_schema:
  type: object
  properties:
    rows: { type: array }
    total: { type: integer }
    error: { type: string }

gherkin_tests:
  - scenario: "正常取得資料"
    given: '{"spreadsheet_id":"abc","sheet_name":"Sheet1"}'
    then_contains: '{"total":1}'
  - scenario: "不存在的表格回傳錯誤"
    given: '{"spreadsheet_id":"abc","sheet_name":"不存在"}'
    then_contains: '{"error":'

tags: ["google", "sheets", "data", "read"]
description: "從 Google Sheets 取得指定工作表的所有資料列"
```

### 4.3 語言無限制原則

**零件開發語言完全不限制**，只要輸出符合以上合約的 .wasm 即可。

可接受語言（非排他）：TinyGo、Rust、AssemblyScript、C/C++

注意事項（不是禁止，是要求自行驗證）：
- TypeScript via Extism：會打包 QuickJS，體積通常超過 2MB 限制
- 標準 Go（非 TinyGo）：runtime 過肥，通常超過體積限制
- 任何語言：不可在 .wasm 內部呼叫網路或檔案系統 syscall

**驗收標準只有一個：通過沙盒測試。** 語言是零件作者自己的事。

### 4.4 零件的前後端分類

| 類型 | 執行位置 | I/O | 範例 |
|------|----------|-----|------|
| 後端邏輯零件 | Workers/workerd/Wazero | JSON stdin/stdout | validate_json, http_request |
| 前端 UI 零件 | 瀏覽器 | HTML attributes / DOM events | u6u-btn, u6u-chart |
| **混合零件** | **禁止** | — | **強制拆成兩個** |

---

## 五、零件版本控制策略

### 5.1 命名規則

```
gsheets_get_entries        ← 功能合約名稱（搜尋用，永遠存在）
gsheets_get_entries_v1     ← 第一個實作（慢但能用）
gsheets_get_entries_v2     ← 更快的實作（由另一個 AI/用戶提交）
```

### 5.2 穩定性標籤

Workflow 引用零件時可指定穩定性需求：

```
gsheets_get_entries              → 預設 floating，AI 自動選最優版本
gsheets_get_entries@stable       → 有更好版本時提示，人工確認才換
gsheets_get_entries@pinned:v1    → 版本凍結，宇宙怎麼演化都不影響
```

| 標籤 | 適用情境 | 更新行為 |
|------|----------|----------|
| `floating` | 一般企業應用 | AI 自動換成最優版本 |
| `stable` | 重要業務流程 | 有更好版本時提示，人工確認 |
| `pinned` | 工廠控制器、嵌入式設備 | 永遠不動，即使進入墓地也保留 .wasm |

### 5.3 淘汰機制

- AI 搜尋零件時，KBDB 依「成功率 × 速度 × 被調用次數」排序
- 連續 30 天無使用且評價下降 → Deprecated
- Deprecated 後繼續 90 天無復活 → 進墓地（從搜尋清單移除）
- **墓地的 .wasm 永遠保留**，pinned 的 Workflow 永遠能拉到

---

## 六、零件製造指引書（給用戶 AI 的規範）

u6u 不限制誰來造零件，任何 AI（用戶自己的 Claude、GPT、本地模型）都可以。
但必須遵守此指引書，否則沙盒測試不過，無法上架。

### Step 1：理解介面合約

造零件前，先定義合約 YAML。
**零件只在乎輸入 JSON 和輸出 JSON，完全不管前端長什麼樣子。**

```
人類：我要一個可以查 Google Sheets 的零件
AI 的第一步：定義 input_schema 和 output_schema，不是寫程式
```

### Step 2：選擇開發語言

選擇你最熟悉的、能產出 WASI preview1 相容 .wasm 的語言。
建議：

- 小型邏輯零件（轉換、計算）→ TinyGo 或 AssemblyScript（體積小）
- 效能敏感零件 → Rust（生態最成熟）
- 任何語言都可以，只要通過合約限制

### Step 3：實作規則

```
✅ 只用 stdin 讀取輸入 JSON
✅ 只用 stdout 輸出結果 JSON
✅ 錯誤也用 stdout 輸出：{"error": "說明"}，不要 panic/crash
✅ 無狀態：每次呼叫都是獨立的，不依賴上一次執行的結果
✅ 需要打外部 API？透過 host function 注入，不在 .wasm 裡自己發 HTTP
❌ 禁止網路 syscall
❌ 禁止檔案系統 syscall
❌ 禁止打包 runtime（QuickJS、Node.js 等）
❌ 禁止超過 2MB
```

### Step 4：本地測試方式

```bash
# 用任何 WASI runtime 本地測試
echo '{"spreadsheet_id":"abc","sheet_name":"Sheet1"}' | \
  wasmtime gsheets_get_entries.wasm

# 預期輸出
{"rows":[...],"total":5}
```

### Step 5：提交審核

提交 `.wasm` + `component.contract.yaml`，系統自動執行：

1. 體積檢查（< 2MB）
2. 冷啟動時間（< 50ms）
3. Syscall 掃描（不能有網路/檔案系統呼叫）
4. Gherkin 測試（合約裡的所有 scenario 必須 100% 通過）
5. 多 runtime 相容測試（cf-workers / workerd / wazero）

全部通過 → 上架進入零件宇宙，開始累積評價。

---

## 七、Cypher 編排語言

Workflow 使用擴展三元組語法描述執行邏輯：

```yaml
kind: Workflow
id: wf_query_attendance

triplets:
  # 基本流程
  - "START >> TRIGGERS >> step_receive"
  - "step_receive >> IS_A >> component://webhook_receiver_v1"
  
  # 條件分支
  - "step_receive >> ON_SUCCESS >> step_validate"
  - "step_receive >> ON_FAIL >> step_notify_error"
  
  # 跨 Workflow 串接
  - "step_validate >> CALLS_SUBFLOW >> workflow://save_to_db"
  
  # 前端觸發後端
  - "btn_submit >> ON_CLICK >> workflow://wf_query_attendance"
```

**URI 協議規範：**
- `component://` → 引用零件
- `workflow://` → 引用子 Workflow
- `ui://` → 引用前端零件
- `style://` → 引用樣式零件

---

## 八、KBDB 在 u6u 的角色

u6u 的所有狀態都在 KBDB 裡：

| KBDB Block 類型 | 存放內容 |
|-----------------|----------|
| Component Block | 零件合約、.wasm 位置、版本、評價指標 |
| Workflow Block | Cypher 三元組、依賴零件清單 |
| Prototype Block | 前端結構、UI 零件樹 |
| Pitfall Block | 避坑記錄，AI 搜尋時強制讀取 |
| Evaluation Block | 每次 Workflow 執行後的強制評價結果 |

**KBDB 不變量：永遠只有三張表（blocks/templates/slots），不新增表。**
所有以上類型都用 Template + Slot 實現。

---

## 九、自動演化迴圈

```
執行 Workflow
    ↓
強制 AI 評價（Evaluator Agent）
    ↓ 發現問題
生成修復 Ticket → 通知製作人
    ↓ AI 嘗試修復
通過 Gherkin 驗收 → 熱更新
    ↓ 無法修復
標記 [HAS_PITFALL] 到 Cypher 圖
    ↓
下一個 AI 搜尋時讀到坑，強制繞道
```

---

## 十、現況與未來路徑

### 現在已有

- KBDB（blocks/templates/slots + Vectorize）
- IS-Squad MCP（execute_cypher 等工具）
- Cloudflare Workers 環境

### 最小可 demo 路徑

1. **Cypher 執行引擎**：三元組 → 實際執行順序（確認 execute_cypher 邊界）
2. **首批核心零件**（5 個）：
   - `webhook_receiver`
   - `json_transform`
   - `http_request`（透過 host function）
   - `notify_line`
   - `validate_json`
3. **機甲最小版本**：意圖 → 零件搜尋 → 組裝 Workflow（先用硬編碼路由）
4. **前端畫布 MVP**：靜態 HTML 模擬雙面翻轉體驗

### 技術監控項目

- **WASI Component Model（preview2）**：目前用 preview1，未來 3-5 年會有遷移壓力。
  合約裡已有 `wasi_target: "preview1"` 標記，升級時知道要改什麼。
- **Kùzu 成熟度**：地端圖資料庫首選，持續觀察 v1.0 穩定性。

---

## 十一、實作決策原則（CC 行動準則）

遇到不確定的實作決策時，依序問自己：

1. **這個決策會影響零件合約嗎？** 如果是，停下來討論，不要自行決定。
2. **這個實作是否限制了未來換 runtime 的自由？** 如果是，重新設計介面。
3. **這個零件做超過一件事嗎？** 如果是，拆成兩個零件。
4. **這個設計在 Tier 3 離線環境能跑嗎？** 如果不能，重新考慮。
5. **有沒有現成零件可以組合？** 先搜尋 KBDB，不要重造輪子。

---

*本文件版本：v1.0*
*綜合自：u6u 系統與零件宇宙全景規劃白皮書、自動演化 ERP 架構藍圖、智慧前端與工匠開發藍圖，加入技術評論與補充建議。*
