
Day7 [coffee-review] 測試全綠,功能卻永遠是空的:查詢沒 select 的欄位
店家頁的「常見風味」在線上永遠是空的,但負責統計的純函式有十幾條測試、全綠——問題不在算法,在查詢根本沒撈那兩個欄位。這篇記錄為什麼不直接把欄位加進去、假的 Supabase client 要假到什麼程度才抓得到這種 bug,順帶收掉草稿按「還原」就被清掉與全新安裝 SQL 缺欄位兩件,以及驗證修正時我怎麼用一行 git 把自己的修正刪掉。


店家頁的「常見風味」在線上永遠是空的,但負責統計的純函式有十幾條測試、全綠——問題不在算法,在查詢根本沒撈那兩個欄位。這篇記錄為什麼不直接把欄位加進去、假的 Supabase client 要假到什麼程度才抓得到這種 bug,順帶收掉草稿按「還原」就被清掉與全新安裝 SQL 缺欄位兩件,以及驗證修正時我怎麼用一行 git 把自己的修正刪掉。

coffee-review 原本的「杯測」其實是自己沖一支豆,真正的杯測是一次擺 N 杯、每杯用編號識別。這篇記錄舊名字讓位、編號預設手動、未評分當成一級狀態這些產品取捨,為什麼資料分成兩張表而不是一個 jsonb 陣列,以及一組評分元件怎麼輪流裝 N 杯。

Coffee Review 品鑑表單最上面的「店家」有兩個問題:店家筆記只能從店家頁填,所以沒人填;選店家又拆成「選擇」和「新增」兩套,猜錯就撞 unique constraint。記錄把筆記搬進表單、把搜尋合成一個輸入框時的取捨(筆記要不要自己的儲存鍵、dirty 跟誰比、什麼時候才問 Google),以及 code review 才抓出來的三個坑:listener 疊兩層讓 chip 點了沒用、失敗 toast 被成功訊息蓋掉、把 LatLng 的方法拆下來呼叫讓從 Google 新增店家整條壞掉。

Art-Tracking 上線後的第一個問題:只有 workers.dev 網址、API 全 401。記錄把它掛上 art.kiwi-walk.com、用 Cloudflare Access 保護整站卻讓 agent 路徑 bypass 的取捨,Worker 端怎麼自己驗 JWT 做到 fail closed,以及靠 302 裡的 AUD 抓出 policy 設錯的過程。

Art-Tracking 第一版跑在 Vercel + Supabase 上,第二版(2026-09)整個搬到 Cloudflare Workers。這篇講為什麼不能像 coffee-review、commute 一樣用 GitHub Pages + Supabase,為什麼不留在 Vercel,以及 Hono、Drizzle、D1、R2、Vitest workers pool 這幾個選擇各自的理由與代價。