uncle6me-web
|
ed2e42e007
|
feat(credentials): T6 讀取/注入接新家 + T7 雙讀 fallback (credential-store-migration 方案 A)
D19「擁有目錄不擁有內容物」遷移的讀取斷點。密文住 cypher per-script secrets、
D1 只存 secret_ref、auth worker 讀不到 cypher 的 secrets → cypher 先取值塞 payload。
WASM 端(T7 fallback 骨架,零行為改變可獨立部署驗):
- auth_static_key/main.go + auth_service_account/main.go:Input 加 resolved_secrets,
解密處改「有 resolved 就用、沒有才 fallback 舊 kv_get+crypto_decrypt」。default 等於舊碼。
- tinygo build 兩支通過,copy 到 .component-builds/*/component.wasm。
TS 端(T6 主路徑):
- auth-dispatcher.ts 新增 resolveSecretsFromNewHome:查 D1 拿 secret_ref →
secret_get(env[ref], T4) 取明文 → 組 map(取不到的 name 缺席,不放空字串) →
更新 last_used_at。tryAuthDispatch + resolveCredentialRefs 都塞 resolved_secrets。
- rule 02 §2.2 對齊:只查 ref/取值/塞字串,不解密不展開模板不組 JWT。
驗證:cypher-executor + cli tsc exit 0;vitest 41/42(新增 auth-dispatcher.test.ts 6 案例全過,
剩 1 pre-existing 無關失敗)。待 leo21c 部署驗 WASM 端到端(不由本任務部署,acr update
硬綁 GitHub codeload=mistakes #23)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-07-05 13:44:26 +08:00 |
|
Claude
|
1d19d46161
|
feat(credentials): T8 回填端點 + T9 治理端點/CLI (credential-store-migration)
- POST /credentials/migrate-to-workers-secrets:舊 KV credential 逐筆解密回填 D1+Workers
Secrets,冪等可審,重用 wasi-shim 唯一合法 crypto_decrypt 呼叫點
- GET /credentials 改讀 D1(與既有 /credentials/catalog 共用查詢);DELETE 改為新家優先、
舊 KV fallback,避免孤兒資料
- acr creds list/replace/delete 三支 CLI 薄殼指令;順手修好過期的 acr creds push(舊
client 端加密格式已被 T5 取代)
- 新增 cypher-executor/tests/credentials.test.ts + D1 test fixture
T6/T7(讀取/注入路徑、雙讀 fallback)需要重新編譯 registry/components/auth_static_key
的 TinyGo WASM,本環境無 tinygo 且 proxy 擋 github.com 下載,卡在工具鏈缺口,詳細分析
記錄在 credential-store-migration.md。
端到端驗證:部署到 leo21c 帳號真實跑過 GET/POST/DELETE 三分支 + migrate 端點(對真實
既存的兩筆 credential 跑,發現 cypher-executor 自己的 ENCRYPTION_KEY secret 疑似為空,
誠實記錄為待 leo/總管裁決的不可逆風險項,未擅自重設)。
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
2026-07-04 23:00:07 +00:00 |
|
uncle6me-web
|
1db8a13a3a
|
fix(console): leo 實測三回饋——深淺主題預設淺色/登入頁置中/fetch 斷網韌性 (Arcrun#3 console 系)
1. 深/淺主題切換+預設淺色(leo 明示):CSS custom properties 兩份色板
一套結構——:root=淺色紙感(宣紙米白紙紋+墨色文字+琥珀調深 #8a5f1e,
WCAG 對比實算正文 12.2:1/琥珀 4.82/ok 4.58/err 5.17 全過 AA),
:root[data-theme=dark]=原定稿暖黑 2a 原值不動。選擇存 localStorage
(arcrun_console_theme),head 預載腳本防閃色。切換入口:登入/首次
設定頁小鈕、桌面側欄項、設定頁正式開關;/console/dashboard 免登入頁
同步支援(pagehead 小圖示)。金琥珀例外兩版刻意不變(btn 漸層/狀態球/
toast/gcenter)。
2. 登入/首次設定頁置中:根因=.view.on{display:block} 蓋掉 .authwrap 的
flex → 內容靠左;補一行 .authwrap.view.on{display:flex} 水平垂直置中。
3. fetch 斷網韌性:friendlyErr() 把裸 Failed to fetch/Load failed 轉
「連線中斷」誠實文案(非斷網錯誤原樣保留);駕駛艙與 dashboard 的
60 秒定時器常駐、錯誤文案標明自動重試,網路恢復自動刷回。
驗證:tsc --noEmit exit 0;vitest 26/27(1 失敗=pre-existing 基準);
三層跳脫驗證(mistakes #24:template 求值→node --check→行為斷言)全綠。
不部署,總管接手。
|
2026-07-04 18:30:30 +08:00 |
|
uncle6me-web
|
c673d37ace
|
docs(wiki): Mira Console 完整版已部署 leo21c——驗收全綠 (Arcrun#3 console 系)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-04 18:07:13 +08:00 |
|
uncle6me-web
|
9cc29f5dfb
|
docs(wiki): Mira Console 完整版收尾——mistakes #24 三層跳脫驗證法+DELETE 假綠缺口、status 更新 (Arcrun#3 console 系)
|
2026-07-04 17:51:25 +08:00 |
|
uncle6me-web
|
5174ed6821
|
feat(console): 駕駛艙 dashboard——/console/dashboard(-data) 聚合 KBDB dash_* entries (T-cockpit ②, Arcrun#3 console 系)
- GET /console/dashboard-data:無需登入唯讀聚合端點(dash_beat/dash_task/dash_wait/inbox,
租戶=CONSOLE_TENANT),燈號判定寫死在端點(red=blocked/心跳>240分僅台北09-22判定;
yellow=非標準落後標記;green=其餘)。created_at 實測 epoch 秒(number),解析防禦性兼容字串
- GET /console/dashboard:單檔 HTML 兩格儀表板(狀態燈+心跳+今日完成度橫條 / 今日路線+
等你的事+收件匣數),手機優先一屏、60s 自動刷新、無互動
- kbdb-proxy.ts:kbdbBase() 改 export 供 dashboard 共用(同一 KBDB 連線慣例,不重複實作)
- SDD 補件:docs/3-specs/arcrun/search-console/(issue #3 授權;位於既有 arcrun/ 白名單下)
部署:手工注入法(mistakes #23,禁 acr update)deploy leo21c,version 4252c321-e15b-494c-ab97-29f82eefa565
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-04 12:49:59 +08:00 |
|
Claude
|
05333b8fe6
|
feat(credential-store-migration): T3 best-effort — secrets 設定就緒 + 誠實缺口 closure
acr init 加印手動指令 wrangler secret put CF_SECRETS_API_TOKEN
(比照既有 ENCRYPTION_KEY 模式,不發明新模式);CF_ACCOUNT_ID 已在
T5 的 deploy.ts 改動中自動注入(同 WORKER_SUBDOMAIN 機制)。
誠實缺口 closure:對本次真實改動過的 committed code(leo21c
arcrun-cypher-executor)做第二次 wrangler deploy,確認
CF_SECRETS_API_TOKEN/ENCRYPTION_KEY 兩個 secret 存活 + 寫入路徑
redeploy 後仍正常運作(真實 curl 驗證),比 T1.5 spike 對 throwaway
worker 的舊證據更貼近本次改動。
刻意不跑 acr update:mistakes #23 已知限制(硬綁 GitHub codeload
舊碼,會拉回覆蓋剛部署的 T4/T5 成果),跑了只會摧毀測試環境又
證明不了新東西,SDD 本身允許此替代路徑。此結構性衝突留 leo 裁決。
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018D6QoC5waFkcjc2N7csJBB
|
2026-07-03 23:07:42 +00:00 |
|
Claude
|
c24edbbdb6
|
feat(credential-store-migration): T5 寫入路徑改走 Workers Secrets + D1 ref
POST/PUT /credentials 改寫:密文值 PUT 進 CF Workers per-script Secrets
(唯寫,D19 不持有內容物),D1 credentials 表只存目錄(不含密文)。
secret_ref = CRED_<NAME>_<sha256(api_key)[:8]>,避免跨租戶撞名。
DELETE/GET /credentials 本次不動(仍走舊 KV,T9 範圍),已誠實標注。
新增 CREDENTIALS_DB D1 binding(與 KBDB base 共用同一顆 arcrun-kbdb,
沿用既有 database_id 注入機制)+ CF_SECRETS_API_TOKEN/CF_ACCOUNT_ID
env vars(CF_ACCOUNT_ID 由 deploy.ts 自動注入,同 WORKER_SUBDOMAIN 模式)。
§2.4 選項甲落地:client 不再加密,明文值經 TLS 傳輸,cypher 短暫經手
明文不落地不持金鑰——與舊版 01-tech-stack.md 傳輸格式不同,是本 SDD
對舊格式的刻意取代(§6 Q-b 仍需 leo 明確接受)。
驗證:tsc --noEmit exit 0;vitest 26/27(1 pre-existing 無關失敗)。
端到端:真實部署 leo21c arcrun-cypher-executor,POST/PUT /credentials
成功寫入 Workers Secrets + D1 row(CF API + D1 query 雙重確認),
清理測試資料後 restore wrangler.toml(無帳號專屬 id 殘留 git)。
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018D6QoC5waFkcjc2N7csJBB
|
2026-07-03 23:04:59 +00:00 |
|
Claude
|
c3c0a8b17d
|
feat(credential-store-migration): T4 wasi-shim secret_get host function
新增 secret_get(ref) host function:讀 CF Workers per-script Secrets 的值,
host 端實作 = env[ref] 動態字串索引(T1.5 spike ② 已證可行,零網路呼叫)。
- ArcrunHostEnv 加 index signature 支援任意 secret_ref 動態取值
- WasiHostFunctions 加 secret_get,u6u WASI imports 比照 kv_get 同款
pointer/memory-write 機制 wiring
- 安全邊界:只允許 CRED_ 前綴(拒絕讀 ENCRYPTION_KEY/CF_SECRETS_API_TOKEN
等非 credential 機密),比照既有 routedKvGet 前綴檢查精神
驗證:tsc --noEmit exit 0;vitest 18/18 通過(新增 5 案例)。
撞牆記錄:JSPI Suspending 物件不可在單元測試直接呼叫(既有架構環境限制,
kv_get 同樣受影響),已移除不可行的 2 個測試並記錄於測試檔註解。
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018D6QoC5waFkcjc2N7csJBB
|
2026-07-03 22:56:42 +00:00 |
|
Claude
|
f9dad311ff
|
feat(credential-store-migration): T2 D1 migration 0002_credentials.sql
新增 credentials 目錄表(api_key/name/service/sensitivity/secret_ref/
created_at/last_used_at,PRIMARY KEY(api_key,name) + idx_cred_apikey),
D19:只存目錄不存密文,密文本體改住 CF Workers per-script Secrets(T5)。
deploy.ts 重用既有 applyD1Migration,緊接 0001_base.sql 之後套用同一顆 D1,
機制完全一致(同一支 CF D1 query API)。
驗證:cli tsc --noEmit exit 0;leo21c arcrun-kbdb D1
(1099d0f3-d062-4202-984c-5a57b0a8c031)實際套用,
sqlite_master 確認 table+index 存在,重跑驗證冪等。
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018D6QoC5waFkcjc2N7csJBB
|
2026-07-03 22:52:09 +00:00 |
|
uncle6me-web
|
406f0fedf8
|
docs(sdd): credential 遷移 SDD 依 T1.5 spike 改寫——Secrets Store 產品換成 Workers per-script Secrets
依據 T1.5 spike 四驗證全過(2026-07-03,證據 Gitea Arcrun#2):
① API 動態加 secret 免重部署即讀 ② env[ref] 動態字串索引可行
③ 14 把未觸上限(D21 單用戶:記錄即可)④ 重部署後 secrets 存活。
- §2.3 全段改寫:寫入走 CF API PUT /workers/scripts/{script}/secrets、
讀取走 env[ref]、原三條候選路徑待決撤銷(T1 spike 實證 Secrets Store
binding 靜態 + .get(ref) 參數被忽略 + REST 唯寫,路徑不成立)
- §2.5 改寫:取值=env[secret_ref](零網路呼叫),wasi-shim
secret_get(ref) host 端實作=env[ref]
- T3 改寫:ensure store + 注入 store_id 整步取消,改為確保 secrets
寫入 token/account id 就緒+非關鍵 worker 跑一次 acr update 驗存活
- T4 改寫:secret_get(ref) 實作=env[ref](spike ② 已證)
- T1 標完成(負結果)、T1.5 標完成、T2-T9 解凍施工
- 其餘矛盾句對齊用詞(§0/§2.1/§2.2/§2.4/§3/§4/§5/§6 Q-a/Q-d、
回填端點更名 migrate-to-workers-secrets)
- 雙讀過渡、回填、回滾、治理(D1 只存 metadata+secret_ref)設計不動
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-03 07:22:38 +08:00 |
|
uncle6me-web
|
5d00e71275
|
chore: D22 落地——docs/SDD/wiki/CLAUDE.md 進 repo(Gitea private 預設全 push)
頂層 D22 決策(leo 2026-07-03 拍板):推什麼由開發環境歸屬決定,
Gitea private=除機敏值/build 產物/.github 外全 push。
解 T1.5 卡點:雲端工人 clone 拿得到 credential-store-migration.md,可就地改寫 SDD。
機敏掃描兩輪通過(新增 189 檔約 2.1MB,node_modules/dist/wasm 照舊排除)。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-03 07:13:33 +08:00 |
|
Claude
|
c830150da1
|
docs(wiki): 記錄 acr update 部署源綁 GitHub codeload 的框架級發現(mistakes #23)
雲端工人跑 Arcrun#3 控制台頁時發現:acr update 部署物永遠從 GitHub codeload
tarball 抓,跟本地/Gitea checkout 脫鉤——D20 鎖死 GitHub 的雲端工人若照字面
指示部署會蓋掉自己的改動卻回報成功(假綠)。本次改手工複刻注入邏輯部署
單一 worker 繞過此坑,記錄供下次沿用;多 worker 場景正解留 leo 裁。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-02 09:10:00 +00:00 |
|
uncle6me-web
|
31d4a9c47b
|
feat(sprint): T-loop1d 今晚任務——雲端做 Arcrun#3 控制台頁(第二次壓測,跨多repo)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
2026-07-02 16:46:52 +08:00 |
|
uncle6me-web
|
f21906ca6a
|
chore(wiki): 本 session capture(薄殼防複發/歷史債卡 + mistakes #19-21 + status)
兩次 /wiki-capture 累積的知識落盤:
- cards/decisions/ 新卡:薄殼防複發-能力對照表加smoke、薄殼規則晚於實作-MCP漂移是歷史債
(+ 00-INDEX 編入,決策桶現 15 張)
- mistakes #19 死端點假綠(grep route/smoke 驗端點存在)
- mistakes #20 gitignored 檔無 git 史(時間靠檔內註記)
- mistakes #21 wrangler.toml services=[...] inline 在 [vars] 後被吸成 vars.services(issue #12)
- decisions-summary:薄殼防複發機制、workflow description 由操盤 CC 據實生成
- status:本 session #8/#11/#12 進度 + merge 結果
純記憶/文檔,無 code。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-28 01:43:26 +08:00 |
|
uncle6me-web
|
558e80b4da
|
chore(wiki): wiki-init 補骨架 + system-dev-template 安裝/更新腳本
wiki 已初始化過(push 檔活躍維護),本次補從沒建的 pull 層 + arcrun 化範本:
- cards/decisions/ 14 張決策原子卡(含 gloss/實體/typed-edge 三元組):
從 decisions-summary 全量改寫 13 + 新增「薄殼規則晚於實作-MCP漂移是歷史債」1
- TAXONOMY 從 PKM 範本換成 arcrun 軸(子系統 零件架構/cypher/credential/recipe/kbdb/
薄殼/部署/平台原則 + 形態 架構決策/踩坑/機制說明/禁令/案例經驗)
- principles 填 13 條跨全局原則(從 rules/ + mindset 蒸餾)
- INDEX 真實視圖(子系統角度 + 決策角度,指向 cards)
- system-dev/scripts/ + scripts/ install/update 安裝腳本(template 接入)
純基建/文檔,無業務 code(功能 code 見前一 commit)。
raw source(docs/)0 異動、wiki 卡際連結無斷鏈。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-27 17:53:37 +08:00 |
|