# FR-161 事前資料區 — LOG

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

## 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.*`。

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

## 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 的權限表同步。

## 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。

## 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 注入登入被開機檢查清掉），請決策者在瀏覽器看。

## 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 一個租戶底下有多家客戶。驗收「跟著公司」這類設計，要先想到這種情況。

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

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

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

## 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`）。
