本卡屬 FR-114 資安修正(母卡 CM-2019),接 CM-2113(全系統唯一的任務歸屬判斷)的範圍外評估,決策者 2026-09-24 裁:前四處同批換、發版前做完。只改 BE,不動套件。

問題是什麼(白話)

CM-2113 把「這張任務屬於哪個專案」統一成一支判斷(走輪次鏈),但還有四處沒換,仍然去翻指派表。任務還沒指派人時指派表沒有它,於是:完成/退回任務、佐證增刪改、檢測套件的守門查不到專案 → 一律拒絕(誤擋);輪次凍結的判斷查不到 → 放行(該擋沒擋)。FR-050 當初就是因為這支對輪次主流程恆查無,才另開了 known_project_id 旁路繞過它。

在哪裡(首腦核對過)

① BE app/flow_engine/service/workflow_execution_service.py (1,385 行,超標)
     :159-173 _resolve_project_id_from_workflow:流程實例 → 任一 USER 任務 → task_assignees.project_id   ← 換
     呼叫點::139 assert_project_participant、:157 resolve_project_id_from_workflow(公開入口,job_operator_guard.py:36 用)、:190 _assert_round_not_frozen_for_workflow
② 同檔 :175-196 _assert_round_not_frozen_for_workflow(呼叫①,換了①就跟著對)
③ BE infra/flow_control/repository/flow_control_job_repo_impl.py:327-345 _is_round_frozen_for_job:job.id → TaskAssignee.project_id   ← 換(本檔超標,只准改成一行呼叫)
④ 同檔 :986 附近 current_round_status_by_workflow_execution 的第二條 fallback(task_assignees.project_id → 最新輪)   ← 換
唯一判斷:infra/readmodel/tasks/job_project_ownership_query.py:JobProjectOwnershipQuery(CM-2113,commit f52a53f1e)
   resolve_project_id_for_workflow_execution(workflow_execution_id) / resolve_project_id_for_task_id(task_id) / resolve_project_id_for_job(job_uid)
FR-050 旁路:workflow_execution_service.py:127/139(known_project_id 參數)、:824/852 revert_job、job_operator_guard.py:22-35、stage_rollback_service.py:160

工作區

BE /Users/chouraymond/Projects/Billows/Audit-Manager/compliance-manager-be/.claude/worktrees/wt-fix-security   branch fix/security-b1

🔴 主 checkout 不動;不碰 pyproject/lock。起服務借主 checkout .venv 時要把套件工作區各 jedi-* 目錄加進 PYTHONPATH(CM-2113 踩過),別碰 8000/8001 port。

怎麼修

要寫測試(權限核心,含突變)

手測(DEV,只准讀)