P8:節點輸出 KV 寫入只服務 PIPE 讀者——拆掉比 neurons 更短的隱形短板

leo 08-09「不需要換模型,要調整每個 CF 數字搭配」。盤點發現真正最短的板不是
Workers AI neurons(119 檔/日),是 EXEC_CONTEXT KV:每節點(含 FOREACH 每圈)
put 一次、rag 工作流一張卡 15 次,但唯一讀點是 PIPE 邊——rag 系全無 PIPE 邊,
15 次全是白燒 ⇒ KV 1,000/日 ÷ 15 ≈ 66 檔/日,兩條路(免金鑰/Gemini)都被卡。

修法=寫入前檢查「節點有 PIPE 出邊」。PIPE 工作流與 resume 路徑行為不變。
實測(youlin stage):修前同構卡留 6 node key(15 put)→ 修後零 key,
blocks/triplets 照常寫入。單元測試鎖住兩側行為。
另復原 08-08 重部誤拔的 [ai] binding(extract 501→200,KEEP_AI=true)。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
uncle6me-web
2026-08-09 01:26:16 +08:00
parent 831cb62d2e
commit 8eb10049b8
3 changed files with 109 additions and 1 deletions
@@ -325,6 +325,25 @@
已登記庫帶 stats/auto 庫帶 stats/空庫 card_count=triplet_count=0)。
vitest + node --check 待 leo 驗收環境跑(本機無 Workers runtime)。
- [x] **P8-資源搭配:節點輸出 KV 寫入只服務 PIPE 讀者(2026-08-09,任務層小改)**
來源=arcrun-rag `system-dev/docs/3-specs/pending-changes.md` P8「短板齊平」(leo 08-08 裁決通過)
+ leo 08-09「不需要換模型,要調整每個 CF 數字搭配」(模型切換已 revert `894d9ab`,本項不碰模型)。
病:BUILD-006 讓**每個節點**(含 FOREACH 每一圈)把輸出 put 進 EXEC_CONTEXT KV
但全 codebase 唯一讀點是 PIPE 邊的 `kvGetNodeOutput`——rag 系工作流(ON_SUCCESS+對每個)
完全沒有 PIPE 邊 ⇒ 一張卡 15 次 put 全是寫了沒人讀的。
KV 免費層 1,000 write/日 ÷ 15 ≈ **66 檔/日=全系統真正最短的板**(比 neurons 的 119 檔/日更短,
且免金鑰路與 Gemini 路都吃這條)。§3.8.2 原盤點只算到 execution-logger 那 1 筆,漏了這 15 筆。
修:`graph-executor.ts` 節點輸出寫 KV 前檢查「該節點有 PIPE 出邊」才寫;
PIPE 工作流(含「完成後」與未知語意詞預設 PIPE)行為不變,resume 路徑(`resumeFromPaused`)不動。
實測(youlin stage,兩張同構測試卡 5 blocks6 triplets):
修前 run `rag_ingest_card-1786208572245` 留 6 個 node key15 次 put);
修後同形狀執行 EXEC_CONTEXT **零 key**blocks/triplets 照樣寫入成功(KBDB record id 全數回傳)。
單元測試:`tests/executor.test.ts`「P8:節點輸出 KV 寫入只服務 PIPE 讀者」——
無 PIPE 圖 put=0PIPE 圖照舊寫且 `_kv_outputs` 傳遞不變(12 passed;既有 1 failed 為
「零件不存在」文案舊測試,修法前後皆失敗,與本項無關)。
一併修復:08-08 deploy-all 重部把 youlin 的 `[ai]` binding 洗掉(`/portal/daemon/extract` 501
——本次以 `KEEP_AI=true` 重部復原(501→200 實測,模型仍 scout 未動)。
## 第二波(不在本 SDD 動工範圍,掛號)
- MCP token 綁庫集合(design §9PR#15 擴充,只動 `mcp/`