# FR-140 STATE（living，就地改，只描述此刻）

**更新**：2026-10-17 00:05　**首腦**：[R1]大流程重構首腦-3（第四棒，驗收與修正模式）　**母卡**：CM-2765

## 現況一句話
**FR-140 已結案（2026-10-17）**：母卡 CM-2765 與全部子卡 Done，收口卡 CM-2834 Done。文件（SPEC 11 頁、手冊 4.1）首腦復核過，FR-141 重寫 ap-authoring 時保留了 FR-140 段落。**下次出安裝包才做**：四支套件還原固定版號並發版、八支主線 migration 重產出貨基線。上 STG／POC 要決策者放行，並 `pybabel compile`。三 repo 未 push。收尾文件：[SUMMARY](2026-10-16-FR-140-SUMMARY.md)、[analysis](../../../analysis/2026-10-16-fr140-progress-and-rollback-redesign.md)。
- 劇本對照（DEV 唯讀核過）：稽核次三筆 pass_no／nature_seq／prev_pass_id 照 design；時間軸十筆含一筆 return；redo_log 4 筆；通知 job_due（due_3d 2／due_today 4）與 stage_entered 都有紀錄。兩個沒驗到：①覆核輪新卡帶期限（第 2 輪只開到規劃站卡、任務卡尚未生成）；②第 5 步手改期限（due_at_manual 全為 false）。另 MP.L1-3.8.3 兩張退回卡無期限，是該控制項 POA&M 里程碑「123」沒填日期，資料空白非 bug。
- 🔴 **決策者 2026-10-16 裁：測試回報的問題一律開新卡、歸「測試修正」，不退回原卡原 session**（「不然沒完沒了」）。Notion 狀態欄無「測試」選項，分類用需求編號 `FR-140.T<n>` ＋標題「測試修正 T<n>」前綴，接著 T3 往下編。
- 🟡 **待決策者裁（本棒末）**：總覽「控制項導航」三行堆疊版面決策者覺得「跑掉」。首腦查明是 FR-140 之前 2026-10-12 FE commit `4953c199`（style：群組列改三行堆疊）造成，本 arc 無人動過該區塊；兩條路：還原該 commit（首腦傾向）／收緊成兩行。決策者未回，接手者問一次再開卡（T7）。
- 待裁（收口前）：①資源庫終身一對一（FR-139 T-8）使刪掉的專案仍鎖資源庫，決策者裁先順流程、記錄；②（已消失）.17「閘道前兩邊都畫 pending」待裁項隨 T3 重做進度條而不存在——七站本來就全畫。
- 已裁要記得：進度條「以稽核次為單位」（推翻前裁「跳過站顯綠維持」）；跨稽核次退回＝刪目前次、上一次重開；「提交稽核」改「完成本次稽核」（.18）。
- DEV 髒輪次 f00c5dc3（專案 1547 已軟刪）留當樣本不修。

## 任務卡總表（問 map 只給這張）

| 卡 | 做什麼 | 依賴 | 狀態 |
|---|---|---|---|
| .1 CM-2786 | 稽核次表＋舊輪次搬第 1 次 | — | Done：復核過 |
| .2 CM-2787 | 範本站「稽核性質」下拉＋新公版範本 | — | Done：復核過 |
| .3 CM-2788 | 走到稽核計畫站開新稽核次 | 1、2 | Done：復核過 |
| .4 CM-2789 | 其餘三站改綁稽核次＋回規劃 | 3 | Done：復核過 |
| .5 CM-2790 | 回同站開新任務卡 | 4 | Done：復核過 |
| .6 CM-2791 | 任務卡期限欄後端全鏈 | — | Done：復核過 |
| .7 CM-2792 | 我的任務＋抽屜顯示期限 | 6 | Done：復核過，runner 未點畫面 |
| .8 CM-2793 | 內稽不合格自動退回原卡＋退回卡系統留言 | 4、5、6 | Done：補裁復核過（BE 434bbd592／pkg cc6f742d） |
| .9 CM-2794 | 到期提醒（前 3 天、當天）＋我的任務期限欄排序 | 8 | Done：復核過 |
| .10 CM-2795 | 總覽頁切第幾次稽核＋標題帶次數 | 4 | Done：復核過 |
| .11 CM-2796 | 覆核輪新卡帶期限 | 6 | Done：復核過 |
| .12 CM-2797 | 流程進度條 | 5 | Done：復核過，沿用既有進度條，只補 tooltip |
| .13 CM-2811 | 推進按鈕文字改讀下一站站名（修正卡） | — | Done：復核過（337027269／bfb361566／FE f4fd9cc2，schema 補在 .16） |
| .14 CM-2812 | 進稽核站通知稽核員＋參與人「可稽核性質」三選一＋鈴鐺（修正卡） | — | Done：復核過（c496961a2／3023fe7d＋81a5ec43／58836164） |
| .16 CM-2815 | 閘道分支三處同根因：按鈕旗標 schema／進度條看實際站卡／通知用實際新站卡（修正卡） | 13、14 | Done：復核過（ac071b937），A／B 已實打；C 由決策者劇本實走 |
| .17 CM-2816 | 有回流範本的退回與進度重設計：退回沿實際軌跡（含跨稽核次刪目前次、上一次重開）、進度條以稽核次為單位、時間軸站名與回流標示（修正卡；一支主線 migration） | 16 | Done：復核過（BE 77e9ee2c3／FE fec523e1／pkg 735185d6），閘道待裁項隨 T3 消失 |
| .18 CM-2817 | 稽核站推進按鈕「提交稽核」改「完成本次稽核」（一筆 stage_objects seed） | 16 | Done：復核過（e2f48753f，DEV 已套） |
| .15 CM-2813 | 專案規劃頁可設任務卡期限：表單欄、清單、批次（修正卡；BE control-tree 補 due_at） | — | Done：復核過（BE 21ec82d1a／FE 1379e427） |
| T1 CM-2820 | 測試修正：進度條在規劃站只剩一顆（.17 回歸，pending 推算誤把這次的計畫站當下一次） | 17 | Done：復核過（BE a39f4b4f9，實打四顆） |
| T3 CM-2822 | 測試修正：進度條重做——七站全畫位置固定、顏色只講這一次稽核、加 skipped 第四態（取代 .17／T1 的「只畫這次路徑」設計） | 17、T1 | Done：復核過（BE 888d6d08d／FE 789ee3f2，實打＋截圖） |
| T4 CM-2830 | 測試修正：公版回流線 Flow_internal_poam_planning 的名字拿掉，按鈕印下一站站名「前往 任務規劃與執行」（seed；第一版「進入重做」be7fa6dec 被決策者改判） | — | Done：復核過（be7fa6dec 改字 → d2249eb13 拿掉線名，實打按鈕為「任務規劃與執行」） |
| T5 CM-2831 | 測試修正：專案管理清單與首頁卡「狀態」格改兩行——目前站名＋「第 N 輪 · 第 N 次內部／外部稽核」，與橫幅同源 | T3 | Done：復核過（BE b890afefd＋7576f89f2／pkg 3b94ad67／FE 7796818e，首腦實打＋截圖） |
| T6 CM-2832 | 測試修正：總覽稽核次切換器補推算的「進行中」那一次、「目前」掛它、內稽結束顯「已完成」（三處統一「第 N 次 · 站名」） | T3、T5 | Done：復核過（BE e4cb1693c／FE 785a6db4，兩向突變＋實打＋截圖；推算項被真實項取代已 live 驗到） |
| C1 CM-2834 | 收口：SPEC、使用手冊、守衛補登記、整個 arc 規範審查 | 全部 | Done：復核過（BE 5bfddf750／ddc069c3a／60b366dfc；DI 拆檔 922→797 行） |
| T2 CM-2821 | 測試修正：建專案預覽稽核人員補內外稽後綴（.14 漏）＋資源庫模式 SSP 頁籤收掉匯出樣板與匯入（FR-139 T-9 漏） | — | Done：復核過（FE 3d06e89c） |

互斥：3、4、11 同改 `audit_round_app_service.py`；5、8 同改主專案 `workflow_execution_service.py`。各組內不同時派。.13／.14 都碰 `stage_advance_service.py` 但不同段（.13 改 label 函式、.14 只加一行呼叫＋DI 參數），可同派、各 add 自己的 hunk。
下一批：.8 與 .12 可同派（.8 改 handler 掛點＋新退卡 service，.12 純 FE）；.8 過 → .9；全過 → 端到端驗收（design 第九節劇本）。
- 不變式：輪次 status 與四槽位永遠＝目前稽核次，由 `audit_round_pass_app_service.sync_round` 維持，每個狀態轉換後必呼叫。縮範圍只有一份 `clone_ap_for_next_pass`（FR-141.B4 改名，規則在 `pass_scope_rule`）。

## 接手指引（驗收與修正模式，第四棒）
1. 讀本檔 → `design.md` 第九節 11 步劇本與第四節 D1～D6／P1～P6；`.17` 卡 CM-2816 的六步手測是目前的補充劇本。討論稿只在查「為什麼」時看。
2. 接手後**停下等決策者發令**，不自派、不改檔、不重啟服務。
3. 決策者回報問題（通常是截圖＋專案 URL）→ 先用唯讀 SQL 對 DEV 實況（稽核次 `compliance.audit_round_passes`、主流程站卡 `compliance.job_executions` 以 workflow_execution_id、通知 `compliance.task_alert_notifications`、時間軸 `compliance.round_stage_transitions`）＋ `log/app.log` 找請求 → 分清「資料對顯示錯」「設計洞」「使用者操作」三類 → 給根因＋建議 → 決策者裁 → 開卡。
4. 開卡：屬既有卡範圍 → append 到該卡尾「決策者複測問題」段並改 **In progress**（Notion 沒有「修正後仍有問題」選項，打了 400）；跨卡或新語意 → 新 FR-140.N 卡照 `docs/claude/notion-card-templates.md` ③。**派工 prompt 送出前與決策者說派出後都 fetch 卡確認狀態與卡尾只有一段作業中**（.14 被貼兩次撞車）。prompt 薄：model／卡號＋URL／三 repo 分支／一句範圍／紀律尾。
5. 復核：fetch 卡回寫 → `git show --stat` 核檔案清單 → 開檔核關鍵段 → DEV 唯讀 SQL 核資料 → BE 行程啟動時間必須晚於最後存檔（否則 kill -9 重啟 8000）→ 新 API 欄位必查 serializer 有宣告（.16 A 教訓）→ 更新本檔總表與 LOG → commit（**commit 前看 `git status` 第一欄有無他人 staged 的檔**）。不信 runner 自報。
6. 首腦自己 commit 只 add 兩個 handoff 檔；主 repo 工作樹的 `pyproject.toml` path dependency 改動與 FR-133 未追蹤 html 不是你的。
7. 收口分兩段：**已做**（首腦，2026-10-16）＝24 子卡 Done、母卡收尾彙整、SUMMARY、analysis、design.md 變更紀錄與三處推翻標註、frontend-overview §3.6 補 Dropdown tooltip、memory 兩條；**CM-2834 待派**＝SPEC、手冊、守衛補登記、ddd-compliance-reviewer 掃 arc（BE 從 `96cfaab01`、FE 從 `983cf2b7^`、套件從 `06bca836^`）。CM-2834 回來復核過 → 母卡 CM-2765 改 Done。**下次出安裝包才做**：四支套件還原 pin 並發版、八支主線 migration 重產出貨基線。
8. 決策者偏好：問 map 只回任務卡總表；先口頭講做法再動文件；白話；產品面取捨先問決策者不自裁；回報問題必附根因與建議。
10. ~~T7 候選~~ 已由首腦直接做掉（FE fd63b703）：導航控制項列減重＋群組短進度條；稽核紀錄文案（「稽核紀錄」標題、第 N 次內部稽核、內稽已完成／外稽此輪結束、已結束不標目前位置）統一在 `useAuditPasses.closedLabel`。
11. **runner 登入方式固定寫進卡**：test repo `.env.e2e` 的 `TEST_ADMIN_USERNAME`／`TEST_PASSWORD`，login payload `{username, password, cf_turnstile_token:"mock-test-token"}`；T5 runner 因沒這資訊打折了 UI 驗證。
12. **CM-2834 收口派工 prompt（決策者下令即貼）**：
    ```
    model：opus／effort：medium／理由：規格與行為規則都已寫在卡上，主要是照規則寫 SPEC 與手冊、處理審查報告。

    你是 runner，做 Notion 卡 CM-2834（FR-140.C1）：
    https://app.notion.com/p/FR-140-SPEC-arc-3fb346da4cd0818b9abbfab4077d4dca
    先用 `python3 scripts/notion_case.py get 2834` 讀整張卡，卡是自足的，照卡做。

    repo：BE ~/Projects/Billows/Audit-Manager/compliance-manager-be、FE ~/Projects/Billows/Audit-Manager/compliance-manager-fe、套件 ~/Projects/Jedicogy/module/jedi-python-package，都在 feature/FR-139（開工各查，不切）。
    範圍：守衛測試補登記一條路由、派 ddd-compliance-reviewer 掃整個 arc 並處理、SPEC 十二頁＋使用手冊補一輪內內外稽。不發版、不重產基線、不寫 e2e、不動母卡。

    紀律：只動 DEV；顯式 git add 只加自己的檔；做完立刻各 repo commit＋卡尾 append＋狀態改「修正待驗證」，不等令；push 等令。
    ```
9. 監控卡狀態用 Monitor 腳本每 3 分鐘 `scripts/notion_case.py get <no> --props-only` 盯狀態欄，30 分鐘到期要續；runner 待裁時會改 In progress 並在卡尾標「待首腦裁決」。

## 環境
- 三 repo 都在 `feature/FR-139`（決策者未開 FR-140 分支）；FR-139 未提交修改仍在工作樹，不要 stage。
- 未 push。DB 只動 DEV（localhost:5432）。
- 三支套件 path dependency 皆已啟用（主專案 `pyproject.toml` :123-126），改動未 commit，收口時還原 pin。
- 🔴 收口前小補：守衛 `test_fr132_t42_route_capability_mounts` 紅 1 條——.14 的 `MyStageNotificationsRoute`（GET /flow-engine/stage-notifications/mine，掛 grc.job.read）沒登記進 `a1-capability-tree.md` 附錄 A 與測試的 MOUNTS 表。合併前就紅、屬 .14 範圍，收口時補。
- 🔴 新 error code `GRC_412062`（GRC_ROUND_ROLLBACK_PASS_AP_EDITED）已同步 FE error-code.json 與凍結基準表。
- 🔴 這三支套件（compliance-audit、flow-engine、task-platform）**在 FR-140 收口前不可發版**：FR-139 收尾發版時已告知跳過（2026-10-15），其餘套件不受影響。
- 出貨基線待重產：`2026-10-15-fr140-audit-round-passes.sql`、`2026-10-15-fr140-job-executions-due-at.sql`、`2026-10-16-fr140-job-executions-attempt-no.sql`、`2026-10-16-fr140-job-execution-redo-log.sql`、`2026-10-16-fr140-task-alert-job-due.sql`、`2026-10-16-fr140-participant-audit-scope.sql`、`2026-10-16-fr140-task-alert-stage-entered.sql`、`2026-10-16-fr140-stage-transitions-station-labels.sql`（主線 active，共**八支**）；seed 五支 `audit-nature-menu`／`audit-scope-menu`／`stage-audit-button-label`／`internal-poam-return-flow-label`／`internal-poam-return-flow-label-2`（T4 兩支，拿掉回流線名）。套件 jedi-task-platform 多一支 `migrations/005-participant-audit-scope.sql`。
- 定案欄名：`due_at`／`due_at_manual`，寫入走既有 PUT job。里程碑日期→期限一律經 `job_due_date_service.due_at_from_milestone_date`（當天 23:59:59），.8 必共用。
- 🔴 `.mo` 不入版控：.8 加了九個 `redo_comment.*` 翻譯 key，其他環境／出包要 `pybabel compile -d config/translations`，否則留言顯示英文 key。
- 清單與橫幅的「目前站／第幾次」推算只有一份（`app/flow_engine/service/stage_pass_progress.py` 公開函式），之後任何頁要顯示同樣資訊一律呼叫它。
- FE `npm run lint` 指到別的目錄跑不了、repo 無 eslint 設定（T2 runner 發現）——FE 基建問題，不在本 arc 修，收口時決定要不要開卡。
- 既有紅測 15 條（`test_fr112_job_force_start` 14 條撞 FR-139 T-18 輪次凍結查詢、`test_job_detection_tool_binding` 1 條）非 FR-140 造成，待 FR-139 側處理。
