FR-139 · append-only
每棒收棒追加一 block:commits、決策、教訓、推翻了什麼。只追加不改舊 block。
7f1413116 討論稿與四頁雛形;54dec49b9 design.md;4e2691b46 補定七條;b188135fb 卡號回填。f94e9ef99/FE f65e15dc。首腦以 test client 走 LoginService.generate_jwt_token 產 token 實打四條手測全過(token 是白名單制,自造 token 會回 TOKEN_401005;create_app() 不註冊 blueprint,要照 main.py 迴圈自己 register)。83c3c20a。首腦用 Playwright 注入正規 token(localStorage cm_store.accessToken)開 DEV 資源庫 460 實測:欄位、六項下拉、暫存計數、單一批次 PUT、DB 帶 ns;只改備註按儲存不洗掉缺失。runner 自主把卡片單筆儲存改走批次 API,避免舊單筆 API 把沒送的欄位當清空——首腦認可。/control-defaults/<cid>/attachments GET 已回 200,T-2b 的 BE 端點已接上。0f5cd4554/FE 382930bb。瀏覽器實跑上傳→DB 落地→刪除→實體檔保留;migration 合規;148 測試綠。ssp_id 冗餘欄(範圍檢查與存版複製都以 SSP 為單位);②刪附件只刪列不刪實體檔(跨版共用 file_id,同程序書池慣例);③補 _file_ownership.py 的 provider(沒補則預覽/下載一律 404;讀放行、從檔案端刪拒)。SspControlAttachmentDomainService.clone_by_id_map(src_ssp_id, dst_ssp_id, ir_id_map, statement_id_map, user, ...),稽核凍結不呼叫。d62513d88/FE 7c78f0c8/jedi-oscal-v2 dca8e050(未發版)。端到端只填缺失匯入,現況未洗、104 筆 skipped;套件突變紅。not_implemented/inherited 殘值,不必搬。errors 鍵,原樣送 save 會 422;FE 不會這樣送。後續 runner 用 test client 打匯入時只送 schema 欄位。2f1036083/FE 254ac4ac。實打存版→版本 uid 讀舊版→寫入 409;快照 frozen、筆數一致、revisions 帶 predecessor。SspVersionService.create_version(...)(T-7 還原/T-10 送審在交易內呼叫)、SspSnapshotExtras.build_id_maps/copy(T-7/T-8 在 deep_clone/snapshot 之後補程序書掛載、附件、風險)。07eae5758:DB 直查 460 範本 SSP 控制項 26/AO 10 條帶 gap、「缺口:」殘留 0;test client 打控制項與 AO 端點、訪談表匯出 36 列缺失非空;Playwright 開 CRA.I.2.b 看到現況與缺失分開。token 產法補一條:generate_jwt_token 的 claims callback 要查 user,必須包在 system_context()+session_scope() 裡,否則 RLS fail-closed 回 None。e1354cee:runner 誠實標未跑瀏覽器,首腦補跑兩個預覽流程(資源庫匯入現況資料對話框、SSP 完整匯入預覽)三欄都在、確認框文案是「合併」;驗收後刪 parse job 42 與 upload_files 4893/4894。Playwright 上傳用 setInputFiles 直接餵 input[type=file],別等 filechooser。MODULE_FRAME_409011、刪除 reuse 409003;複製邏輯新檔。盤點第二節兩點屬 T-9,已記進 STATE。b116c451a/8c65cdfb8、FE 6f291f21:實打 429 比對 v1→v2、跨資源庫比對 400、還原預覽;還原到 v1 再還原回 v2,指標與備份版各換一次、附件跟著複製;Playwright 比對頁四態與還原確認框正確。429 多了 v5/v6(首腦往返),不刪。f79685514、FE 4e9cbbf4:runner 無瀏覽器,首腦補跑——存版對話框、版本歷史、唯讀開舊版(提示列、鈕全消失、欄位鎖)、批次維護匯入項灰掉。sorted(titles) 字串排序、無群組層、要求原文空、三欄沒印);上網比對 FedRAMP Rev 5/CMMC L2/NIST 800-18 r2 版面;OSCAL 無多語系機制,用本專案既有 _trans+failover 機制接 catalog。決策者裁:控制項標題也要英文、套件可動、匯入加下拉、CRA 中英整併。_resolve_inscope_catalog 所在檔 959 行超標要抽新檔、/ssp/<uid>/export 已有 locale 參數、兩支 FE view 超標要抽 composable、框架 error code 在 flow_control_error_code、T-8 工作樹有未 commit 改動、整併 migration 新裝要安全跳過)。setInputFiles 餵 input[type=file];PrimeVue 列操作是 icon button 無 name,用 tbody tr >> button 依序點;textarea 的值 innerText 抓不到,以截圖為準。5b96e02c6/FE d04f28c2:DB 核三份複製品與三個專案指向、無新 SSP、資源庫 AO props 未被污染、AO 流程範本零重疊;實打 409 兩條與刪除守門;在資源庫改備註直接落在專案 living SSP;Playwright 走複製對話框再刪複製品。if query is not None and …,與 T-5 匯出「漏接線寧可炸」相反,請 runner 同卡補強不另開卡。GET /ssp/<uid>/control-implementations/<cid> 不回 remarks,記給 T-9。/module-frame/module-frame(不是 /module-frame);列操作是 Button 開 Menu,選單項用 .p-menuitem-text 找。85d2cd7ef:匯出 460 docx/pdf,五群組順序=左樹、40 條 H3 依 sort_order、AO 表帶狀態/現況/缺失、Revision History v1~v5、無 partial 代碼與「缺口:」殘留;規劃頁樹改走抽出的 inscope_catalog_resolver 後專案側 control-tree 不變。system_menus 實查只有英文 value)、修訂表去作者欄。f248d7f41/套件 163d9ba0。runner 推翻卡上「460/459 profile 改指 2112」前提:資源庫 catalog 是深複製品(2138/2137),011 改成連九份 zh 複製品一起「存中文進翻譯表、主表換英文」。首腦 DB 複核無漏網、自跑 dry-run 筆數一致後套 DEV 並登記;重跑 0 列。/ssp/<uid>/control-tree 對資源庫範本 SSP 回 404 是既有行為(範本不綁專案),不是 T-12 弄壞,驗資源庫側要用匯出或專案 SSP。790bb7bce/FE b76e28ad。共用 SSP 寫入守門先判範本(template_ssp_id 直比,含軟刪)再要 oscal.resource-library.update;舊 is_admin 範本守門拿掉。runner 自跑 reviewer、寫 analysis 文件、19 支 living_ssp_id 讀取端盤點全只讀。ssp_source 兩模式正確、blsadmin 兩模式寫入 200、Playwright 1408 唯讀+提示、1404 不變。403 路徑信 runner 實打+9 條測試與突變。ssp_context_resolver 不接(會失去讀取的專案成員檢查);共用路由能力點不放寬。2297e7de9/FE f50e1100。DB 核送審版帶輪次 id、送審快照與凍結是兩份 SSP、附件只進送審快照;實打三個資源庫 412/412/201 與詳情 audit_lock 一致;Playwright 鎖寫提示文字正確。_audit_lock is not None 靜默放行,與 T-8 一併請 runner 補 raise。6b7b42edf/套件 4f0b1fe9/FE 37c81f17。首腦在交易內用 CMMC 195 真實結構實跑:改一個代號→GRC_400148 零寫入;全中文→6/15/59 列、主表不變;rollback。repo.update(entity, locale=…) 寫翻譯」是錯的——jedi_common 翻譯列不存在時會連主表一起改;runner 改用只寫 _trans 的 upsert。首腦寫卡時沒實查這條,記教訓。currentTenant 是使用者自己的租戶(102),平台管理員頁(isPlatformAdmin 要 root 租戶)與 v-can 守的鈕都進不去;要驗這類頁面得走真登入或注入 tenants+currentTenant=1+capability 清單。本卡 FE 留雷門複測。244efaeb0/FE 29119cbe。runner 無 token 走不了 HTTP,首腦補打三語+400+CRA locale 回歸;docx 逐份核三處兩語並列無重複;Playwright 走匯出彈窗下載 _zh.docx。lang 與 locale 分開(CRA 路徑零改動);狀態中文進 .po 而非程式對照表;FE 用彈窗取代下拉(選單內放不下)。workflow_templates 找,實際在 compliance.flow_templates,status 欄在那張表)。framework_version_edit_service._flatten → jedi_common get_all_by_fields 帶 locale 走 failover 對 CatalogGroupQueryEntity.to_dict(),三個 catalog query entity 都沒有。runner 套件 52c2a53d 補 to_dict+真 entity 測試;首腦實打四組 200、回歸掃四條 200。compliance.flow_templates 才有 status,不是 workflow_templates。module_frame_audit_lock._latest_round_of 用 get_by_living_ssp_id 找專案沒排除 deleted_at,軟刪專案的輪次仍鎖。T-8 的刪除守門只看活專案是對的,被 T-10 鎖寫蓋過。ResourceLibraryCopyDialog.vue 只有複製鈕掛 loading。退 T-8 runner 純 FE 修,順帶把兩處守門 raise 一起做。ever_bound/has_live_project 兩旗標+FE 三處反灰與 tooltip。併進 T-8 回歸段一起修。06bef3850:軟刪專案不再鎖資源庫。runner commit 留本機未 push,首腦代 push。決策者畫面複測通過,免首腦重打。_audit_lock raise 補強併進 T-8 那輪。_audit_lock 跳過未改,收口統一。5697c176:新模式規劃頁與檢視舊版頁唯讀改文字(標籤+段落+清單),兩支超標頁變短。runner 回寫在首腦 append 追加項之前,「輪次頁不掛提示列」沒做,退回補。f8a5f1dd(決策者複測回饋:規劃頁要看得到備註/缺失/缺失修改建議/建議附件)首腦用 469/1497 Playwright 核過:控制項與 AO 兩層六項全文字顯示、附件只列清單、零寫入。輪次規劃頁提示列仍未拆,卡維持 In progress;FE 工作樹另有 runner 未 commit 的版面整理,首腦不碰。aa64e4c9(T-18):決策者在 runner 視窗裁「本輪流程走完時自動分類鈕整顆不顯示」,runner 已做。T-18 仍修正待驗證。_version_as_module_frame 與 ssp_versions 結構確認屬實,不是哪棒做錯。建議另開卡(JSONB 存六欄、檢視換值、compare 加頁籤、還原不動、舊版灰字),待裁。.env 的 Fernet 鍵要載進來(shell 先 export 過空值會蓋掉 load_dotenv),否則 create_app 在 DI 初始化就炸;SSP 控制項路由掛在 /api/1.0/ssp/...,沒有 /oscal 前綴。35d81f77(T-16 第三版,決策者三點:大框可收合、狀態不重複、不要帶框帶底的提示卡)首腦 1497 實看過:平鋪段落、標題列只一個狀態標籤、附件併在建議底下。輪次頁提示列仍未拆,卡維持 In progress。9129fd196(同輪 AO 任務清單、只套待辦、保留目標自己的任務)、FE 68805f78(流程編輯器存檔後才可按「套用到其他任務」、勾選樹、全選紅色二次確認;入口放編輯器不放超標的規劃頁)。首腦尚未核。5697c176 唯讀改文字 → f8a5f1dd 六欄補齊 → 35d81f77 可收合/狀態不重複/去提示卡 → 12f5aaea 條列懸掛縮排+補充欄位兩欄表。ea554468)+宿主 52029d477。首腦實打 1321 第 1 輪三個寫入點全 412、第 2 輪放行,探針資料原路清掉。套件未發版、path dependency 未 commit,進收口清單(jedi 發版從一支變四支)。62be9edc4(任務指派先選部門),決策者在 runner 視窗直裁,首腦只登記不質疑。inscope_catalog_resolver,兩支 Excel writer 各自 sorted()。T-20 把兩邊接到同一份、排序抽新檔。不加群組列(會改匯入契約)。6a0fdc4d2/FE 49461344,migration 已套 DEV、基線待重產清單多一支。backup_before_import;控制項現況 Excel 與 docx 兩條沒接。DEV 全庫 import-backup 僅 1 筆。T-5 LOG 早記「路徑 B 要等 T-8 改指向後才走得到」,T-8 後無人回頭——「等 X 之後再接」這種待辦要在 X 的卡上掛尾註,不能只留在 LOG。5be32fc9ajob_export_query.py NameError:T-12 把 locale = resolve_locale() 放進 resolve_project_uid,用到的 get_export_data 沒定義。一行搬家,守衛綠,重打 200。locale=locale 所在方法有沒有定義)。ssp_import_template_app_service 從 profile tree 組列),決策者下載樣板抓到。不另開卡:T-24 收斂後該分頁走 T-20 修好的那支,順序自然對。06bef3850、T-12 任務匯出 NameError 5be32fc9a)。32d0316a2)待決策者驗;T-24 runner 進行中。收完兩張進母卡收口,收口另開 session。32d0316a2 標頭與內文同規則。26/27,只剩 T-24。POST /ssp/<uuid>/excel-import/upload 上傳,那條強制 source_type=ssp,confirm 不替資源庫存備份版;資源庫頁走通用 /ssp-excel-imports/parse 帶 source_type=module_frame 才會。驗 T-21 類「資源庫側」行為要用資源庫入口,不要拿 SSP 範圍入口頂。SheetPreviewControls.vue」會砍功能(納入 Profile/配對/移除),只補欄不換元件;首腦認可,另列待裁。PrepJobGenerationService 長任務、啟動改認領不複製;必修缺口兩個——啟動展開只認第一個 userTask、覆核輪重長任務會洗掉名稱/描述/指南且只配一筆;守門要加資源庫編輯權分流;既有資源庫與範圍變更要「同步任務骨架」只補不刪;複製資源庫連任務帶走。d4427e319(守門 raise+T-21 紅測試補注入)、fc136b50a(匯入預覽共用比對修共用信箱配錯人與資產底線欄位,版本比對側刪重複繞路)。70 處 locale 逐支核全有定義,端點實打表 20 餘條全 200。62be9edc4 核過無改動。workflow_execution_service.start_workflow_execution 全專案無呼叫者、module_frame_import_service(YAML)前端沒用、module_frame_item 新增子項回 500(子範本沒帶租戶被 RLS 擋、方法無 transaction)前端只用 /item/xml——C-3 reviewer 看要不要下架。a51072ec1——T-21 接在規劃頁那條、T-22 又把那顆鈕拿掉,顧問實際用的路徑從沒備份過;批次存清空備註寫 None 被 repo 略過 188668b9f;三支超標檔拆 de4de7503/43f8ece80;GRC_400150 FE i18n 01fb4acd;docx 匯入紅測試 ee3680bb0),1 條套件 pin 歸 C-2。/file/upload 的 json 要當檔案 part 帶 upload_type=REFERENCE_DOCUMENT→verify→import,items 要去掉 errors 鍵),直接丟 multipart 到 import 會當零筆成功。ModuleFrame.vue 超標淨增 33 行要不要這次拆⑤兩張新表 RLS 一條 FOR ALL 認不認可(認可就改判準文字)。建議這次就修的小項 4 條(可併一張小卡):套用到其他任務的 FE 按鈕權限與 BE 不一致會 403、部門載入失敗清掉已選指派、框架匯入語言必填沒檢查、三處註解帶卡號。記錄不修 13 條:清最後一個值存不進(arc 前既有、共用 helper)、套用單目標錯記跳過整批照存、變動比對失敗只 log、三套件守門選填無測試鎖、DI 檔越線、app 層 new query 七處、resolve_current_ssp 壞掉被繞、AO 驗證三份、長函式變長、備份四份同段、型別設計七點、design 版本來源字眼(C-5 改 spec)。ModuleFrame.vue 同為阻斷卻沒拆,理由是「要手測」——前端拆檔要有 Playwright 可跑的手測清單才派得動,開卡時要先給。ModuleFrame.vue 不拆、RLS FOR ALL 認可。決策者對「未評估」問「不是 OSCAL 標準可以加嗎」——答案在 D20:產品擴充值、DEV 既有 2,133 筆、匯出轉標準值;設計裁過的事決策者會忘,回答時指回 D 編號並附資料筆數。開 C-6 CM-2798 收七件修正,排第二波,C-2 發版等它。test_permission_matrix_three_way 1 紅變 2 紅,另 test/security 有 survey 兩條 GET 未登記。runner 正確地沒 commit(工作樹混 C-6/FR-140 未 commit 改動)。4b8384495/fe986245b 2026-10-07~08 FR-132 時代,非本 arc,follow-up;B 四個寫入觸發點沒掛 v-can——T-2b/T-7/T-8 新元件,本 FR 漏掛,併 C-6;survey 兩條 GET——FR-069 CM-1482 搬套件殘留,非本 arc,follow-up。git stash+pop,首腦核工作樹與 stash 清單沒丟東西。派 sonnet 跑機械卡仍要在 prompt 寫「禁 stash」。cbe0211d4/FE b2792a58。首腦用 CMMC 資源庫 437 植入附件+缺失+備註後,把它自己的 docx 匯入確認:三樣都在、import-backup v1 出現。framework=cmmc-l1+mode=statement_only,CRA 無 docx adapter,469 不能當 docx 驗收資料;③ SSP 的 JSON/YAML 匯出已退役,C-6 ③ 的匯出轉值只有單元測試可證,無 live route。79f625eaf:矩陣與路由清單重產、守衛登記頁頭選單;守衛 7 過 1 紅(A 組 FR-132 遺留)。基線重產三支清單進 STATE,188 等決策者排。GRC_403069/ssp_source 鏡像順延到 FR-140 發版。兩個 FR 共用一支套件時,發版歸後動的那個 arc。d66fb255 bump oscal-v2 2.6.0/survey 1.2.5/evidence-classification 1.6.7 推 Nexus;BE 5354198bf 還原三支 pin、指定套件名 poetry update。首腦核:site-packages 無 editable、lock source 為 nexus、poetry 快取 nexus 目錄有三個 wheel、Nexus simple 頁最新版相符;CRA 207 catalog-tree zh/en 翻譯表讀取正確。~/Library/Application Support/pypoetry/auth.toml 的 http-basic.nexus 帶 Basic 打 simple 頁,或看 poetry 快取 cache/repositories/nexus 與 lock 的 source。0ae4ceda0:九頁 spec、RLS 判準三處、新手冊 resource-library-interview-guide.md、FR 站與 spec 站重 build;Notion 母卡與三張子需求 Done。首腦核 mkdocs strict exit 0、沿革字眼零命中。