---
tags: [平台原則, 架構決策]
gloss: 缺能力的補救階梯：自家 API 缺→補進 API；第三方 API 缺→workflow/code-node 補丁；純計算→code-node；才建零件。
---
# 自力救濟階梯 — 缺能力怎麼補

← [[decisions/00-INDEX]]

**來源**：`system-dev/wiki/decisions-summary.md`（自力救濟階梯）、`.claude/rules/07-thin-shell.md §3.5`
**最後更新**：2026-06-27

## 摘要
缺一個能力時的補救路徑分級。主問「那個 API 你能改嗎」：能改→補 API；改不了（第三方）→走 workflow/code-node 補丁；不入任何 API 的純計算→code-node；真需新穩定能力（極少）→零件 PR。

## 重點
- **階梯概覽**：
  | 情況 | 正解 | 為何 |
  |---|---|---|
  | 能打既有 API | **recipe**（無則建） | 單一 API 呼叫的封裝 |
  | 自家 API 缺能力 | **補進 API** + 可同時發 issue | 你能改，能力該長在 API |
  | 第三方 API 缺能力 | **可投稿的 workflow 補丁** | 改不了第三方，用資料方式自救 |
  | 純計算（如文本轉大寫） | **code-node**（空白零件寫 JS） | 不該為此建一堆專用零件 |
  | 真需新穩定能力（極少） | 自建零件 → PR | 維持零件庫最小 |

- **第三方 API 缺能力的實例**：Google Sheets 一次只能倒全部、輸出前無法 filter；原廠不開此 API → arcrun 補不進去 → 正解是投稿一個 workflow 補丁「倒出後自己篩」。
- **Upsert 範例**（區分自家/第三方）：
  - Stripe 原廠提供 upsert API → recipe 直打
  - Notion 沒 upsert API → 做一個 upsert workflow（先 GET 找、有則 PATCH 無則 POST），不是建零件
- **Hook 無法防守的**：§3.1 禁的是「介面層 TS 拼裝」（hook 7.x 擋），不是禁「資料方式補丁」。workflow/code-node 是 YAML/空白零件內的 JS，非介面層 TS → hook 範圍外、合法不被擋。
- **補丁轉正**：原廠出 API 後，補丁 workflow 因效能較差自然淘汰；不需特別移除。

## 實體
- **自家 API**（arcrun-owned API）— arcrun 官方開發的 API（如 cypher-executor 端點、KBDB 基本盤），改動權掌握在 arcrun。
- **第三方 API**（third-party API）— 外部服務提供的 API（Google Sheets、Stripe、Notion），改不了。
- **Workflow 補丁**（workflow patch）— 用戶投稿的 workflow YAML，用來補第三方 API 缺的能力，可被多人重用。
- **Code-node**（代碼節點）— 空白 zero-logic 零件內直接寫 JavaScript，用於純計算。
- **零件庫污染**（component bloat）— 為了單一功能、改不了的第三方 API 新建零件，長期難維護。

## 關聯
### 內文知識關係
- 自家 API 缺 >> 正解是 >> 補進 API
- 第三方 API 缺 >> 無法補 API >> 走 workflow 補丁
- 純計算 >> 應該 >> code-node
- 零件庫污染 >> 來自 >> 為第三方缺口建零件
- 補丁 workflow >> 因效能差 >> 自然淘汰
### 卡片關係
- [[自力救濟階梯-缺能力怎麼補]] >> 補充 >> [[工作流是default零件是例外]]
- [[自力救濟階梯-缺能力怎麼補]] >> 關聯 >> [[薄殼原則-能力長在API]]
