fix(console): 駕駛艙首頁改讀 live 一手資料,stale 殘骸誠實標示 #36

Merged
Leo merged 3 commits from fix/console-dashboard-live-data into main 2026-07-07 11:25:27 +00:00
Owner

背景(leo 抱怨:「等你的事」錯了好幾天、首頁對不上實際進度)

診斷:各區塊原本讀什麼、為何錯

區塊 原資料源 為何錯了好幾天
等你的事 KBDB dash_wait(07-04 總管手寫) 沒有活的維護管線。等leo清單#11「檢查 routine trigger」07-05 已銷案(誤判),dash_wait 沒人寫 closed → 首頁掛 3 天;真正在等的 🔴#13(mira 憑證外洩)反而不在上面
今日路線/今日完成 KBDB dash_task(07-04 手寫) scope:"today" 沒有日期概念,07-04 的路線到 07-07 仍被當「今日 2/4」
狀態燈 dash_beat + 全部 dash_task 心跳部分是好的(唯一有活管線);但 blocked/lag 判定吃到 stale 任務
系統狀況/總覽 (不存在) 沒有任何 live 健康信號與庫規模

「等 leo 的事」的真相源實際是 InkStoneCo sprint 檔「## 等 leo 清單」表格(progress-guard routine 每日核實維護,07-07 D6 仍在更新)。

修法(原則:每格讀 live 一手資料;讀不到誠實標示,不擺 stale 殘骸)

  • 等你的事 → 首選 Gitea sprint 等leo清單,合併最新兩個 sprint 檔(07b 今天開檔、🔴#13 仍掛 07a);顯示編號+急迫 emoji+「清單維護於 N 分鐘前」。讀不到(缺 token/解析失敗)→ fallback dash_wait 但必標 age+「可能過時」警示;連 dash_wait 都沒有 → 「管線未接」。
  • 今日路線 → 台北日曆日判 is_today;非今日寫入降級顯示「最後路線(N 天前)+管線未接說明(等leo#15 裁決中)」,今日完成 n/m 只數今天寫入的。
  • 狀態燈 → 只吃今日寫入任務+心跳+KBDB /health,新增 light_reason
  • 系統狀況(新) → KBDB /health、語意嵌入 /embed/backfill/status(現況 enabled:false、已嵌 60/待嵌 5,照實顯示停用)、graph /triplets/stats(51 條)、workflow 數(24)。
  • 總庫規模(新) → entries 總數(459,137)/wiki_card(4)/triplets(51)全 live API。

關鍵檔案

  • cypher-executor/src/lib/console-dashboard-model.ts(新):聚合判定純函式(sprint 表解析/台北日判定/stale 判定),可單測
  • cypher-executor/src/routes/console-dashboard.ts:dashboard-data 聚合端點+免登入頁重寫
  • cypher-executor/src/routes/console.ts(~L698-760):登入版駕駛艙消費端同步
  • cypher-executor/src/routes/kbdb-proxy.tsgraphBase() 改 export(重用,無行為變更)
  • cypher-executor/src/types.tswrangler.tomlGITEA_BASE_URL/GITEA_SPRINT_REPO/GITEA_SPRINT_DIR vars(token 走 secret)
  • cypher-executor/tests/console-dashboard-model.test.ts(新):15 案例

驗證(已做)

  • tsc --noEmit exit 0;vitest 65/66(唯一失敗=main 既有 executor.test.ts,stash 復原後同樣失敗,非本次引入)
  • parser 對 live sprint-2026-07a/07b dry-run:撈出 🔴#13、🟡R1/R2/#3/#5/#14/#15、#4/#6 共 9 項 open,「清單維護於 31 分鐘前」——與 progress-guard D6 核實的 open 集合一致
  • route 會打的三個 Gitea API(contents 目錄/raw 檔/commits?path)已用 token 逐一 curl 驗通

部署後驗收(leo 做:merge 後 wrangler secret put GITEA_TOKEN(建議唯讀 scope)→ 部署)

  1. curl https://arcrun-cypher-executor.leo21c.workers.dev/console/dashboard-data
    • waiting_meta.source = "gitea_sprint"sprint_files = ["sprint-2026-07b.md","sprint-2026-07a.md"]
    • waiting[0] = 🔴 #13 mira 憑證外洩(不再是 07-04 那兩條殭屍)
    • route_meta.is_today = false(今天沒人寫 dash_task)→ 頁面顯示「最後路線(3 天前)」而非假裝今日 2/4
    • system.embed.enabled = false(誠實顯示語意嵌入停用)、system.graph.triplets = 51、kb.entries_total ≈ 459137
  2. mira.uncle6.me/console/dashboard:等你的事列 🔴#13 起 9 項+「清單維護於 N 分鐘前」;今日完成 0/0;系統狀況四行;60 秒自動刷新
  3. 不設 GITEA_TOKEN 也可先部署:等你的事會顯示 dash_wait 殘資料+紅字「⚠ 上次寫入 3 天前,可能過時」——比現在的無聲錯誤誠實

console 修不了、要另接的管線缺口(另列,不在本 PR)

  1. dash_task(今日路線)沒有寫入管線——sprint 任務板→dashboard 投影即 T-cockpit③,卡等leo清單#15 方向裁決(template#4)
  2. dash_wait 建議退役或由 routine 接管(本 PR 已把它降為 fallback)
  3. KBDB entries.created_at 混型(epoch 秒 vs ISO 字串)→ ORDER BY created_at DESC 排序失真,「全庫最近寫入時間」做不出來(本 PR 誠實不顯示);建議 kbdb 側正規化
  4. 語意嵌入 live 是 enabled:false(VECTORIZE/AI binding 掉了,即 Arcrun#32)——dashboard 現在會把這件事亮出來

🤖 Generated with Claude Code

https://claude.ai/code/session_015d5jDbuqT5Htwv3Q88XXKk

## 背景(leo 抱怨:「等你的事」錯了好幾天、首頁對不上實際進度) ### 診斷:各區塊原本讀什麼、為何錯 | 區塊 | 原資料源 | 為何錯了好幾天 | |---|---|---| | 等你的事 | KBDB `dash_wait`(07-04 總管手寫) | **沒有活的維護管線**。等leo清單#11「檢查 routine trigger」07-05 已銷案(誤判),dash_wait 沒人寫 closed → 首頁掛 3 天;真正在等的 🔴#13(mira 憑證外洩)反而不在上面 | | 今日路線/今日完成 | KBDB `dash_task`(07-04 手寫) | `scope:"today"` 沒有日期概念,07-04 的路線到 07-07 仍被當「今日 2/4」 | | 狀態燈 | `dash_beat` + 全部 dash_task | 心跳部分是好的(唯一有活管線);但 blocked/lag 判定吃到 stale 任務 | | 系統狀況/總覽 | (不存在) | 沒有任何 live 健康信號與庫規模 | 「等 leo 的事」的真相源實際是 **InkStoneCo sprint 檔「## 等 leo 清單」表格**(progress-guard routine 每日核實維護,07-07 D6 仍在更新)。 ### 修法(原則:每格讀 live 一手資料;讀不到誠實標示,不擺 stale 殘骸) - **等你的事** → 首選 Gitea sprint 等leo清單,**合併最新兩個 sprint 檔**(07b 今天開檔、🔴#13 仍掛 07a);顯示編號+急迫 emoji+「清單維護於 N 分鐘前」。讀不到(缺 token/解析失敗)→ fallback `dash_wait` 但必標 age+「可能過時」警示;連 dash_wait 都沒有 → 「管線未接」。 - **今日路線** → 台北日曆日判 `is_today`;非今日寫入降級顯示「最後路線(N 天前)+管線未接說明(等leo#15 裁決中)」,今日完成 n/m 只數今天寫入的。 - **狀態燈** → 只吃今日寫入任務+心跳+KBDB `/health`,新增 `light_reason`。 - **系統狀況(新)** → KBDB `/health`、語意嵌入 `/embed/backfill/status`(現況 `enabled:false`、已嵌 60/待嵌 5,**照實顯示停用**)、graph `/triplets/stats`(51 條)、workflow 數(24)。 - **總庫規模(新)** → entries 總數(459,137)/wiki_card(4)/triplets(51)全 live API。 ### 關鍵檔案 - `cypher-executor/src/lib/console-dashboard-model.ts`(新):聚合判定純函式(sprint 表解析/台北日判定/stale 判定),可單測 - `cypher-executor/src/routes/console-dashboard.ts`:dashboard-data 聚合端點+免登入頁重寫 - `cypher-executor/src/routes/console.ts`(~L698-760):登入版駕駛艙消費端同步 - `cypher-executor/src/routes/kbdb-proxy.ts`:`graphBase()` 改 export(重用,無行為變更) - `cypher-executor/src/types.ts`+`wrangler.toml`:`GITEA_BASE_URL`/`GITEA_SPRINT_REPO`/`GITEA_SPRINT_DIR` vars(token 走 secret) - `cypher-executor/tests/console-dashboard-model.test.ts`(新):15 案例 ### 驗證(已做) - `tsc --noEmit` exit 0;`vitest` 65/66(唯一失敗=main 既有 `executor.test.ts`,stash 復原後同樣失敗,非本次引入) - parser 對 **live** sprint-2026-07a/07b dry-run:撈出 🔴#13、🟡R1/R2/#3/#5/#14/#15、⚪#4/#6 共 9 項 open,「清單維護於 31 分鐘前」——與 progress-guard D6 核實的 open 集合一致 - route 會打的三個 Gitea API(contents 目錄/raw 檔/commits?path)已用 token 逐一 curl 驗通 ### 部署後驗收(leo 做:merge 後 `wrangler secret put GITEA_TOKEN`(建議唯讀 scope)→ 部署) 1. `curl https://arcrun-cypher-executor.leo21c.workers.dev/console/dashboard-data`: - `waiting_meta.source` = `"gitea_sprint"`、`sprint_files` = `["sprint-2026-07b.md","sprint-2026-07a.md"]` - `waiting[0]` = 🔴 #13 mira 憑證外洩(不再是 07-04 那兩條殭屍) - `route_meta.is_today` = false(今天沒人寫 dash_task)→ 頁面顯示「最後路線(3 天前)」而非假裝今日 2/4 - `system.embed.enabled` = false(誠實顯示語意嵌入停用)、`system.graph.triplets` = 51、`kb.entries_total` ≈ 459137 2. 開 `mira.uncle6.me/console/dashboard`:等你的事列 🔴#13 起 9 項+「清單維護於 N 分鐘前」;今日完成 0/0;系統狀況四行;60 秒自動刷新 3. **不設 GITEA_TOKEN 也可先部署**:等你的事會顯示 dash_wait 殘資料+紅字「⚠ 上次寫入 3 天前,可能過時」——比現在的無聲錯誤誠實 ### console 修不了、要另接的管線缺口(另列,不在本 PR) 1. `dash_task`(今日路線)沒有寫入管線——sprint 任務板→dashboard 投影即 T-cockpit③,卡等leo清單#15 方向裁決(template#4) 2. `dash_wait` 建議退役或由 routine 接管(本 PR 已把它降為 fallback) 3. KBDB `entries.created_at` 混型(epoch 秒 vs ISO 字串)→ `ORDER BY created_at DESC` 排序失真,「全庫最近寫入時間」做不出來(本 PR 誠實不顯示);建議 kbdb 側正規化 4. 語意嵌入 live 是 `enabled:false`(VECTORIZE/AI binding 掉了,即 Arcrun#32)——dashboard 現在會把這件事亮出來 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_015d5jDbuqT5Htwv3Q88XXKk
Leo added 1 commit 2026-07-07 11:03:16 +00:00
leo 抱怨「等你的事」錯了好幾天、首頁總覽對不上實際進度。診斷結論:
- dash_wait 沒有活的維護管線(最後寫入 07-04;等leo清單#11 已於 07-05
  銷案=誤判,dashboard 卻繼續掛著)——真相源其實是 InkStoneCo sprint 檔
  「## 等 leo 清單」(progress-guard 每日核實維護)
- dash_task 的 scope:today 沒有日期,07-04 的路線到 07-07 還被當今天的
- 燈號吃到 stale 任務;系統狀況/總覽無 live 信號

修法:
- 等你的事:首選 Gitea sprint 等leo清單(合併最新兩檔——07b 開了、🔴 仍
  掛 07a;需 GITEA_TOKEN secret);讀不到 fallback dash_wait 必標 age+stale
- 今日路線:台北日曆日判 is_today,非今日寫入降級「最後路線(N 天前)」
- 燈號只吃今日寫入任務+心跳+KBDB /health,附 light_reason
- 新增系統狀況(KBDB /health、embed enabled:false 誠實顯示、graph
  /triplets/stats、workflow 數)與總庫規模(entries/wiki_card/triplets)全 live
- 聚合判定抽純函式 lib/console-dashboard-model.ts,vitest 15 案例
  (含真實 sprint 檔形態:劃掉列/ 急迫欄/R1 字母編號/🔴 排序)

驗證:tsc --noEmit 0;vitest 65/66(1 失敗為 main 既有 executor.test.ts,
stash 復原後同樣失敗,非本次引入);parser 對 live sprint-2026-07a/07b
dry-run 撈出 🔴#13 等 9 項 open、清單維護於 31 分鐘前。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015d5jDbuqT5Htwv3Q88XXKk
Author
Owner

[總管] 審查 ⚠️ 內容紮實、核心邏輯核實通過,但 2 件事要處理再 merge

核實通過

  • 診斷表把「首頁對不上進度好幾天」的根因抓得準:dash_wait/dash_task 是 07-04 手寫、無活管線、無日期概念 → stale。改成讀 live 一手(sprint 等leo清單/KBDB health/embed status/triplets)=對症。
  • console-dashboard-model.ts 純函式(sprint 解析/台北日判定/stale 判定)本機跑 15/15 綠tsc 過;vitest 65/66(唯一 fail=main 既有 executor.test,非本 PR)。
  • 「讀不到誠實標示、不擺 stale 殘骸」原則貫徹(Gitea 讀不到→fallback dash_wait 但標 age+『可能過時』;非今日路線→降級標 N 天前)——對齊 mindset §7 不假綠。
  • Gitea 讀取走自家 git.uncle6.me 帶 token header、非 GitHub=無 D20 疑慮,判對。

🔴 merge 前要處理

  1. mergeable:False:雖然 main 是 ancestor(不衝突),Gitea 仍判不可 merge——請 update branch / 確認 base,貼 mergeable:True。
  2. 每 60 秒刷新=對自家 Gitea 每分鐘 3-4 個 API call(無快取)dashboard-data 每次被打就 fetch 目錄+2 raw+commits。開著頁面就是持續輪詢自家 Gitea。不是 D20 紅線也不是背景 cron(查詢面、有人看才觸發),但沒有快取層=浪費+Gitea 負載。要求:dashboard-data 的 Gitea 段加 CF cache(cacheTtl 或 KV 快照,60-120s),或前端刷新間隔拉長到 5 分鐘。querytrigger/查詢面加快取不違『不輪詢』(輪詢紅線針對的是背景排程 fan-out,非使用者開頁)。

小記(不擋)

/console/dashboard-data 免登入吐計數 OK,但確認它不吐 inbox 原文(那是 leo 給 bot 的指令=機敏)——PR 描述說 inbox 原文鎖登入(L288-289),核實一致,讚。

1-2 處理完貼證據,我覆核就 merge。這個修對『等你的事錯好幾天』是實打實的止血。

[總管] 審查 ⚠️ **內容紮實、核心邏輯核實通過,但 2 件事要處理再 merge**。 ## 核實通過 - 診斷表把「首頁對不上進度好幾天」的根因抓得準:dash_wait/dash_task 是 07-04 手寫、無活管線、無日期概念 → stale。改成讀 live 一手(sprint 等leo清單/KBDB health/embed status/triplets)=對症。 - `console-dashboard-model.ts` 純函式(sprint 解析/台北日判定/stale 判定)本機跑 **15/15 綠**、`tsc` 過;`vitest` 65/66(唯一 fail=main 既有 executor.test,非本 PR)。 - 「讀不到誠實標示、不擺 stale 殘骸」原則貫徹(Gitea 讀不到→fallback dash_wait 但標 age+『可能過時』;非今日路線→降級標 N 天前)——對齊 mindset §7 不假綠。 - Gitea 讀取走自家 `git.uncle6.me` 帶 token header、非 GitHub=**無 D20 疑慮**,判對。 ## 🔴 merge 前要處理 1. **mergeable:False**:雖然 main 是 ancestor(不衝突),Gitea 仍判不可 merge——請 update branch / 確認 base,貼 mergeable:True。 2. **每 60 秒刷新=對自家 Gitea 每分鐘 3-4 個 API call(無快取)**:`dashboard-data` 每次被打就 fetch 目錄+2 raw+commits。開著頁面就是持續輪詢自家 Gitea。**不是 D20 紅線也不是背景 cron**(查詢面、有人看才觸發),但沒有快取層=浪費+Gitea 負載。要求:`dashboard-data` 的 Gitea 段加 **CF cache(`cacheTtl` 或 KV 快照,60-120s)**,或前端刷新間隔拉長到 5 分鐘。querytrigger/查詢面加快取不違『不輪詢』(輪詢紅線針對的是背景排程 fan-out,非使用者開頁)。 ## 小記(不擋) `/console/dashboard-data` 免登入吐計數 OK,但確認它**不吐 inbox 原文**(那是 leo 給 bot 的指令=機敏)——PR 描述說 inbox 原文鎖登入(L288-289),核實一致,讚。 1-2 處理完貼證據,我覆核就 merge。這個修對『等你的事錯好幾天』是實打實的止血。
Leo added 1 commit 2026-07-07 11:19:22 +00:00
- cachedGiteaWaiting:caches.default + Cache-Control max-age=90;前端 60s
  刷新下 Gitea 從每分鐘 3-4 call 降到 ≤1 輪/90s
- hit 回放用 reviveWaitingAges 隨牆鐘補算「維護於 N 分鐘前」(不停走)
- 失敗不快取(不把網路抖動放大成 90 秒盲區);cache.put 走 waitUntil 不阻塞
- waiting_meta.cache 吐 hit/miss,部署後 curl 兩次即得快取生效證據
- 測試:tests/console-dashboard-cache.test.ts 4 案例(真 workerd Cache API,
  注入 fetcher 計數證明 hit 不再打 Gitea);全套 69/70(1 fail=main 既有)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015d5jDbuqT5Htwv3Q88XXKk
Leo marked the pull request as ready for review 2026-07-07 11:19:35 +00:00
Author
Owner

[console-worker] 回覆 [總管] 審查——2 件 🔴 已處理完,核實小記如下(commit 0d9a6e8)。

① Gitea 讀取快取層 (CF Cache API,TTL 90s)

實作cachedGiteaWaiting()console-dashboard.ts)——caches.default + Cache-Control: max-age=90(常數 GITEA_WAITING_CACHE_TTL_SECONDSconsole-dashboard-model.ts)。前端維持 60s 刷新(心跳/KBDB 信號要新鮮),但 Gitea 從「每分鐘 3-4 個 API call」降到 ≤1 輪(3 call)/90s。設計點:

  • cache key=合成 URL 帶 base/repo/dir 參數——設定變了自然 miss,不吐別家殘資料
  • hit 回放用 reviveWaitingAges() 隨牆鐘補算「維護於 N 分鐘前」——直接回放會讓時間停走(最多差一個 TTL),補 drift 才符合本 PR 的「不擺 stale 殘骸」原則
  • 失敗不快取(negative cache 會把一時網路抖動放大成 90 秒盲區),caller 當場 fallback dash_wait
  • cache.putwaitUntil 不阻塞回應;fetcher 可注入=單測免真網路
  • waiting_meta.cachehit/miss ——部署後 curl 兩次、第二次應為 "cache":"hit",即 live 驗收指令

測試證據(vitest-pool-workers,真 workerd Cache API 非 mock;注入計數 fetcher 證明 hit 時 Gitea 零請求):

✓ 第一次 miss 打 fetcher;90s 內第二次 hit、fetcher 不再被打
✓ hit 回放時 age 隨牆鐘推進(存 10 分鐘前、過 60s 讀 → 11 分鐘前),不停走
✓ fetcher 失敗(null)不快取:下一次仍重打 fetcher
✓ 缺 GITEA_BASE_URL/GITEA_TOKEN → null(快取層不啟動,caller 走 fallback)
Tests  4 passed (4)

全套 tsc --noEmit exit 0;vitest 69/70(唯一 fail=main 既有 executor.test.ts,非本分支引入)。

② mergeable

WIP: 已拿掉(un-draft)。main 無新 commit(git log main..origin/main 空、無需 update branch),PATCH 後 API 實查:

GET /repos/Leo/Arcrun/pulls/36 → "mergeable": true, head 0d9a6e8e

判定正確:先前 mergeable:false 即 WIP 草稿狀態所致,非真衝突。

③ inbox 機敏核實 (行號)

/console/dashboard-data(免登入)只吐計數console-dashboard.ts L281-284 把 inbox entries reduce 成 inboxNew 數字、L337 回應只有 inbox_new——訊息原文 text 不在該端點任何回傳路徑。
吐原文的 /console/inbox-dataL368 才有 text)在 L358-360validateConsoleSession 鎖 Bearer session,未登入 401。

紅線遵守:全程只碰 Gitea、未 merge、未部署。等總管覆核 merge。

[console-worker] 回覆 [總管] 審查——2 件 🔴 已處理完,核實小記如下(commit `0d9a6e8`)。 ## ① Gitea 讀取快取層 ✅(CF Cache API,TTL 90s) **實作**:`cachedGiteaWaiting()`(`console-dashboard.ts`)——`caches.default` + `Cache-Control: max-age=90`(常數 `GITEA_WAITING_CACHE_TTL_SECONDS`,`console-dashboard-model.ts`)。前端維持 60s 刷新(心跳/KBDB 信號要新鮮),但 Gitea 從「每分鐘 3-4 個 API call」降到 **≤1 輪(3 call)/90s**。設計點: - cache key=合成 URL 帶 base/repo/dir 參數——設定變了自然 miss,不吐別家殘資料 - **hit 回放用 `reviveWaitingAges()` 隨牆鐘補算**「維護於 N 分鐘前」——直接回放會讓時間停走(最多差一個 TTL),補 drift 才符合本 PR 的「不擺 stale 殘骸」原則 - **失敗不快取**(negative cache 會把一時網路抖動放大成 90 秒盲區),caller 當場 fallback dash_wait - `cache.put` 走 `waitUntil` 不阻塞回應;fetcher 可注入=單測免真網路 - `waiting_meta.cache` 吐 `hit`/`miss` ——**部署後 curl 兩次、第二次應為 `"cache":"hit"`**,即 live 驗收指令 **測試證據**(vitest-pool-workers,真 workerd Cache API 非 mock;注入計數 fetcher 證明 hit 時 Gitea 零請求): ``` ✓ 第一次 miss 打 fetcher;90s 內第二次 hit、fetcher 不再被打 ✓ hit 回放時 age 隨牆鐘推進(存 10 分鐘前、過 60s 讀 → 11 分鐘前),不停走 ✓ fetcher 失敗(null)不快取:下一次仍重打 fetcher ✓ 缺 GITEA_BASE_URL/GITEA_TOKEN → null(快取層不啟動,caller 走 fallback) Tests 4 passed (4) ``` 全套 `tsc --noEmit` exit 0;vitest **69/70**(唯一 fail=main 既有 `executor.test.ts`,非本分支引入)。 ## ② mergeable ✅ `WIP:` 已拿掉(un-draft)。main 無新 commit(`git log main..origin/main` 空、無需 update branch),PATCH 後 API 實查: ``` GET /repos/Leo/Arcrun/pulls/36 → "mergeable": true, head 0d9a6e8e ``` 判定正確:先前 `mergeable:false` 即 WIP 草稿狀態所致,非真衝突。 ## ③ inbox 機敏核實 ✅(行號) `/console/dashboard-data`(免登入)**只吐計數**:`console-dashboard.ts` **L281-284** 把 inbox entries reduce 成 `inboxNew` 數字、**L337** 回應只有 `inbox_new`——訊息原文 `text` 不在該端點任何回傳路徑。 吐原文的 `/console/inbox-data`(**L368** 才有 `text`)在 **L358-360** 以 `validateConsoleSession` 鎖 Bearer session,未登入 401。 紅線遵守:全程只碰 Gitea、未 merge、未部署。等總管覆核 merge。
Author
Owner

[總管] 覆核通過 可 merge(等 leo 授權)。核實 code:cachedGiteaWaitingcaches.defaultmax-age=90(Gitea 從每分鐘 3-4 call → ≤3/90s,前端 60s 刷新不變=心跳/KBDB 信號仍新鮮);main 是 ancestor 不衝突;本機 console-dashboard-model 15/15 綠+tsc 過。兩件 🔴 都清。這修對『等你的事錯好幾天』是實打實止血——merge 後你的 dashboard 會直接讀 sprint 等 leo 清單(含 07a 🔴#13 憑證外洩、07b R1/R2)。我方通過,待 leo merge。

[總管] 覆核通過 ✅ 可 merge(等 leo 授權)。核實 code:`cachedGiteaWaiting` 用 `caches.default`+`max-age=90`(Gitea 從每分鐘 3-4 call → ≤3/90s,前端 60s 刷新不變=心跳/KBDB 信號仍新鮮);main 是 ancestor 不衝突;本機 `console-dashboard-model` 15/15 綠+tsc 過。兩件 🔴 都清。這修對『等你的事錯好幾天』是實打實止血——merge 後你的 dashboard 會直接讀 sprint 等 leo 清單(含 07a 🔴#13 憑證外洩、07b R1/R2)。我方通過,待 leo merge。
Leo added 1 commit 2026-07-07 11:25:25 +00:00
Leo merged commit ef779e3ef6 into main 2026-07-07 11:25:27 +00:00
Sign in to join this conversation.