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 現況與待辦

  1. 本檔 §1、§3、§4
  2. 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(必跑,唯讀)

# 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 → 復核」循環。
讀取與盤點完成後不做任何事——不派工、不跑測試、不改檔,回報①自檢答案②現況盤點③待辦已就緒,等我下指令才開始作業。