這份是 living 檔:每棒就地 Edit,只描述「此刻」。歷史脈絡看同資料夾的
FR-162-LOG.md。
| 項目 | 值 |
|---|---|
| 最後更新 | 2026-10-26 15:30(第 4 棒收尾:決策者手測通過,規格/手冊/analysis/SUMMARY 已寫,見 2026-10-26-FR-162-SUMMARY.md) |
| branch | BE、FE、jedi-python-package 皆 feature/FR-139(三 repo 同名 branch,不切) |
| 母案卡 | CM-3057 https://app.notion.com/p/FR-162-403346da4cd0810e9b5ff4fd980ff091 |
| 子卡 | 母卡關聯 26 張:23 張 驗收通過待確認、CM-3072/3073 Done(決策者跳過)、CM-3100 修正待驗證(第 4 棒跨層清空)。證據刪除行為(FR-162.14)首腦直改、沒開卡,紀錄在 commit 與 LOG。CM-3097/3098 不在母卡關聯裡,也不在預設任務清單查得到 |
| 本棒角色 | 首腦。決策者第 3、4 棒都明令直接改,首腦在 feature/FR-139 改 FE/BE/套件。下一棒:等決策者手測 CM-3100 與刪除行為,回饋照改 |
| Notion 回寫規範 | docs/claude/notion-issue-tracker.md;首腦驗收段格式見 closing-and-handoff skill「首腦驗收側紀律」 |
| 接手前必讀 | §0 讀序 |
這節寫一次,之後各棒不動。
reuse/REUSED),與覆核輪「承襲」區分;④ 工作台原為一對一配對 → 決策者指出 5 框架 10 對、10 框架 45 對會爆,改矩陣視圖(主軸 × 並排欄、主軸欄凍結、右側橫向捲);⑤ 橫幅/提示列關掉後無入口 → 規劃頁與任務 drawer 都加常駐按鈕。jedi-oscal-v2 兩表(對齊 OSCAL 1.2.2 mapping-collection,不塞 catalog),鍵用控制項代號與 AO part_id,雙粒度,官方層/覆寫層分開(origin official/curated/ai-suggested)。證據沿用=新開一筆 job_evidences 同 file_id(關聯不複製)。第一版「其他專案」範圍=同租戶。cra.json(→800-53)、SEMI 靠 SunSquare 表 2(→62443)二級來源,灌入標 curated;官方全不給關係型別。../design.md 全讀(D1~D11、矩陣工作台段、證據沿用段、拆分表);雛形 ../prototype/index.html 三頁點一遍docs/analysis/2026-10-24-cross-framework-control-mapping.md §一~§四、docs/analysis/2026-10-24-mapping-sources-for-frameworks-without-official-crosswalk.md(來源三級分級)FR-162-LOG.md 最後 1 個 block00_Compliance Manager/07_稽核法規文件/Mapping/job_evidences?git(三 repo 皆 feature/FR-139):全部已 push(BE 最後 9a996fd1d、FE 92b005b5、套件 7e475c86)。BE working tree 別人的改動照舊不碰(一支 memory、docs/spec-site/site/search/search_index.json、FR-155/156/163 的 html、docs/website/support/)。
服務:BE 8000 是 10-26 13:25 重啟的,晚於本棒最後一個 BE commit,已載入新的解析規則與刪除端點。FE 5180 Vite 熱更新。 套件已發版(2026-10-26):jedi-oscal-v2 2.9.0、jedi-file-upload 1.3.8、jedi-compliance-audit 1.4.1、jedi-task-platform 1.4.1 都在 Nexus;BE pin 已對齊、path 已還原,venv 四支都是正式版(無 editable)。BE 8000 用正式版重啟過。
Notion:母卡 CM-3057 與 28 張子卡(CM-3058~3082、3097、3098、3100)全部 Done(決策者 2026-10-26 令)。誤建在工作坊任務清單的 #65 已移到垃圾桶。
DEV:
2026-10-26-fr162-job-evidences-not-applicable.sql(已套 DEV 並登記)。REUSED 列 7;軟刪 REUSED 3,745 筆全是 USER_DELETED(歷史清理),NOT_APPLICABLE 0 筆。upload_files sha256 空 2,619/4,888(照舊)。守衛:BE test/test_module_boundaries.py 3 紅照舊。FE vitest 157 綠 1 紅照舊(zh-tw-no-bare-oscal-abbr,5 筆都在其他檔)。
| 裁示 | 何時 |
|---|---|
D1 對照表進 jedi-oscal-v2(「這應該是套件功能」) |
2026-10-24 |
D2 鍵用控制項代號(control_id)+ AO part_id,不綁數字 id |
2026-10-24 |
| D4 證據重用走跨專案沿用,不做一專案多框架 | 2026-10-24 |
| D8 AO 層要由系統分析(AI 兩模式:控制項層初配+AO 配對);CRA/SEMI 先灌二級來源再 AI 補洞 | 2026-10-24 |
| D9 專案層一鍵批次為主、單筆為輔(「一筆一筆勾很蠢」);定名「證據沿用」 | 2026-10-24 |
| D10 三個提醒點+常駐入口按鈕(規劃頁、任務 drawer),橫幅/提示列只是提醒 | 2026-10-24 |
| 工作台=矩陣視圖,主軸欄凍結、右側橫向捲,參考框架預設隱藏 | 2026-10-24 |
| 點膠囊開置中對話框(捨棄抽屜;下方詳情區/寬抽屜同屬常駐面板一樣要開關,理由不成立) | 2026-10-25 |
| 畫面狀態只顯示「通用/部分可用」兩種,「不可用」只當動作名;術語留 DB/匯出 | 2026-10-25 |
| 膠囊不標「間接」,轉乘路徑只在對話框「路徑」段 | 2026-10-25 |
| 信心分數:第三方/AI/顧問顯示,官方不顯示(不顯示「未給」) | 2026-10-25 |
| 沿用入口=專案總覽「證據作業」下拉(AI 自動分類/雲端資料夾/沿用其他專案);規劃頁按鈕與橫幅移除 | 2026-10-25 |
| 沿用=一個來源專案一份設定,隨時調整、可全部取消、每次留唯讀紀錄;不做批次、不做復原某一次(CM-3072/3073 跳過) | 2026-10-25 |
| 來源範圍=使用者可見的專案(owner/參與者/admin),排除封存;「同租戶」改判(跨組織單位外洩) | 2026-10-25 |
| 選來源要看得到授權邊界,畫面不標「SSP」;按鈕文案「選擇來源專案」 | 2026-10-25 |
| 調整頁三欄可拖;左欄照規劃頁三層導航(搜尋、全部展開/收合)、預設篩選「有對應的」、排序照目錄 | 2026-10-25 |
| 重複證據不硬擋:同檔多 AO 畫面標「也掛在 N 處」、上傳同內容提示;地基是上傳統一算 sha256(套件 jedi-file-upload 可動)+回填 | 2026-10-25 |
二級來源(OSA、SunSquare)灌入標 curated 不標 official,報告如實標來源 |
2026-10-24 |
| 「先出一版來看看」,雛形審過 | 2026-10-24 |
| 頁面改名「控制項關聯管理」 | 2026-10-25 |
| 對照只能同層:控制項對控制項、評估目標對評估目標;拖曳只能同層、放下就是「搬」(無複製) | 2026-10-25 |
| 控制項層有對應、評估目標層沒細分=目標控制項全部評估目標都適用(與證據沿用同規則);評估目標列直接把它們全部列出(虛線膠囊),只顯示不寫資料;使用者刪或搬其中一顆時才把整組寫成逐條 curated | 2026-10-25 |
已細分到某目標控制項部分評估目標的列,該控制項的控制項層命中不再算「全部適用」(矩陣與沿用同規則,共用 refined_targets) |
2026-10-26 |
| 人工新增一律「通用」、信心 1,不讓使用者填 | 2026-10-25 |
| 「重建」改「還原出廠設定」=主軸 × 一欄只留官方與第三方,顧問與 AI 列停用不刪(清掉覆寫指向讓官方列回來);「以檔案取代」拿掉(就是匯入) | 2026-10-25 |
「產生 AI 建議」對所有人隱藏(含超級管理員);OSCAL 匯入匯出隱藏;都是 controlMappingUtil.js 的開關 |
2026-10-25 |
| 每格可「清空」;膠囊可 ×;格尾+與清空靠右 | 2026-10-25 |
| 關聯表 Excel:匯出主軸對全部框架(選單文字「下載當前主軸框架設定」)、給人看的版面、匯出再匯入零變動 | 2026-10-26 |
| 工具列兩列(上:搜尋/篩選/排序;下:展開/欄寬/全螢幕 | 批次作業/維護);欄寬「自動符合/平均分配」 | 2026-10-26 |
新增對應/加入評估項目共用同一個挑選器 AOPickerDialog,左右兩欄(方案 D):左群組→控制項、右勾選、底列已勾 |
2026-10-26 |
分段按鈕一律 SegmentButtons(照待辦任務頁、size small),不自刻、不用 SelectButton |
2026-10-26 |
沿用提示從按鈕列移到總覽流程列下方(EvidenceReuseHint) |
2026-10-26 |
| 「清空這格」在評估目標列照同層逐條寫,不開「評估目標→控制項」例外;套件解析器改判(評估目標層排除也擋控制項層退路)放行 | 2026-10-26 |
| 證據刪除只動當下,不連帶其他專案;同專案多處掛同一份檔讓使用者選「只這一處/本專案全部」 | 2026-10-26 |
| 沿用來的證據刪了=本專案此處不適用,沿用建議不再帶回;調整頁看得到、勾得回 | 2026-10-26 |
| 沿用是關聯不是複製;來源被刪下游照常可用,只標「來源已移除」 | 2026-10-26 |
job_evidences 不開 RLS(背景與系統脈絡路徑太多,收益小) |
2026-10-26 |
| 沿用頁:控制項層對應與評估目標層一視同仁,「通用」就預設勾;按鈕改「一鍵勾選通用對應(N)」,N=0 停用 | 2026-10-26 |
1. 已收尾(2026-10-26):決策者手測通過;規格三頁、使用手冊、決策分析、SUMMARY 已寫並 commit。剩下的是下方待裁與 Notion 卡片收 Done(決策者的事)。
待決策者裁(問之前先查卡與 LOG):
SegmentButtons(另案)。POST /oscal/control-mappings/rebuild 端點還在(畫面已無入口),要不要刪。control_mapping_resolution_service.py domain→infra import 要不要開小卡修。phase=active migration(CM-3061、CM-3062、AI 能力點、本棒 not-applicable)+套件 026 要進下一包基線——決策者 2026-10-26 定發版前做。⚠️ 這節是建議清單,不是執行授權。接手方讀完盤點完即停,等決策者發令。
resolve;矩陣端點(2a)需要 resolve_many。推測 1a 不會自己加,驗收時確認。remarks='clause' 存著。Clauses 建模屬 ISO 導入設計待拍板。Mapping/,連結在 analysis §四)> ISAGCA↔︎CSF 再接 NIST CSF↔︎800-53 xlsx > OSA 社群。CM-3060 卡尾已寫優先序;1b 回寫會說實際用哪個。_obj.N 是我們依匯入順序編的:框架重匯順序變會對錯,mapping 綁框架版本可隔離,但同版本重匯要留意。sort_order 的事,不是程式錯(11a 復核已標);真要調改 CRA 框架資料(cra-framework skill 範圍)。POST /oscal/control-mappings/entries/expand 把整組寫成逐條。新增任何會寫評估目標層的入口都要照做。標不可用、清空不用:評估目標層的排除本身就擋得住控制項層退路,後端也會把評估目標→控制項的直連展開。NOT_APPLICABLE:調整頁拿掉、全部取消、歷史清理都寫 USER_DELETED,別拿它判不適用,否則整輪沿用建議會一起消失。新增任何「從任務移除沿用證據」的入口,原因值要寫 NOT_APPLICABLE。_obj.N:ISO A.5.1 的 [a] 是 _obj.3;字母只能從評估目標文字開頭的 [x] 取。AOPickerDialog 三處共用(控制項關聯管理、證據沿用、AI 自動分類),改它要三處一起看;ControlMappingEntryDialog 只是轉資料格式的包裝。cd ~/Projects/Billows/Audit-Manager/compliance-manager-be
git branch --show-current && git log --oneline -3 && git status --short | grep -v '^??' # 別人的改動在,不碰
git -C ~/Projects/Billows/Audit-Manager/compliance-manager-fe log --oneline -2
git -C ~/Projects/Jedicogy/module/jedi-python-package status --short
# Notion 實況(不要信本檔快照)——撈母卡全部子卡 Stage/狀態
python3 - <<'PY'
import sys; sys.path.insert(0,"/Users/chouraymond/Projects/Jedicogy/agent-workshop/scripts"); import notion_case as nc
pg=nc.notion_request("GET","/pages/403346da-4cd0-810e-9b5f-f4fd980ff091")
for r in pg["properties"]["子卡"]["relation"]:
k=nc.notion_request("GET",f"/pages/{r['id']}")["properties"]; print(k["Stage"]["number"], "CM-%s"%k["Case No"]["unique_id"]["number"], (k["狀態"]["status"] or {}).get("name"))
PY
# DEV(密碼在 .env DB_PASSWORD)
psql -h localhost -p 5432 -U cmmgr -d guidant_ai_dev -c "select count(*) from oscal.control_mapping_entries where status='active' and source_level<>target_level;" -c "select origin, count(*) from oscal.control_mapping_entries where status='active' group by 1;"
# BE venv 的 jedi-file-upload 應是 editable(套件原始碼);不是的話 BE 會起不來
.venv/bin/pip show jedi-file-upload | grep -i editable
# 8000 跑的是不是最新:比對進程啟動時間與最後合回 commit 時間
ps -o lstart= -p $(lsof -nP -iTCP:8000 -sTCP:LISTEN -t | head -1); git log -1 --format=%cilocalhost:5432 guidant_ai_dev,帳號 cmmgr,密碼查 .env 的 DB_PASSWORD。只動 DEV。~/Projects/Jedicogy/module/jedi-python-package/jedi-oscal-v2/(2.8.0,未發版);BE 走 path dependency 時 pyproject.toml 第 139 行取消註解、第 85 行 pin 註解,不 commit 那段。psql --single-transaction -v ON_ERROR_STOP=1 -f <檔> 後手動 INSERT public.schema_migrations(filename, note) 登記 packages/jedi_oscal_v2/<檔名>。00_Compliance Manager/07_稽核法規文件/Mapping/(OLIR xlsx、CSF xlsx、ENISA pdf、OSA json、EUCC 附錄、SMCC 白皮書、METI 指引、SunSquare 三圖);800-171↔︎800-53 表格版在 BE common/util/input/NIST_800-53_to_800-171.xlsx。docs/features/FR-162-2610-cross-framework-control-mapping/prototype/index.html(雙擊可開;定案版是 mapping-side-panel.html、project-reuse-page.html、picker-and-toolbar.html——最後這頁是第 3 棒的挑選器四方案比較+工具列+欄寬,決策者選 D 與二、三節)。私人 artifact:https://claude.ai/artifact/YZpZhazEKKs8s7F6zTBDWXsrc/views/control-mapping/(矩陣頁)、src/views/evidence-classification/components/AOPickerDialog.vue(共用挑選器)、src/components/common/SegmentButtons.vue、src/views/evidence-reuse/、src/views/project/EvidenceReuseHint.vue、src/components/grc/job-drawer/JobEvidenceDeleteDialog.vue(刪除說明框)。python scripts/deliverables/render_index.py docs/features/FR-162-2610-cross-framework-control-mapping/。驗收通過待確認;本線首腦做第二道檢查,不重做手測、只核對(卡上復核段與打折、該卡測試、守衛、DEV 數字、FE grep、8000 版本)。驗完回報固定附任務總表。phase=active migration(CM-3061 能力點、CM-3062 job_evidences)回寫要講「出貨基線待重產」。JobExecutionDrawer.vue、ProjectPlanningView.vue、ProjectAuditorOverview.vue)只准新開子元件。SegmentButtons、代號用 tag-code、字級只用 0.75/0.875/1rem、不自訂 font-family、顏色只用 token(決策者用淺色主題,寫死色碼會跟主題脫節)、導航樹先看 ApObjectiveTree/規劃頁樹。權限判斷只用 v-can/$can(v-can-guards 守衛會擋 hasCap()。node <scratchpad>/mock.cjs <html> <png>,Playwright 在 test repo)至少能驗版面;本棒多次只靠 build 就回報,被抓到看不出差別、按鈕太大、間距擠。你是 FR-162 跨框架控制項對應的首腦(分析決策/協調),接手第 5 棒。上一棒修了跨層清空(CM-3100)並直改證據刪除行為,兩件都等決策者手測。
先讀 docs/features/FR-162-2610-cross-framework-control-mapping/handoff/FR-162-STATE.md(含 §0 讀序與自檢、§7 行為規範),
再讀 FR-162-LOG.md 最後一個 block(第 4 棒)。讀取與盤點完成後不做任何事——不派工、不跑測試、不改檔,
回報①自檢答案②現況盤點(與 STATE 不符處)③「待辦已就緒等發令」,等我下指令才開始作業。