inventory/a1-capability-tree.md 附錄 A 的行;其餘寫檔案路徑與行號iam.user.assign,T-3.8 正在做指派 API),「按下 AI 分類」要從「上傳整理證據」分出來(要花 AI 額度)。另外:卡上提到的「專案 CSV 匯入走 grc.project.create」查不到這支端點。建專案只有一支 POST /oscal-project/start(A:630),前端專案頁的匯入只有 SSP 匯入與任務匯入兩種(compliance-manager-fe/src/views/project/ProjectPlanningView.vue:197-242)。最接近的是「用 Excel/Word 檔新建資源庫」掛 oscal.resource-library.create(A:895、A:899),列在翻案候選第 2 列。
讀了哪些段:附錄 A 全部 12 段(A:620-1244),每段 50-90 行分次讀;第二部分能力點樹(A:519-582,既有獨立動詞的基準);附錄 D 裁示(A:1404-1459);design.md §6.1 粒度規則(design.md:142-163);四份模組盤點的「定案結論」段(a1-grc.md、a1-oscal-flow.md:290-305、a1-detection-evidence-survey.md、a1-system-iam.md、a1-platform.md:183-197);出貨五角色 resources/roles/shipped-roles.json。
怎麼判:每支 route 問卡上的三個判準(不同職務會分開給/一次性不可逆/批次或跨界)。符合的再查兩件事:
用到的事實(逐一開檔核過):
| 事實 | 出處 |
|---|---|
改帳號的 request 帶 user_roles(就是指派) |
jedi_iam/api/serializers/user.py:26;a1-system-iam.md:138-140、261 |
| 改任務設定 service 要求專案 manager | app/flow_control/service/job_service.py:337 |
任務新增/修改的 request 帶 assignees |
api/flow_control/serializers/job.py:283、319 |
| 開輪次要 manager、發起覆核要 auditor、結案要 manager | jedi_compliance_audit/app/service/audit_round_app_service.py:240、613、567 |
| 階段推進看該階段主角色,manager 可越級;階段回退只限 manager | app/flow_engine/service/stage_advance_service.py:130;stage_rollback_service.py:96 |
| 完成、退回任務只限被指派人與 manager | app/flow_engine/service/workflow_execution_service.py:656、827 |
| 批次完成是 N 次單筆完成,逐筆濾指派人 | app/flow_control/service/job_batch_complete_service.py:49-65 |
| 開始 AI 分類起背景工作 | jedi_evidence_classification/api/routes/evidence_batch_route.py:158 |
| 重建整個租戶 Drive 資料夾(destructive) | api/cloud_integration/routes/google_drive_sync_route.py:209 |
| 資源庫匯出 SSP docx/pdf/odt | api/module_frame/routes/mf_ssp_export_route.py:48 |
「出貨角色影響」=拆出去後,五個出貨角色中誰今天因持有那項 CRUD 而能做、拆後會失去(萬用字元 *.*.*、模組.*.* 自動涵蓋新動詞,不會失去)。
| 模組.資源 | 現在掛 | route(附錄 A 行號) | 建議動詞 | 判準 | 出貨角色影響 | 理由 |
|---|---|---|---|---|---|---|
| iam.user | iam.user.create/update |
POST /user(A:1106)、PUT /user/<uid>(A:1108),request 的 user_roles 欄 |
iam.user.assign(既有動詞) |
一、二 | 無(iam 只有系統管理員有,*.*.* 涵蓋) |
改姓名電話(人資、窗口)和給人角色(資安主管,給管理員角色=提權)是不同職務;T-3.8 正在做指派 CRUD,新 API 直接掛新動詞成本最低。舊 PUT 夾帶 user_roles 時改要求 assign,或直接不再收這欄 |
| evidence.classification | evidence.classification.update |
POST /evidence-batches/<b>/classify(A:1015) |
execute(新造,待裁) |
三(觸發 AI、花額度) | 無(只有稽核主管 evidence.*.* 有 update) |
同一顆 update 也管上傳檔、移除檔、完成上傳(A:1012-1014)。實務上助理整理上傳、主管才按「開始分類」花錢;今天做不到 |
| 模組.資源 | 現在掛 | route | 建議動詞 | 判準 | 出貨角色影響 | 理由 |
|---|---|---|---|---|---|---|
| grc.audit | grc.audit.update |
POST .../stage/advance(A:720)、POST .../stage/rollback(A:721) |
grc.audit.approve(沿用;或新造 advance 待裁) |
一、二 | 稽核員會失去(列舉了 grc.audit.update),拆時要在範本補上,否則稽核員推不了自己負責的階段 |
推進含「審核階段通過/退回」(a1-grc.md:177 說明),是狀態轉換;同一顆 update 也管改觀察事項、風險。第二道:推進看階段主角色、回退限 manager,所以降為中 |
| evidence.classification | evidence.classification.update |
POST /evidence-batches/<b>/archive(A:1016) |
evidence.classification.approve(沿用) |
三(跨界:寫進任務佐證) | 無 | 把 AI 分類結果每檔每檢查點寫成一筆任務佐證,等於「採信分類」;和上傳整理不是同一個決定 |
| evidence.cloud-integration | evidence.cloud-integration.update |
POST /integrations/google-drive/tenant/rebuild-all(A:1005) |
execute(新造,同上列) |
二、三(全租戶、外部服務、破壞性) | 無(稽核主管 evidence.*.*) |
同一顆 update 也管單筆同步重試(A:1001);「重試一筆」和「重建全公司資料夾」風險差很多 |
| grc.job(繞過既有動詞) | grc.job.create/update |
POST .../assessment-object/<ao>/jobs(A:692)、PUT .../job/<job>(A:690),request 的 assignees 欄 |
夾帶 assignees 時改要求 grc.job.assign |
一 | 一般成員持有 grc.job.update 但沒有 assign;service 另要求 manager,實際影響只在他是某專案 manager 時 |
grc.job.assign 已存在(A:702-705 指派端點),但改任務時一併送指派人就繞過它。不是新拆,是補齊既有拆分 |
| 模組.資源 | 現在掛 | route | 建議動詞 | 判準 | 出貨角色影響 | 理由 |
|---|---|---|---|---|---|---|
| grc.audit | grc.audit.create |
POST /projects/<pid>/audit-rounds(A:645)、POST /audit-round/<rid>/launch-reverify(A:649) |
grc.audit.close(輪次生命週期併一顆)或不拆 |
一 | 稽核員會失去(有 grc.audit.create) |
開輪次和新增觀察事項同一顆。但開輪次限 manager、發起覆核限 auditor,第二道已分開;a1-grc.md 定案 3 也裁了 audit 不再細拆 |
| iam.user | iam.user.update |
POST /user/change-status/<uid>(A:1110) |
不拆或 iam.user.close |
一、二 | 無 | 停用帳號是離職流程,但多半和改資料同一個人做 |
| evidence.classification | evidence.classification.update |
POST /classification-ground-truth(A:1023) |
evidence.classification.import(沿用) |
三(匯入) | 無 | 匯入正解基準,給評估分類準確度用,極少用 |
| grc.project(繞過既有動詞) | grc.project.create |
POST /oscal-project/start(A:630),request 的 participants 欄 |
不拆 | 一 | 無 | 建專案時順手加成員繞過 grc.project.assign;但建專案表單本來就要選成員(同一表單不同欄位),建議維持 |
| 模組.資源 | 現在掛 | route | 已裁 | 照判準看 | 建議 |
|---|---|---|---|---|---|
| oscal.resource-library | oscal.resource-library.read |
控制預設值匯出 Excel(A:835)、範本 SSP 匯出 docx/pdf/odt(A:843) | a1-oscal-flow.md 定案 4:資源庫匯出歸 read |
判準三(匯出)。第三部分寫「oscal.*.read 拿不到 oscal.ssp.export,只看不帶走是刻意的」(A:605),資源庫匯出卻讓唯讀、稽核員、一般成員都能帶走 |
中:開 oscal.resource-library.export。範本是公版內容不是客戶資料,所以不到高;但客戶自己改過的範本(含預設實作說明)就是客戶的內容 |
| oscal.resource-library | create/update |
匯入資源庫 JSON/YAML(A:794-796)、控制預設值匯入四步(A:837-840)、SSP Excel/Word 匯入目標是資源庫時(A:895-902) | a1-oscal-flow.md 定案 2:資源庫不開 import |
判準三(匯入) | 低:維持。會用資源庫的只有稽核主管與系統管理員,兩者都有整包,拆了沒有人受惠 |
| detection.remote-agent | detection.remote-agent.update |
核准新報到 agent(A:934)、重新綁定設備指紋(A:935) | a1-detection-evidence-survey.md 定案 4:核准歸 update,不開 approve |
判準一、二(信任一台機器、核准即簽憑證) | 低:維持。管 agent 的就是 IT 一人,改名和核准不會分給不同人 |
| route | 看起來像 | 為什麼不拆 |
|---|---|---|
| 開始掃描、取消、重跑等執行控制 8 支(A:953-961) | 判準三:觸發 agent 掃描 | 通則 A+a1-detection-evidence-survey.md 定案 1:在任務頁做、做的就是任務指派人。掃描範圍另由 FR-129 授權網段管,不靠能力點 |
| 啟動任務執行(A:643)、強制開始卡住的任務(A:695) | 判準一、三:寄通知、越過合流閘道 | 已在 grc.job.assign(a1-grc.md 定案 7):本質是派工,能指派就要能派發。兩支 service 都另限 manager |
| 完成任務、退回任務(A:710-711) | 審核關卡的「通過/退回」也走這支,像 approve | 審核關卡是一個獨立任務,有自己的被指派人;誰能審由「指派給誰」決定,service 限被指派人與 manager(workflow_execution_service.py:656、827) |
| Excel 匯入問卷答案(A:737) | 判準三:批次匯入 | 第一部分已裁(A:93):線上填和 Excel 匯入是同一個受稽方做同一件事 |
| AI 儀表板自動生成(A:1211)、AI 小幫手聊天(A:1212) | 判準三:花 AI 錢卻掛 read | 這兩個資源本身就是 AI 功能,ai.assistant.read/ai.dashboard.read 就是「能不能用 AI」的開關(a1-platform.md 定案 6);資源沒有其他動作可分 |
| 測試寄信、測 LDAP、測通知、測 log 轉發、測工具連線(A:1082-1089、A:950) | 判準三:觸發外部服務 | 對象是管理員自己剛填的設定,是設定表單的一步;只有設定管理員會按 |
| 產生 agent 註冊碼(A:937) | 判準三:發放註冊碼 | 註冊碼是新增 agent 的唯一入口,「能產生註冊碼」就等於「能新增 agent」,掛 create 正確;停用註冊碼掛 delete 也對 |
| 批次刪專案(A:635)、批次完成任務(A:696) | 判準三:批次 | 批次刪就是 N 次刪除(delete 本來就獨立);批次完成在 service 逐筆濾指派人,權限不比單筆大 |
| 下載框架 OSCAL(A:767)、下載空白範本(A:836、A:841-842) | 判準三:匯出 | 框架是公開標準;空白範本不含任何資料 |
| 摘要報告還原歷史版本(A:731) | 判準二:覆蓋 | 還原後仍可再還原,不是不可逆;做的人就是編輯報告的人 |
| 項目 | 數量 |
|---|---|
| 讀過的 route | 559(附錄 A 合計,A:1245) |
| 候選 | 10 列、14 支 route |
| 涉及資源 | 6 個:iam.user、evidence.classification、evidence.cloud-integration、grc.audit、grc.job、grc.project |
| 高 | 2 列(3 支) |
| 中 | 4 列(6 支) |
| 低 | 4 列(5 支) |
| 翻案候選 | 3 列(約 17 支,含通則 C 依目標判的 8 支) |
| 不拆但易誤判 | 10 組 |
其餘約 540 支照現行掛法即可:多數是同一資源的不同欄位(SSP、資源庫、問卷子物件)、挑選下拉(通則 B)、或已經拆好的獨立動詞。
| 動詞 | 用在 | 問題 | 替代方案 |
|---|---|---|---|
execute |
evidence.classification.execute(開始 AI 分類)、evidence.cloud-integration.execute(重建全租戶資料夾) |
design §6.1 限定獨立動詞只有四類(狀態轉換、對外送出、指派、匯入,design.md:150),execute(觸發外部服務或花錢)是第五類,要改規則 |
不新造:AI 分類改用 evidence.classification.create(把「開始一次分類」當成新增一筆分類執行),上傳整理留 update。缺點是 create 今天是「建批次」,兩件事又擠在一起 |
advance(備選) |
grc.audit.advance(階段推進、回退) |
只有在不想沿用 grc.audit.approve 時才需要;沿用的話,審閱打勾和推進階段會綁在一起 |
建議沿用 approve:兩者都是「主管確認這一段可以往下走」,a1-grc.md 定案 5 也是為了守四類而沿用 approve |
沿用既有動詞的(不必另裁):iam.user.assign、evidence.classification.approve、evidence.classification.import、oscal.resource-library.export(若翻案)。