一、文案(portal/console/kbdb hint):語意搜尋是一安裝就提供的功能,
降級=故障。橫幅改「語意搜尋目前故障/我們的問題/你不用做任何事」,
拿掉「還沒開通、想開通請匯出診斷檔」這種要使用者申請開通的假框架。
kbdb 降級回應加 degraded_reason(module_off / embed_query_failed)。
二、查詢向量化失敗不再偽裝成空結果(leo 點名的謊):
semanticSearch 舊行為「AI 額度用完 → 回 []」會讓使用者以為
自己的知識庫裡沒有這筆資料。改丟 EmbedQueryFailedError,
route 誠實降級 keyword+照實告知是暫時故障。
三、源頭機制(裝好的實例為什麼會失去語意搜尋):
- acr update:kbdb_embed 判斷 ===true → !==false。config 缺欄位時
redeploy 會把 [[vectorize]]+[ai] binding 靜默剝掉(wrangler deploy
整份覆蓋),一台正常實例就此壞掉。init 預設同步翻成 [Y/n]。
-(另 repo)deploy-all.mjs ensureVectorizeIndex 失敗改致命中止。
四、順手自癒:孤兒向量/下架殘影搜尋時背景清除;空結果且 pending>0
背景 backfill;no_index 拆「故障」vs「還沒有資料」兩態。
測試:kbdb 146/146(新增 degraded 6 案+selftest 1 案);cli 10/10;
瀏覽器端到端兩種故障畫面實測(local wrangler dev+portal 真登入)。
無 SDD 對應:leo 直令修故障(同 08-07 檢修孔前例的人閘直接授權路徑)。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
53 KiB
name, description, metadata
| name | description | metadata | ||||
|---|---|---|---|---|---|---|
| status | 當前進度、進行中 Phase、已知問題、下一步(動態文件,每 session 更新) |
|
當前進度(動態)
更新頻率:每次 session 結束時更新此檔。 新對話開始時讀此檔第一段(3 分鐘概覽)。
📍 當前位置
2026-08-09(語意搜尋「故障要照實說是故障」,leo 直令,local commit main): leo 看到 portal 橫幅「語意搜尋還沒開通⋯匯出診斷檔給我們幫你打開」原話痛罵: 「語義搜尋已經確定是一安裝就提供的功能⋯我沒有不開通這個功能,是壞了, 沒有人會把 bug 美化成沒提供沒開通」。本輪修四層:
- 文案:portal(
console-ui/public/portal/index.html)+console 兩處橫幅與設定頁 全改「語意搜尋目前故障/我們的問題/你不用做任何事」,禁「開通/尚未啟用」框架; kbdbcapability_hint同步改(degraded_reason: module_off)。- 查詢向量化失敗不再偽裝成空結果(leo 點名的謊):
embed.tssemanticSearch改丟EmbedQueryFailedError(舊行為if(!vec) return []=「額度用完」被顯示成 「查無資料」);route 層接住 → 誠實降級 keyword+degraded_reason: embed_query_failed。 瀏覽器實測:真 AI binding + bogus 模型(5007 No such model)→ 橫幅照實說暫時故障。- 源頭機制修掉(為什麼裝好的實例會失去語意搜尋): ①
cli update.tskbdb_embed === true→!== false——config 缺欄位時 redeploy 會把 vectorize+[ai] binding 靜默剝掉(wrangler deploy 整份覆蓋);init 預設同步翻成 Y/n。 ②arcrun-rag deploy-all.mjs:ensureVectorizeIndex失敗以前只印 warning 續行 (youlin 07-20 那輪「本輪跳過」就這樣出貨)→ 改致命中止+失敗時 GET 複核 index 是否其實已存在。- 順手自癒:搜尋 hydrate 時發現孤兒向量/下架殘影 → 背景 deleteByIds+is_embedded 歸零(0.971 殘影病原不再累積);空結果且 pending>0 → 背景 backfill 一批(embedOnWrite fire-and-forget 失敗以前沒有任何機制會回來補)。no_index 拆兩態:pending>0=故障文案、 pending=0=誠實說「還沒有資料」(新裝未同步不是故障)。 測試:kbdb 146/146 綠(新增
search-semantic-degraded.test.ts6 案+selftest 1 案); cli tsc 乾淨+10/10;deploy-all DRY_RUN 24 worker 斷言 PASS。瀏覽器端到端(local wrangler dev 18787/18788+portal 真登入)兩種故障畫面截圖驗過。未部署 prod(D20 閘); 別 session 未 commit 的.component-builds/*與graph-executor.ts未動未代提。
2026-08-07 晚(檢修孔第一版,local commit 未 push,main):leo 直接指令「先把檢修孔做出來 發版,不必先知道 Oscar 的病是什麼」——解掉「查不出封測者的病,因為拿不到他那邊資料;拿不到 資料是因為沒有檢修孔」的死結。規格中途被 leo 簡化過一次:從「免授權層/同意後才交」兩層 機制,收斂成「設定頁一顆按鈕、按下去下載一個 JSON 檔、用戶自己把檔案傳出去」(同意天然內建 在「他自己按、自己傳」這個動作裡)。
已完成(3 個 local commit,
matrix/arcrun,sha9344562→83aa1f6→5388f40):
kbdb/src/embed.tsembedSelfTest()+GET /embed/selftest?owner_id=——挑一筆已標記 「已嵌入」的卡片拿自己的內容查自己,只回{enabled,tested,passed,note}(不回內容/id)。 這是唯一能分辨「從沒嵌過」vs「嵌了但 index 查不到自己」(Arcrun#11 那種故障)的方法, 單看 backfillStatus 的 pending/embedded 計數看不出後者。cypher-executor/src/routes/portal-data.tsGET /portal/data/diagnostics——聚合 embed 健康狀態+library_count/triplet_count(只讀/map回應的數字,narrative/top_entities讀完即丟)+bundle_version+instance_url。沿用既有requirePortalUser。console-ui/public/portal/index.html設定頁「疑難排解」panel+「匯出診斷檔給我們看」按鈕。端到端實測方式(真跑不是模擬):本地起兩個真
wrangler dev(kbdb:18787/ cypher-executor:18788,local D1+KV,真的跑過 migrations),HTTP API 種一個 portal_user +一筆 triplet_count=67 的 library_map;瀏覽器工具真的登入、真的點按鈕,Network 面板 看到GET /portal/data/diagnostics → 200,頁面狀態列顯示「已下載」。兩種故障情境(module 未開/embedded=0;module 開了但 self_test.found_itself=false)都各自產出可判讀的 JSON, 貼給 leo 核對過。測試:kbdb 12 新測試+既有 110 全綠;cypher-executor 3 新測試綠(既有 1 個
/portalHTML 殼 404 失敗案用git stash驗證是既有問題非本次造成);console-ui 既有輕量測試 18/18 綠。隱私紅線有機械測試守(斷言回應 JSON 不含卡片內容/entity 名/entry id)。⏸ 未完成/待人:尚未 push GitHub(D20 閘,需 leo 跑
scripts/github-arm.sh)→ push 後版本要走products/arcrun-rag/installer/scripts/release.mjs注版號 → Oscar 在他 自己實例的設定頁按「立即更新」重跑安裝才會真的拿到這顆按鈕(self-hosted,不會自動生效)。 這件事沒有 SDD(leo 直接指令的臨時檢修孔,非任何 active SDD 的 task;workflow-discovery是目前唯一 active SDD,本次改動與它無關,屬於「有人閘直接授權」的例外路徑,未走 pending-changes 提案流程——如需要補一份小 SDD 記錄,下個 session 可以評估)。收工時意外發現(誠實記錄):本機有既有背景機制會把 local commit 自動鏡到 Gitea (
gitea/main在最後一次 commit 後幾秒就更新到同一個 sha,git reflog時間戳對得上), 全程沒有手動下過git push。與 CLAUDE.md 記載的「Gitea 永 private,只有 GitHub 走 D20」 模型一致,非本次操作觸發,僅供下個 session 知悉。
2026-07-28(t95+t96 搜尋缺陷修復,main):portal 搜尋兩缺陷修復——t95 CJK/ASCII 邊界自動補空白(
normalizeCjkQuery,查詢端,不動索引);t96 graph 節點精確 0 鄰居 → fuzzy fallback(findBestNodeMatch/fuzzyFindNode,contains 比對+最短名優先)。 純函式 + integration 各 6/2/4 案,tasks.md Bugfix 已標 [x]。 B5 分支衝突面:同一行libraries欄位(可一行解)。待 leo 本機跑 vitest 驗收 (sandbox symlink 封鎖,靜態分析確認邏輯正確)+ commit+部署。2026-07-19(#39 藏書地圖 M5,分支
feat/console-library-map-home):library-map SDD M5(GUI 首頁)PR 已開,等審+gated 部署(merge 後需 leo 閘 redeploy cypher-executor)。R4 落點裁定= console 總庫搜尋頁搜尋框上方(rag profile 該頁即首頁;full profile 它是全館入口——駕駛艙是 狀態面不是庫導覽面,地圖跟搜尋同頁「點庫卡片→帶 library filter 進庫搜尋」動線最短、一份實作 兩 profile 全吃)。兩段式渲染:GET /kbdb/map 先出庫卡片(narrative+top entities+triplet 數+ 更新時間),逐庫 GET /kbdb/map/:library 補 degree/跨庫 bridges/commit_hash(詳圖失敗維持名字 版不擋渲染);proxy 端(kbdb-proxy.ts)owner_id 不強制注入只透傳(同 M4 MCP 語意——現行 backfill map block owner=NULL,強制注入=首頁永遠假空狀態);/map 空/錯誤=誠實空狀態(指引 recompute backfill)不擋搜尋。測試:proxy 9 新測+console 頁 6 新測全過;tsc 16 行既有 ExecutionContext.tracing 錯誤與 executor.test 1 失敗=main 基線就有(stash 對照實證),非本分支引入。2026-07-19(#39 藏書地圖 M4,分支
feat/mcp-library-map-inject):library-map SDD M4 PR 已開, 等審+gated 部署(merge 後需 leo 閘 redeploy arcrun-mcp)。兩件(design §4): ① MCP toolkbdb_get_map(無參數=全館每庫一行;帶 library=詳圖,slot JSON 字串容錯 parse 成 物件,parse 失敗當空陣列;404/空庫誠實回報+POST /map/recompute backfill 指引;description 含 「不確定該查什麼時,先呼叫此工具」)——走既有 KBDB service binding(kbdbFetch),與 #68 同族薄殼。 ② server instructions 注入:buildLibraryMapInstructions連線時拉 GET /map 渲染成每庫一行 ({library}:{narrative}|核心:{top3}|{n} triplets)嵌 instructions;快取選型=isolate 內 TTL 快取(成功 5min/失敗 1min),因 stateless StreamableHTTP 每個 HTTP request 都重建 McpServer,「每次現拉」實際是每個 tool call 都多打一次;timeout 1.5s,任何失敗回 null 靜默略過 絕不擋 MCP 連線(鐵律)。測試:假 KBDB binding 17 新測(全 76/76 過)+tsc 乾淨。2026-07-19(#39 藏書地圖 M1+M2,分支
feat/library-map-base):library-map SDD M1+M2 PR 已開, 等審+gated 部署(merge 後需 leo 閘 redeploy kbdb+首次 backfill 逐庫呼 recompute)。 M1:library_maptemplate(migration 0003 seed+runtime ensure,D6 零建表);核實 triplet 按庫定位= 不足(prod triplet template 無 library slot、entries metadata.library 未標記)→ 走 SDD 預案: recompute 冪等補 optionallibraryslot(改 template 不動表),值待 ingest M3 補寫。 M2:kbdb basePOST /map/recompute?library=(degree top-N/predicate 分布/跨庫 bridges/count, 聚合 SQL 住基本盤=D6 歸屬裁定;順序安全 supersede;過渡source_prefixfallback 讓舊 triplet 靠 source_uri 歸庫)+GET /map(每庫一行)+GET /map/:library。測試:node:sqlite 真 SQLite 實跑 聚合 SQL+Hono route 行為,45/45 過、tsc 乾淨。2026-07-19(#68 MCP graph tool):
kbdb_graph_neighborsPR 已開(分支feat/mcp-graph-neighbors-tool),等審+gated 部署(merge 後需 leo 閘 redeploy arcrun-mcp)。 薄殼:MCP 新 tool 調/q/:ns/graph_neighbors同步查詢端點(#28 地基),補齊 D17 KBDB MCP 三模式(關鍵字/語義/圖)。graph_traverse 未加(repo 內無該 workflow 定義可對齊,不猜)。2026-07-19 本 session(bugfix:kbdb search 兩缺口 #66/#67,分支
fix/search-source-filter-and-semantic-threshold,雲端總管交辦):
- #66/#67 修復 PR 已開(雲端總管交辦),等審+gated 部署。
- #66:
/entries/searchkeyword 路徑 source 參數解析後丟棄(#5.1 只接了 listEntries 那半)→searchEntries尾端加source?(positional caller 全不用改)+同款 json_extract 謂詞, route keyword/semantic 降級兩處傳入。- #67:semantic 固定 topK=20 零閾值 → route 曝
top_k(預設 20、封頂 100)/min_score(預設 0=不過濾),semanticSearch 依閾值截低分尾,回應 entry 附score欄(加欄不改形, 向後相容)。- 驗證:kbdb vitest 33/33 綠(新增 search-source-and-score.test.ts 13 條)+ tsc 0。 不動表(D6)、不部署——merge 後需 gated redeploy kbdb worker(leo 閘)。
2026-07-14 上一 session(bugfix:PBKDF2 CF runtime 上限+http_request 1042 flag,分支
fix-pbkdf2-cf-limit,PR 待總管審不 merge):
- T6-cloud 部署抓到的框架蟲:CF Workers 正式 runtime PBKDF2 上限 100,000 iterations—— portal-auth 設 600k →
crypto.subtle.deriveBits真雲直接拒絕 →/portal/admin/bootstrap500 (uncle6 實撞,證據 arcrun-ragdocs/manual/uncle6-deploy-record.md)。miniflare 無此限制= 本機測試全綠的假象(新教訓:平台 crypto 限額 miniflare 不模擬,涉 WebCrypto 參數上限的驗收 只有真雲驗得出)。- 修(小刀):
portal-auth.tsPBKDF2_ITERATIONS600_000→100_000+註明平台封頂(儲存 格式自帶迭代數,未來放寬可無痛升);design.md D-5 加修訂註+tasks.md 加 Bugfix 記錄。 verify 相容性確認:迭代數從儲存值解析,補測試「驗 600k 舊 hash 仍通」(miniflare 造)綠; 誠實邊界=真雲 deriveBits 同樣封頂、600k hash 真雲仍拒,但真雲 bootstrap 從未成功→雲端零存量 hash、無遷移面。- 同 PR 順手(部署 agent 點名):
.component-builds/http_request/wrangler.tomlcompatibility_flags 補global_fetch_strictly_public(self-hosted 同帳號 fetch 1042 正解, Arcrun#33 同族;官方本就跨 zone 行為不變,原理同 cypher 前例 rules/03 1042 段)。- 驗證:cypher tsc 0;全套 169/170(唯一失敗=executor「不存在的零件」pre-existing); portal 三套 56/56 全綠(含新 600k 相容測試);http_request
wrangler deploy --dry-run打包過。- 不 merge 待總管審(B 類流程);merge 後部署仍走 gated leo21c/uncle6 wrangler 直推。
2026-07-14 上一輪(portal-auth P4:admin 帳號+庫管理頁——本 SDD 最後一棒,PR 待總管審不 merge):
- 實作(分支
portal-auth-p4-admin-ui,3+1 小步 commit):①portal.ts補 last-admin 鎖死保護(總管派工明定、design 未明寫)——PATCH 停用/降級「最後一個 active admin」→ 409 (另一 admin 是 disabled 不算數;只在目標是 active admin 且會失格時才多打一次 list,平時零成本)。 admin API 其餘 P2 已交付(users CRUD/reset-password/libraries 含 graph_source)不重做。 ②portal-ui.ts加「管理」頁(admin-only nav,前端藏=UX、真閘=/portal/admin/* role 403): 帳號管理(列表/新增/停用啟用/重設密碼+每帳號勾選可查庫含["*"]全庫連動)+庫目錄管理 (登記/停用/graph_source 標記)。一次性密碼只在畫面顯示一次(otpbox 關閉即逝,server 只存 hash、明碼不落庫不進 log)。③ 工作流頁 P4 項=P3 已交付,零改動沿用。- 驗證:新增
tests/portal-admin.test.ts14 項;cypher 168/169(唯一失敗=executor「不存在的 零件」pre-existing);kbdb 20/20;兩包 tsc 0;dry-run 打包過;inline JS node --check 過。 端到端隔離雙 worker(9790/9791,demo 8787/8788 不碰)41/41 全綠:bootstrap→建帳號拿一次性 密碼→新 user 登入→勾庫同一 session 搜尋即時變化(1→2 筆、越庫 404→200)→停用 session 立即 失效→重設密碼舊密 401 新密 200→last-admin 409+降級即時生效(原 admin session 變 403)→一般 user 打 admin API 403→HTML 殼加 admin 頁後仍零租戶字串/零 /kbdb//零 API key/零 Mira。- portal-auth SDD P1-P4 全完成,待 T6-cloud 排練上真環境(部署清單沿 P1:Vectorize
librarymetadata index+reindex backfill;gated leo21c wrangler 直推,B 類流程)。不 merge 待總管審。2026-07-14 上一輪(portal-auth P3:Portal UI+查詢 enforce——本 SDD 最大件,PR #52 待總管審不 merge):
- 實作(分支
portal-auth-p3-portal-ui):①routes/portal-data.ts(安全核心)——/portal/data/*server-side enforce:session→回讀 user record→server 注入owner_id=CONSOLE_TENANT+library=<集合>轉發 KBDB;前端絕不下發租戶字串(vs console 把 tenant 交給前端直打 /kbdb/*);caller 自帶 owner_id/library 被靜默覆蓋;entries/:id 逐筆驗租戶+庫(越庫/跨租戶/不存在同一句 404 不洩存在性); graph D-4 粗閘(來源庫=portal_librarygraph_source標記、無標記預設 general;無權 403);workflows D-8(PORTAL_SHOW_WORKFLOWS預設 admin;唯讀+最近執行,無 webhook_url/trigger 把手)。 ②routes/portal-ui.ts——/portal單檔 HTML 殼(登入/搜尋三模式+source 溯源+卡片詳頁/設定改 密碼看權限主題;graph 模式與工作流頁按/portal/session新能力欄位graph_allowed/workflows_visible顯示,真閘在路由層)。③ P1 順延項補上:kbdb-proxy/kbdb/search+/kbdb/entries透傳library。 ④ portal_library seed 加graph_sourceslot+ensurePortalTemplates 冪等 grow 舊 template 缺 slot+ admin libraries PATCH 可標記。- UI 重用取捨:複製 console 樣式子集(紙感/明體/琥珀/深淺主題)而非抽共用模組——抽共用要動 console.ts(違「console 現狀不動」鐵律);代價=樣式雙份、改版要兩邊同步(誠實記)。
- 驗證:cypher 154/155(唯一失敗=executor「不存在的零件」pre-existing,stash 複驗)+新增
tests/portal-data.test.ts21 項;kbdb 20/20;兩包 tsc 0;wrangler deploy --dry-run打包過。 端到端隔離雙 worker(9790/9791,demo 8787/8788 不碰)47/47 全綠:越庫 id 直讀 404(含跨租戶 id)、攻擊參數library=hr&owner_id=other-tenant被 server 覆蓋、graph 無權 403→授 general 後放行、 admin 全庫 3 筆+跨租戶第 4 筆不可見、權限 PATCH 即時生效(同一 session)、HTML 殼零租戶字串/零 X-Arcrun-API-Key/零 Mira+inline JS node --check、semantic 誠實降級仍 enforce、改密碼全鏈。- 不 merge 待總管審(B 類流程);部署後 leo21c 線上驗(semantic 線上路徑仍依 P1 部署清單 Vectorize
libraryindex+reindex backfill)。下一棒 P4(admin 帳號管理頁)。- 附帶:P2 舊 session 測試補 P3 能力欄位 mock;wrangler.test.toml 補 ANALYTICS_KV+KBDB_GRAPH_URL 假 host。本 session 同時補記 #47-#51 五件的 wiki 斷層(見下段)。
2026-07-13/14 補記(RAG Portal 線五連發——前五個改動當時漏寫 wiki,leo 點破接關斷層,此段補上):
- PR #47(commit 2e1005e):console rebrand Mira→Arcrun+
CONSOLE_BRANDvar 可覆蓋品牌字樣(Gitea #21)——console 是引擎共用件不寫死產品名。- PR #48(commit cbebb36):
CONSOLE_PROFILE=rag頁面裁剪(企業產品樣:搜尋落地、只留搜尋/工作流/設定;未設=full,Mira 實例零影響)——是 config 裁剪不是 auth。- PR #49(commit 18c0846):portal-auth SDD 立卷(
system-dev/docs/3-specs/portal-auth/,Gitea #24 Portal 拆分+#25 多用戶登入);純設計文件。總管審過+leo 裁 D-4=A(graph 粗閘)/D-8=admin(工作流頁)。- PR #50(commit 7f40964):portal-auth P1——KBDB「庫」filter 地基(
metadata_json.$.library,D1 COALESCE→general fallback+Vectorize$in主路徑、寫入端正規化;kbdb 17/17 測試綠)。- PR #51(commit 1260d8c):portal-auth P2——portal_user 模型+認證 API(KBDB 萬用表零新表、
{tenant}::portal子 namespace、PBKDF2-SHA256 600k、bootstrap 走 console owner session、admin CRUD+節流;cypher 20 項單元+雙 worker e2e 33/33)。- 以上均不 merge 待總管審的 PR 正規流程(#47/#48 已 merge 進 main,#49/#50/#51 已 merge——見 git log——部署另走 gated leo21c wrangler 直推)。下一棒=P3 Portal UI+查詢 enforce(本 SDD 最大件)、P4 admin 頁。
2026-07-04 本 session(Mira Console 完整版 UI,Arcrun#3 console 系,總管派工):
- 實作(commit f9e44ab):
/console依 claude design 定稿(紙感暖黑「2a」,system-dev/docs/6-user/Mira Console 設計規劃/於頂層 repo)+ brief 8 頁資訊架構全面重寫成單檔 SPA(hash routing、零外部資源、手機優先+≥1024px 側欄+底部五 tab)。/console/dashboard免登入獨立頁同步換視覺(呼吸球「安/趕/滯」)。- 後端小補(全唯讀/薄殼):①
GET /credentials/catalog(D1 目錄 metadata list,絕不回密文,D19)②GET /console/inbox-data(inbox 清單,session 鎖——訊息原文屬機敏,計數才免登入)③GET /kbdb/graph/neighbors/:name(cypher 代轉 kbdb-graph-plugin,token 只在 server 側;plugin base =KBDB_GRAPH_URL或kbdb-graph-plugin.<subdomain>.workers.dev現算)④ types 加KBDB_GRAPH_URL?。- 誠實分層:語意搜尋未啟用→banner 讀 search 降級訊號(不假結果);搜尋 chips 用 entry_type(KBDB 真能篩的欄位,不編造「電腦筆記/手機筆記」分類);憑證「刪除」標即將開通(DELETE 仍舊 KV 路徑,接了會假綠,見 mistakes #24);設定頁 vectorize「開關」標即將開通(需部署端 kbdb_embed);關聯查無 triplet →「尚無關聯資料」。v0 零件/recipes 查詢區收進工作流頁折疊區(不砍功能)。
- 驗證(本機,未部署):tsc exit 0;vitest 26/27(1 失敗 stash 複驗=pre-existing「不存在的零件回傳失敗」);
wrangler deploy --dry-run打包過;inline JS 求值後node --check+ 純函式行為測試全過(XSS escape/時間容錯,驗證法固化 mistakes #24)。- ✅ 已部署 leo21c(2026-07-04 總管親跑,leo 明示「部署」):手工注入(live worker settings API 拉真實 binding 對齊)→ dry-run 核對 7KV/D1/13SVC/6vars 與 live 一致 → wrangler deploy(Version 13b86bda)→ toml 已還原乾淨。驗收全綠:/console 200+新視覺(title=Mira Console);/console/dashboard 200+dashboard-data 真資料(green light/progress-guard beat);/kbdb/search 401=auth by-design 非迴歸;/credentials/catalog 401 誠實要 key(非 404,端點在);/console/inbox-data 401 session 鎖生效。
- 部署注意(留總管):不跑 acr update(mistakes #23 codeload 陷阱),走 leo21c wrangler 直推 cypher-executor 單 worker;關聯視圖需 leo21c 有部署 kbdb-graph-plugin(沒部署→前端誠實顯示不可達,不擋其他頁);
CONSOLE_TENANT/WORKER_SUBDOMAIN沿既有注入。SDD 缺口沿 07-02 未解(search-console SDD 未建,rule 4.3 需 richblack 確認,本次照派工先實作、誠實記錄)。- 二輪(leo 實測三回饋,本機已修未部署):① 深/淺主題切換+預設淺色(CSS custom properties 兩份色板:淺=宣紙米白紙紋+墨字、琥珀調深 #8a5f1e 過 AA;深=原定稿原值不動;localStorage
arcrun_console_theme,head 預載防閃色;入口=登入/setup 小鈕+側欄項+設定頁開關,dashboard 頁同步支援)② 登入/首次設定置中(根因.view.on{display:block}蓋掉 authwrap flex → 補.authwrap.view.on{display:flex})③ fetch 斷網裸「Failed to fetch」→friendlyErr()誠實文案「連線中斷」+駕駛艙/dashboard 60 秒定時器常駐自動重試。驗證:tsc 0、vitest 26/27(同 pre-existing)、三層跳脫驗證全綠(#24 手法)、淺色板 WCAG 對比實算(正文 12.2:1/琥珀 4.82/ok 4.58/err 5.17)。金琥珀例外(按鈕漸層/狀態球/toast/gcenter)兩版刻意不變。2026-07-02 上個 session(雲端工人 T-loop1d,Arcrun#3 搜尋/控制台頁 v0,跨多 repo 第二次壓測):
- 實作:
cypher-executor/src/routes/console.ts(GET /console,單檔 HTML+原生 JS 薄殼)+index.ts掛載。三查詢區全打既有端點:/kbdb/search、/workflows/search(同源,X-Arcrun-API-Key)、components 打「同帳號」arcrun-registry.<subdomain>.workers.dev(WORKER_SUBDOMAIN 現算,不硬打官方 registry.arcrun.dev)、recipes 打/public-recipes(公庫免 auth)。vectorize 狀態直接讀 KBDB search 回應的mode/capability_hint,沒開新端點。tsc/vitest 綠(既有 1 個無關失敗,不存在的零件回傳失敗測試,stash 驗證 pre-existing)。commit981dc25已 push Gitea main。- 框架級發現(mistakes #23):
acr update部署源永遠是 GitHub codeload tarball(uncle6me-web/Arcrunmain),跟本地/Gitea checkout 完全脫鉤——雲端工人只能碰 Gitea(D20),照 issue 字面指示跑acr update會部署到蓋掉自己剛做的改動的舊版,回報成功卻是假綠。本次改用手工複刻injectWranglerConfig注入邏輯(CF API 查真實 KV id 對齊 dry-run)、直接wrangler deploy單一 worker(cypher-executor),避免碰 GitHub 又讓改動真的上線;部署後立刻 restorewrangler.toml,不留帳號 id 進 git。此路只適合單 worker 小改動;牽動多 worker 時的正解懸而未決,留 leo 裁(部署繞開 GitHub 鐵律 vs acr CLI 硬綁 codeload.github.com 的結構性衝突)。- 端到端驗證(leo21c,curl 證據):
GET /console200;GET /kbdb/search?mode=semantic200(誠實降級 keyword + capability_hint,該帳號 KBDB 目前 0 entries,真實狀態非 bug);GET /workflows/search200(0 筆,該帳號無 named workflow);GET /public-recipes?q=telegram200 真回telegram_send紀錄;GET arcrun-registry.leo21c.workers.dev/components/search200。Playwright 瀏覽器點擊測試因沙盒 outbound proxy policy 擋 registry.arcrun.dev/workers.dev 連線未能跑通(環境限制,非部署問題),改以 curl 逐端點驗證 + 手動覆閱 JS 邏輯替代。- SDD 缺口:issue 要求新 SDD 目錄
docs/3-specs/arcrun/search-console/+ 改 pre-write-guardKNOWN_SDDS白名單——但本 repo 整個docs/與.claude/都在.gitignore(只存在 leo 本機),Gitea clone 拿不到,也無法確認 SDD 白名單機制實際路徑。未落地此步驟,回報 issue,等本機 CC 或 leo 補。- Arcrun#3 issue comment 已回報(署名
[cloud-worker]),sprint 表 T-loop1d 已勾。
2026-06-28 上個 session(issue #13 零件退役殘留收尾,步驟1+2 done):
- issue #13 步驟1(merge caa8e10):3 個示例 yaml 的
component: telegram→ recipe canonical_idtelegram_send(commit a234201)。- issue #13 步驟2(merge 764f657):清
cli/src/commands/parts.ts降級零件殘留——telegram/gmail/sheets/line 改 recipe canonical_id、移除已刪的 ai_transform_compile/run(commit 225aa9f)。- 關鍵發現①(gmail 假綠避免):gmail 讀取(
fetch_unread/action: list)無對應 recipe,硬塞gmail_send(寄信)=語意不符的假綠 → 留 TODO 待 seed 補gmail_list,不硬塞。- 關鍵發現②(第三污染源是設計非殘留):#13 提的「offline validate 不檢查零件」是 by design(offline 刻意跳過遠端查),不當 bug 修,留 issue。
- 教訓沉澱:parts.ts 是手寫常駐清單必 stale → 退役 SOP 要同步清「AI 搜尋零件的三個源」(示例 yaml / parts.ts / validate)。已記 mistakes #22 + card 零件退役要清三源。
- 未 push/merge 由總管統一處理(本 session 只 wiki-capture)。issue #13 步驟1+2 done;validate 缺口留 issue。
2026-06-27 上個 session(issue #8 地基1 + wiki-init 補骨架):
- wiki-init 補骨架:wiki 已初始化過(push 檔活躍),補了從沒建的 pull 層——
cards/decisions/13 張決策原子卡(Haiku 改寫 11+範本 2,含 gloss/實體/typed-edge)、TAXONOMY 換成 arcrun 軸(子系統/形態)、principles 填 13 條、INDEX 真實視圖。raw source 0 異動,無真斷鏈。- issue #8([地基1] workflow description slot + search_workflow,北極星入口):新開 SDD
docs/3-specs/workflow-discovery/(白名單已加)。leo 拍板 4 點(方案C雙寫/Q2 description 由操盤CC據實生成用戶可改/提示式回填/base通用entry_type filter)+ 方向①(MCP 改打 /webhooks/named)。
- ✅ 已實作 tsc 全綠:1.1
/webhooks/named強制 description|2.2+Q4 KBDB base 通用 entry_type filter(改4處:searchEntries/semanticSearch/route/proxy)|2.1 部署雙寫 embeddable entry(注意 KBDB 用 metadata_json 字串)|3.1 cypher/workflows/search|3.2 MCPu6u_search_workflows|4.1/workflows/backfill-search-entries|1.3bGET /webhooks/named補 description/created_at 欄位。- ⏸ 卡待總管定:Phase 1.2/1.3(MCP deploy 改打 /webhooks/named)卡在 ①-a/b/c——實作期發現 /webhooks/named 吃 graph 非 YAML,YAML→graph 編排寫在 CLI push.ts 介面層,MCP 複製=違 rule 07。①-c(先通債另開 issue)我推薦,待總管定。
- 完成標準:tsc 綠≠完成,框架級待 leo21c 端到端實證(強制填擋空/搜尋命中/租戶隔離/降級 hint/MCP 不再 404)。issue open。
- 已 merge 進 main(fast-forward,3 commit:934b926 #4/5/7/8 功能 /
558e80bwiki-init /5d38b59#11 薄殼對齊)+ push origin main。repo Actionsenabled:false(leo 關),merge 未觸發部署。merge≠部署:#5/#7/#8/#11 端到端待 leo21c wrangler 直推(Mira 線)。- issue #11 全做(P0 run 死端點/P1 list 同源/R4 防複發機制:對照清單+smoke+自驗能攔);P2 validate 依賴 #10、tag resource_id 語意債待方向①。
- issue #12(self-hosted MCP 缺 CYPHER_EXECUTOR binding)✅ 修+merge main(commit 222a382):根因非總管假設的 strip 誤清,是 TOML 坑——mcp toml
services=[...]inline 在 [vars] 後被吸成 vars.services(binding 消失);修法 inline→[[services]]array-of-tables(對齊官方 cypher)。wrangler --dry-run 雙向驗(修法後 binding 在/舊版變 env.services)。端到端待 leo21c acr update 重部 MCP;連帶解鎖 #11 self-hosted MCP + mira #6 門鈴 + acr push。見 mistakes #21。- 署名鐵律:跨 repo comment 開頭
[arcrun CC](#12 issue 慣例,非本次 bug)。2026-06-26 上個 session(issue #4/#5/#6/#7 一批):
- #6(base
PATCH /records/:id):✅ updateRecord + route,三表 append-only 不破。tsc 綠,端到端待 leo21c。issue open。- #4(07-thin-shell §3.1 自力救濟階梯 + code-node 規則):✅ 兩份 07 同步 + 02-forbidden §5.2 連動。§3.5 階梯(自家API→補API/第三方→workflow/code-node 補丁/純計算→code-node)。code-node 只定規則未實作零件(wishlist C1,另案)。純文檔。
- #5(KBDB 查詢缺口,普世視角):source 過濾 ✅(json_extract metadata_json,零建表)+ cypher proxy 透傳;documents 聚合 ❌不做(走 graph MCP);DELETE proxy ⏸擱置(依賴頂層 T8);embed-on-write →併#7;能力對照文件 ✅
docs/4-guides/kbdb-capabilities.md。- #7(vectorize 全包,從零):✅ base embed 模組
kbdb/src/embed.ts(精耕只 embedmetadata.embed:true)+ entries route 接 embed-on-write/semantic search/capability_hint + kbdb_embed 開關(config/deploy ensureVectorizeIndex REST/init 問)+ MCP kbdb_search mode:semantic。抓修 deploy 順序 bug(embed 注入要在 stripOfficialOnlyBindings 之後,否則 [ai] 被清)。kbdb/cypher/cli/mcp tsc 全綠,端到端待 leo21c 部署開 Vectorize index。- SDD:kbdb-base tasks Phase 10(#6)/11(#5)/12(#7)。4 issue 各 comment 回報、全留 open(待端到端/頂層)。未 commit(待人決定)。
| 項目 | 狀態 |
|---|---|
| Phase | Credential Primitives TS → WASM(§0.1-0.5 完成,0.6-1 進行中) |
| 主線 | kbdb-base §7.5 已上線(公庫/私庫雙向、UUID 身份、市場數據) |
| 近期完成 | MCP self-hosted bug 三修(2026-06-08) |
| 已部署(2026-06-09 上午) | §8 P0 cron 止血;§7.8 onboarding P0/P1/P2;CLI 1.3.3 publish |
| 已部署(2026-06-09 下午,Haiku 壓測暴露) | http_request+claude_api+kbdb_upsert_block+km_writer 假綠根因修復(非 2xx 回 error envelope,4 worker 已 deploy);acr run self-hosted 修復(本機 YAML 直接走 /cypher/execute 不需先 push + res.ok 擋 + .yaml 容忍);D1-in-update 修復(update 漏建 D1 → 補 ensureD1Database,D1 已建 count:1);CLI 1.3.4 publish;llms.txt/.env.example 加 D1 Edit 權限 |
| Haiku 自主壓測(test_arcrun/5)結論 | onboarding 治好(兩輪都裝+init 沒跳過、走對路建 recipe 不建零件);但暴露 4 真 bug(見下);Haiku 仍會假綠(curl 繞過說成 arcrun 成功、D1 沒建謊報成功)→ 印證「執行真相要系統能驗,不能信 AI 嘴巴」 |
| 已驗證(2026-06-13 壓測 leo21c) | 401 假綠根治全鏈驗證:host fn error envelope → 零件 parsed["error"] → cypher isFailure(),leo21c 實測 401 回 success:false(真紅);{{credential.notion_token}} 注入實證打通:真讀到 Notion Recipes 資料(「蕃茄蘑菇燉雞」+ iCook 連結),§8 credential 機制生效;acr update 部署系統一輪修完(CLI 1.3.5 部署假綠露出、pnpm-workspace 缺檔補齊 23/23 全綠、1.3.6 失敗帶 stderr、1.3.7 manifest 跳過、1.3.8 共享 install 治本);check-release.sh + local-deploy.sh 全形括號 set-u crash 修復 |
| 已完成(2026-06-14,matrix 重整交棒) | ① SDD 遷移收尾:.agents/specs → docs/3-specs 全改(hooks5/rules5/CLAUDE.md/wiki + 2-architecture 鏡像/README/HANDOFF/4-guides),.agents 刪除,pre-write-guard 白名單刷成 10 個實存 SDD(SessionStart + rule4.3 已驗)。② KBDB 資料層 MCP 薄殼(kbdb-base Phase 9.1):mcp/src/tools/kbdb_data.ts 6 工具(template/record/query/search),守鐵律不給建表/SQL,mcp tsc exit 0;CLI(9.2)後補。③ 修 LI M3 斷鏈(見 mistakes #15):skills/examples 5 工具 + sync 從 v3 /blocks /search 改打基本盤 /entries,base 加 page_name 過濾,search 誠實降級 LIKE,mcp+kbdb tsc exit 0 |
| 已完成(2026-06-14 晚,HANDOFF §3b) | 修 MCP self-hosted 認證 401(mcp-account-source.md §5.5):根因=MCP partner-auth 把 Bearer 拿去 KBDB 驗證 partner,namespace 明碼非註冊 partner→401;cypher 端 X-Arcrun-API-Key 不驗證直接當分區 key→CLI 通。修法①+②:① MULTI_TENANT=false 時 partner-auth 把 Bearer 明碼直接當 org_namespace(types/middleware/wrangler,官方 SaaS 行為不變共用同碼);② mcp-setup 把 api_key/namespace 寫進 .mcp.json headers.Authorization(裸檔不送 header 是次因)。mcp+cli tsc exit 0、partner-auth 9 tests 綠 |
| 已處理(2026-06-25,issue #3 官方庫誤寫善後) | ① 清理 SOP runbook 備妥(docs/5-records/2026-06-24-official-kbdb-cleanup-leo-misdelete.md):14-E 遷移期 mira 誤寫 owner_id=leo 進官方 prod arcrun-kbdb(database_id 0c580910…)。三道防誤刪閘(備份先行 d1 export → 核實 entry_type+時間範圍確認範圍乾淨 → 刪後驗證 count=0+孤兒 entry_values=0+其餘不受影響)。補關聯刪除範圍:entry_values(slot-link,外鍵指 entries)先刪孤兒、templates.created_by=leo 單獨核實勿盲刪。DELETE 不由 CC 跑(不可逆+官方憑證+需人類明示,mindset §7)→ runbook 由 leo(官方運營方)親自執行。【2026-06-25 已端到端執行完畢】 chaperone 模式逐步跑:核實誤寫 111,368 筆(value 93,790/note 13,671/block 3,907,全 06-15DELETE FROM entries WHERE owner_id='leo'(changes=111368)→ 驗證 leo 殘留=0/孤兒=0/官方庫其餘只剩 smoke_ns_1×2+null×1(3 筆烟霧殘留,非 leo)。備份已刪、.gitignore 補 *.sql 防誤 commit、gh issue #3 已回報客觀證據可關閉。② 願景 acr migrate 雙向遷移記 BACKLOG.md(對齊 wishlist C7,牽動 cli+cypher+kbdb,未來方向)。已 gh issue #3 comment 回報,暫不 close 待 leo 跑完清理回報 count 歸零。③ 順手消 status 矛盾:credential 401 真實狀態=已端到端實證打通(2026-06-13 Notion {{credential.notion_token}} 真讀到資料),tasks.md 8.5 原標 [ ](OpenAI 路徑沒走)已補 [x](Notion 達同等證據,機制與服務無關)。純文檔/runbook,無 code 變動 |
| 已修+merge prod(2026-06-24,issue #2 框架 bug) | self-hosted cypher KBDB_BASE_URL 注入缺口修復(總管經 GitHub issue #2 交辦):根因=injectWranglerConfig self-hosted 分支只注 database_id/MULTI_TENANT,漏注 KBDB_BASE_URL → cypher /kbdb/* fallback 到官方 arcrun-kbdb.uncle6-me(self-hosted 資料寫進官方庫、隔離破損)。修:deploy.ts self-hosted 分支加 KBDB_BASE_URL 改寫成 arcrun-kbdb.<ctx.workerSubdomain>.workers.dev,比照既有注入模式;init/update 共用此注入點一處修兩條路。驗:tsc exit 0、真實 cypher toml 注入 subdomain=leo21c → arcrun-kbdb.leo21c.workers.dev(comment 行不動)。已 merge main+push(commit 9c4333d、merge ba00b98)、CLI npm publish 1.3.13(修的是 CLI 注入邏輯 → self-hosted 用戶裝 npm 套件才到手,光 git 不生效;local-deploy.sh §6 自動 bump+publish;release-check 全綠)、issue #2 已關閉。端到端落庫實證歸 mira dogfooding 帳號(需 leo21c token 跑 acr update + wrangler d1 execute 收綠燈,不卡本框架修復)。⚠️ 與 issue 描述出入:cypher toml 本就有 KBDB_BASE_URL(寫死官方),比「沒有」更糟(?? fallback 根本不觸發)→ 修法是就地改寫而非新增。慣例落地:總管↔arcrun 交辦走本 repo GitHub issue(已寫進 CLAUDE.md) |
| 已部署+端到端驗收(2026-06-15,總管交棒 3 件) | ① CLAUDE.block.md 重寫(HANDOFF §6,Haiku 能懂):補三盲點=recipe 是公共投稿非私人腳本/缺能力補 API 不准 recipe-工作流拼裝(附口訣)/自製零件退場路徑(claude_api 刪、kbdb 走 acr kbdb 薄殼、假零件改 recipe);README 零件vsrecipe 段同步對齊。② cypher proxy 補 /kbdb/entries CRUD(kbdb-base 9.6,解鎖 mira _kbdb_client.py 主線):POST/GET list/GET :id/PATCH :id 純轉發基本盤;租戶隔離同 9.5(寫入注 owner_id、list 強制本租戶、PATCH 剝 owner_id、刻意不開 DELETE)。③ arcrun_report_feedback 改打 /entries(kbdb-base 9.7,9.4 漏網):舊 POST /blocks 是死 route(404 假紅)→改 entry_type=agent-feedback。端到端 prod 驗收全綠:無key→401、跨租戶 list count=0、owner_id hijack 被剝、page_name lookup 通、/blocks→404 確認、agent-feedback 寫入經 proxy 讀回 count=1。cypher+mcp tsc exit 0、已部署官方 58309bb9、CLI npm 1.3.12、smoke 資料已清。交棒 mira:leo21c 改 _kbdb_client.py 打 cypher /kbdb/entries 即可遷移 |
| 已部署+自驗(2026-06-15,HANDOFF §6b 部署斷層解決) | leo21c cypher 落後 → 已重部,/kbdb/entries 回 200(解鎖 mira 14-A 主線遷移)。根因不是 GitHub lag(origin/main==本地,含 entries route):① acr update 的 content-hash manifest(deploy.ts:198-225)把 cypher 當未變動跳過 → --force 清空 manifest 全部重部;② 更深陷阱:repo .env line 3 active CLOUDFLARE_ACCOUNT_ID=58309bb9(官方)被 CLI 載入覆蓋 config.yaml 的 leo21c 51a01bfa(env>config,config.ts:174)→ leo21c token 對官方帳號認證 → KV「Authentication error」中止 → 解:部署時 CLOUDFLARE_ACCOUNT_ID=51a01bfa… acr update --force(記憶 selfhosted-deploy-account-override-trap)。部署 23/23 全綠(含 cypher/kbdb/mcp)+ seed(10 API+23 auth)+cron migrate。自驗:/kbdb/entries?limit=1→200 真 body(非假綠)、/kbdb/templates→200、/kbdb/records?limit=1→404(非回歸,proxy 本就無 bare list route,只有 POST + by-template/:t + :id);缺口② MCP initialize(Bearer leo)→200(MULTI_TENANT 注入生效、KBDB binding 隨 mcp 上線)。全域 acr 已升 1.3.12(npm 本就有,非重發)。純部署無 code 變動 |
| 已部署(2026-06-15,MCP self-hosted 401 注入缺口修補) | 根因=部署沒注入 MULTI_TENANT(非 code bug):partner-auth.ts MULTI_TENANT 分支對,但 mcp toml 該行原是註解、injectWranglerConfig 注 KV/subdomain 卻漏注 MULTI_TENANT → worker env undefined → 走 partner-key → self-hosted 401。修:deploy.ts 加 injectMultiTenant(DeployContext.selfHosted;init/update 帶旗標;mcp toml 改 active [vars])。本地驗注入真實函式 PASS(mcp/cypher 各 1 行 active MULTI_TENANT=false 在 [vars] 下);官方 MCP partner 路徑回歸 401(不變)。CLI npm 1.3.11。端到端交棒 mira:leo21c 重跑 acr update(CLI≥1.3.11)→ curl Bearer leo /mcp 應 200。SDD §5.5.1 |
| 已部署+端到端驗證(2026-06-14 晚) | KBDB CLI 薄殼解卡(9.5+9.2)已上 prod:cypher routes/kbdb-proxy.ts 純轉發 + CLI commands/kbdb.ts(acr kbdb)。端到端煙霧測試全綠(curl cypher.arcrun.dev/kbdb/*):無key→401、建template→200(created_by=租戶)、租戶隔離 query+search 都 0 筆跨租戶。CLI npm 1.3.10。煙霧測試抓到 2 真 bug 並修:①proxy fallback 寫死舊死的 kbdb.finally.click→改現役 arcrun-kbdb + cypher [vars] KBDB_BASE_URL;②kbdb searchByTemplate || true stub 讓 owner_id 過濾失效(跨租戶洩漏)→改 SQL JOIN entries 真過濾。三 worker(cypher/mcp/kbdb)都已 deploy 官方帳號。self-hosted MCP 那條未測(官方不設 MULTI_TENANT,待 leo21c 部署 HANDOFF §3)。⚠️ prod 留了 smoke_contact 測試 template(掛 smoke_ns_1,不污染真租戶,template 無 delete API) |
| 待處理 | §8 P1/P2 recipe/workflow list 遷 D1(需 D1 先穩,現已可建);4 份 inline host fn 抽共用 helper dedup;arcrun.dev/llms.txt serve;mcp worker 偶發 fetch failed(網路抖動,重跑即過,非 bug);LI M3 實環境驗收(需 KBDB_BASE_URL 跑 sync + 叫工具,目前只驗 tsc+dry-run);mira 波次2 主線遷移(arcrun 端 cypher 已部 leo21c、/kbdb/entries 實測 200,已交棒待 mira CC 改 _kbdb_client.py)| |
🔄 進行中的 Task
credential-primitives-wasm → 📦 已封存(2026-07-21)
不再是進行中的 task。卷移入 system-dev/docs/3-specs/archive/credential-primitives-wasm/
(design.md status: closed)。Phase 0-3 + 7 + 8 全數完成:auth_static_key /
auth_service_account / auth_oauth2 WASM 零件到位;credential-injector.ts、jwt-signer.ts、
BUILTIN_API_RECIPES / BUILTIN_CREDENTIALS_MAP 全數移除(grep 0 筆,T10 於 2026-07-20
commit 20c7610)。
credential 現行做法:CF Workers per-script Secrets(密文)+ D1 目錄(metadata/secret_ref),
arcrun 不自管加密金鑰,crypto_decrypt host function 已成永遠回失敗的 stub。
規範見 .claude/rules/01-tech-stack.md「Credential 儲存規範」。
⚠️ 封存 ≠ 全部做完(要做需另立新 SDD,不得掛回封存卷):
auth_mtls從未實作 —registry/components/auth_mtls/不存在,mTLS 認證不支援- 原 7.6 self-hosted auth 鏈端到端未驗 —
global_fetch_strictly_publicflag 是否真解 same-zone 1042,在自架帳號上從未實測 - 端到端測試 1.7/1.8/2.6/3.5/3.6/5.1 無驗證記錄
kbdb-base
- §7.5:公庫/私庫雙向、UUID 身份、市場數據(2026-06-07 deploy)
- §8 P0:cron 止血(2026-06-09)。scheduled.ts 每分鐘 list → 單一 key
cron-idx:_allget(新增 lib/cron-index.ts;webhooks-named push/delete 維護;migrate-cron-index 一次性遷舊)。1440 list/日 → 0。cypher tsc exit 0 - §8 P1/P2:recipe/workflow list 遷 D1(透過 kbdb worker /entries HTTP API 雙寫,不加 binding,用 cypher binding 狗糧)。另開 session 做(大、易出錯,需專注+壓測)
- 狀態:架構拍板(richblack 2026-06-09:用 kbdb /entries HTTP,service binding 才需問),未動 code
onboarding(self-hosted-init §7.8,2026-06-09 交付)
- P0:acr init 偵測先於動作 + 裝完驗收(cli/src/lib/preflight.ts)。冪等。
- P1:acr whoami(+--json)+ MCP arcrun_whoami(AI 別自己 curl 猜帳號)
- P2:mcp-setup 寫完印「請重啟 client」(D3)
- [~] P3(部分,2026-06-09 push c152f5f):repo 加
.env.example範本(每格白話說明、值留空,.gitignore!.env.example放行)+ llms.txt 教 AI「先 cp .env.example .env、帶用戶填值」。 已 push main → 公開 repo 生效(raw 200 已驗)。仍待:arcrun.dev/llms.txt serve(landing/public 缺檔)。
LLM Wiki 建設
- 階段一:目錄結構建立、分類規則表、檔案掃描(101 個 .md)
- 階段二:mistakes.md + decisions-summary.md + INDEX.md + status.md(本檔)
- 階段三:文件遷移執行(2026-06-14 完成)— SDD 實體已在
docs/3-specs/;hooks(5)/rules(5)/CLAUDE.md/wiki 全部從舊.agents/specs/改指docs/3-specs/;.agents/steerings/tech.md(已與docs/3-specs/tech.md同步) 連同空.agents/刪除。SessionStart hook 與 pre-write-guard 白名單(10 個 SDD 目錄全對齊)已驗證。 另收尾活指針:docs/2-architecture/ 鏡像、docs READMEs / HANDOFF / 4-guides 的 arcrun-local 指針一併改新路徑。 刻意保留:docs/5-records 歷史 incident/migration 記錄、跨 repo(polaris/mira、matrix/kbdb)路徑、 docs/3-specs/** SDD 內文(改 SDD 內文=change,需另確認)、README 遷移對照表。 - 🟡 待補:modules/ (cypher-executor、wasi-shim、recipe-system 等)
⚠️ 已知問題 / 待處理
2026-06-09 更新:已解項標 ✅;🔴/🟡 為仍待處理。本次 Haiku 壓測新發現的 bug 加在表內。
| 問題 | 優先級 | 狀態 | 備註 |
|---|---|---|---|
| ✅ 已解 | 8.1-8.5 全完成(2026-06-25 確認) | 機制(auth_static_key resolve_credentials + graph-executor resolveCredentialRefs)已端到端實證:2026-06-13 Notion {{credential.notion_token}} 真讀到資料(同等於 8.5 OpenAI 驗收,機制與服務無關)。tasks.md 8.5 已補 [x] |
|
| §8 P1/P2 recipe/workflow list 遷 D1 | 🔴 高 | 架構已拍板未動 code | 走 kbdb /entries HTTP 雙寫不加 binding;依賴 D1(現已可建)。另開 session 做 |
| 4 份 inline http_request host fn 抽共用 helper | 🟡 中 | 待 dedup | http_request/claude_api/kbdb_upsert_block/km_writer 各自複製貼上同段(這次假綠修也是逐份改) |
arcrun.dev/llms.txt 404 |
🟡 中 | 未 serve | landing/public 缺檔;GitHub repo 內正常(test/5 走 GitHub 不阻擋) |
| MCP account-source | 🟡 中 | 記錄中 | self-hosted MCP 指官方不指自己(§5.2 已知) |
| recipe submitted 後沒有 uuid | 🟡 中 | 待驗 | submit-p 應回 uuid,CLI 拿不到 |
| ✅ 已解 | §8 P0 部署 | cron list→單 key get,1440/日→0(2026-06-09) | |
| ✅ 已解 | §7.8 P0/P1/P2 + P3 部分 | CLI 1.3.4,Haiku 壓測證實裝+init 不跳過 | |
| ✅ 已解 | update 補 ensureD1Database + token 加 D1 權限 | 2026-06-09,D1 已建 count:1 | |
| ✅ 已解 | host fn 非 2xx 回 error envelope | 4 worker deploy;auth_sa 不套 | |
| ✅ 已解 | 本機 YAML 走 /cypher/execute + res.ok 擋 | CLI 1.3.4 | |
| ✅ 已解 | token 在 .env NPM_API_TOKEN | 走 local-deploy.sh step 6,別手動繞 |
🧪 測試進度
壓測 2026-06-08(Haiku 乾淨重測)
- 目標:kbdb-base §7.5 公庫/私庫 + UUID 驗收
- 對象:Haiku(全程自主操作)
- 測試檔:
/test_arcrun/3/test_to_haiku.md(9 個步驟) - 撞牆記錄:
/test_arcrun/撞牆記錄.md - 狀態:準備妥當,awaiting Haiku run
前次壓測(2026-06-07)
- ✅ kbdb-base §7.5 上線前驗收(16 項通過)
- 📋 發現 onboarding 四缺陷(Cold.1-8)
🚫 封測狀態
推遲(richblack 2026-04-19 決定,後延至 2026-06-08 依舊推遲)
原因(2026-07-21 更新):
Phase 1-3(auth WASM + 清除違規 TS)未完✅ 已完成,credential-primitives-wasm 卷已封存- 殘留:
auth_mtls未實作、self-hosted auth 鏈端到端未驗(均需另立新 SDD)
啟動條件:原「Phase 1-3 完成」已達成;壓測 Haiku 自癒能力驗證仍待做。 封測是否啟動屬 leo 的決定,不由本檔認定。
📋 下一步(優先級)— 2026-06-25 更新
🔴 最優先
credential 注入 401 修復✅ 已端到端實證打通(2026-06-13 Notion{{credential.notion_token}}真讀到資料;tasks.md 8.5 已補[x])。機制完成,非阻擋。- §8 P1/P2 recipe/workflow list 遷 D1:D1 現已可建(依賴解除)。走 kbdb /entries HTTP 雙寫不加 binding。 大、易出錯,另開乾淨 session + 壓測。← 現在的真.最優先未做項。
🟡 本周
credential-primitives-wasm Phase 0.6-0.7 → Phase 1-2(auth WASM 零件)✅ 完成,卷已封存- 4 份 inline http_request host fn 抽共用 helper(dedup;這次假綠修是逐份改的)
清除 cypher-executor 違規 TS(Phase 3)✅ 完成(三者 grep 皆 0 筆,T10 於 2026-07-20) 5b. [ ]auth_mtls零件從未實作(封存卷殘留缺口,要做需另立新 SDD) 5c. [ ] self-hosted auth 鏈端到端驗收(原 7.6,同上需另立 SDD)
⚪ 未來
arcrun.dev/llms.txtserve(landing/public 補檔)- 補 wiki modules/(文件遷移階段一~三已於 2026-06-14 完成)
- MCP account-source、recipe submit uuid 回傳
🔗 相關資源
| 資源 | 位置 | 用途 |
|---|---|---|
| 總進度 | docs/3-specs/arcrun/arcrun.md |
全景進度表 |
| 現行 active SDD | bash system-dev/scripts/sdd-active-check.sh |
唯一判準=frontmatter status: active(D35 單一活性) |
system-dev/docs/3-specs/archive/credential-primitives-wasm/ |
已封存,勿當進行中 | |
| 壓測 case | /test_arcrun/2/test_case.md / 3/test_to_haiku.md |
功能驗收 |
| 事件復盤 | /docs/incidents/ |
歷史踩坑 |
| 常犯錯誤 | .claude/wiki/mistakes.md |
自檢清單 |
| 架構決策 | .claude/wiki/decisions-summary.md |
設計參考 |
版本日誌
| 日期 | 變動 |
|---|---|
| 2026-06-08 | 初建。MCP bug 修正完成、wiki 系統搭建、壓測 Haiku 進行中 |
| 2026-06-08(補) | Haiku 壓測發現 Cold 驗證缺陷:init 無強制檢查點 → 假綠風險。記入 mistakes.md §11 |
✅ 2026-08-08 深夜|leo 的 youlin 登入修好了(瀏覽器實證)
📍 repo:matrix/arcrun(cypher-executor/src/index.ts CORS 自動放行,commit 07cc7f5)
+ matrix/arcrun/.github-public/installer/scripts/deploy-all.mjs(有注入的部署路徑)
三元組:登入從斷到通 >> 靠 >> matrix/arcrun:cypher-executor/src/index.ts 從 WORKER_SUBDOMAIN 自動推導 portal origin
決定性的一個差別
修復前 按登入 → 「連線中斷——請檢查網路後重試」 ← 請求根本送不出去(CORS 擋掉)
修復後 按登入 → 「email 或密碼錯誤」 ← 請求送到了、後端回答了
「連線中斷」vs「密碼錯誤」就是全部——我用假帳號,被拒絕才是正確行為。
對外四件(stage 環境,*.workers.dev 依 leo 08-07 判準屬例外)
② DNS 172.67.138.117
③ apiBase https://arcrun-cypher-executor.youlin-hsieh-dev.workers.dev ← 已注入
④ CORS access-control-allow-origin: https://arcrun-rag-ui.youlin-hsieh-dev.workers.dev
頁內實測 fetch /console/auth-status → {ok:true, status:200}
📌 console 那幾行紅字是部署前的殘留——同一個分頁不會清空。
用頁內 fetch 實跑才是可信的判準,不是讀 console 歷史。
部署方式與它的誠實限制
用 deploy-all.mjs(有注入的腳本路徑,非手動 wrangler):
KV 9/9 齊、D1 有、subdomain ✓、24 顆全部成功、3 個 secret 完好未被洗掉。
收工後 git checkout 清掉它弄髒的 15 個 wrangler.toml(已知行為,工作區歸零)。
🔴 限制要說清楚:這驗的是「程式碼修對了」,不是「安裝器裝出來的結果」。 環境分離(t217)沒做完之前,這是能做到的最接近的驗證。
今天真正被根治的
不是「補上 UI_ORIGINS」,是讓它不再需要被注入——portal 與 cypher 是同一子網域的兄弟, 位址推導得出來。少一個必須注入的變數,就少一個會被漏掉的東西。