append-only:每棒收工追加一個 block,既有 block 永不改。發現舊 block 有誤,在新 block「推翻了什麼」欄更正。現況看
FR-162-STATE.md。
做了什麼
oscal_control_mapping 已退役且無業務呼叫點;source_identifier 是同框架跨版本代號;OSCAL 1.2.2 mapping-collection 的 mapping-item.type 可指 part,AO 層合規。catalog_service.py:90 預設 oscal_version="1.1.2",DEV 53 筆錯標 → 開 CM-3059。commits(BE feature/FR-139,未 push):c26eb5a6b 4042d936c 8ce3a4d5a 939f329dd 6c2793322 435d1b9da 86c6cb09a 3e9152e16 df4505b38 c42d0f6a7 d96ea1043 c73bf133c d39d17774 54c43b443 a9d2f7eca 5e438892a
關鍵決策(決策者裁):對照進套件;鍵用控制項代號;跨專案沿用不做一專案多框架;AI 兩模式(控制項層初配+AO 配對)+規則回填關係;專案層一鍵批次為主;定名「證據沿用/reuse」;工作台矩陣視圖、主軸凍結、參考框架隱藏;常駐入口按鈕;二級來源標 curated;「先出一版」。
推翻了什麼
教訓
未驗證假設(交給下一棒驗收時對照):1a 是否做批次 resolve_many;OSA iec-62443.json 代號是否對得上 SunSquare;AI 配對準確率。
派出/收回:批 1(CM-3058、CM-3059)由決策者在工作坊派出;本棒無收回。
做了什麼
驗收通過待確認),CM-3072/3073 暫緩;本棒「驗收批 1」任務已過時,改做規格補強與新一輪開卡。gen_notion_cards_r9.py/patch_workshop_fields_r9.py。commits(BE feature/FR-139):78187f451(圖 3)、5ab551010(DEV 實灌表、網址、origin 四值)、本次開卡 commit。
關鍵發現(已核對)
ControlMappingSidePanel.vue 對 hops>1 一律唯讀,BE override/disable 只作用最後一跳邊。解法不是改中繼邊,是在主軸↔︎目標建 curated 直連(解析規則 6「hops 最少優先」會蓋過多跳;not-related-to 當刪除)。catalog_controls.sort_order 是群組內序號(ISO 93 條只 37 個相異值),套件 get_by_catalog 全表 ORDER BY sort_order 讓群組首條交錯;get_by_catalog 有 7 個呼叫者,改在主專案 mapping_common._load_catalog 讀取端排序,不動套件。AXIS_REM=24/COL_REM=18 寫死+fit-content;全螢幕先例 FilePreviewDialog.vue 的 maximizable。推翻了什麼
curated,與套件 024 之後的實作(third-party)不符,本棒對齊;design.md D5、DDL、不做段同步。教訓
control-mapping.json 與 ControlMappingMatrixTable.vue,拆成批 15/16。未驗證假設:9a 用直連 curated 列蓋多跳的做法,解析器規則 6 在「同目標、直連 1 跳 vs 多跳」的確取直連(讀碼推斷,runner 寫測試驗);9d 全螢幕 Dialog 疊 Sidebar 的 z-index 要實測。
第 10 輪(同日續):決策者審側面板退回。討論:容器三案(對話框/下方詳情區/寬抽屜)→ 決策者裁對話框,首腦原推下方詳情區的「不用一直開關」理由被駁(常駐面板一樣要開關);狀態文案三輪(部分重疊→符合/部分符合→通用/部分可用),決策者定「通用/部分可用」,「不可用」不是顯示狀態;內容七塊。開 CM-3078(10a BE)/3079(10b FE),9c append 縮範圍。commits bafc108b9、f8f786aca。
教訓(第 10 輪)
第 11 輪(同日續):決策者實測規劃頁沿用對話框退回四點。首腦探脈抓到真 bug:來源範圍「同租戶」把另一組織單位的鼎盛專案列進來(使用者列表看不到卻能拉它的證據),屬跨組織單位資料外洩,也解釋 CM-3072 那次 3,599 筆爆量;封存專案也沒排除。定案(design D9/D10/D11 改判):入口「證據作業」下拉;比照自動分類做獨立三頁;一來源一份設定不做批次、每次調整留唯讀紀錄;可見性照 _visible_project_ids。開 CM-3080(11a BE,資安優先)/3081(11b FE 入口)/3082(11c FE 三頁)。CM-3072/3073 決策者在工作坊跳過。commits e5ae16fe2、本次。
教訓(第 11 輪)
第 12 輪(同日續):決策者問重複證據。查明三種情境(同任務同檔已有唯一索引擋;同檔多 AO 是關聯模型本身,254 檔最多掛 56 任務;同內容不同檔要靠 sha256 但 96% 空、全專案無上傳路徑在算,MinIO adapter 只算 md5)。定案不硬擋、看得見+地基補 hash;決策者同意動套件 jedi-file-upload。開 CM-3097(12a 套件+BE 回填,批 22)/3098(12b BE 加欄+FE Tag 與上傳提示,批 23)。
推翻了什麼(第 12 輪)
第二道檢查(第 9~11 輪,決策者定雙重驗證):九張卡的「首腦復核」段都在且有打折處;六支新路由實打 401(存在);四支新測試檔 43 條綠;origin 四值分佈正常;事件碼已登記;FE 側面板與規劃頁沿用元件已刪、無「間接」、無粗左框、沿用頁無 SSP。抓到三件工作坊首腦沒標的:①守衛 test_module_boundaries 1 支紅是 FR-162 自己的(套件 resolution service domain→infra import,CM-3058 起就在,歷棒都寫「開工前就紅」);②ISO 專案 3,741 筆有效 REUSED 列(19:54 blsadmin 寫),比 3072 清掉的還多,來源未查;③共用 8000 跑 18:18 舊程式,工作坊首腦是另起 8034 驗的——決策者要邊測,本棒已重啟 8000。
頁面改名:決策者「框架對照這個名稱好爛」→ 候選後定「控制項關聯管理」(「管理」把可編輯講出來)。FE i18n 13 處+BE seed migration 改 ui_routes/能力點描述,已套 DEV。commits FE 431b1ffc、BE 3ada4f2ed。
本棒 commits(BE feature/FR-139,未 push):78187f451 5ab551010 49e2cebc9 bafc108b9 f8f786aca 7a862cdea e5ae16fe2 d7b4b4948 be3aecf35 98dd936ea 86c733d6f 3ada4f2ed;FE 431b1ffc。
教訓(收尾補)
派出/收回:第 9~11 輪九張由決策者在工作坊派,全部驗收通過待確認(工作坊首腦驗、本棒二檢);第 12 輪 CM-3097 In progress(runner 在套件主線直接改)、CM-3098 待派;本棒無收回。
做了什麼
AOPickerDialog 改左右兩欄(雛形四方案中決策者選 D),三處共用。SegmentButtons(照待辦任務頁、small),修好 FE v-can-guards 守衛紅(CM-3076 起就紅)。commits:BE 6aa56172b 42265a3cf 108d27e87 c3be5af8f 333ba9da0 ff82e549b 053ff6884;套件 1ef1403b;FE f68c143a 起至 5a9499a3(約 27 個,git log --grep=FR-162 可列)。都未 push。
關鍵決策(決策者裁):只能同層對;控制項層有、評估目標層沒細分=全部評估目標適用,顯示不寫資料;人工新增一律通用、信心 1;重建=還原出廠設定;分段按鈕統一。全部已寫進 STATE §2。
推翻了什麼
教訓
feedback_list_page_filter_baseline_my_tasks)、導航樹(feedback_fe_nav_tree_rewritten_per_page_reuse_first)兩條記憶都早寫了,我還是自刻 .cm-seg/.ao-seg 與第 8 棵樹,被決策者連續點名「到底為什麼」「這頁到底自己刻了多少東西」。ISO27001-A5,決策者「那做雛形幹嘛」。_obj.3,拿數字當字母會標錯;字母只能從文字取。未驗證假設:所有 FE 改動沒有實際登入看過(本機無可用 auth-state);「專案規劃進不去」原因未明,可能來自同日 FR-164 對總覽頁的大改。
派出/收回:本棒無派工、無開卡;CM-3097/3098 已由工作坊首腦驗收通過待確認並合回,本棒未做第二道檢查(決策者改要直接改頁面)。
做了什麼
修正待驗證):根因在套件解析器——排除判定只比同一節點或控制項層排除,評估目標層的不可用擋不住多跳的控制項層退路,前一棒只好寫跨層排除列。套件 _is_excluded 加一條(排除了某控制項任一評估目標,該控制項的控制項層命中就不成立);BE add_entry 一處把關:評估目標→控制項的直連展開成逐條評估目標,其他跨層 400 GRC_400189;FE clearCell 評估目標列改送同層。DEV 那 12 筆跨層列停用。這一修同時蓋掉詳情對話框確認/改狀態/標不可用的同一個洞。scope=this|project、沿用刪了寫 NOT_APPLICABLE(新 migration)、沿用候選排除、調整頁標 dismissed、下游標「來源已移除」。FE 新 JobEvidenceDeleteDialog.vue,抽屜原確認段移進去;五處沿用標籤帶 removed。commits:套件 c792aa47;BE 25ba155c3(已被決策者 push)97cc679c1;FE cdbcb1d0 92b005b5。後三支未 push。
關鍵決策(決策者裁):照同層逐條寫、不開例外;刪除只動本專案;沿用刪了=本專案不適用、調整頁可加回;沿用是關聯不複製,來源刪除下游照常;job_evidences 不開 RLS。全部已寫進 STATE §2 與 design.md。
推翻了什麼
USER_DELETED 當「不適用」不動 schema,DEV 實查當前輪有 3,738 筆歷史清理也是 USER_DELETED,會讓整輪沿用建議消失,改成新原因值 NOT_APPLICABLE。job_evidences 開 RLS 補強,決策者提醒影響面;查到背景/系統脈絡路徑十幾處,收回。upload_files 引用計數既有機制確保來源刪檔不影響」,實際沒有引用計數,是外鍵+軟刪;已改寫。教訓
scripts/notion_create_case.py:agent-workshop 那支預設寫進工作坊自己的任務清單(Case No #65、專案 Agent Workshop),母卡關聯也掛不上;而且預設 Not started 會被工作坊派走。本 repo 那支能在建立時帶 status,首腦直修的卡直接建成 修正待驗證。json.dump 會把整檔重排(2 格縮排變 4 格,578 行 diff);要用文字插入保留原格式。BaseService 是具名匯出、API 是預設匯出,寫反 build 直接紅。未驗證假設:所有畫面沒有實際登入看過;刪除與沿用排除只用行程內 dry-run(整段回滾)驗過資料層行為,HTTP 只驗到路由註冊(未登入回 401)。
派出/收回:本棒無派工;開 CM-3100 一張(首腦直修,直接建成 修正待驗證)。
追加(13:55,決策者令直接修):誤建的 #65 卡移到 Notion 垃圾桶。修資安小縫 e55dd46b3:檔案下載的證據認領改成只認未刪的證據列(原本用通用查詢、已刪列也放行),補測試並做突變驗證(退回舊寫法 5 紅);DEV 108 份只剩已刪證據的檔從此下載不到,查過沒有畫面或判定引用依賴它們。
追加(14:30,決策者令 push+全部發版):BE/FE 在我 push 前已由決策者推過,本棒 commit 全在遠端。套件四支 bump(oscal-v2 2.9.0、file-upload 1.3.8、compliance-audit 1.4.1、task-platform 1.4.1)commit 7e475c86 並 push;先試發 file-upload 驗認證,再發其餘三支,每支只推當版號的兩個檔(dist/ 有舊版殘留,用 --dist-dir 隔離,避免重推舊版被 Nexus 拒絕);開包核對 oscal-v2 含 021~026 與解析器修正、compliance-audit 含 005。BE 9a996fd1d 還原 path、pin 對齊、poetry update 只點名四支;venv 四支無 editable,BE 用正式版重啟無錯。compliance-audit 1.4.1(FR-161.3)與 task-platform 1.4.1(FR-155)不是本 arc 的改動,因宿主早已依賴、且決策者令全部發,一併發。
追加(15:30,決策者令收尾:「測過了,四項文件全部寫掉」):規格三頁(控制項關聯管理、證據沿用 hub、沿用調整頁)b186d3618,順手重產 db_schema.json(原檔停在 07-04、沒有 FR-162 的表);使用手冊「跨框架對照與證據沿用使用指南」並掛技術支援站 04073fd75;決策分析 2026-10-26-fr162-same-level-mapping-and-evidence-delete-semantics.md;SUMMARY 2026-10-26-FR-162-SUMMARY.md。教訓:SVG wireframe 裡的錨點不會被 fix_anchor_ids.py 補 id,要從 build 出的 HTML 反查實際 id;json.dump 改 i18n 會整檔重排(本棒前段已記)。
追加(16:10,決策者令 Notion 全部 Done):母卡 CM-3057 與 28 張子卡改 Done,以 GuidantAI 任務清單「母卡=CM-3057」查詢複核 28/28。陷阱:母卡頁面的「子卡」反向欄位只列 25 張,漏了 CM-3097/3098/3100(後建、或建好後才 PATCH 母卡的),一定要用子卡的「母卡」欄位反查;agent-workshop 的 notion_case.py 的 DATASOURCE_ID 是工作坊清單,用它查 GuidantAI 卡會回 0。出貨基線決策者定發版前做。