在 #226 的 v0.18.0 Windows smoke test 發現,`main`(`b371833`)也一樣。 ## 現象 乾淨安裝後,在專案選擇畫面建立第一個專案: - 畫面直接進入完整的儀表板,沒有 Spec 037 的「先跑一個指令」首次畫面。 - sidebar 從第一天就列出全部頁面,§22 的漸進揭露沒有作用。 當時 main 回傳的訊號其實是 `evidenceSeen: false`(`window.redlog.visibility.signals()`)。照設計,這時應該顯示首次畫面。 連帶影響:「記我的 PowerShell/Zsh/Bash 終端」的 nonce 引導流程只在首次畫面上,所以也進不去。RELEASE-SMOKE-TEST 的 EXTERNAL SHELL 前三項因此無法執行。 ## 原因 1. `src/renderer/src/hooks/useVisibility.ts:51-57`:第一次抓訊號的 effect 只在元件掛載時跑一次(依賴陣列是 `[]`)。 2. app 掛載時還停在專案選擇畫面,沒有專案。這時 `src/main/index.ts:1433` 回傳 `null`。 3. renderer 把 `null` 當成「main 沒有回應」,換成 `ALL_DISCLOSED`(`useVisibility.ts:11`),於是 `firstRun` 是 false。 4. 從選擇畫面開專案不會重新載入 renderer,也不會重抓訊號。之後的重抓,又因為 `visibility.complete` 已經是 true 而被跳過。 ## 為什麼測試沒抓到 `e2e/helpers.ts` 的 `openTestProject` 開完專案後會執行 `page.reload()`(第 93 行),所以 renderer 重新掛載時已經有專案。 ## 建議方向 - 專案改變時重抓訊號,讓 effect 依賴 `project`。 - 把「沒有專案」回傳的 `null` 跟「讀取失敗」分開處理,只有讀取失敗才用 `ALL_DISCLOSED`。 - e2e 不要靠 reload 來開專案,至少要有一條路徑是從選擇畫面直接建立。 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Activity
guan4tou2 commentedon Oct 12, 2026
驗證過,已在 main 修好:a185b5d0(fix(first-run): a null visibility signal means 'not asked yet')是 origin/main 的祖先,改了
useVisibility.ts並新增test/use-visibility.test.tsx(3 個測試,變異檢查證實會在舊行為下失敗)。目前的 effect 在沒有專案時設 null、真的回 null 也保持 null,只有探測失敗才用 ALL_DISCLOSED,依賴是[project?.id]。issue 提到的『側欄第一天就全列』已由 61e0d95 移除漸進式揭露,屬預期行為。仍開著的缺口:e2e 沒有『從選擇器直接建專案、不 reload、看到 first-run 畫面』的路徑(
e2e/helpers.ts的openTestProject仍 reload),那一項歸在 e2e 債(#262/#263)處理。