工程 · 2026.10.02 · 4 min · 更新於 2026.10.26
Claude Code /code-review 審完整個前端:七十幾筆 finding 裡最有教訓的四類
用 Claude Code 的 /code-review max 審整個前端,確認七十幾筆問題,大多是操作送錯或狀態畫錯。挑出最有教訓的四類,加上測試要在未修正版上失敗的驗收規則,以及 Playwright 跨瀏覽器測試的結果。
閱讀設定
確認框上按的是「暫停」,送出去的卻是恢復。這是 Claude Code 的 /code-review max 在我放貸平台前端裡找到的一筆。
整個前端確認屬實的有七十幾筆,像這樣操作送錯、狀態畫錯的佔了大多數。
驗收上最重要的一條規則是:每筆修正的測試,都要在未修正的 build 上失敗。
另外,跨瀏覽器矩陣跑了近三千個測試,真的平台差異只抓到一個。
驗收:測試要在未修正版失敗
開始修之前先定規則。每一筆先對照 code 確認屬實才修,不屬實的寫明原因。
每一筆都要有測試,而且同一個測試在未修正的 build 上要會失敗。
測試在未修正版上也會過,就證明不了修正有效。

最有教訓的四類問題
全部修完之後回頭看,同類的問題很多,最有教訓價值的是下面四類。
文案和後端行為對不上
這時要先確認哪一邊才是設計上要的。
停權的文案說帳號停權後 Bot 會停,後端其實沒停。被停權的人登不進來,營運端也沒有 UI 能代為暫停,Bot 繼續掛單就沒有任何人停得了。
所以這筆改後端:引擎取名單時排除停權的使用者,在途的掛單沿用既有的撤單排程撤掉,使用者自己的放貸開關不動。
反過來,維護頁寫著維護期間 Bot 暫停掛新單,但設計文件明寫維護不停引擎,那筆就改文案。
暫時失敗當成永久
refresh(換新登入憑證的請求)遇到 5xx 就把人登出,促銷 API 失敗就當作沒有活動。
refresh 改成只有後端明確拒絕(400、401、403)才算 session 失效。
429、5xx、網路錯誤則丟出 refresh 自己的錯誤,不沿用原請求的 401 或 403,因為 layout 看到這兩個 status 會自己把人導去首頁。
把「不知道」畫成別的狀態
缺資料畫成 0,被停權顯示成「自己暫停」。
停權那筆我沒有加新的狀態值,仍然是 paused,成因另外由一個函式推導。Topbar 不用改就安全,也跟後台用的狀態維持同一組字。
狀態變了,設定沒跟上
換了金鑰之後,放貸設定還綁著舊金鑰,狀態顯示運轉中,實際一張單都不掛。
改綁放在金鑰狀態改變的當下做:新增金鑰時、健康檢查停用金鑰時,後端直接把設定接到啟用中的金鑰。
只靠使用者去放貸頁按儲存不夠,表單沒有改動時,連儲存鍵都不會出現。

Playwright 跨瀏覽器:一個真問題
Playwright 開了 10 個平台設定檔,涵蓋 Chrome、WebKit、Firefox 的桌機與手機。真瀏覽器用 iOS 模擬器的 Safari、Android 模擬器的 Chrome,以及 Mac 本機的 Safari 和 Chrome。
Windows 沒有真機,只有引擎加 Windows UA 的模擬。
抓到的真問題只有一個:註冊時用 Accept-Language header 帶介面語言,在 Firefox 和 WebKit 上無效,頁面自己設的值到不了後端。
改成放在 request body,後端加一個 language 欄位,沒帶才退回看 header。
其餘的平台差異,都是測試本身的假設有問題。
有一個要特別記:Playwright 在 WebKit 和 Firefox 模擬 locale 時,會在網路層蓋掉 Accept-Language。
header 的斷言在這兩個引擎上不可信,要改看後端存下來的值。
最後在 main 上跑完整矩陣,2936 個通過、44 個失敗。
其中 30 個是 Turnstile(Cloudflare 的人機驗證)的測試缺對應的 build,補上後全過。另外 14 個是單一平台的偶發失敗,重跑全過。

平行 agent 撐爆機器
修正拆成多個 PR,交給平行的 agent,各自一個 worktree(同一個 repo 的另一份工作目錄)。
agent 不 commit,由主 session review diff 後統一 commit,整合前每一行都看得到。
第二批是 15 個 PR,這台 16GB 的 Mac 撐不住了。
八個 agent 同時跑讓 session 重啟一次,所有 agent 一起中斷。好在修改都留在各自的 worktree,大部分直接 review 收尾。
之後固定同時最多兩件事:一個 agent 加我自己的 build 或測試,或兩個 agent 而我只做不吃資源的事。
平行開 agent 之前,先算一下機器撐不撐得住。

工程
JWT 到期邊界的 race、2FA 文案與密碼封裝:帳號安全上線後的三個修正
放貸平台碰得到使用者的交易所 API key,上線後又修了三件帳號安全的事:安全文案先對過後端,JWT 只解析一次避開到期 race,密碼在瀏覽器封裝後才送出。
留言
載入留言中…