--- 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)