══════════════════════════════════════════════════════════════════════════ journal.txt — 那天發生什麼、當下為什麼那樣選 ══════════════════════════════════════════════════════════════════════════ 規矩 · **append-only**:只加不改。寫錯就在後面補一則更正,不要回頭洗掉 —— 理解怎麼演進本身就是資產。 · **按季切檔**(journal-2026Q1.txt / Q2 / Q3…),**季末凍結**,之後不再動。 · 它回答的是「**發生什麼**」,不是「還要花多少時間」(那是 work.txt)、 也不是「做完了嗎」(那是 evidence.txt)。 · 決策的**結論**寫進 work.txt §四,這裡只記一句「D01 定案」。 ⇒ 理由:結論會被反覆查詢,敘事只會被讀一次。 ══════════════════════════════════════════════════════════════════════════ 每則的格式 ══════════════════════════════════════════════════════════════════════════ ────────────────────────────────────────────────────────────────────────── <一行標題:那天主要在幹嘛> ────────────────────────────────────────────────────────────────────────── 做了什麼 · <...> · <...> 遇到什麼 · <症狀:使用者/我看到的是什麼> · <實際原因:查出來是什麼> 當下為什麼那樣選 · · <被否決的那個為什麼不行 → 同時寫進記憶層作廢紀錄> 估時變化 · <工作包 AA 從 6h 改成 9h,因為 ...> ⚠️ 估時一變,**同一個工作階段內**就要去改 work.txt §三,不能只寫在這裡。 定案 · D0N 定案(結論見 work.txt §四) ══════════════════════════════════════════════════════════════════════════ 範例(真實形狀,不是佔位符) ══════════════════════════════════════════════════════════════════════════ ────────────────────────────────────────────────────────────────────────── 2026-08-29 資料庫上雲,一天四個 bug ────────────────────────────────────────────────────────────────────────── 做了什麼 · 把本機 SQLite 的 schema 搬上雲端 PostgreSQL · 跑全套端到端測試,發現四個本機從來沒出現過的錯誤 遇到什麼 · 症狀一:某個欄位在本機是 TEXT,上雲變成 VARCHAR 而且有長度限制 · 症狀二:一個欄位名稱是 PostgreSQL 的保留字,本機完全沒事 · 症狀三:外鍵的建立順序在 SQLite 不重要,在 PG 會直接失敗 · 症狀四:某個 migration 只在「空庫」會成立 —— 而本機庫有 225 個使用者, 所以它躲過了本機那次驗證。⚠️ 而它要防的情境正是**上線那天的形狀**。 當下為什麼那樣選 · 沒有選擇「回頭改成兩邊都能跑的寫法」,因為那等於讓本機的假訊號繼續存在。 · 改成:新增一個**雲端 dev branch** 當部署前的閘門(真 PG,約 35 分鐘)。 代價是每次部署多花半小時,換到的是「本機綠不算數」這條規則變成可執行的。 教訓(已寫進 POSTMORTEMS.md §1 與 CLAUDE.md) · **本機綠只證明邏輯沒壞,不證明 schema/型別/外鍵在真環境成立。** · **驗證要在兩種資料狀態下各跑一次:空庫與有資料。** ⇒ 推論:「再跑一次看有沒有過」不是驗證。要問「我剛才是在哪一種狀態下驗的」。 · 新增守衛 tools/pg_check.py(同一份 model 在兩個 dialect 翻成的 DDL 比對) 定案 · D12 定案(三個資料庫的分工,結論見 work.txt §四)