Files
Arcrun/system-dev/wiki/status.md
uncle6me-web ebd4bf5d97 wiki: 記執行紀錄保留期 UI 補完(arcrun-rag#21)
status.md 補一段,供下個 session 接關不用重查。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-09 13:30:00 +08:00

467 lines
54 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: status
description: 當前進度、進行中 Phase、已知問題、下一步(動態文件,每 session 更新)
metadata:
type: project
last_updated: 2026-08-07
---
# 當前進度(動態)
> **更新頻率**:每次 session 結束時更新此檔。
> **新對話開始時讀此檔第一段**(3 分鐘概覽)。
---
## 📍 當前位置
> **2026-08-09(執行紀錄保留期補前端,arcrun-rag#21 交辦,commit `889b70b` main,已 push gitea**
> P7 後端(4ca23c2)早已完成,但 portal 管理頁零命中「保留期」相關字樣——leo 只能自己 curl。
> 補 `console-ui/public/portal/index.html` 管理頁「執行紀錄保留期」卡片(純薄殼,呼叫既有
> `GET/PUT /portal/admin/execution-log-retention`,未動後端)。**本機真瀏覽器 E2E 驗證**:
> 起 kbdb+cypher-executor 兩個真 `wrangler dev`local D1 套用 migrations 0001-0006)+本機
> 靜態伺服 portal`UI_ORIGINS` 解 CORS,走真實首次設定流程建帳號登入 → 改天數/勾「不刪除」
> 存檔、reload 頁面值仍持久(雙向都測過:90→45→90、數字→不刪除→數字),Network 每筆
> GET/PUT 皆 200console 無新增紅字。**未部署**(紅線:只 commit+push,未動任何 Cloudflare
> 實例/未重打 arcrun-rag-ui bundle)——已在 arcrun-rag#21 comment 說明,要讓管理者在正式
> portal 看到需另走 build-ui-bundle+出貨流程。**順手發現**console-ui 無本機 dev/test script
> package.json 只有 deploy/verify),此次是手工兜 wrangler dev + python http.server
> 建議後續補 `npm run preview:local`。
> **2026-08-09(語意搜尋「故障要照實說是故障」,leo 直令,local commit main**
> leo 看到 portal 橫幅「語意搜尋還沒開通⋯匯出診斷檔給我們幫你打開」原話痛罵:
> 「**語義搜尋已經確定是一安裝就提供的功能⋯我沒有不開通這個功能,是壞了,
> 沒有人會把 bug 美化成沒提供沒開通**」。本輪修四層:
> 1. **文案**portal`console-ui/public/portal/index.html`)+console 兩處橫幅與設定頁
> 全改「語意搜尋目前故障/我們的問題/你不用做任何事」,禁「開通/尚未啟用」框架;
> kbdb `capability_hint` 同步改(`degraded_reason: module_off`)。
> 2. **查詢向量化失敗不再偽裝成空結果**(leo 點名的謊):`embed.ts` `semanticSearch`
> 改丟 `EmbedQueryFailedError`(舊行為 `if(!vec) return []`=「額度用完」被顯示成
> 「查無資料」);route 層接住 → 誠實降級 keyword`degraded_reason: embed_query_failed`。
> 瀏覽器實測:真 AI binding + bogus 模型(5007 No such model)→ 橫幅照實說暫時故障。
> 3. **源頭機制修掉**(為什麼裝好的實例會失去語意搜尋):
> ① `cli update.ts` `kbdb_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 是否其實已存在。
> 4. **順手自癒**:搜尋 hydrate 時發現孤兒向量/下架殘影 → 背景 deleteByIdsis_embedded
> 歸零(0.971 殘影病原不再累積);空結果且 pending>0 → 背景 backfill 一批(embedOnWrite
> fire-and-forget 失敗以前沒有任何機制會回來補)。no_index 拆兩態:pending>0=故障文案、
> pending=0=誠實說「還沒有資料」(新裝未同步不是故障)。
> **測試**kbdb 146/146 綠(新增 `search-semantic-degraded.test.ts` 6 案+selftest 1 案);
> cli tsc 乾淨+10/10deploy-all DRY_RUN 24 worker 斷言 PASS。瀏覽器端到端(local wrangler
> dev 18787/18788portal 真登入)兩種故障畫面截圖驗過。**未部署 prod(D20 閘)**
> 別 session 未 commit 的 `.component-builds/*` 與 `graph-executor.ts` 未動未代提。
> **2026-08-07 晚(檢修孔第一版,local commit 未 pushmain**leo 直接指令「先把檢修孔做出來
> 發版,不必先知道 Oscar 的病是什麼」——解掉「查不出封測者的病,因為拿不到他那邊資料;拿不到
> 資料是因為沒有檢修孔」的死結。**規格中途被 leo 簡化過一次**:從「免授權層/同意後才交」兩層
> 機制,收斂成「設定頁一顆按鈕、按下去下載一個 JSON 檔、用戶自己把檔案傳出去」(同意天然內建
> 在「他自己按、自己傳」這個動作裡)。
>
> **已完成(3 個 local commit`matrix/arcrun`sha `9344562`→`83aa1f6`→`5388f40`**
> 1. `kbdb/src/embed.ts` `embedSelfTest()` `GET /embed/selftest?owner_id=`——挑一筆已標記
> 「已嵌入」的卡片拿自己的內容查自己,只回 `{enabled,tested,passed,note}`(不回內容/id)。
> 這是唯一能分辨「從沒嵌過」vs「嵌了但 index 查不到自己」(Arcrun#11 那種故障)的方法,
> 單看 backfillStatus 的 pending/embedded 計數看不出後者。
> 2. `cypher-executor/src/routes/portal-data.ts` `GET /portal/data/diagnostics`——聚合
> embed 健康狀態+`library_count`/`triplet_count`(只讀 `/map` 回應的數字,`narrative`/
> `top_entities` 讀完即丟)+`bundle_version``instance_url`。沿用既有 `requirePortalUser`。
> 3. `console-ui/public/portal/index.html` 設定頁「疑難排解」panel+「匯出診斷檔給我們看」按鈕。
>
> **端到端實測方式**(真跑不是模擬):本地起兩個真 `wrangler dev`kbdb:18787
> cypher-executor:18788local D1+KV,真的跑過 migrations),HTTP API 種一個 portal_user
> +一筆 triplet_count=67 的 library_map;瀏覽器工具**真的登入、真的點按鈕**,Network 面板
> 看到 `GET /portal/data/diagnostics → 200`,頁面狀態列顯示「已下載」。兩種故障情境(module
> 未開/embedded=0module 開了但 self_test.found_itself=false)都各自產出可判讀的 JSON,
> 貼給 leo 核對過。
>
> **測試**kbdb 12 新測試+既有 110 全綠;cypher-executor 3 新測試綠(既有 1 個 `/portal`
> HTML 殼 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-28t95+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 M5GUI
> 首頁)PR 已開,等審+gated 部署(merge 後需 leo 閘 redeploy cypher-executor**。R4 落點裁定=
> console **總庫搜尋頁搜尋框上方**rag profile 該頁即首頁;full profile 它是全館入口——駕駛艙是
> 狀態面不是庫導覽面,地圖跟搜尋同頁「點庫卡片→帶 library filter 進庫搜尋」動線最短、一份實作
> 兩 profile 全吃)。兩段式渲染:GET /kbdb/map 先出庫卡片(narrativetop entitiestriplet 數+
> 更新時間),逐庫 GET /kbdb/map/:library 補 degree/跨庫 bridgescommit_hash(詳圖失敗維持名字
> 版不擋渲染);proxy 端(kbdb-proxy.tsowner_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 tool `kbdb_get_map`(無參數=全館每庫一行;帶 library=詳圖,slot JSON 字串容錯 parse 成
> 物件,parse 失敗當空陣列;404/空庫誠實回報+POST /map/recompute backfill 指引;description 含
> 「不確定該查什麼時,先呼叫此工具」)——走既有 KBDB service bindingkbdbFetch),與 #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_map` templatemigration 0003 seedruntime ensureD6 零建表);核實 triplet 按庫定位=
> **不足**prod triplet template 無 library slot、entries metadata.library 未標記)→ 走 SDD 預案:
> recompute 冪等補 optional `library` slot(改 template 不動表),值待 ingest M3 補寫。
> M2kbdb base `POST /map/recompute?library=`degree top-Npredicate 分布/跨庫 bridgescount
> 聚合 SQL 住基本盤=D6 歸屬裁定;順序安全 supersede;過渡 `source_prefix` fallback 讓舊 triplet 靠
> source_uri 歸庫)+`GET /map`(每庫一行)+`GET /map/:library`。測試:node:sqlite 真 SQLite 實跑
> 聚合 SQLHono route 行為,45/45 過、tsc 乾淨。
>
> **2026-07-19#68 MCP graph tool**`kbdb_graph_neighbors` PR 已開(分支
> `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 本 sessionbugfixkbdb search 兩缺口 #66/#67,分支
> `fix/search-source-filter-and-semantic-threshold`,雲端總管交辦)**
> - **#66/#67 修復 PR 已開(雲端總管交辦),等審+gated 部署**。
> - #66`/entries/search` keyword 路徑 source 參數解析後丟棄(#5.1 只接了 listEntries 那半)→
> `searchEntries` 尾端加 `source?`positional caller 全不用改)+同款 json_extract 謂詞,
> route keyword/semantic 降級兩處傳入。
> - #67semantic 固定 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 workerleo 閘)。
>
> **2026-07-14 上一 sessionbugfixPBKDF2 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/bootstrap` 500
> uncle6 實撞,證據 arcrun-rag `docs/manual/uncle6-deploy-record.md`)。**miniflare 無此限制=
> 本機測試全綠的假象**(新教訓:平台 crypto 限額 miniflare 不模擬,涉 WebCrypto 參數上限的驗收
> 只有真雲驗得出)。
> - **修(小刀)**`portal-auth.ts` `PBKDF2_ITERATIONS` 600_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.toml`
> compatibility_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 P4admin 帳號+庫管理頁——本 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.ts` 14 項;cypher 168/169(唯一失敗=executor「不存在的
> 零件」pre-existing);kbdb 20/20;兩包 tsc 0dry-run 打包過;inline JS node --check 過。
> **端到端隔離雙 worker9790/9791demo 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 排練上真環境**(部署清單沿 P1Vectorize `library`
> metadata indexreindex backfillgated leo21c wrangler 直推,B 類流程)。不 merge 待總管審。
>
> **2026-07-14 上一輪(portal-auth P3Portal UI+查詢 enforce——本 SDD 最大件,PR #52 待總管審不 merge**
> - **實作(分支 `portal-auth-p3-portal-ui`**:① `routes/portal-data.ts`(安全核心)——`/portal/data/*`
> server-side enforcesession→回讀 user record→server 注入 `owner_id=CONSOLE_TENANT``library=<集合>`
> 轉發 KBDB;**前端絕不下發租戶字串**vs console 把 tenant 交給前端直打 /kbdb/*);caller 自帶
> owner_id/library 被靜默覆蓋;entries/:id 逐筆驗租戶+庫(越庫/跨租戶/不存在同一句 404 不洩存在性);
> graph D-4 粗閘(來源庫=portal_library `graph_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_source` slotensurePortalTemplates 冪等 grow 舊 template 缺 slot
> admin libraries PATCH 可標記。
> - **UI 重用取捨**:複製 console 樣式子集(紙感/明體/琥珀/深淺主題)而非抽共用模組——抽共用要動
> console.ts(違「console 現狀不動」鐵律);代價=樣式雙份、改版要兩邊同步(誠實記)。
> - **驗證**cypher 154/155(唯一失敗=executor「不存在的零件」pre-existingstash 複驗)+新增
> `tests/portal-data.test.ts` 21 項;kbdb 20/20;兩包 tsc 0`wrangler deploy --dry-run` 打包過。
> **端到端隔離雙 worker9790/9791demo 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/零 Mirainline JS node --check、semantic 誠實降級仍 enforce、改密碼全鏈。
> - **不 merge 待總管審**B 類流程);部署後 leo21c 線上驗(semantic 線上路徑仍依 P1 部署清單
> Vectorize `library` indexreindex backfill)。下一棒 P4admin 帳號管理頁)。
> - **附帶**P2 舊 session 測試補 P3 能力欄位 mockwrangler.test.toml 補 ANALYTICS_KVKBDB_GRAPH_URL
> 假 host。本 session 同時補記 #47-#51 五件的 wiki 斷層(見下段)。
>
> **2026-07-13/14 補記(RAG Portal 線五連發——前五個改動當時漏寫 wiki,leo 點破接關斷層,此段補上)**:
> - **PR #47**commit 2e1005e):console rebrand Mira→Arcrun`CONSOLE_BRAND` var 可覆蓋品牌字樣(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=Agraph 粗閘)/D-8=admin(工作流頁)。
> - **PR #50**commit 7f40964):portal-auth **P1**——KBDB「庫」filter 地基(`metadata_json.$.library`D1 COALESCE→general fallbackVectorize `$in` 主路徑、寫入端正規化;kbdb 17/17 測試綠)。
> - **PR #51**commit 1260d8c):portal-auth **P2**——portal_user 模型+認證 APIKBDB 萬用表零新表、`{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 本 sessionMira Console 完整版 UIArcrun#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-plugintoken 只在 server 側;plugin base = `KBDB_GRAPH_URL` 或 `kbdb-graph-plugin.<subdomain>.workers.dev` 現算)④ types 加 `KBDB_GRAPH_URL?`。
> - **誠實分層**:語意搜尋未啟用→banner 讀 search 降級訊號(不假結果);搜尋 chips 用 entry_typeKBDB 真能篩的欄位,不編造「電腦筆記/手機筆記」分類);憑證「刪除」標即將開通(DELETE 仍舊 KV 路徑,接了會假綠,見 mistakes #24);設定頁 vectorize「開關」標即將開通(需部署端 kbdb_embed);關聯查無 triplet →「尚無關聯資料」。v0 零件/recipes 查詢區收進工作流頁折疊區(不砍功能)。
> - **驗證(本機,未部署)**tsc exit 0vitest 26/271 失敗 stash 複驗=pre-existing「不存在的零件回傳失敗」);`wrangler deploy --dry-run` 打包過;inline JS 求值後 `node --check` + 純函式行為測試全過(XSS escape/時間容錯,驗證法固化 mistakes #24)。
> - **✅ 已部署 leo21c2026-07-04 總管親跑,leo 明示「部署」)**:手工注入(live worker settings API 拉真實 binding 對齊)→ dry-run 核對 7KV/D1/13SVC/6vars 與 live 一致 → wrangler deployVersion 13b86bda)→ toml 已還原乾淨。**驗收全綠**/console 200+新視覺(title=Mira Console);/console/dashboard 200dashboard-data 真資料(green light/progress-guard beat);/kbdb/search 401auth by-design 非迴歸;/credentials/catalog 401 誠實要 key(非 404,端點在);/console/inbox-data 401 session 鎖生效。
> - **部署注意(留總管)**:不跑 acr updatemistakes #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.82ok 4.58err 5.17)。金琥珀例外(按鈕漸層/狀態球/toast/gcenter)兩版刻意不變。
>
> **2026-07-02 上個 session(雲端工人 T-loop1dArcrun#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)。commit `981dc25` 已 push Gitea main。
> - **框架級發現(mistakes #23**`acr update` 部署源永遠是 GitHub codeload tarball`uncle6me-web/Arcrun` main),跟本地/Gitea checkout 完全脫鉤——雲端工人只能碰 Gitea(D20),照 issue 字面指示跑 `acr update` 會部署到蓋掉自己剛做的改動的舊版,回報成功卻是假綠。本次改用手工複刻 `injectWranglerConfig` 注入邏輯(CF API 查真實 KV id 對齊 dry-run)、直接 `wrangler deploy` 單一 workercypher-executor),避免碰 GitHub 又讓改動真的上線;部署後立刻 restore `wrangler.toml`,不留帳號 id 進 git。**此路只適合單 worker 小改動**;牽動多 worker 時的正解懸而未決,留 leo 裁(部署繞開 GitHub 鐵律 vs acr CLI 硬綁 codeload.github.com 的結構性衝突)。
> - **端到端驗證(leo21ccurl 證據)**`GET /console` 200`GET /kbdb/search?mode=semantic` 200(誠實降級 keyword + capability_hint,該帳號 KBDB 目前 0 entries,真實狀態非 bug);`GET /workflows/search` 2000 筆,該帳號無 named workflow);`GET /public-recipes?q=telegram` 200 真回 `telegram_send` 紀錄;`GET arcrun-registry.leo21c.workers.dev/components/search` 200。Playwright 瀏覽器點擊測試因沙盒 outbound proxy policy 擋 registry.arcrun.dev/workers.dev 連線未能跑通(環境限制,非部署問題),改以 curl 逐端點驗證 + 手動覆閱 JS 邏輯替代。
> - **SDD 缺口**issue 要求新 SDD 目錄 `docs/3-specs/arcrun/search-console/` + 改 pre-write-guard `KNOWN_SDDS` 白名單——但本 repo 整個 `docs/` 與 `.claude/` 都在 `.gitignore`(只存在 leo 本機),Gitea clone 拿不到,也無法確認 SDD 白名單機制實際路徑。未落地此步驟,回報 issue,等本機 CC 或 leo 補。
> - Arcrun#3 issue comment 已回報(署名 `[cloud-worker]`),sprint 表 T-loop1d 已勾。
> **2026-06-28 上個 sessionissue #13 零件退役殘留收尾,步驟1+2 done)**:
> - **issue #13 步驟1merge caa8e10**3 個示例 yaml 的 `component: telegram` → recipe canonical_id `telegram_send`commit a234201)。
> - **issue #13 步驟2merge 764f657**:清 `cli/src/commands/parts.ts` 降級零件殘留——telegram/gmail/sheets/line 改 recipe canonical_id、移除已刪的 ai_transform_compile/runcommit 225aa9f)。
> - **關鍵發現①(gmail 假綠避免)**gmail **讀取**`fetch_unread` / `action: list`**無對應 recipe**,硬塞 `gmail_send`(寄信)=語意不符的假綠 → **留 TODO 待 seed 補 `gmail_list`**,不硬塞。
> - **關鍵發現②(第三污染源是設計非殘留)**:#13 提的「offline validate 不檢查零件」是 by designoffline 刻意跳過遠端查),**不當 bug 修,留 issue**。
> - **教訓沉澱**parts.ts 是手寫常駐清單必 stale → **退役 SOP 要同步清「AI 搜尋零件的三個源」**(示例 yaml / parts.ts / validate)。已記 mistakes #22 + card [[零件退役要清三源]]。
> - **未 push/merge 由總管統一處理**(本 session 只 wiki-capture)。issue #13 步驟1+2 donevalidate 缺口留 issue。
>
> **2026-06-27 上個 sessionissue #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` 強制 description2.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 MCP `u6u_search_workflows`4.1 `/workflows/backfill-search-entries`1.3b `GET /webhooks/named` 補 description/created_at 欄位。
> - ⏸ **卡待總管定**Phase 1.2/1.3MCP deploy 改打 /webhooks/named)卡在 ①-a/b/c——實作期發現 /webhooks/named 吃 graph 非 YAMLYAML→graph 編排寫在 CLI push.ts 介面層,MCP 複製=違 rule 07。①-c(先通債另開 issue)我推薦,待總管定。
> - **完成標準**:tsc 綠≠完成,框架級待 leo21c 端到端實證(強制填擋空/搜尋命中/租戶隔離/降級 hint/MCP 不再 404)。issue open。
> - **已 merge 進 main**fast-forward3 commit934b926 #4/5/7/8 功能 / 558e80b wiki-init / 5d38b59 #11 薄殼對齊)+ push origin main。repo Actions `enabled: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 #12self-hosted MCP 缺 CYPHER_EXECUTOR binding)✅ 修+merge maincommit 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 上個 sessionissue #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`(精耕只 embed `metadata.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**。
> - SDDkbdb-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/P2CLI 1.3.3 publish |
| **已部署(2026-06-09 下午,Haiku 壓測暴露)** | **http_request+claude_api+kbdb_upsert_block+km_writer 假綠根因修復**(非 2xx 回 error envelope4 worker 已 deploy);**acr run self-hosted 修復**(本機 YAML 直接走 /cypher/execute 不需先 push + res.ok 擋 + .yaml 容忍);**D1-in-update 修復**update 漏建 D1 → 補 ensureD1DatabaseD1 已建 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-14matrix 重整交棒)** | **① SDD 遷移收尾**.agents/specs → docs/3-specs 全改(hooks5/rules5/CLAUDE.md/wiki + 2-architecture 鏡像/README/HANDOFF/4-guides),.agents 刪除,pre-write-guard 白名單刷成 10 個實存 SDDSessionStart + rule4.3 已驗)。**② KBDB 資料層 MCP 薄殼**kbdb-base Phase 9.1):mcp/src/tools/kbdb_data.ts 6 工具(template/record/query/search),守鐵律不給建表/SQLmcp tsc exit 0CLI(9.2)後補。**③ 修 LI M3 斷鏈**(見 mistakes #15):skills/examples 5 工具 + sync 從 v3 /blocks /search 改打基本盤 /entriesbase 加 page_name 過濾,search 誠實降級 LIKEmcp+kbdb tsc exit 0 |
| **已完成(2026-06-14 晚,HANDOFF §3b** | **修 MCP self-hosted 認證 401**mcp-account-source.md §5.5):根因=MCP partner-auth 把 Bearer 拿去 KBDB 驗證 partnernamespace 明碼非註冊 partner→401cypher 端 X-Arcrun-API-Key 不驗證直接當分區 key→CLI 通。修法①+②:① `MULTI_TENANT=false` 時 partner-auth 把 Bearer 明碼直接當 org_namespacetypes/middleware/wrangler,官方 SaaS 行為不變共用同碼);② mcp-setup 把 api_key/namespace 寫進 .mcp.json `headers.Authorization`(裸檔不送 header 是次因)。mcp+cli tsc exit 0、partner-auth 9 tests 綠 |
| **已處理(2026-06-25issue #3 官方庫誤寫善後)** | **① 清理 SOP runbook 備妥**`docs/5-records/2026-06-24-official-kbdb-cleanup-leo-misdelete.md`):14-E 遷移期 mira 誤寫 ~11 萬 `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-15~06-24 遷移期、孤兒=0、無 leo template)→ 45MB 備份 → leo 點頭後 `DELETE FROM entries WHERE owner_id='leo'`changes=111368)→ 驗證 leo 殘留=0/孤兒=0/官方庫其餘只剩 smoke_ns_1×2+null×13 筆烟霧殘留,非 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 prod2026-06-24issue #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+publishrelease-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 §6Haiku 能懂):補三盲點=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.79.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-15HANDOFF §6b 部署斷層解決)** | **leo21c cypher 落後 → 已重部,`/kbdb/entries` 回 200**(解鎖 mira 14-A 主線遷移)。**根因不是 GitHub lag**origin/main==本地,含 entries route):① `acr update` 的 content-hash manifestdeploy.ts:198-225)把 cypher 當未變動跳過 → `--force` 清空 manifest 全部重部;② **更深陷阱**repo `.env` line 3 active `CLOUDFLARE_ACCOUNT_ID=58309bb9`(官方)被 CLI 載入覆蓋 config.yaml 的 leo21c `51a01bfa`env>configconfig.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)→200MULTI_TENANT 注入生效、KBDB binding 隨 mcp 上線)。全域 acr 已升 1.3.12(npm 本就有,非重發)。**純部署無 code 變動** |
| **已部署(2026-06-15MCP 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 加 injectMultiTenantDeployContext.selfHostedinit/update 帶旗標;mcp toml 改 active [vars])。本地驗注入真實函式 PASSmcp/cypher 各 1 行 active MULTI_TENANT=false 在 [vars] 下);官方 MCP partner 路徑回歸 401(不變)。CLI npm 1.3.11。**端到端交棒 mira**leo21c 重跑 acr updateCLI≥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 deduparcrun.dev/llms.txt servemcp 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**)|~~KBDB /kbdb/entries 缺口~~✅~~MCP report_feedback 死 route~~✅~~self-hosted MCP 端到端實測~~✅(2026-06-15 leo21c initialize 200,見上)~~leo21c cypher 落後/部署斷層~~✅(2026-06-15 §6b 解)~~self-hosted cypher KBDB_BASE_URL 漏注入(issue #2 隔離破損)~~✅(2026-06-24 merge prod,端到端待 mira 帳號驗) |
---
## 🔄 進行中的 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_public` flag 是否真解
same-zone 1042,在自架帳號上從未實測
- 端到端測試 1.7/1.8/2.6/3.5/3.6/5.1 無驗證記錄
### kbdb-base
- [x] §7.5:公庫/私庫雙向、UUID 身份、市場數據(2026-06-07 deploy
- [x] §8 P0cron 止血(2026-06-09)。scheduled.ts 每分鐘 list → 單一 key `cron-idx:_all` get(新增 lib/cron-index.tswebhooks-named push/delete 維護;migrate-cron-index 一次性遷舊)。1440 list/日 → 0。cypher tsc exit 0
- [ ] §8 P1/P2recipe/workflow list 遷 D1(透過 kbdb worker /entries HTTP API 雙寫,**不加 binding**,用 cypher binding 狗糧)。另開 session 做(大、易出錯,需專注+壓測)
- **狀態**:架構拍板(richblack 2026-06-09:用 kbdb /entries HTTPservice binding 才需問),未動 code
### onboardingself-hosted-init §7.82026-06-09 交付)
- [x] P0acr init 偵測先於動作 + 裝完驗收(cli/src/lib/preflight.ts)。冪等。
- [x] P1acr whoami+--json+ MCP arcrun_whoamiAI 別自己 curl 猜帳號)
- [x] P2mcp-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 servelanding/public 缺檔)。
### LLM Wiki 建設
- [x] 階段一:目錄結構建立、分類規則表、檔案掃描(101 個 .md)
- [x] 階段二:mistakes.md + decisions-summary.md + INDEX.md + status.md(本檔)
- [x] 階段三:文件遷移執行(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 記錄、跨 repopolaris/mira、matrix/kbdb)路徑、
docs/3-specs/** SDD 內文(改 SDD 內文=change,需另確認)、README 遷移對照表。
- 🟡 待補:modules/ cypher-executor、wasi-shim、recipe-system 等)
---
## ⚠️ 已知問題 / 待處理
> 2026-06-09 更新:已解項標 ✅;🔴/🟡 為仍待處理。本次 Haiku 壓測新發現的 bug 加在表內。
| 問題 | 優先級 | 狀態 | 備註 |
|------|--------|------|------|
| ~~**credential 注入 401**~~ | ✅ 已解 | **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 應回 uuidCLI 拿不到 |
| ~~KV list 爆量~~ | ✅ 已解 | §8 P0 部署 | cron list→單 key get1440/日→02026-06-09 |
| ~~onboarding 缺陷(4 項)~~ | ✅ 已解 | §7.8 P0/P1/P2 + P3 部分 | CLI 1.3.4Haiku 壓測證實裝+init 不跳過 |
| ~~D1 建不起來~~ | ✅ 已解 | update 補 ensureD1Database + token 加 D1 權限 | 2026-06-09D1 已建 count:1 |
| ~~http_request 401 假綠~~ | ✅ 已解 | host fn 非 2xx 回 error envelope | 4 worker deployauth_sa 不套 |
| ~~acr run self-hosted 404 爆~~ | ✅ 已解 | 本機 YAML 走 /cypher/execute + res.ok 擋 | CLI 1.3.4 |
| ~~npm publish~~ | ✅ 已解 | token 在 .env NPM_API_TOKEN | 走 local-deploy.sh step 6,別手動繞 |
---
## 🧪 測試進度
### 壓測 2026-06-08Haiku 乾淨重測)
- **目標**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-3auth WASM + 清除違規 TS)未完~~ ✅ **已完成**credential-primitives-wasm 卷已封存
- 殘留:`auth_mtls` 未實作、self-hosted auth 鏈端到端未驗(均需另立新 SDD)
**啟動條件**:原「Phase 1-3 完成」已達成;壓測 Haiku 自癒能力驗證仍待做。
封測是否啟動屬 leo 的決定,不由本檔認定。
---
## 📋 下一步(優先級)— 2026-06-25 更新
### 🔴 最優先
1. [x] ~~**credential 注入 401 修復**~~**已端到端實證打通**2026-06-13 Notion `{{credential.notion_token}}` 真讀到資料;tasks.md 8.5 已補 `[x]`)。機制完成,非阻擋。
2. [ ] **§8 P1/P2 recipe/workflow list 遷 D1**D1 現已可建(依賴解除)。走 kbdb /entries HTTP 雙寫不加 binding。
大、易出錯,另開乾淨 session + 壓測。**← 現在的真.最優先未做項。**
### 🟡 本周
3. [x] ~~credential-primitives-wasm Phase 0.6-0.7 → Phase 1-2auth WASM 零件)~~ ✅ 完成,卷已封存
4. [ ] 4 份 inline http_request host fn 抽共用 helperdedup;這次假綠修是逐份改的)
5. [x] ~~清除 cypher-executor 違規 TSPhase 3~~ ✅ 完成(三者 grep 皆 0 筆,T10 於 2026-07-20
5b. [ ] **`auth_mtls` 零件從未實作**(封存卷殘留缺口,要做需另立新 SDD)
5c. [ ] **self-hosted auth 鏈端到端驗收**(原 7.6,同上需另立 SDD
### ⚪ 未來
6. [ ] `arcrun.dev/llms.txt` servelanding/public 補檔)
7. [ ] 補 wiki modules/(文件遷移階段一~三已於 2026-06-14 完成)
8. [ ] 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 單一活性) |
| ~~credential-primitives-wasm~~closed | `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 是同一子網域的兄弟,
位址推導得出來。**少一個必須注入的變數,就少一個會被漏掉的東西。**