📊 ChefsMate 老闆報告

2026-05-16 · 由 AI 秘書與老闆共同維護 · 每個 commit 自動更新

一句話總結:採購單的雲端化(thin-client)+ 同步速度優化兩大基礎建設都完成, 用戶提的「付款帳戶追蹤」feature 也 ship 完整。POS 上架 9 個 feature 排在 有精神時段,主 App 重構排在 睡覺自動跑,瑣碎 debug 排在 低精神時段

🤝 本頁工作協議:這頁是老闆 + AI 秘書共同維護的工作儀表板。 AI 承諾每次 commit / 重大進展都更新這頁;老闆可隨時加新願望(許願池), AI 下次來會 review。檢查清單與許願池保存在你瀏覽器(localStorage), 清快取會清掉,要備份請按「匯出」。

POS 上架完成度(用戶體驗 critical path)

63%
✅ 已完成:sync 速度優化(12 倍)、PO 部分 thin-client、付款帳戶追蹤、整套 timeline 拖拉改造(90%)、核准修改 Phase A+B(85%)、未結帳訂單處理 sheet(80%)、Unified User Profile(員工邀請 v2 資料層)
🚧 進行中:dogfood 各 feature、退款流程改造、員工邀請 email/dialog 串接
⏳ 待動:B. 訂位 filter、H. PO 收貨 UX

🏗️ 大計劃 — 把每件事歸到一個大方向

所有小任務都屬於某個大計劃。點開可以看完整 task list 和進度。 右下角「大計劃」標籤 可以從任何 item 跳到對應大計劃。

🧱 主 App 重構 — Thin-Client + Fine-Grained 4 層架構
22%

目標:所有商業邏輯搬到 server(Route → Orchestrator → Gate + Primitive + Repository 4 層), App 只負責顯示 + 收使用者操作。改規則改一次就全部生效,3 個 App 不會 drift。
進度:3/14 個 PO 動作完成、16 張 audit card 排隊。受影響 entity: PurchaseOrder(pilot)、Recipe、Vendor、Ingredient、MenuItem、Settings、Budget、Tactic 等。

  • Step 1.4-A 建立採購單接 API 睡覺
  • Step 1.4-B.1 付款狀態接 API 睡覺
  • Step 1.4-B.2 複製訂單接 API 睡覺
  • 🟠 Step 1.4-B.3 收貨流程接 API 睡覺
  • 🟠 Step 1.4-B.4 刪除流程接 API 睡覺
  • Step 1.5 砍 Swift PO Services 睡覺
  • Step 1.6 跨 entity 邏輯(Threshold / UnitConv)睡覺
  • Step 1.7 Outbox 結構(離線排隊)睡覺
  • 16 張 audit card:Vendor / Recipe / Ingredient / Settings / Budget / Tactic / Reports / Brand / Dashboard / Operation / HRTab / Phase5Services / MenuItem / PrepList / Expense / Accounting 睡覺
  • 通知 Router thin-client(Things 既有 task)睡覺
  • 報表聚合 thin-client 睡覺
  • 菜單快速上下架 thin-client 睡覺
  • 候位 Waitlist 全新功能 有精神
  • 關帳 client 切到 thin-client API 睡覺
  • 結帳/付款/退款 client 切到 thin-client API 睡覺
  • POSReservationListView 改時間接 thin-client 睡覺
  • AddReservationSheet 建訂位接 thin-client 睡覺
  • Wave 7 測試計劃跑完整套 沒精神
  • Wave 8: SeatingService 換桌測試(用新 Swift gates) 睡覺
  • iOS Wave 8 後續:Service / UI 全面換用 Swift gates 睡覺
  • 全部 graduate + 砍 legacy + 移除 flag UI 睡覺
  • Phase 2 cleanup — 移除 3 個未實例化的 add-reservation 死碼 睡覺
同步效能優化(Bundled Sync)
75%

目標:App 啟動 / 下拉刷新時的同步速度大幅提升。
已驗證:4256 ms / 2 個 HTTP(vs legacy 49000 ms / 60+ HTTP)= 12 倍快。
剩下:HybridSyncManager 補償同步 + DataSyncService 內部 syncer 接到 bundled API,再省 ~50 個 HTTP。

  • Phase A:manifest endpoint 睡覺
  • Phase B1:bundled pull endpoint 睡覺
  • Swift 端 4 層 + AppSyncManager 整合 睡覺
  • Sync Developer dev tool(量測) 沒精神
  • Schema audit(移除 9 張錯類表) 睡覺
  • Phase B2:HybridSyncManager 接 bundled 睡覺
  • Phase B2:PrepListSync / IngredientPriceHistorySync 接 bundled 睡覺
🚀 POS 上架衝刺
48%

目標:POS App 達到可以 App Store 上架 + 接單收費的水準。
9 個關鍵 feature 排隊中,加上 Stripe / 訂閱整合等基礎建設。

  • 🔵 A. 取消/退款流程改造 (30%) 有精神
  • B. 訂位列表 filter 重整 有精神
  • 🔵 C. 月曆→日 + 拖動編輯 (60%) 有精神
  • 🔵 D. 核准修改 = 確認訂位 (85%) 有精神
  • 🟠 E. 員工邀請 v2 (40%) 有精神
  • 🔵 F. 未結帳 sheet (80%) 有精神
  • 🔵 G. 臨時收支 + 統一退款 (50%) 有精神
  • H. PO 收貨 UX 整合 有精神
  • 🔵 I. 訂位 timeline 改造 v3 (90%) 有精神
  • 打開收銀機按鈕(退款/臨時消費/找零) 有精神
  • Stripe Dashboard 設定(產品 + 價格 + Webhook) 沒精神
  • /pricing 頁手動測訂閱流程 有精神
  • Webhook idempotency 測試(Stripe CLI replay) 沒精神
  • iOS RemoteSubscriptionFetcher 整合 SubscriptionManager 睡覺
  • 藍新定期定額整合(台灣本地金流) 睡覺
  • App Store 審核回應 SOP 沒精神
  • 測試 — Customer-Centric 訂位重構 6 條必測(#22-#27) 有精神
💰 記帳完整性 — 每筆錢都追蹤
60%

目標:每筆錢進出(訂金、營收、採購、退款、臨時收支)都記到 AssetTransaction 表, 老闆能準確知道每個帳戶餘額、每月哪邊賺哪邊花。

  • 付款帳戶追蹤 feature(採購單標已付建 transaction) 睡覺
  • 🔵 dogfood 付款帳戶 8 step(待測) 有精神
  • 🟠 Liability + AssetTransaction 一致性決策 沒精神
  • 🔵 G. 臨時收支 + 統一退款(重複於 POS 衝刺) 有精神
  • 報表聚合 thin-client(重複於 4 層架構) 睡覺
🐛 Bug fixes(已知 5 個)
0%

有發現新 bug 隨時告訴我。沒精神時段適合做這個。

  • 🐛 SwiftData 殘留 ghost 訪客(員工手機看到 server 沒有的桌) 沒精神
  • 🐛 KDS UI 假裝有單但內容空白(2026-04-27 觀察到) 沒精神
  • 🐛 全 POS UI 權限 audit — 沒權限的按鈕要 disable / 隱藏 沒精神
  • 🐛 Sync upload 失敗時要 rollback 本機(legacy 路徑) 睡覺
  • 🔧 SwiftUI ViewModifier 統一權限 gate(避免 audit 後又漏) 睡覺
🔐 安全 / 基礎建設
8%

API key、Webhook、Stripe migration 等基礎建設。多數可在睡覺時段做。

  • Webhook 訂閱系統測試(含 HMAC 驗證) 沒精神
  • API key 認證 + Rate limit 測試 沒精神
  • OpenAPI spec 驗證(給未來合作夥伴 / Google RwG) 睡覺
  • DB Migration push(webhook + api_keys) 沒精神
  • DB Migration push: 20260428003_stripe_subscriptions 沒精神
📚 文件 / 設計工具
100%

看得見的工具,幫助老闆 + AI 同步狀態。

  • docs.chefsmate.app 系統地圖(4769 個節點) 睡覺
  • 17 張 audit card(重構單位)睡覺
  • 老闆報告頁面(這頁本身) 睡覺
  • POS_流程邏輯圖.md / 功能地圖 / Edge Functions 地圖 睡覺

🛤️ 三條工作路線

根據老闆當下精神狀況選擇做什麼。每個 item 點一下展開 看「當時的提示詞」+「無腦測試 checklist」(如果有)+「所屬大計劃」。

🖐️ 拖移功能:抓 item 左邊的 ⋮⋮ 把任務拖到別的時段欄。 順序會存在你瀏覽器(localStorage)。下方有「重設順序」按鈕可恢復預設。
☀️

有精神時段

早上、下午前段
需要老闆 dogfood、判斷 UX、跟錢/上架直接相關。最高 ROI
⚡ 立刻測 付款帳戶 dogfood
8 個測試 step(必測 4 + 邊界 4)— 確認 A+C 流程通了、金錢追蹤完整。
~15 分鐘 記帳完整性
📌 老闆當時的話(觸發這個 feature):
測試1:點擊「已付」過後,最近的交易紀錄裡面沒有顯示已付的貨款,用戶選擇已付的時候是不是應該要選擇付款帳戶,這樣才可以完全掌握每個帳戶付出去多少錢?
老闆選擇的設計(A+C):
我選A+C,跳出選單的同時,有預設的帳戶可以直接選擇,預設的選項可以從設定裡面去設定
無腦測試 checklist
0/8
  1. ①【必測】設定預設付款帳戶
    1. 開 ChefsMate App → 「設定」Tab
    2. 滑到「餐廳管理」section,找「預設付款帳戶」(綠色 creditcard icon)→ 點進去
    3. 列出兩個 section:「無預設」+ 你的 asset 帳戶清單
    4. 點任一個帳戶
    ✅ 預期:藍色打勾、console 看到 ✅ [DefaultPaymentAccount] 預設付款帳戶已更新。關閉 sheet 重進,仍打勾。
  2. ②【必測】標已付跳 sheet + 確認帳戶
    1. 開任一張欠款的採購單詳情頁
    2. 點「已付」按鈕
    3. 預期:採購單卡片立刻變「已付」+ 跳出 PaymentAccountPickerSheet
    4. Sheet 上方顯示付款金額(大字)
    5. 你剛才設的「預設帳戶」應該已被選好(藍色打勾 + 「預設」badge)
    6. 點「確認」
    ✅ Sheet 關閉。Console 看到 ✅ [PO Pay] API success: ... → status=paid, asset=...
  3. ③【必測】交易紀錄出現出帳
    1. 切到「記帳」Tab → 看「最近交易」區塊
    ✅ 應該看到一筆新的 transaction:type=採購付款 / amount=該 PO 總額 / asset=你選的帳戶 / note=「採購付款 PO #xxx...」
  4. ④【必測】取消 sheet → rollback
    1. 找另一張欠款 PO → 點「已付」
    2. Sheet 跳出時,這次點「取消
    ✅ Sheet 關閉、採購單卡片回到「欠款」、「最近交易」沒新增 transaction
  5. ⑤【必測】標欠款 → 清 transaction
    1. 找 step ② 標已付的那張 PO → 點「欠款
    2. 預期:不跳 sheet,PO 直接顯示「欠款」、console ✅ [PO Pay] API success: ... → status=unpaid
    3. 切「記帳」→ 看交易紀錄
    ✅ Step ② 建的那筆 transaction 應該消失(被 soft-delete)
  6. ⑥【邊界】沒設預設的情況
    1. 進「設定」→「預設付款帳戶」→ 選「不設定預設
    2. 進任一張欠款 PO → 點「已付」
    ✅ Sheet 跳出時第一個 asset 被預選(不是「預設」狀態,沒 badge)
  7. ⑦【邊界】金額正確性 + missing item
    1. 找一張已收貨的 PO(有 actualTotalPrice)
    2. 標已付 → 看 sheet 上方金額
    3. 預期金額 = sum(item.actualTotalPrice)(不是 ordered total)
    4. 找一張有 missing item 的 PO(部分缺貨)
    5. 標已付 → sheet 上的金額不該包含 missing item
    ✅ 兩個都正確
  8. ⑧【邊界】離線 rollback
    1. 飛航模式 ON
    2. 標已付 → 選帳戶 → 確認
    ✅ paymentStatus 樂觀更新成 paid → API timeout → console ⚠️ [PO Pay] API failed, rolling back → PO 自動回到欠款,paidFromAssetId 清空
🔵 30% A. 取消/退款流程改造
2 按鈕(同意+退款 / 同意不退)+ 退款百分比 + 末五碼 + email + 理由範本。
已 ship:refund_policy_tiers 資料層(多段制方案 B)+ POS UI 雛形(commit f7746a8e + 9f5649d5)。還缺:完整 sheet 改造、退款執行流程、email 範本、訂位永不刪除。
~3 小時剩餘POS 上架衝刺
📌 老闆當時的話(測試 #11 Step 4 觸發 2026-05-11):
第四部點擊取消訂位之後不是跑到退款待處理,是進入取消待確認,詳細的定位資訊如同畫面,同意取消的那個按鈕應該要改成兩個按鈕,雖然政策規定是定位前24個小時內取消不退訂金,但是在這個按鈕上面應該還是可以讓用戶自己選擇同意取消並退款或者是同意取消不退款,如果點擊同意取消並退款,就會顯示政策規定的機種退款%數讓用戶選擇要退多少錢,用戶選擇之後呢就會進入退款程序,出現帳號後五碼讓餐廳端填寫,餐廳端匯完錢之後填寫後五碼按下送出就會發送一封郵件給客人,如果會匯款的金額大於政策規定的金額,應該要寫理由,並且有理由的範本:我們的退款政策是XXX,老闆權衡了一下,決定退款X%。目前按下同意取消按鍵之後這組定位會直接被刪除(直接在定位系統上面消失),不確定是在UI層面消失還是連supabase裡面都消失,我希望他一直留在系統裡面,以供後續查看比對。
⏳ 待動 B. 訂位列表 filter 重整
膠囊 chip 重排、不滑動全顯、月曆切換。
~半天POS 上架衝刺
📌 老闆當時的話(2026-05-11):
我覺得訂位頁面上面的分類膠囊應該要重新整理一下,內容的部分也應該要整理一下,「即將到來」這個膠囊是不必要的可以刪掉,今日和全部的膠囊排在第一二位順序不會變,其他的膠囊如果有出現 badge 就會自動往前排序,不過最好把每一個分類的膠囊都直接顯示不需要滑動,如果是直接顯示的方式,就應該要按照訂位的時間軸排序。如果點擊月曆檢視模式,膠囊應該要消失,變成一個返回分類檢視的按鈕。
🔵 60% C. 月曆→日檢視 + 拖動編輯
底層 manual_table_override 已存在,inline 時間軸已推廣到座位安排 + 月→日檢視(commit 77ad2d80)。
已 ship:inline timeline prototype、推廣到座位安排頁、月→日檢視整合、拖移改時間/換桌寫 manual_table_override。
還缺:訂位列表月曆模式 → 點某日進日檢視時間軸的 UI 連結(流程串接)、最後 dogfood verify。
~3 小時剩餘POS 上架衝刺
📌 老闆當時的話(2026-05-11):
點擊月曆檢視模式的某一天,就會變成日檢視模式,可以直接重用座位安排裡面的時間軸畫面,在座位安排時間軸畫面,拖動訂位區塊,應該要可以改變訂位的時間、或者是換桌安排(要記錄在那個預先座位安排的表單裡,並標記是手動安排的座位,不會隨著別的訂位自動安排而變更,等到客人入座的時候就會按照手動安排來入座,後續的客人訂位也會參考這個表單安排座位(已經有這個功能幫我確認一下))在日檢視模式點擊任何一個訂位就可以看到訂位詳細資訊。
🔵 85% D. 核准修改 = 確認訂位(Phase A + B + B-v2)
點「核准修改」一下抵兩下(自動 confirm)+ sheet 顯示當天時段分佈。
已 ship 7 個 commit:Phase A(auto-confirm orchestrator e8d8f7e8)+ Phase B 後端(context API + 預覽 + manual override 35df41b8)+ Phase B UI(cascade 預覽 2778dc24)+ B v2(系統推算永遠顯示 + 拆桌推算 + cascade dropped 警示 + inline 時間軸 3cfc6bc7)。
還缺:dogfood 跑全流程 verify、可能的 UX 微調。
~1 小時剩餘POS 上架衝刺
📌 老闆當時的話(測試 #4 觸發 2026-05-13):
我現在在測試#4,客人先訂位,在老闆還沒有確認訂位之前就修改人數,當老闆點擊核准修改,其實就等於是確認訂位了,所以不必按兩次,核准修改這個按鈕點擊後的效果等同確認訂位。還有就是,要讓老闆判斷是否可以核准訂位,應該要直接顯示當天那個時段的訂位和桌位分佈,讓老闆知道這個客人有位子,而且安排的桌位合理。如果老闆覺得不合理也可以調整桌位後點擊核准修改,就會記錄下老闆的手動安排。
進度:Phase A 已 ship(orchestrator auto-confirm),Phase B/C 待設計 POS UI
🟠 40% 等回答 E. 員工邀請 v2
寄 email + 下載 app + 表單 + in-app dialog。有 7 個拍板問題等你回答
已 ship:Unified User Profile Phase 1-4 完整重構(user_profiles FK 統一、staff 砍 3 個 duplicate 欄位、員工 onboarding 表單 prefill + cascade、Vendor 帶 createdByUserProfileId)— 這是 v2 的資料層基礎。
還缺:自動寄 email(Resend pattern 已存)、in-app 確認對話框、員工填表 UI、deep link。
先答 QPOS 上架衝刺
📌 老闆當時的話(測試 #3 觸發 2026-05-10):
我在測試#3的時候,用老闆的帳號邀請員工加入餐廳,當老闆送出邀請後,我想改一下行為: 1、員工 email 收到邀請,點擊 email 裡面的連結後跳出下載 app 的連結(放在 todo 裡面(現在還沒有正式連結))、填寫員工基本資料的表單連結(放在 chefsmate.app 網域底下)(符合 ChefsMate 主設計風格)(填寫一些正常公司會需要的資訊) 2、如果員工的手機在老闆發出邀請的當下正開啟著 App,則會跳出確認加入的對話框(希望對話框符合 ChefsMate 主設計風格),點擊確認後,如果還沒有填寫員工基本資料,則會跳出填寫員工基本資料畫面。(如果能重用 web 上的表單設計最好)(員工的基本資料會放在 ChefsMate Staff 裡面)
🔵 80% F. 未結帳訂單處理 sheet
4 種 action(刪/補結/耗損/請客)+ 批次。
已 ship 5 個 commit:DB + 4-層 web stack(5e687ce1)+ POS UI detail sheet + bulk 處理(a2e87a1f)+ customer recovery UI 客人帳號頁顯示待補結 loss 單(662844cd)+ POS 補結帳 NotificationCenter wire(4b5fdcb3)+ recover orchestrator + auto-recover on settle(c55e88e9)。
還缺:dogfood verify、5 個小拍板問題(權限規則、批次門檻)。
~30 分鐘剩餘POS 上架衝刺
📌 老闆當時的話(2026-05-09):
還有就是如果補關帳的時候有列出尚未結帳的點餐單,應該要可以讓用戶點擊進去訂單詳情看是誰還沒結帳、點了什麼東西、顯示聯絡方式和一個處理這張單的section(刪除訂單/補結帳/列成耗損訂單(忘記跟客人結帳)(客人可以在事後在某個地方找到這筆訂單補結帳,如果聯絡得到的話)/店家請客(優惠為0元),可以讓用戶多筆訂單一起處理或是單筆單筆點進去處理
🔵 50% G. 臨時收支 + 統一退款
已 ship:Wave A.4.1 — 臨時支出/收入記帳 sheet(取代「打開收銀機」概念),commit 6ee70f40。
還缺:「統一退款 sheet」(統合各種退款場景:訂金退款、訂單退款、買錯退款)— spec 在 memory 但實作未完。
~3 小時剩餘POS 上架衝刺
📌 老闆當時的話(2026-05-08):
Q1打開收銀機的用意應該是有時候會有臨時性支出用收銀機裡面的錢付款,應該把這個功能先改寫為「臨時支出/收入記帳」,如果有臨時支出/收入(比如買文具/收到小費)就可以在這裡記帳,並且同步到 chefsmate 主App的記帳功能、POS的關帳功能。留一個收銀機接口,未來如果我突然改變主意想要讓用戶也可以接上收銀機的時候,就可以擴充這個按鈕。
Q3臨時消費sheet應該就跟Q1的功能一樣。
⏳ 待動 H. PO 收貨 UX 整合
「已付/欠款/新增項目」三個按鈕融合到收貨流程裡。
~1.5 小時POS 上架衝刺
📌 老闆當時的話(PO #20260514-1 dogfood 後):
PO的流程可以做到點貨完成了,但是「已付、欠款、新增項目」這三個按鈕我覺得應該要融合在點火流程裡面...
🔵 90% I. 訂位 timeline 改造 v3
4 件事:undo bug fix、文案調整、時間軸範圍依排班、drag overhaul。
已 ship 大堆 commit:dogfood #3 四件事全做(4b6e3d42)+ 後續多輪修正:drag 飄真因(055595ea pxPerMinute lift 0.6x)、6 大 root cause 綜合解(bfb1c517)、edge auto-scroll(109507aa)、UI 回饋反應慢 3 因(6347a655)、undo 失效 + 用系統自動安排看不到變化(7c96434b)、5 件 dogfood 拖拉 UX 改進(d21cad11)、tooltip from→to + 還原為原本時間(0b145bb8)等等。
還缺:再一輪 dogfood verify 確認沒回歸。
~30 分鐘 dogfoodPOS 上架衝刺
📌 老闆當時的話(dogfood video #3 觸發 2026-05-13):
1. 時間軸的欄寬可以縮小一些,當用戶提起(拖移的動作拆分位:長按、提起、移動、放下)某個訂位時,時間軸的欄寬會自動變得更窄(訂位的卡片寬度響應變窄),讓用戶能看到更多時間節點,並會在時間表的上方標寫現在所在的桌號時間段(從長按開始到放下前都會顯示,以用戶設定的可訂位間隔時間為單位)並會將訂位卡片顯示為半透明卡片;用戶在移動訂位的時候會有手機的微震動觸覺回饋,代表吸附到某個間隔時間,並且會有小紅線段在時間軸上表示現在所在位置。 2. 時間軸的時間標示:應該要按照員工的上班時間區段來顯示... 3. 把「推算」改成「系統安排」;待確認推算改成「待確認+系統安排」;如果手動安排的結果跟系統安排一樣,則顯示為手動安排。如果點擊任何一個手動安排的訂位會有一個按鈕出現:「還原為系統安排」... 4. 上一輪做的還原上一步按鈕沒有真的還原上一步,會亂跳請看影片
🌆

沒精神時段

晚上、想休息但又不想睡
debug、回答問題、文件整理、code review。低認知負荷
⏳ 待動 回答 E + F 的 12 個問題
員工邀請 v2 (7 Q) + 未結帳 sheet (5 Q)。我問問題、你只要答。
~30 分鐘POS 上架衝刺
進行方式:開新對話跟我說「回答員工邀請 v2 的 7 個問題」或「回答未結帳 sheet 的 5 個問題」,我會列出來請老闆答。
⏳ 待動 Review Liability + AssetTransaction 一致性
採購單從欠款轉已付時:Liability 已標 paid 但 transaction 等選帳戶才建 → 不一致。詳見「待決策」。
~10 分鐘記帳完整性
⏳ 待動 Review B/C/D 的 spec
確認需求,避免有精神時段做出來不是你要的。
~20 分鐘POS 上架衝刺
⏳ 待動 Sync Developer 量測再跑
有空再開 ChefsMate → 設定 → Sync Developer,跑「立刻同步」確認 bundled 路徑穩定。
~5 分鐘同步效能優化
⏳ 隨時 POS dogfood bug fix(5 個已知)
SwiftData ghost / KDS UI 假訂單 / 權限 audit / Sync rollback / ViewModifier。
隨時Bug fixes
🌙

睡覺時段

凌晨 / 我自動跑
大型重構、新增層、generate test、文件、code 搬遷。醒來驗收
🟠 等綠燈 PO 收貨流程接 API
QuickReceivingView migrate to thin-client。受影響大、有 IngredientPriceHistory 副作用。
~1 晚主 App 重構
需要老闆批准:要不要今晚就開工?spec 在 docs/重構/PO_Step_1_4_B_Spec.md。
🟠 等綠燈 PO 刪除流程接 API
deleteOrder 跟 PurchaseOrderDeleteHandler 的 snapshot 復原邏輯耦合。
~半晚主 App 重構
⏳ 排隊 砍 Swift PO Services
前面 receive + delete 完成後,client service 就可以砍了,bundle 縮小、邏輯只剩 server 一份。
~半晚主 App 重構
⏳ 排隊 16 個 audit cards 各自重構
Vendor / Recipe / Ingredient / Settings / Budget / Tactic / Reports... 每個 entity 一晚一個。
每張 1 晚~16 晚主 App 重構
⏳ 排隊 Sync Phase B2
把 HybridSyncManager 補償同步、PrepListSync 等舊 syncer 也接到 bundled API,cold start 再省 ~50 個 HTTP。
~1-2 晚同步效能優化
⏳ 排隊 Outbox 結構
離線時操作排隊上傳,避免「按了沒反應」。
~2 晚主 App 重構

💭 許願池 — 老闆隨手丟想法

想到什麼新功能、想改的 UX、想看的報表,先丟進來。 AI 每次來會 review 一次,覺得適合就會幫你加進「大計劃」或「三條路線」對應位置。
💾 願望存在你瀏覽器(localStorage)。要分享給 AI 看請按「匯出」貼給我。

🤖 AI 工作守則 — 我是按照什麼原則在做事

這些是寫在 CLAUDE.md 跟我各個 skill 裡的「工作守則」。 老闆懂這些就知道為什麼我會這樣做(而不是另一種方法)。

🏛️ 第一原則:Fine-Grained 4 層架構(最高優先)

📚 我會 PROACTIVELY 觸發的 skills

這些 skill 我看到對應的檔案就會自動 follow 規則,避免重複踩過的坑。

sync-safety-check
修改 Syncable entity / Mapper / DTO 時觸發。多 App sync 系統的 7 條安全 checklist(避免「跨餐廳資料污染」「同步漏資料」等慘案)。
supabase-repository-checklist
編輯 Backend/Data/Supabase/Repository/ 下的 UpsertPayload 時觸發。避免 RLS 42501、欄位漏寫。
wallet-edge-function-safety
修改 wallet 相關 Edge Function 時觸發。同類 bug 已重複 4 次(undefined 變數、missing 參數、錯誤 query operator)。
history-records-guide
處理歷史紀錄 / 報表資料來源時觸發。13 種歷史 Model 完整參考。
chefsmate-pricing-strategy
討論訂閱、權限、定價時觸發。完整定價策略 + 權限架構 + 競品分析。
pos-flow-doc-maintainer
編輯 POS Features / Services 時觸發。提醒同步更新 POS_流程邏輯圖.md
spatialmate-blueprint
SpatialMate / AR / 空間社交相關討論觸發(長期規劃)。

📐 重要的開發規則(從 memory 累積)

📋 Things 3 任務匯入(取代 Things 用本頁掌握)

這些是目前 Things 3 上開著的 work-related task。已經整合在「大計劃」section, 這裡保留原始分類給老闆對照。
協議:以後 AI 改 task 狀態時也會更新本頁,不再用 things-sync.sh。

✅ 最近 24-48 小時 ship 的東西

所有都在 main 上,3 個 app 都 build 過。

⚡️
同步速度優化(Phase A+B1 — Bundled Sync)
App 啟動同步從 49 秒 / 60+ HTTP 降到 4 秒 / 2 HTTP (提速約 12 倍)。91 個自動化測試 + Sync Developer dev tool。
📦
採購單 thin-client(Step 1.4-A / B.1 / B.2)
建立 / 付款狀態 / 複製 三個動作改走 thin-client API。抽 PurchaseOrderResponseUpsert 共用 helper。
💳
付款帳戶追蹤(A+C 完整 feature)
標已付跳 sheet 選帳戶(預設值從設定頁取),自動建 AssetTransaction。標欠款自動 soft-delete。Schema 改 3 欄位、4 個 server test、2 個新 sheet UI。
📐
系統地圖 17 個架構 audit card + 老闆報告頁
每個重構單位有 audit card 寫清楚現況、ROI、下一步。老闆報告(這頁)取代 Things 掌握進度。

🟠 等老闆拍板的事

這些事我做不了 / 不該替老闆決定,需要回答後我才能繼續。

1. 是否現在開工 PO 收貨流程接 API?
PO thin-client 化最後一塊大頭。完成後 web 後台能直接管理採購單。 但 QuickReceivingView 內邏輯複雜,需要 1 晚自動跑。
選項:A. 今晚就跑(推薦) / B. 先做 POS 1-2 個 feature 再回來
2. Liability + AssetTransaction 是否要合併處理?
目前流程:採購單從欠款轉已付時,負債(Liability)會立刻標已付,但 出帳紀錄(AssetTransaction)要等選完帳戶才建。 如果 user 取消選帳戶 sheet,負債已標已付但沒對應出帳 → 資料不一致。
選項: A. 改成「等選完帳戶後才標 Liability」/ B. 維持現狀(極少人會取消) / C. 取消 sheet 時也 rollback Liability(最完整)
3. 員工邀請 v2 的 7 個問題(功能 E)
「邀請過期時間」「員工註冊後是否強制完整 profile」「重複邀請怎麼處理」等。下次低精神時段問我,我會列清楚。
4. 未結帳 sheet 的 5 個問題(功能 F)
4 種 action 的權限規則、批次操作門檻、預設選擇等。

📖 術語小辭典(給老闆看的)

Thin-client(薄客戶端)
把「邏輯規則」從 App 搬到雲端 server,App 只負責顯示 + 收使用者操作。
類比:以前每個收銀員(App)自己背一本厚厚的營業手冊,三家分店三本書,手冊改了要每一本都重印。Thin-client = 手冊只放一本在總公司(server),收銀員打電話問。改規則改一次就全部生效。
HTTP request(HTTP 請求)
App 跟 server 講話的一次「往返」。每次都要握手(網路成本)、傳資料、等回應。
具體:以前 App 啟動會打 60 多次電話給 server,現在打 1 通綜合電話 server 一次回所有東西。從 60 通變 2 通就是這個。
樂觀更新(optimistic update)
UI 立刻反映用戶操作(例如點「已付」立刻變綠),不等 server 回。後台同時打 API;如果 server 拒絕(很少發生),UI 才還原。
對比:跟「悲觀更新」(按了要等 spinner 跑完才有反應)相反。樂觀更新讓 App 感覺很快。
AssetTransaction(資產異動紀錄)
資金每一次進出帳戶的紀錄。每筆都包含:哪個帳戶、進出多少、為什麼(type)、何時。
例子:今天現金帳戶收了訂金 500(一筆),然後付了採購款 3000 給某廠商(另一筆)。月底看現金帳戶餘額對不對,就是把所有 transaction 加起來。
Liability(負債)
欠人家的錢(不論是欠廠商、欠銀行、員工薪水)。標欠款的採購單會自動建一筆。
白話:跟 AssetTransaction 不同,Liability 是「未來要付出去」的錢,AssetTransaction 是「已經付出去」的紀錄。
Migration(資料庫遷移)
改 supabase 資料表結構(加欄位、改型別等)的腳本。一旦 apply 就生效,所有 user 立刻適用。
例子:「20260515001_purchase_order_payment_account.sql」就是今晚加 paid_from_asset_id 欄位的 migration。檔名前面數字是日期 + 流水號。
Bundled sync(綁包同步)
把多個小請求綁成一個大請求送出去,省成本。
類比:你叫餐 30 樣,以前是 30 通電話一樣一樣叫,現在是 1 通電話講完整單。
Commit / push
Commit = 在自己電腦上記一筆「我改了什麼」;push = 把 commit 推到 GitHub 雲端,讓 server 自動部署。每個 commit 都能單獨 rollback(撤回)。
Build(建置)
把 Swift code 編譯成 App。Build pass = code 沒語法錯誤、能跑。Build fail = 語法錯。我每改一段 code 都會 build 看看,避免推上去後 App 跑不起來。
Skill
我(AI)的「專業手冊」。例如 sync-safety-check skill 就是同步系統的安全檢查清單。我看到對應檔案會自動 PROACTIVELY 觸發,避免重複踩過的坑。
localStorage
瀏覽器內建的小型資料庫。本頁的 checklist 勾選 + 願望池存在這裡,清快取會清掉。要備份請按「匯出 JSON」。