---
tags: [recipe, 平台原則, 架構決策]
gloss: 多作者同 canonical recipe 用 UUID 並存，市場統計 per-uuid 區分版本，用戶 pull 時自動選最佳版本或按 author 指定。
---
# Recipe UUID 市場模型

← [[decisions/00-INDEX]]

**來源**：`system-dev/wiki/decisions-summary.md`（Recipe UUID 模型）、`docs/3-specs/arcrun/kbdb-base/` design.md §7.5
**最後更新**：2026-06-27

## 摘要
Recipe 的身份由 canonical_id + uuid + author 三維度組成。同一 canonical 的多個版本用不同 uuid 存在 D1，市場統計（成功率）per-uuid 記錄，用戶 pull 時自動選市場最佳版本或明確按 author 指定。

## 重點
- **舊模型（已廢）**：canonical_id 是唯一鑰匙，新版覆蓋舊版，多作者無法共存。
- **新模型（UUID）**：
  - `canonical_id`：服務名標籤（gmail_send）
  - `uuid`：版本身份（Leo 的 gmail_send ≠ John 的 gmail_send）
  - `author`：誰寫的
  - 真正的 KV/D1 鑰匙 = `recipe:{uuid}`
- **App Store 設計**：
  - `acr recipe pull gmail_send` → 後端搜 canonical_id=gmail_send 的所有 uuid → 按市場統計排序 → 回傳成功率最高的版本（自動選）
  - `acr recipe pull gmail_send --author john` → 明確指定 John 的版本
- **市場統計 per-uuid**：每個 uuid 的 execution stat 分開記錄（success/fail/latency）→ 才能區分作者貢獻
- **向後相容**：舊 workflow 用 canonical_id → resolveRecipe 要能找到；migrate-uuid endpoint 把舊 key 轉新 uuid（冪等）
- **暴露警示**（mindset §6）：新 `submit-recipe` 需要用戶明示同意暴露（讓市場統計追蹤效果）

## 實體
- **Canonical ID**（规范ID）— 服務名標籤（gmail_send、slack_post），用於搜索，不是 KV 鑰匙。
- **UUID**（通用唯一標識符）— Recipe 版本身份，真正的 KV/D1 鑰匙 `recipe:{uuid}`。
- **Author**（作者）— Recipe 的創作者身份，用於區分多作者同 canonical 的版本。
- **Market stat**（市場統計）— per-uuid 的成功率/失敗率/延遲，用於自動版本選擇。
- **App Store**（應用市場）— 公開 recipe 倉庫及版本選擇機制。

## 關聯
### 內文知識關係
- Canonical ID >> 標籤 >> UUID 群組
- UUID >> 記錄 >> Market stat
- Market stat >> 驅動 >> 自動版本選擇
- Author >> 並存於 >> 同 canonical 不同 UUID
- 舊 workflow >> 需要 >> 向後相容
### 卡片關係
- （相關 memory：`recipe-trust-via-market-not-verification` — recipe 信任靠市場非人力防偽；屬 auto-memory 非 card）
