本卡屬 FR-114(母卡 CM-2019),CM-2119 評估結果,決策者 2026-09-24 裁另開卡、下一批做。清理卡,只改 BE。不擋這批發版。

問題是什麼(白話)

FR-050 做「階段退回」時發現:輪次主流程上的任務沒有指派列,舊的專案反查(翻指派表)恆查無,連專案管理人都被守門擋下。當時的解法是開一條旁路——呼叫端自己帶已知的專案編號(known_project_id),跳過反查。CM-2113/2119 把反查改走輪次鏈後,DEV 536 個有主流程的輪次逐一反查全部回到正確專案(0 查無、0 查錯),這條旁路已經沒有存在理由。留著的風險:多一條「信呼叫端給的專案編號」的路,以後有人照抄就是跨專案漏洞的起點。

在哪裡(CM-2119 runner 列出,開工先 grep 確認)

BE app/flow_engine/service/workflow_execution_service.py
  assert_project_participant(workflow_execution_id, known_project_id=None)   :127-139
  revert_job(..., bypass_round_frozen_gate=False, known_project_id=None)     :824-852(docstring 836-844 整段講這條旁路)
BE app/flow_engine/service/job_operator_guard.py:22-35  assert_job_operator(..., known_project_id=None)
BE app/flow_engine/service/stage_rollback_service.py:160  傳 known_project_id=project_id 的唯一呼叫端(:172 附近回傳 project_id 的註解也要改)
BE test/test_workflow_execution_service_revert_job_bypass_gate.py::TestKnownProjectIdBypassesBrokenReverseLookup(在「反查恆查無」前提下寫的,要改寫成驗「不帶旁路也查得到」)

怎麼修

驗證

紀律

已完成修正(白話補充)

做了什麼:拿掉 known_project_id 這條旁路。原本 revert_job/assert_job_operator/

assert_project_participant 三處都多一個參數,讓呼叫端(StageRollbackService)自己帶專案編號