append-only:每棒收工追加一個 block,既有 block 永不改。要更正舊 block 寫在新 block 的「推翻了什麼」。現況看同資料夾
FR-145-STATE.md。
commits(全部未 push)
6dd66461f(雛形)→ be8e18fe4(討論稿)→ 35188c16f(design+開卡)→ 6ea7e136a(卡 2 首腦修正)→ ab3a9cf5d/15f2f72f3(復核紀錄)→ 0c268a6e9(memory)760d6648(TipTap 工具列與排版重整)→ a4fe5065(卡 2 首腦修正)b95c6eb6a/FE 0378b001;卡 2 BE 1f84d3bc6/FE fee81522;卡 6 BE 30650bdd0/FE 249ea078;卡 7 FE 88ca7ca8→67e9e11cNotion:母卡 CM-2854;子卡 CM-2855~2860 一次建;驗收後追加 CM-2863。2855/2856/2860/2863 Done;2857 In progress(交棒時 runner 跑中);2858/2859 Not started。
做了什麼
決策(全部決策者拍板,細節 design.md D1~D16)
lazy+totalRecords=專案數:平行的 FR-142.9/143.8 證明可行。被排除:外掛 GroupedListPaginator(卡 7 第一版,已刪)。教訓
feedback_card_analogy_requires_premise_check 第二案。addInitScript 會留在整個 session,之後每頁都炸 setAttribute of null;開新 tab 驗才乾淨。雛形共用 proto.css 已有 .menu class,自取同名會撞。git add 與 commit 之間被平行 session 的 commit 帶走(1f84d3bc6);內容完整但 commit message 錯位。平行 runner 要在 add 後立刻 commit。推翻了什麼
88ca7ca8)的前提「DataTable 內建分頁會截子列」被 2c79a437(FR-142.9)推翻;已由 67e9e11c 改正。留給下一棒:等 CM-2857 回寫後驗收,先在 DEV 送出一份改善計畫把卡 1/6 欠的路徑一起驗;通過再派 2858。
commits
824bffc80(新模組 closing_report、五支端點、docx 範本、下載紀錄 readmodel、5 個 error code、事件 6196/6197)、85e2f6ee8(截圖);FE 6ea3ecc1(ClosingReportView+四子元件、composable、i18n、歷史頁定稿標記)。a43c5736a(SPEC 結案報告頁重寫到現況)。Notion:CM-2857 Done(卡尾首腦復核段);母卡 append 一行。2858/2859 Not started。
做了什麼
決策(runner 改判,首腦認可,不回頭改 design)
教訓
histories 是 POST body report_uid、還原是 history_uid),猜 GET query 白打兩輪。推翻了什麼
留給下一棒:派 CM-2858;DEV 仍無已送出改善計畫,三條「有改善計畫」路徑欠端到端驗,全流程測試時造資料一次驗。
commits:runner 卡 4 BE 8fe83c3df/FE 17c51806;本棒文件 commit。FE 之間插了別案批次刪除兩筆(3d66f646、c7a91f45),BE 插了 FR-147 雛形與 memory 三筆,都不是本案。
Notion:CM-2858 Done(卡尾首腦復核段);母卡 append 一行;2859 Not started。
做了什麼:開檔核 pick_version 規則、COALESCE(sha256, checksum) 與結案凍結同源、三端點守門、定稿存包;155 條測試綠;重啟 BE 實打 manifest/draft zip(解壓 19 檔對契約、21 列路徑全在包內)/定稿 v6 存包/歷史重下載/v7 後 v6 位元組不變/404/auditor 200/viewer 403/下載紀錄。
決策(runner 定、首腦認可):同一份內容多副本依序讀,停用後端讀不到自動換下一份;對照表最後寫保證路徑存在;同佐證只收一次,同名異內容加「 (2)」;上限 1 GB 進 env CLOSING_REPORT_BUNDLE_MAX_BYTES。
教訓:卡 4 核心「依凍結雜湊取舊版」在 DEV 根本打不到——全庫零筆帶 content-hash 的凍結紀錄(1199 在凍結機制上線前結案)。首腦驗收只走到「舊資料退回目前檔」分支,與 runner 自報一致。DEV 資料老化讓新機制的主路徑沒有真資料可驗,這類卡驗收前要先查「主路徑在 DEV 有沒有資料」,沒有就造,不能只在打折處寫一行。列為全流程測試必驗。
留給下一棒:派 CM-2859。全流程測試必驗三項:有改善計畫路徑(卡 1/3/6)、結案後換檔包內仍舊版(卡 4)、本專案問卷佐證轉 PDF(卡 4)。
commits:FE 04f58f2f(文件撐滿套 dark-card、字級回基準、下載紀錄改對話框)、7a836ec4(表格字級對齊 DataTable);BE 0d22e0651(memory+skill 規則)、本棒文件 commit。
Notion:CM-2859 派出(In progress);新建 CM-2873(卡 8,Word 排版);母卡 append 追加卡一行。
做了什麼:決策者看卡 3 畫面三連點(留白、右欄下載紀錄、風格像另一個產品字太小),首腦直接修兩筆並 headless 截圖驗。再看 PDF 裁「差很多」,首腦實際轉圖核對:八欄等寬、日期四行、族群矩陣壓一格、缺失表項目欄塞整句、封面無版面、Normal 14pt——開卡 8,等卡 5 回來派。
決策:Word 排版另開卡不塞進卡 3 驗收(卡 3 功能全對,排版是獨立交付品質);等卡 5 再派因同一支產生器。
教訓:runner 把雛形「文件紙面」整套搬進頁面 CSS——雛形是給決策者看結構的,不是視覺規格。固化成 memory feedback_fe_page_no_custom_typography_or_paper_layout 與 skill 一節;派 FE 卡固定帶一句。另:runner 的 Word 只驗「有六章」沒看排版,首腦驗收 Word 也只開 python-docx 數段落沒轉圖看——Word/PDF 驗收要 pdftoppm 轉圖用眼睛看。
留給下一棒:驗卡 5 時同時核對它沒把 04f58f2f/7a836ec4 改回去;卡 5 通過派 CM-2873。
commits:runner 卡 5 BE 2da62a70a/FE 8c1c30e7;本棒文件 commit。
Notion:CM-2859 Done(卡尾首腦復核段);母卡 append 一行。六張實作卡全 Done,剩 CM-2873(卡 8)。
做了什麼:開檔核 final 五支新檔與連續/最後涵蓋兩個算法;170 條測試綠;FE build 過且首腦版面修正保留;重啟 BE 實打 1548(三次稽核)與 1321(兩輪)兩份測試總報告:跨多次未改善對 DB 原始判定、定稿第 1 輪 v9 後第 5 章帶入、總報告 zip 結構與合併對照表輪次欄、第1輪/ 子包與 v9 定稿包逐檔 md5 相同、1321 zip 有 覆核輪/、Word 七章、權限、412。
決策(runner 定、首腦認可):跨多次未改善只算連續(沒稽跳過不打斷、稽了沒判打斷);最終判定看「最後一次有稽到這條」不是最後一次稽核;各輪子包有定稿包就原封收、沒有就即時產、讀不到不讓整包失敗;子包不重放自己的對照表。
教訓:驗對照表「包內路徑」時路徑已含專案根目錄,我又拼了一層 root 得出 18 筆 missing,差點誤判;先印一筆 sample 再寫斷言。
留給下一棒:派 CM-2873;全流程測試必驗四項(有改善計畫路徑、結案後換檔包內仍舊版、本專案問卷佐證 PDF、覆核全過的最終通過日);複測完收掉 id 112/113。
commits:runner 卡 8 BE 0e95b7166;本棒文件 commit。
Notion:CM-2873 Done;母卡 append 一行「八張全 Done,進收口」。
做了什麼:核 commit 範圍只在 closing(FR-142 helper 零 diff)、兩份範本 Normal 12pt;174 條測試綠;重啟 BE 下載三份報告 PDF 轉圖逐頁看,欄寬/矩陣三子欄/封面/短日期/缺失表兩行全到位;下載 FR-142 稽核報告確認沒被帶動。
決策:本機轉出字型不一致(總報告楷體、階段報告明體)查到是三份範本東亞字型都沒指定繁中,LibreOffice 替代不穩;不算本卡問題、不擋驗收,記進 STATE 待辦另議。
教訓:「兩份報告字型不一樣」第一眼像卡 8 改壞範本,開 styles.xml 逐字比對才確認三份完全相同——範本類問題先 diff 範本本體再下判斷。
留給下一棒:母卡收口七項(STATE §3),逐項等令。
commits:ea82f2ab9(SPEC 子頁+hub 改寫+nav+site 產物+手冊+tracker);本棒文件 commit。
做了什麼:決策者令「更新 spec 跟其他文件」。依 writing-feature-specs 拆分判準(報告頁是獨立畫面)把結案報告 SPEC 拆成清單 hub+子頁「結案報告內容頁」13 節,事實從 route/service/FE 元件實掃;手冊新開 closing-report-guide.md 七段白話。mkdocs build --strict 過。
決策:拆 hub+子頁而非在清單頁塞 §1.1/§6/§9——報告頁有十個功能、七支端點、三個 UC,塞進清單頁會超過 450 行且兩個畫面混寫。
教訓:db_schema.json dump 早於 FR-145 migration,兩張表新欄在 dump 裡沒有;spec 註明「以 migration 檔與 live 為準」。下次出包前 scripts/deliverables/ 重產 dump 時這段註記可拿掉。
留給下一棒:收口剩 ③e2e(test repo 另開一棒)④出貨基線重產 ⑤還原 pin ⑥進版 ⑦母卡收 Done,逐項等令。
commits:本棒文件 commit(STATE 改寫成總驗收視角)。本案 BE 10 筆、FE 11 筆未 push。
做了什麼:決策者宣告「開發到一段落,等等開 FR-139~147 全專案總測試,由總驗收首腦統一收尾」。STATE §0 讀序改成「先讀手冊再讀 SPEC §12」、§3 改成「總測試要造的四條情境(改善計畫路徑/結案後換檔/問卷佐證/覆核全過)+發版前欠的九件事表」、§9 短 prompt 改給總驗收首腦。
決策:收口 ③~⑨(e2e、出貨基線、還原 pin、進版、母卡 Done、push)不在本棒做,交總收尾統一處理——決策者原話「都測完會來做全部的收尾」。
教訓:pyproject path dependency 實查是四支(含 oscal-v2),前幾棒 STATE 一直寫三支——交接檔裡的數字每棒都要重查,不能沿用。
留給下一棒:§3.2 四條情境、§3.3 九件事。測完清 DEV 112/113 測試列。