本卡屬 FR-148(母卡見上方連結),第 ⑤ 棒:把關卡接進既有的啟動、重開、批次完成與啟動前檢查。依賴 ①④。
四件事:①專案啟動時,沒選樣板的任務自動帶公司預設樣板(預設是零關就什麼都不變);②管理員把已結案任務退回重開時,關卡回到第 1 關;③待辦頁勾多筆按「批次完成」時,有關卡的任務是推進當下那一關(執行人那關=送審、審核關=核可);④啟動專案前的確認視窗,多一項「有幾個任務的關卡沒派人」(軟提醒,按確定仍可啟動)。
app/flow_engine/service/job_reopen.py:10 reopen_job_execution(24 行)管理員退回結案
app/flow_control/service/job_restart_service.py:63 restart_from_first_station(週期重跑;144 行)
app/flow_control/service/job_batch_complete_service.py:43 batch_complete(210 行)
app/flow_control/service/oscal_stage_handlers.py LaunchAuditOnCompleteHandler:呼叫 readiness checker,force 放行
jedi-compliance-audit/jedi_compliance_audit/app/service/planning_readiness_checker.py(128 行)
兩項軟提醒:prep_jobs_incomplete、planning_roles_unassigned;回 [{code, context}]
di_containers/flow_control/flow_control_containers.py:699 PlanningReadinessChecker 接線
project_start_app_service.start_project、LaunchAuditOnCompleteHandler、或任務實體化處),挑一個;對「非問卷、沒有 job_review_steps」的任務套公司預設樣板(重用卡 ④ 的套樣板邏輯,不另寫)。公司預設是零關就跳過。已在跑的舊專案不回頭套。查到兩個以上可行點、取捨不明時先回寫本卡問決策者。reopen_job_execution 與 restart_from_first_station 結束時,對有關卡的任務呼叫卡 ① 的 review_step_service.reset_to_first(關卡回 1、寫歷程 reopen)。通知沿用重開既有的通知(寄第 1 關)。batch_complete 對有關卡的任務改呼叫 submit(當下第 1 關)或 approve(審核關,最後一關=結案);當下那關不是呼叫者 → 計入 skipped 並回原因。零關任務照舊直接完成。批次沒有退回。FE 待辦頁勾選框:當下那關不是你的列停用;批次確認視窗列出每筆會做什麼(「→ 送審(第 1 關)」「→ 核可並結案」「→ 完成」)。planning_readiness_checker.py 加第三項 WARN_REVIEW_STEPS_UNASSIGNED = "review_steps_unassigned",context {count, jobs:[{uid, name, missing_seqs}]}。檢查要讀主專案的新表——用注入的查詢介面(建構子多一個 Optional 參數,主專案 infra 實作、在 flow_control_containers.py:699 注入),不讓套件 import 主專案(test/test_module_boundaries.py 會擋)。FE 確認視窗的提醒清單加對應文案。feature/FR-139。開工先 git branch --show-current 確認,不對就停下問決策者,不要切 branch。git add <檔名>(禁 -am、禁 git add .;只 add 自己改的檔,別人已 staged 的不要帶走);本卡 append 白話補充(做了什麼、關鍵決定、commit hash、驗證方式、手測清單);狀態改「修正待驗證」。push 等令。<script> 函式 40 行)。動到已超標的檔,新邏輯一律新開檔再一行呼叫,不准往裡塞。開工先 wc -l 目標檔。