下面整段是給執行 session 的 prompt。前置:2b-2 已收完(
c05ed713)。 與 2c 檔案面不重疊(2c=7 份 grc_check_*收編),但不要同時跑(同一 working tree, 避免互相 add 到對方半成品);先後順序不拘。
【接手主題】FR-048 Phase 2b-3 — 收掉 2b-2 交棒單的尾巴五項(矩陣 §7.3「留待下一波」)
必讀:
docs/features/FR-048-2607-unified-auth-guard/endpoint-authz-matrix.md §7.3 留待表 + §3 各模組列common/authz/ 現況(assert_project_participant / assert_project_manager / decorators 皆已就緒,本波不需要新 canonical)【branch】fix/v1.8.0-bugs,禁止切 branch。不動 jedi-* 套件。不碰 2c 的 7 個檔(audit_service / poam / audit_round / job_import / task_execution / assessment_plan / assessment_result _app_service)。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 【工作清單】
2b-2 已確認卡點=container 未接 participant_role_service,補 DI wiring 後掛守門:
assert_project_participantentity.project_id → guard(PSR entity 有 project_id;subtask 反查先 grep 確認欄位/既有反查,禁重複造輪)app/grc/service/job_comment_service.py:23 add_comment)WorkflowExecutionService.assert_project_participant(workflow_execution_id)(DI 注入該 service),不要另寫反查鏈app/grc/service/job_batch_complete_service.py)project_uid(/project/<project_uid>/jobs/batch-complete)→ thread 進 service,resolve 後 assert_project_manager(D7 定調 manager-only,批次完成=規劃側批次操作;per-job 的 transitive participant 守門保留不動,本守門是入口層更嚴的一道)分兩類處理:
module_frame_control_default_route.py:50/75)→ @require_super_admin_routecompliance-manager-fe/src/config/api/api.js + call site):
module_frame_template_import_route.py:66/94)@require_super_admin_route;是 window.open/window.location/<a href> → 不掛,矩陣該列轉 Phase 4 signed-token(比照 2b-2 對 survey/import-template 的處置)module_frame.manage)python -m pytest test/ -q --continue-on-collection-errors,comm 比對,新增失敗必須 0)【手測 checklist 必含】參與者在專案內新增留言/摘要報表照常;非參與者打同端點 403;admin 下載 MF 範本照常、一般使用者 403(僅掛上的那幾支)。