FR-056 收官後交接 — 下一棒:release(進版 + push + STG/POC 部署收口)

項目 內容
緣由 FR-056 全案收官(手測 + 收尾工作包 + STG/POC DB 全就緒),user 下令「準備先 release」,主導 session 交棒
Branch(三 repo 同名) feature/scan-plugin-integration不可切 branch;release 若需併回 main 由 user 決定與操作)
角色 首腦:主導 release 流程 + 派 case 給 runner + 陪 user 部署驗證;執行類工作發出去
現況一句話 FR-056 全部 Done(CM-927~935 九張卡收口),三環境 DB schema 對齊,三 repo 全未 push;下一棒任務 = 進版(version-bump skill)→ 等 user 明示 push → 部署收口
預估時間 進版 1~2 小時;部署驗證看 user 節奏

🧭 原始需求 / WHY(先讀,別跳)

FR-056 檢測工具整合平台:讓客戶「檢測工具(OpenVAS 等)掃描 → 報告自動變任務證據 → 通知 → 任務完成」全自動化。四子需求(56.1 工具設定 / 56.2 任務類型 / 56.3 Agent 執行 / 56.4 編排+轉證據)+ 手測期挖出的 10 個 bug 修復(CM-929~934)已全部驗收完成:2026-07-27 user 親測整條鏈路(同批多任務派工零撞名、auto/manual 完成模式、PDF 證據+發現統計、取消機制真中斷)全過,Notion CM-927~935 全 Done。

本棒(你)的任務:把這包成果 release 出去。具體 = ①主專案進版(走 version-bump skill:release note + pyproject bump + FE 版號對齊 + specs 凍結快照)②等 user 明示後 push 三 repo(push 同時會觸發 spec 站 Cloudflare Pages 上線)③陪 user 把 STG / POC 的服務部署收口(DB 已就緒,差 BE/FE 程式部署與 agent 出貨)。

你在大圖的位置:FR-056 開發已 100% 結束,不要再動功能 code。這一棒是純 release 工程 + 部署陪跑。開發期留下兩張新 case(CM-936/937)是 release 後的事,除非 user 說要塞進本版。

🧭 冷接自檢(答不出來回去讀對應章節)

  1. 為什麼現在 release?(FR-056 全案手測驗收完成,user 拍板;STG/POC DB migration 已套完等程式部署)
  2. 進版走什麼 SOP?必做哪兩步?(version-bump skill;release note docs/release_notes/v<X.Y.Z>.md + pyproject.toml bump,FE package.json 對齊同版號,specs current 複製凍結快照)
  3. 目前版號多少、這次大概進到多少?(BE/FE 皆 1.10.1;FR-056 是大型新功能 → 照慣例 minor bump = 1.11.0,最終由 user 拍板)
  4. 為什麼 push 前要等 user?push 會觸發什麼副作用?(規範鐵則 push 永遠等明示;push main 且動到 docs/specs/ 會自動部署 spec 站到 Cloudflare Pages——但目前在 feature branch,推 feature branch 不觸發)
  5. STG/POC 現在各缺什麼?(見 §3 環境矩陣——DB 全就緒;STG 缺 BE/FE 部署 + agent 已 0.2.8;POC BE code 已最新但 agent 還 0.1.0)

§0 接手讀序

🔒 先讀(懂 WHY)

  1. 本文件全文
  2. docs/features/FR-056-2607-detection-tool-integration/handoff/2026-07-27-fr056-manual-test-arc-SUMMARY.md — 全 arc 收口 SUMMARY(commits 全清單 / 10 bug 鏈 / 行為差異 / follow-up)

接著(開工前查座標): 3. §3 環境矩陣 + §5 commits 現況 4. version-bump skill(user 說進版時 invoke,不要憑記憶走) 5. docs/claude/docs-conventions.md 「SPEC 版本模型」段(凍結快照怎麼切)


§1 現況事實(全部已驗證,可直接信)

1.1 功能與 Notion

  • CM-927(手測主戰場,雷門)+ CM-929~934(六張子修正,小弟)+ CM-935(收尾工作包,小弟)全部 Done(2026-07-27)
  • 收尾工作包產物:使用手冊正式化(user-manual.html,刪修正敘事、對齊 0.2.8、與 discussion.html 雙向連結)、6 頁 spec 更新 + current html 重 build、arc SUMMARY、STG migration

1.2 版號座標

Repo HEAD 版本 備註
compliance-manager-be 12436bb8 pyproject 1.10.1 距上版 43 commits
compliance-manager-fe 5a2d2b5 package.json 1.10.1 ⚠️ HEAD 是 CM-928(agent 在線狀態改健康檢查即時結果)——主導 session 交接前才出現的 commit,未經本 session 驗收,進版前抽查一眼 diff
evidence-agent e59c9fc 0.2.8(獨立版號線,不跟主專案) 已部署 123(DEV);agent 版號進版不歸 version-bump skill 管

三 repo working tree 乾淨、全部未 push(唯一例外:BE 有幾個 untracked 的 docs/handoff 檔屬正常)。

1.3 Notion 待辦 case(release 後的事,不擋版)

  • CM-936:agent 管理頁隱藏「類型」欄位(純 FE,已開卡未派工)
  • CM-937(FR-056.9):agent 心跳自報 capabilities + 手冊環境開通 checklist 章 + detection_probe_no_agent 錯誤文案改善(已開卡未派工)
  • 未開 case 的口頭 follow-up:OpenVAS target/task 殘留清理策略、agent 對外暴露防火牆收緊、BE main_app.py 加 load_dotenv()(user 已同意方向:兩行改動 + override=False,.bashrc 環境變數逐步搬 .env——2026-07-27 傍晚 POC/STG 連環踩「.bashrc 變數服務讀不到」的坑後拍板,尚未開卡)

§2 前次教訓(本棒別重蹈)

  1. migration 檔名字母序 ≠ 依賴序:POC 套 fr056 時 2-jedt-fix-rls-delimiter 排在建表的 2-job-execution-detection-tools 前,先跑炸「表不存在」——--single-transaction 保命後調序重套即過。未來批次套要按依賴排。
  2. 環境開通三連坑(STG/POC 都踩):BE .envDRIVE_TOKEN_ENCRYPTION_KEY / DETECTION_TOOL_ENCRYPTION_KEY(心跳/工具頁直接 500)+ agent capabilities 要手動 UPDATE 加 detection_scan(CM-937 做完前的過渡)。POC/STG 都已補完,未來新環境照 CM-937 卡內 checklist
  3. 舊 compose 部署機的標準重啟式docker compose --profile full up -d --remove-orphans --force-recreate——不帶 --profile full 會把 nginx 當 orphan 砍掉;不帶 --remove-orphans 舊改名前容器佔 port;network 接線錯亂靠 --force-recreate.envAGENT_IMAGE 要先改 guidant-ai-agent:0.2.8(image 已改名,舊名 evidence-agent 會去 Docker Hub pull 然後 access denied)。永遠不加 -v3b. 部署機 repo 要先切對 branch(POC 實踩,2026-07-27 晚):agent 機 /opt/evidence-agent 若停在舊 branch,compose 檔就是舊的(AGENT_VERSION: "0.1.0" env 蓋掉程式 fallback → 心跳謊報 0.1.0,image 引用也是舊名)。部署前先在 agent 機 git fetch && git checkout feature/scan-plugin-integration && git pull(部署機切 branch 是 user 自己操作,不受「Claude 不切 branch」限制),再走標準重啟式。STG@122 大概率同樣要做。版號謊報的根治(importlib.metadata 自報 + 刪 compose env)已併入 CM-937。
  4. .env 是 root 擁有時 jedi 帳號寫不進(POC 189 實況)——sudo 要密碼,密碼類操作一律請 user 自己打,不代打。
  5. agent 版號 bump 五處同步(pyproject / config.py / compose image tag + AGENT_VERSION env / .env.example / rebuild.sh)——runner 連三輪只改 pyproject,要驗。

§3 環境矩陣(release 部署的起點)

環境 DB schema BE code FE code agent Fernet keys 備註
DEV(本機+123) ✅ HEAD 3a9a9c05+(本機跑 12436bb8 亦可) ✅ dev server ✅ 0.2.8 @123,capabilities 已含 detection_scan 全功能可測
STG(188 + agent@122) ✅ 11 支已套 + fr048 記帳補齊 ⚠️ 需部署(機器是 auditmanager-stg-01 ⚠️ 需部署 ✅ 0.2.8 @122,capabilities 已補 ✅ 已補兩把 user 已在 STG 測過測試連線(過了 no_agent 關)
POC(189 + agent 另一台) ✅ 11 支已套 ✅ 已同步 12436bb8(user 自行 rsync/pull 的,git safe.directory 已加) ❓ 未查 0.2.8 已升級(2026-07-27 21:05 心跳確認;當時卡在 agent 機 repo 舊 branch,切 branch + 標準重啟式後解決);capabilities 已含 detection_scan ✅ 已補兩把(user 以 sudo 補) tool-plugin-manage 頁已可開;剩工具設定+測試連線+真掃描抽測未做

POC agent 升級是部署收口最大缺口:agent 機座標問問 user(雲端 DB 在 189,agent 是另一台),流程照 §2 教訓 3。

§4 開工順位

  1. Pre-flight(§6)跑一遍,確認環境沒被動過
  2. FE HEAD 5a2d2b5(CM-928)抽查git show 5a2d2b5 --stat + 看 diff 是否影響 release(是 agent 管理頁在線狀態顯示邏輯,理論上獨立小改)
  3. user 下「進版」令後:invoke version-bump skill 走完整 SOP——release note(彙整 FR-056 全部 + CM-928 等零星 fix)→ pyproject bump → FE package.json 對齊 → specs current/ 複製凍結快照 v<新版號>/ → 兩個目錄各自重 build html
  4. push 等 user 明示:三 repo 分開推;推完提醒 user spec 站上線條件(要 main 才觸發 Pages)
  5. 部署陪跑:STG BE/FE 部署 → POC agent 升 0.2.8 → 各環境功能抽測(測試連線 → 派一次真掃描)
  6. release 後:問 user CM-936 / 937 / load_dotenv 三件要不要排下一輪

§5 三 repo commits 現況

  • BE:12436bb8(docs 收尾)← 28188b4d(spec 6 頁)← 102f6194(手冊)← 3a9a9c05(CM-931)…共 43 commits 未發版,全未 push
  • FE:5a2d2b5(CM-928,未經本 session 驗收)← e986b88(CM-931)…未 push
  • agent:e59c9fc(0.2.8 版號補齊)← 703b59a(CM-934)…未 push

§6 Pre-flight Command(必跑)

# 三 repo branch + HEAD + working tree
for r in compliance-manager-be compliance-manager-fe evidence-agent; do
  cd ~/Projects/Billows/Audit-Manager/$r && echo "== $r ==" && git branch --show-current && git log --oneline -1 && git status --short | grep -v '^??' | head -3
done

# 三環境 DB fr056 對齊快查(應各回 11)
cd ~/Projects/Billows/Audit-Manager/compliance-manager-be
export PGPASSWORD=$(grep '^#DB_SECRET' .env | sed 's/^#DB_SECRET=//' | python3 -c "import json,sys; print(json.loads(sys.stdin.read())['rds_master_password'])")
for t in "guidant_ai_dev 188" "guidant_ai_stg 188" "guidant_ai_poc 189"; do set -- $t; \
  psql -h 192.168.50.$2 -p 25432 -U cmmgr -d $1 -t -A -c "SELECT '$1: ' || count(*) FROM public.schema_migrations WHERE filename LIKE '%fr056%';"; done

# agent 心跳(DEV id=8 應 0.2.8;POC 在 guidant_ai_poc id=3,release 期間升級後應變 0.2.8)
psql -h 192.168.50.188 -p 25432 -U cmmgr -d guidant_ai_dev -t -A -c "SELECT 'DEV agent: ' || agent_version || ' ' || status FROM compliance.remote_agents WHERE id=8;"

§7 驗證上一棒工作已 close

CM-927~935 全 Done 已核實(本 session 親自抽查 CM-935 四工作包:STG 11 支 migration + 手冊 grep 驗證 + spec 6 頁變更行 + SUMMARY/CLOSED 標頭,全過)。無須重驗,直接開工。

§8 行為規範重要提醒

  • 不切 branch;push 永遠等 user 明示;收尾類動作等 user 下令
  • 進版 = version-bump skill,別憑記憶;specs 凍結快照切版時機 = version-bump 完成那一刻
  • 派 subagent 一律 1M context model(不帶 model override);執行類工作發給 runner
  • 繁體中文;Notion 先搜尋再開卡;Claude 作業填「小弟」、user 親測填「雷門」
  • SSH:jedi@192.168.50.189(POC)、jedi@192.168.50.123(DEV agent)免密可進;jedi@192.168.50.122(STG agent)本機無 key,操作請 user 代跑;sudo 密碼一律 user 自己打
  • 密碼/token 絕不寫入任何會 commit 的檔案

§9 不在本期 scope

  • CM-936(隱藏類型欄)/ CM-937(capabilities 自報)——release 後排程,除非 user 說塞本版
  • main_app.py load_dotenv() 改動——已拍板方向但未開卡,release 後處理
  • OpenVAS 殘留清理、agent 防火牆收緊——未開 case
  • jedi-* 套件發版(本輪無套件異動)

§10 給下一棒的超短 Prompt

請讀 docs/features/FR-056-2607-detection-tool-integration/handoff/2026-07-27-fr056-release-prep-handoff.md
接手 FR-056 release 棒。角色是首腦:主導進版 + 部署陪跑 + 派工給 runner,不自己實作功能。

先過交接文件「🧭 原始需求 / WHY」+ 冷接自檢 5 題,再跑 §6 pre-flight。

現況一句話:FR-056 全案 Done(Notion 九張卡收口)、三環境 DB 對齊、三 repo 未 push、
BE/FE 版號停在 1.10.1。本棒任務:version-bump skill 進版 → 等 user 明示 push →
STG/POC 部署收口(POC agent 還在 0.1.0 要升 0.2.8)。

FE HEAD 5a2d2b5(CM-928)是交接前新出現的 commit、未經驗收,進版前先抽查 diff。