docs: Phase 3 收尾 — §8 釐清零件投稿走 PR、BACKLOG 記新需求

- DECISIONS §8 釐清:執行鏈路(高頻)不依賴 CI;零件投稿(稀有)走 PR/CI 是例外、不違反精神
  (CF Workers 不能 runtime 編譯 wasm,CI 是唯一能跑 wasm 又執行者碰不到的 venue)
- BACKLOG 步驟 4 收尾(投稿改 PR,標已做/不做/未來搬 CI)
- BACKLOG 步驟 5 被 PR 方向取代;新增步驟 5b 資料外流警示(先做,需新 SDD)
- BACKLOG 待決策加:用戶 API 保護機制(入站認證,資安優勢)、recipe/part/function 架構釐清
- component-gatekeeping tasks.md 收尾狀態

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-05-30 13:42:46 +08:00
parent 913ed79faa
commit 7d8cbe4299
3 changed files with 69 additions and 33 deletions
+40 -29
View File
@@ -57,40 +57,41 @@
- [~] 降級後 registry/components/ 現 22 個:17 白名單 primitive(流程6+資料7+http_request1+auth3
+ cron/platform_crypto(引擎能力)+ claude_api/km_writer/kbdb_upsert_blockdeferred
### 步驟 4 — 補零件庫真把關(原步驟 3,第一期最大工程
- [ ] `sandboxAcceptance.ts` 的 Gherkin 驗收:目前是 `return null` 空殼,要真實作
- [ ] 新增「假零件偵測」:primitive 子集偵測 + 寫死 endpoint 偵測 → 自動退稿並告知正路
- [ ] 把關目標擴充:不只「安全 + Gherkin」,還要「純 WASI preview1、零宿主特定依賴」
(這是避免「runtime 鎖定債」的唯一時機,見 DECISIONS §4
- [ ] 冷啟動 / runtime 相容兩步可暫留 mock,但要明確標「未實作」,不可假裝通過
### 步驟 4 — 補零件庫真把關(2026-05-30 收尾:投稿改走 PR
### 步驟 5 — 建零件的人類閘門 + 白名單 hook(原步驟 4)
> 方向修正:零件投稿走 **GitHub PR**(人 merge=閘門、CI 跑把關),廢 registry self-service。
> SDD`.agents/specs/component-gatekeeping/`(含完整決策過程)。
> 強化規格(richblack 2026-05-29 定,原因見下):**建零件不是 AI 能自己決定的事**。
> 風險:自用服務(通訊錄/帳本)連驗證都沒設好就變成零件進公共庫 → 全 arcrun 生態都能打 → 機密外洩。
> 這種安全/意圖判斷機器做不了,必須人看。規範會被忘記,hook 不會(DECISIONS §7:把判準寫成機械紅燈)。
- [x] 假零件偵測(detectFakeComponent.ts):外部 URL/domain + http_request 子集,硬擋退稿指回 recipe
- [x] 純 WASI 把關(wasmImports.ts):import module 白名單(只准 wasi_snapshot_preview1 + u6u
- [x] cold_start / runtime_compat / gherkin 標 unimplemented_steps(不假綠)
- [x] G0 registry 人類閘門(已 commit;投稿改 PR 後非主管道,保留不刪)
- [ ] Gherkin 真跑 + 覆蓋檢查 → 未來接 **CI PR check**CI 能跑 wasm,繞 CF venue 牆)。
richblack:人工 review 就夠,primitive 極少 → CI 暫不做,邏輯已寫好隨時能搬。
- [x] **不做 R5 本機 hook**PR/merge + 假零件偵測 + 純WASI 沙箱已防「未經同意變公共零件」→ hook 過度工程。
- [ ] 黃金向量:人工核對(另起 session 從語義寫,不機器自動化)— 不急
**把關點 = 「建立零件的 API」本身,不是「寫檔案」。** 零件建立有四條入口(CLI `acr` / MCP / Python lib / JS lib),
它們不靠本機寫檔,是呼叫 registry Worker 的「投稿/建立零件」endpoint。所有路都要收斂到這一關。
### 步驟 5 — ~~建零件的人類閘門 + 白名單 hook~~2026-05-30 被 PR 方向取代)
- [ ] **主閘門:registry Worker「建立零件」API** —— 預設**拒絕**,除非請求帶:
(a) 人類已確認的明示憑證(CLI `acr component create` 強制互動式問人類,AI 在非互動環境生不出);
(b) 舉證欄位 `reason_why_not_workflow`(AI 必須說明「為何這件事無法用工作流達成」,舉證責任在 AI,
預設假設工作流能做)。沒帶 → 403 + 指回正路(先試工作流)
- [ ] **四路 client 配合**CLI / MCP / Python lib / JS lib 的「建零件」都改成必經主閘門(帶人類確認 + 舉證)
- [ ] **本機 hook 兜底**pre-write / pre-bash hook 偵測「CC 直接在 `registry/components/{白名單外新名}/` 造目錄
或 mkdir」→ exit 2(擋繞過 API、直接改 repo 造零件等 CI 部署這條旁門)
- [ ] **誠實限制(要寫進 mindset**:沒有技術能 100% 防 AI 假冒人類確認(它能塞任何 flag)。
靠「閘門 + 舉證留記錄 + mindset 明示『絕不可代替人類確認建零件』+ 軌跡可審計」讓假冒成為明確越界,
不是聲稱「不可能繞過」。
- [ ] `MVP_COMPONENTS.txt` 白名單檔
- [ ] pre-write hook`registry/components/` 目錄清單 ≠ 白名單 → exit 2
- [ ] pre-write hook`registry/components/` 底下出現 `.ts` → exit 2
> **取代說明**:原規劃「registry submit API 人類閘門 + 四路 client + 本機 hook」。
> 2026-05-30 改:**零件投稿走 GitHub PR**(人 merge = 天然人類閘門,AI 偽造不了 GitHub approve)。
> → registry self-service 主閘門、四路 client、本機 hook **都不做**PR/merge + 假零件偵測 +
> 純WASI 沙箱已防「未經同意變公共零件」,hook 過度工程)。並進步驟 4
>
> **真正的裸奔風險不在零件,在「資料外流」**(recipe/webhook 把資料送出去,不分公私庫)。
> → 另開新 SDD「資料外流警示」(見下方第一期新增項)。
> **配套(讓 AI 不選難路,ABC 三管齊下,與本閘門合為四道)**:
> A 審核當場擋零件(步驟 4 假零件偵測,§7 層二)+ B 工作流範本好寫(步驟 7 acr new,§7 層一)
> + C mindset 明示「工作流是 default,零件是稀有例外」(步驟 7 mindset Skill,§7 層三)。
> 原理:難路走的當下要痛、易路選的當下要爽、事先有聲音說易路是 default。CC 把自用服務錯做成零件,正因這三者當時全缺。
**ABC 配套仍有效**(讓 AI 不選難路):A 假零件偵測(步驟 4)+ B 工作流範本(步驟 7 acr new)
+ C mindset「工作流是 default、零件稀有例外」(步驟 7 mindset Skill)。
### 步驟 5b — 資料外流警示(2026-05-30 新增,richblack:先做)
> 風險根源:arcrun 讓「產生 API」變很簡單(資料+webhook trigger=API)→ AI 可能不知不覺把含個資
> 的東西變成可被呼叫的 endpoint。不分公私庫(私人=公司用也會把個資 POST 到公司群)。
- [ ] 新建 SDDrequirements/design 交 richblack review 才動 code
- [ ] **API 層警示**:任何「把資料送出去」的動作(recipe push / webhook 等)不論哪條路都警示/需人類同意
- [ ] **hook**:AI 動手做這類動作前先警告(防在前;API 層防在送出前,兩道互補)
### 步驟 6 — 搬家(拆 matrix)(原步驟 5)
- [ ] 先給 kbdb、ghost(identity/personality-system/persona-sdk) 各自 `git init` + 建 GitHub repo
@@ -112,6 +113,16 @@
## 第一期之後 / 待決策(不要現在做)
- [ ] **用戶自己的 API 保護機制(入站認證)**richblack 2026-05-30)— 做成零件或功能:
(1) 用戶可發 API Key 給別人;(2) 不同權限設定。現況缺口:webhook 只有 X-Arcrun-API-Key
(誰有我的 key 誰能打),沒有「發受限 key 給別人 / per-caller 認證 / rate limit」。
**這是 arcrun 資安優勢**n8n 用簡單 USN/PWD 做不好,AI coding 又怕資安沒做好,我們系統幫搞定、
一個動作能用。注意區分:credential/auth recipe 是出站(呼叫別人 API 帶我的 token),這是入站(保護我的 API)。
- [ ] **架構詞彙釐清(recipe / part / function / 工作流組合)**richblack 2026-05-30,要思考一下):
- recipe:用零件去打的設置文件(endpoint+設定)
- part(零件):需 PR + update/upgrade
- function:把一批功能做好可用 cypher 拉進來(例:API 認證,我做好幾個讓用戶拉)。是 part+recipe
- **多零件/工作流組合成新工作流**(第一個走完連第二個)—「好像還沒有」,要思考
- [ ] **砦 `injectCredentials` 舊路 + `BUILTIN_CREDENTIALS_MAP`** — credential 系統現為新舊兩路並存,
舊路是 TS 裡解密的半成品(註解自認 Phase 1.9 刪)。是獨立清理,**不擋降級**。見 DECISIONS §3b
- [ ] **決策:開源版 cypher-executor 是否保留「KBDB block 展開」功能**