FR-161 事前資料區 — LOG

append-only。每棒一段:commits、決策、教訓、推翻了什麼。

§1

2026-10-23 首腦:需求分析 → 討論稿 → 雛形 → design → 開卡

commits:6481c94cf(討論稿+三頁雛形)→ 8f4b417ef(收斂:不做審閱、四類全當附件)→ 02a8e07e0(公司=租戶、附件照大類)→ c3eb83cd0(不多開 tab、大類進系統設定)→ 27905d986(大類表格)→ 47de0e291(拿掉「目前整理」)→ 8a31bdd77(頁首只留公司、同名詢問)→ abcb8b13b(design.md)→ 本次(開卡)。

決策者裁示的順序(每條都推翻了首腦前一版):

  1. 另開介面,客戶不進 SSP 畫面。
  2. 掛資源庫,但同公司其他框架要能引用 → 檔案存公司層。
  3. 「顧問再挑一次多一道工」→ 預設全部帶入,只有反向排除。
  4. 四類都是附件,不分落點。
  5. 進稽核才鎖,導入期間持續更新(首腦原寫「送審凍結」被讀成整區鎖,改白話重寫)。
  6. 不做顧問審閱、留言、通知(首腦先建議全砍、被要求分析,提「輕量確認」,決策者仍裁不做)。
  7. 大類跟著公司(不跟著系統)。
  8. 不多開 tab,只重新設計程序書池;大類進系統設定、用表格。
  9. 拿掉「目前整理」(會搞混)、頁首雛形註解、顧問、總數、提示條;改用上傳同名詢問。
  10. 說明欄、zip 下載保留;同意 D9 動 jedi-compliance-audit。

探脈中查到、寫進 design 的事實:

  • 送審凍結、存版、還原、複製資源庫四條複製路徑都只複製程序書池列 → D9 必須落列。
  • common/authz/ssp.py 的 before_template_write 是空的:FR-139 D19 稽核中鎖資源庫沒落地 → 開 CM-3047。
  • OSCAL 匯出 back-matter 只讀 resources 表,主專案沒有寫入端 → 開 CM-3048。
  • 套件 ssp_diagrams 有表有 repo、主專案沒寫入端;ssp_clone_service 會連 diagrams 一起複製。
  • DEV 能力點前綴沒有 governance,本案用 oscal.pre-engagement.*。

教訓:

  • 雛形裡給決策者看的註解寫進了畫面(括號說明),被當成產品內容質疑。註解一律放頁首「這頁要你確認的事」。
  • 「凍結」這類工程詞對決策者會被讀成比原意更大的範圍,第一次就要用「誰還能改、誰看到的不變」講。
  • 決策者說「不要」時,要先分析利弊再給建議,不要直接照砍(審閱那題被點名)。
  • 批次排序:工作坊同批依卡號執行,想讓卡號大的先做就要拆批,開卡時就要對照卡號排。
§2

2026-10-23 首腦:派工前補 CM-3041 角色授權

決策者裁示:oscal.pre-engagement.upload 除了持有資源庫編輯權的系統角色,還要給 IT執行人員;manage-category 不給它。DEV 實查 IT執行人員(id 37)沒有 oscal.resource-library.update。已 append 到 CM-3041 卡尾,當時卡片狀態為 Not started,所以 runner 開工時看得到。design.md 的權限表同步。

§3

2026-10-23 首腦:批次重排(決策者指正)

推翻了什麼:開卡時的批次規劃。我照 big-feature-workflow skill 裡「同批依卡號一張接一張做」的舊說法排,把有依賴的卡放在同一批(CM-3041/3042、CM-3045/3046)。但 CLAUDE.md 的工作坊規範寫的是「同一批=可以同時做;有先後的放下一批」。之後 Stage 曾被改成 1~8 一張一批,不會出錯,但能平行的卡也被迫排隊。

重排後:五批。批 3 是 CM-3044+CM-3043,批 4 是 CM-3045+CM-3047+CM-3048,批 5 是 CM-3046。判斷依據有兩個:①是否用到別張卡的產出;②是否跟同批的卡改到同一個檔。卡 7 跟卡 3 都改 common/authz/ssp.py,卡 6 跟卡 5 都改 DocumentPoolPanel.vue。

改了哪裡:Notion 七張 Not started 子卡的 Stage 欄位;母卡與子卡卡尾 append 說明,寫明以 Stage 欄位為準;STATE 批次表、README 進度表。另外修正 big-feature-workflow skill 裡 Stage 那條的錯誤說法,讓它跟 CLAUDE.md 一致。

教訓:skill 跟 CLAUDE.md 寫的不一樣時,以 CLAUDE.md 為準,並且當場修正 skill。

§4

2026-10-23 首腦:驗收、改名、預覽、範例資料

規格改動(CM-3047)成立:FR-139 D19「稽核中鎖住資源庫」早就做在 ModuleFrameAuditLock(只放行 planning),我開卡時看到空的 before_template_write 誤判成缺口。runner 刪掉空殼、文件改成現況,正確。

驗收時發現並處理

  • 主專案 venv 裝的是 Nexus 的 jedi-compliance-audit 1.4.0,沒有 CM-3043 加的三欄;runner 是用 PYTHONPATH 驗的。已切 path dependency(不 commit)並重啟 8000。1.5.0 發版後要還原 pin。
  • 大類預設值有帶入;「組織架構」被手測改成「組織與人員」,已改回。
  • runner 手測留下的 5 份資料(含 3 份同名網路圖)已用 API 刪除,程序書池同步刪除正常。

決策者追加、已做(BE 08729dab7、FE f92fd7b1)

  • 「事前資料」全面改名「事前準備資料」(含 DB 選單與能力點說明,新 seed migration 只套 DEV)。
  • 事前準備資料頁每份檔案加預覽鈕(共用 FilePreviewDialog)。實打預覽端點:png/jpg/pdf 原樣、docx/xlsx 轉 PDF,全部 inline 不下載。

範例資料(DEV 租戶 102):五個大類共 11 份,網路架構圖有 v1→v2,資產清冊日期設為 400 天前以顯示「可能過時」。已同步進 5 個可寫資源庫的程序書池(各 11 列),稽核中的 491 沒有。

未驗:畫面截圖(headless 注入登入被開機檢查清掉),請決策者在瀏覽器看。

§5

2026-10-23 首腦:決策者改判 D6/D9 為「挑選引用」,開 CM-3050

推翻了什麼:D6「預設全部帶入,顧問只能反向的『這框架不用』」。這原本是決策者裁的,理由是「要顧問再挑一次就多一道工」。決策者打開專案 1619 的規劃頁,看到程序書管理從 9 份變成 22 份,多出來的 13 份是別家公司(宏碩範例)的檔案,就問:「不是說要用引用的嗎,為什麼變成全部載入?」

為什麼會這樣:DEV 一個租戶(102)底下有好幾家客戶的資源庫,自動帶入讓每一家都被塞滿。我在討論時講「引用」,指的是檔案本體只有一份、各處共用 file_id。決策者理解的「引用」,是「顧問選了哪些,才有哪些」。兩邊用同一個詞,講的卻是不同的事。我在 D9 改成「落列」時,沒有把這個差別講清楚。

新規則(寫在 CM-3050):

  • 預設不帶入,顧問在資源庫程序書池按「從事前準備資料選用」。
  • 「移出」會刪掉那一列,連帶刪掉掛載。
  • 已經引用的資料照舊同步:新版、搬大類、刪除、標過時。標過時只會讓那份變淡,不會被移出。
  • is_excluded 只代表「客戶標過時」,顧問手動排除的端點拿掉。

也跟決策者說明:專案頁不能上傳,是 FR-139 原本的規則。來自資源庫的專案,SSP 內容一律唯讀,改版前就已經這樣。

同一輪也完成:

  • 「事前資料」全面改名「事前準備資料」(BE 08729dab7、FE f92fd7b1)
  • 每份檔案加預覽
  • 點名稱就開最新版預覽(FE 6b0242d0)
  • 範例資料重做:用虛構公司「宏碩精密」,13 份像真的的文件
  • 同名比對要不要放寬:現行的完全比對,對不到「_v4.0_2026-09」這類真實檔名。已寫進 CM-3050,等決策者裁示。

教訓:

  • 同一個詞(引用),工程師和決策者的理解可能不同。定案前要用「畫面上會看到什麼」確認一次,不能只用機制描述。
  • DEV 一個租戶底下有多家客戶。驗收「跟著公司」這類設計,要先想到這種情況。
§6

2026-10-23 首腦:決策者同意同名比對放寬;CM-3050 與 design 改寫成定版規格

決策者同意放寬同名比對,跟 CM-3050 一起做;並要求「修正成正確的規格」,不要在卡尾一直補。

  • CM-3050:當時還是 Not started,整份內文換成新版。同名比對規則與測試表直接寫進本文,卡尾的補充段與「要先問決策者」都拿掉。換完確認狀態仍是 Not started,決策者隨即派工。
  • design.md:拿掉開頭的「改判」說明段。首屏、流程圖、分工概述、D8、同步規則表(改名為「引用與同步規則」)、API 表、畫面、端到端驗收都改寫成現況。名稱一律改成「事前準備資料」。拆分表屬於施工紀錄,保留原樣,加上卡 10。
§7

2026-10-24 首腦:CM-3050 合回後處理、481 範例引用

  • BE c6ad6e264 和 FE ec6b34ac 都已在 feature/FR-139 上。共用的 8000 已經重啟(新 PID 5093),現在跑的是新程式,不會再自動帶入。
  • 重啟前查過 DEV,沒有被舊程式寫回:只剩 4959(481)的 6 列,以及凍結/快照的 5549~5552。
  • 依決策者核可的表,481 改成引用 10 份,用新端點操作:移出組織圖、備份與還原管理程序書;新選用遠端存取 VPN 架構與設定說明、資訊安全組織與權責、密碼管理規範、機房管理規範、機房進出登記表、總部機房平面配置圖。不引用的 3 份是組織圖、備份與還原管理程序書、資訊安全事件通報與處理程序書(CMMC Level 1 沒有要求,或已有其他文件涵蓋)。
  • 其他資源庫(480/485/486/491/492)都是 0 列。
  • jedi-compliance-audit:本卡沒有改套件,1.5.0 只包 CM-3043 的三欄(套件 repo 6f26a58d)。