# FR-143 交接現況（STATE）

> **這份是 living 檔**：每棒就地 Edit，只描述「此刻」。歷史脈絡看同資料夾的 `FR-143-LOG.md`。

| 項目 | 值 |
|------|-----|
| 最後更新 | 2026-10-17 傍晚（第二棒首腦：八棒全部驗收通過（含 CM-2862 三次追加、CM-2844 的 FR-145.6 開關）；**下一棒＝決策者在 DEV 做全流程測試，首腦接「測試→查根因→開修正卡→復核」循環**） |
| branch | 三 repo 都在主工作樹 `feature/FR-139`（BE `~/Projects/Billows/Audit-Manager/compliance-manager-be`、FE `…/compliance-manager-fe`、套件 `~/Projects/Jedicogy/module/jedi-python-package`）；test repo 同名 branch，本案未動 |
| 母案卡 | CM-2840 https://app.notion.com/p/FR-143-POA-M-Excel-OSCAL-3fc346da4cd081acb7a5df86530a073d |
| 本棒角色 | 首腦（分析決策／開卡／派工／驗收），不自己實作、不開 subagent。工作形態＝決策者在 DEV 手測 → 回報問題 → 首腦查 log／DB／code 找根因 → 開修正卡 → 另開 session 當 runner 修 → 首腦實際核對 |
| Notion 回寫規範 | `docs/claude/notion-issue-tracker.md`、派工卡骨架 `docs/claude/notion-card-templates.md`，開卡用 `scripts/notion_create_case.py`、讀寫用 `scripts/notion_case.py` |
| 接手前必讀 | §0 讀序 |

## 🧭 原始需求 / WHY

- **要解決的問題**：缺失改善頁被使用者說「國中生設計、看不懂怎麼用」——一張表列缺失、點開抽屜建風險再建矯正再建里程碑，三層巢狀；且要等每個里程碑都打完成，流程才走得下去。決策者 2026-10-16 原話：「現在這版直接被 User 說是國中生的設計，完全看不懂要怎麼用」「只需要提供計畫就好，不需要等他改完」「里程碑就是對原本的任務卡設到期時間，不然退回去他們還是不知道真實到期時間去哪」。
- **目標模型**：改善計畫頁換成與稽核計畫（FR-141）、稽核結果（FR-142）同一套骨架。左樹只列這次判「不符合」的評估目標；點一條，上半「稽核缺失」文件表單（稽核發現、風險、稽核建議、稽核人員、查核方法、採用佐證），下半列出該評估目標底下的原任務（一條流程一塊，站只唯讀列在塊內），PM 對每個任務設執行人員（可多人，預設原指派人）、改善期限、改善措施。**不新增任務、不追蹤完成**；送出即推進：內稽每個任務退回**第一站**整條重跑、改善期限寫進每一站 `due_at`、第一站指派人換成執行人員、後續站指派人不變；外稽進待覆核。側邊選單「改善計畫」表格入口（我是 PM 的輪次，依專案分組展開）。Excel 與前兩階段同一份往右延伸，一列一任務、同評估目標合併儲存格。匯出只有 Excel 與 OSCAL JSON。資料照 OSCAL POA&M 落點（poam-item→risk→response lifecycle=planned→task 一筆對一個任務），並修 jedi-oscal-v2 匯出四處不合規。舊資料不管。
- **需求演變**：D1～D12 定案後三次改判，都在 design.md 變更紀錄——v1.1 任務粒度（一塊對一條流程、執行人員只改第一站，棒 5 runner 實查各站各有其人）；v1.2 清單改依專案分組展開（決策者看第一版平列後改判）；10-17 傍晚再裁清單改「待辦視角」（分段待處理／已完成／全部、拿掉全部展開鈕、分頁與工具列對齊稽核作業頁與待辦任務頁，CM-2862）。
- **本棒位置**：實作八棒全部首腦復核過（CM-2841～2846、2851、2862），**三 repo 皆未 push、套件未發版、未進版**。下一棒＝決策者在 DEV 走 design.md「端到端驗收」八條，首腦接測試迴圈。

## §0 接手讀序

### 0.1 🔒 先懂需求 gate
1. 本檔 🧭 WHY
2. `docs/features/FR-143-2610-poam-ao-worksheet-and-excel/design.md`：分工概述、決策定案 D1～D12、**端到端驗收（八條）**、坑與陷阱四節**全讀**。驗收八條就是下一棒的測試腳本。
3. 八張子卡各自的「✅ 首腦復核」段（`python3 scripts/notion_case.py get CM-28xx`，卡號見 §1 表）——每段末行是該棒的複測步驟與首腦沒實測的打折處，**決策者回報的 bug 先對這裡看是不是已知打折**

### 0.2 現況與待辦
4. 本檔 §1、§3、§4
5. `FR-143-LOG.md` 最後 2 個 block

### 0.3 需要細節才開
- 雛形 `prototype/index.html`（三畫面：清單、規劃頁、Excel）——決策者說「畫面跟雛形不一樣」時對照用。開法：BE 根目錄 `python3 -m http.server 8765`，開 `http://localhost:8765/docs/features/FR-143-2610-poam-ao-worksheet-and-excel/prototype/index.html`
- 規劃頁程式座標：FE `src/views/project/RoundPoamPlanView.vue`（217 行，舊 `RoundPoamView.vue` 改一行導向）＋ `src/components/grc/poam/`（9 支子元件）＋ `src/composables/usePoamPlan.js`／`usePoamXlsxImport.js`；BE `app/flow_control/service/poam_objective_app_service.py`（讀／整條存／送出守門＋鎖定＋推進）、`poam_objective_view.py`、`poam_workbook_{export,import,layout}.py`（Excel）、`job_restart_service.py`（退卡第一站重跑）、`not_met_job_redo_service.py`／`reverify_inheritance_service.py`（改接）；route `api/project/routes/poam_objective_route.py`／`poam_workbook_route.py`；error code `common/code/flow_control_error_code.py`（`GRC_POAM_SUBMITTED_LOCKED` 409042 等）
- 清單頁座標：FE `src/views/project/MyPoamsView.vue`＋共用 `src/composables/useAuditWorkGroups.js`（與稽核作業頁同用）；BE `infra/readmodel/audit/poam_dashboard_query.py`（狀態 CASE、todo／done）、`app/readmodel/service/poam_dashboard_service.py`、route `poam_dashboard_route.py`（`POST /api/1.0/grc/poams/my/list`）
- 套件：jedi-oscal-v2 `app/service/io/poam_export_parts.py`（新檔，四處合規）、`app/service/poam/remediation_service.py`；jedi-compliance-audit `app/service/poam_plan_rules.py`（守門「計畫齊全」）、`poam_app_service.py`、`audit_round_pass_transitions.py`
- 全流程測試方法：`issue-investigation` skill（bug 調查 SOP）；BE log `log/app.log`

### 0.4 ✅ 冷接自檢
1. 為什麼不新增任務、而是對原任務設三欄？（答：D3；里程碑就是原任務的到期時間，另開任務退回去的人不知道真實期限）
2. 送出後內稽的任務退到哪一站？指派人怎麼改？（答：第一站整條重跑；只有第一站指派人換成執行人員，後續檢核站維持原檢核人——v1.1 改判，雛形曾畫錯）
3. 清單「待處理」的精確條件是什麼？（答：輪次仍在 remediation 且為目前稽核次且改善計畫未送出；其餘已送出／覆核中／已結案統稱「已完成」）
4. 改善計畫有沒有 Word／PDF 報告？（答：D7 沒有，POA&M 沒正文欄位，交付物是 Excel 與 OSCAL JSON；FR-145 稽核報告 Word 另加一節「改善計畫」是 FR-145 的事）
5. 決策者說「我在改善計畫頁改了期限，任務抽屜看到的不一樣」——先查哪裡？（答：坑 9，送出後 PM 在抽屜手改標 manual 不回寫 POA&M，是設計不是 bug）

## §1 當前狀態（2026-10-17 傍晚盤點）

| 項目 | 值 |
|---|---|
| BE `feature/FR-139` | HEAD 為本交接 commit，**領先 origin 約 55 個 commit 未 push**（FR-142／143／144／145 多 session 混在一起）。未 commit 的 `pyproject.toml`／`poetry.lock` 是四支套件 path dependency（oscal-v2、compliance-audit、task-platform、flow-engine，開發期狀態，不 commit）；FR-133／144／145 文件與 `project_summary_report` 四支 BE 檔是別案的 |
| FE `feature/FR-139` | **領先 origin 約 22 個 commit 未 push**。本案：`94bc5597`（棒 3 頁面）、`b452b7b3`（棒 4 錯誤碼）、`49adb748`（棒 6 清單）、`c7593673`（棒 7 分組）、`140f58d5`（字級）、`0f0ce577`（改善期限文案）、`dfa8a3ba`／`5bf2c238`／`b0674082`（棒 8） |
| 套件 `feature/FR-139` | `76d6b243`（棒 1：jedi-oscal-v2 2.6.0、jedi-compliance-audit 1.3.7 兩支都動了，版號未 bump）。**未發版、未推 Nexus**；主工作樹 venv 以 path dependency 吃這棵樹 |
| DEV `guidant_ai_dev`（本機 5432） | 主線 migration 只有 `2026-10-17-fr143-poam-manage-route.sql`（`phase=seed` 路由，已套已登記，不需重產出貨基線）。套件無新 migration。資料：改善計畫稽核次 4 筆（待處理 1：「測測權限有沒有問題」第 2 輪第 1 次；已完成 3） |
| 正式服務 | 2026-10-17 16:37 另一 session 重啟：BE API 8000（pid 50904，含 worker 子程序）、FE vite 5180（打本機 8000，`.env.development.local`）。BE 跑到 `b9f2391d6` 之後；之後若 BE 有新 commit 要再重啟 |
| 測試基線 | `test/test_module_boundaries.py` 118 passed（10-17）；`test/test_fr143_poam_workbook_import.py`、`test_job_restart_service.py` 隨棒 4／5 commit；套件 `tests/test_poam_all_items_planned.py`、`tests/io_export/test_poam_export_contract.py` |

**Notion 卡**（母卡 CM-2840 Not started，等收尾令才收 Done）：

| 卡 | 做什麼 | 狀態 |
|---|---|---|
| CM-2841 | 套件：POA&M 匯出四處合規、task 對應任務、守門改計畫齊全 | Done |
| CM-2842 | BE 逐評估目標端點 | Done |
| CM-2843 | FE 改善計畫頁重做（含字級加大補記） | Done |
| CM-2844 | Excel 一列一任務匯出匯入與預覽（含 FR-145.6 追加的「列全部評估目標」開關） | Done |
| CM-2845 | 退卡第一站整條重跑、改善期限寫每一站 | Done |
| CM-2846 | 側邊「改善計畫」入口清單 | Done |
| CM-2851 | 清單依專案分組展開 | Done |
| CM-2862 | 清單待辦視角＋每頁筆數下拉＋拿掉全部展開鈕＋風格對齊稽核作業頁 | 修正待驗證（三次追加首腦全部復核通過，待決策者複測） |

## §2 已定裁示（不要重新討論）

- D1～D12 全部定案（10-17，design.md 決策定案表），含：D3 不新增任務、D5 執行人員＝任務指派人、D7 匯出只有 Excel 與 OSCAL JSON、D8 舊資料不管、D10／D12 退回第一站、期限寫每一站不加欄、D11 不設暫行緩解措施。
- v1.1（10-17）：一塊對一條流程；退卡只換第一站指派人，後續檢核站不換（決策者裁 A 案）。
- v1.2（10-17）：清單依專案分組展開，小字「共 N 份改善計畫 · 第 R 輪」（A 案）。
- 10-17 傍晚：清單分段「待處理／已完成／全部」、狀態欄「待規劃／已完成」；拿掉全部展開鈕；分頁用 DataTable 內建（與待辦任務頁同）；工具列拿掉稽核性質與標準兩個下拉，只留搜尋與分段鈕（與稽核作業頁同）。
- 畫面驗證一律 headless，**決策者多次點名不要開視窗**。
- 選單群組順序（FR-144 首腦轉達）：改善計畫 sort 60、pid 42。

## §3 下一步

**🔴 下一個動作**：決策者在 DEV 走 design.md 端到端驗收八條。**DEV 現有唯一待規劃那筆是 FR-142 前的舊形狀，只能測 1（入口）**；2～8 全部要先從 FR-140 開新輪次走到稽核結案造新資料——見 §4 第一條。
1. 每個 bug：首腦照 `issue-investigation` skill 查 log／DB／code 找根因 → 開修正卡（用 `docs/claude/card-templates/fix-card.json` 骨架，母卡 CM-2840）→ 印派工 prompt 等令 → runner 修 → 首腦實際核對 → 卡尾 append 復核 → 回報時附任務總表。
2. 全流程測完決策者點頭後才進收口（等令）：SPEC（`docs/spec-site/current/`，`writing-feature-specs` skill）、使用手冊、e2e（test repo 另開棒）、兩支套件發版（`jedi-package-dev` skill，oscal-v2 與 compliance-audit 都要 bump）、主專案進版（`version-bump`）、母卡 Done。

> ⚠️ 這節是**建議清單，不是執行授權**。接手方讀完盤點完即停，等 user 發令。

## §4 待辦與風險

- **FR-145 帶上（2026-10-17 留言）**：重寫 `audit-execution/poam.md` 時一併寫進 FR-145.6——匯出 Excel 旁勾選「列全部評估目標」預設勾，端點 query `all_objectives=1`，符合與不適用列改善欄灰底唯讀、匯入略過。見 FR-145 design.md 詳細設計⑥。

- **🔴 DEV 唯一待規劃稽核次是舊形狀**：「測測權限有沒有問題」第 2 輪第 1 次的 AR 只有一條控制項層 finding（`target_id`＝`IA.L1-3.5.1`，無 `_obj.N`，FR-142 前的資料）。拿它測驗收 2／4／6／7 會一直撞舊資料邊角（匯出三條評估目標列顯示不符合但任務掛控制項層那列、排尾）。**全流程測試前先從 FR-140 開新輪次走到稽核結案造 FR-142 後的新形狀**，舊這筆只能測入口清單。
- **測試資料缺口**：DEV 沒有三站流程全完成的內稽稽核次（驗收 5）、沒有同一任務對多條評估目標（驗收 3）、沒有外稽送出後的覆核輪（驗收 8）。要測這三條得先從 FR-140 開一個新輪次走到稽核結案。
- **棒 8 復核打折**：清單只看了深色主題（blsadmin 設定）、DEV 只 4 筆換 25／50 未實測。
- **套件版號未 bump**：`jedi-oscal-v2` 仍 2.6.0、`jedi-compliance-audit` 仍 1.3.7，但內容已改。發版時各 bump 一版；發版前 `pyproject.toml` 要從 path 還原成 pin 一起 commit。
- **推測，待 verify**：FR-145 的稽核報告 Word「改善計畫」一節（`ar_docx_poam_section.py`，CM-2855）讀的是本案 task 形狀 `props.{job_uid, assignee_user_ids}`——若本案 OSCAL 落點再動，FR-145 會跟著壞。verify：`grep -n "assignee_user_ids\|job_uid" app/flow_control/service/ar_docx_poam_section.py`。
- 坑 9（送出後抽屜手改期限不回寫 POA&M）是設計，決策者若在測試時提出要先講明不是 bug。
- 三 repo 皆未 push；push 一律決策者本人。

## §5 Pre-flight（必跑，唯讀）

```bash
# branch 與工作樹
for r in ~/Projects/Billows/Audit-Manager/compliance-manager-be ~/Projects/Billows/Audit-Manager/compliance-manager-fe ~/Projects/Jedicogy/module/jedi-python-package; do echo "== $r"; git -C $r branch --show-current; git -C $r status --short | head -5; git -C $r log origin/feature/FR-139..HEAD --oneline | wc -l; done
# 服務
lsof -iTCP:8000 -sTCP:LISTEN -P | tail -n +2; lsof -iTCP:5180 -sTCP:LISTEN -P | tail -n +2
tail -50 ~/Projects/Billows/Audit-Manager/compliance-manager-be/log/app.log | grep -i "error\|traceback" | tail -5
# Notion
cd ~/Projects/Billows/Audit-Manager/compliance-manager-be && for c in 2841 2842 2843 2844 2845 2846 2851 2862; do python3 scripts/notion_case.py query --case CM-$c | head -1; done
# DEV 改善計畫稽核次（密碼查 .env 的 DB_PASSWORD，帳號 cmmgr）
psql -h localhost -p 5432 -U cmmgr -d guidant_ai_dev -Atc "SELECT ps.id, ps.status, r.status, r.round_no FROM compliance.audit_round_passes ps JOIN compliance.project_audit_rounds r ON r.id=ps.round_id WHERE ps.status IN ('remediation','closed') ORDER BY ps.id"
# 清單端點冒煙（登入拿 token：POST /api/1.0/login body {username,password,provider:'password'}，帳密見 memory reference_dev_login）
# POST /api/1.0/grc/poams/my/list body {"pager":{"page":1,"page_size":10},"filters":{"status":"todo"}} → meta.status_counts 應 {todo:1, done:3}
```

## §6 環境座標

- DEV DB：本機 `localhost:5432` `guidant_ai_dev`，帳號 `cmmgr`（繞 RLS）／`cm_app`，密碼查 `.env`。
- BE：`python main.py` 8000（`RUN_MODE=worker` 另起）；log `log/app.log`。FE：`npm run dev -- --port 5180`，`.env.development.local` 指本機 8000。
- 登入：`blsadmin`（admin，主題設定深色），密碼見 test repo `.env.e2e` `TEST_PASSWORD`。
- headless 截圖：用 test repo 的 `node_modules/playwright`，登入欄位 `[data-testid="login-input-username"]`／`login-input-password`、`button[type="submit"]`；vite 頁 `waitUntil: 'domcontentloaded'`（networkidle 等不到）。
- OSCAL schema：`~/.claude/skills/oscal-knowledge/references/json-schemas/oscal_poam_schema.json`。

## §7 行為規範提醒

- 首腦不開 subagent、不自己實作；實作卡開 Notion case 另開 session。派工＝先有卡。
- 不切 branch、push 等決策者本人、只動 DEV。
- 改 BE service 後 runner 必重啟 BE；首腦驗收前確認 8000 跑的是新程式（`ps -o lstart= -p <pid>` 對 commit 時間）。
- 套件改動走 path dependency，不發版、不推 Nexus；`pyproject.toml` path 狀態不 commit。
- 畫面驗證 headless，不開視窗。UI 禁 `border-left` ≥3px。
- 每驗收完一張卡，回報固定附任務總表（§1 表）。

## §8 不在本期 scope

- Word／PDF 改善計畫報告（D7 不做）；舊資料遷移（D8）；暫行緩解措施（D11）。
- 稽核作業頁、稽核計畫頁、結案報告頁的同類改動分別屬 FR-142.9／FR-144.5／FR-145，本案不碰（共用 composable 改動要確認那兩頁沒壞即可）。
- FR-145 稽核報告的「改善計畫」一節屬 FR-145。
- 收口六項（SPEC／手冊／e2e／發版／進版／母卡 Done）等全流程測完、決策者下令。

## §9 給 fresh session 的短 prompt

```
你接手 FR-143 改善計畫（POA&M）重做的首腦，角色是分析決策／協調，不自己實作、不開 subagent。
先讀 docs/features/FR-143-2610-poam-ao-worksheet-and-excel/handoff/FR-143-STATE.md，照 §0 讀序把 design.md 指定四節與八張子卡復核段讀完，答 §0.4 自檢五題，跑 §5 pre-flight 唯讀盤點。
下一棒是決策者在 DEV 做全流程測試（design.md 端到端驗收八條），你接「回報 bug → 查根因 → 開修正卡 → 派 runner → 復核」循環。
讀取與盤點完成後不做任何事——不派工、不跑測試、不改檔，回報①自檢答案②現況盤點③待辦已就緒，等我下指令才開始作業。
```
