# FR-114 交接現況（STATE）

> **這份是 living 檔**：每棒就地 Edit，只描述「此刻」。歷史脈絡看同資料夾的 `FR-114-LOG.md`。
> 本 arc 是**派工首腦級**：把資安檢視總報告 145 件翻成 48（+若干連帶）張修正卡、切批、派 runner、驗收，現已進入**合回＋發版＋分版出包**階段。**首腦不自己修程式、不自己 build、不自己部署**——都派工或決策者自做，首腦驗。

| 項目 | 值 |
|------|-----|
| 最後更新 | 2026-09-28 午，第 12 棒收工：**1.21.0 正式版已上 190／188 STG／189 POC，六台 Agent 五台升 1.1.0**（123 連 DEV 那台等 token）。FR-114 主線結束，剩一條尾巴：第 11 棒在修正線補的 CM-2280／2281 兩支升級 bug 修正還沒合回主線、基線待重產。**先讀最末節「第 12 棒交棒（午）」** |
| 母卡 | CM-2019 https://app.notion.com/p/SUMMARY-145-worktree-3e2346da4cd0816a87fde3fc8a7eb10c （Not started，留給全案收尾棒） |
| 子卡 | CM-2021～CM-2068（48 張）＋ CM-2071／2072（第 6 批）＋合回發版階段新開一批（CM-2109～2137，見 LOG）。總表 `cards/CARDS.md`，進度看板 `BOARD.md` |
| 工作區 | BE `.claude/worktrees/wt-fix-security`、套件 monorepo `.claude/worktrees/jedi-wt-fix-security`，皆 branch `fix/security-b1`——**已於 09-28 合回四 repo `feature/review`（BE `fbbbb6d40`／套件 `feac7698`／FE `feac690`／agent `1355869`），worktree 目錄留著未刪但不再使用，一切在主 checkout 做** |
| 190 總測機 | **1.21.0 正式版＋Agent 1.1.0**（09-28 從 b4 `--upgrade`）；188 STG 亦 **1.21.0**（從 1.19.0 跳升；主產品機無 Agent，昨晚誤判的 0.2.30 容器是測試殘留）；189 POC 仍 1.19.0 未動。歷史：**1.21.0b3 全新安裝**（09-26 深夜，CM-2197 第 7 段；b2 已 uninstall，備份在 190 `/home/guidantai/`）。七服務 healthy（含新的 guidant-classifier），api 容器內無 docker。授權匯入與開通精靈由決策者自做。agent 未裝 |
| 接手前必讀 | §0 讀序 → LOG 第 4／5 棒 block → CM-2110 卡（發版全紀錄，含各段驗收） |

## 🧭 原始需求 / WHY

> 寫一次，之後不動。

- 資安檢視總報告（`docs/security-report/`）23 塊內化完、收尾成 `SUMMARY.md` 145 件（194 條去重）。SUMMARY 按嚴重度排、不是派工單；決策者裁六批修正順序，本 arc 把它翻成「一個工作區一張卡」並派工驗收。
- **決策者關鍵裁定**：依序做不平行（開 worktree 只為不碰掃描線主 checkout）；12 項待裁全「照建議」；41 張舊修正卡作廢；runner 修完自己改報告狀態；CM-2020 八處頁間不一致併本棒。
- 六批：1 權限地基 → 2 只驗登入不檢查歸屬 → 3 刪除 → 4 憑證殘留 → 5 設定與信任鏈 → 6 結構補強＋資料庫牆。**六批程式面已全部做完（見下）**，目前在「合回主線＋分版出包」階段，這是原六批之外的新階段，仍屬同一 arc。

## §0 接手讀序

1. 本檔全部。
2. `handoff/2026-09-23-merge-readiness.md`（合回順序／清理清單／總測建議／裁決清單七項——**已全部裁完**，讀它是為了知道裁完後長什麼樣，不是還要再裁）。
3. `FR-114-LOG.md` 第 4 棒＋第 5 棒兩個 block（信任鏈設計、發版全流程、188 build 踩過的坑）。
4. `BOARD.md`——卡片狀態總覽。
5. CM-2110（發版卡，Notion）——五段發版的完整回寫，含每段驗收細節。

## §1 當前狀態

- **程式面 50／53 全 Done**：五批 SUMMARY 修正卡＋連帶卡（5A-1 CM-2052、5A-2 CM-2053、X-3 CM-2085）全部完成並驗收。剩 3 張非程式面：5B-5（CM-2061，等 CM-1849 舊線退役）、第 6 批 2 張（資料庫牆，等下一輪安排）。
- **合回**：**還沒合回主線**。決策者 09-24 裁「現在合，不等 5B-5／第 6 批」，但發版改在工作區做、主線合回等資安掃描線（FR-115／116）結束才做。合回前清理卡 CM-2109 Done。
- **套件發版**：18 支套件已推 Nexus（jedi-common 1.3.0、iam 1.4.3【最終版，含 1.4.1／1.4.2 補發 .mo、CM-2116 角色範本＋管理員不可刪】、task-platform 1.2.0、file-upload 1.3.0、issue 1.3.0、survey 1.2.0、remote-agent 1.2.0、detection 1.2.0、log 1.3.0、ai-dashboard 1.3.0、integrity 1.2.1【最終版，刪死方法】、bulletin 1.2.0、compliance-audit 1.2.0、asset 1.2.0、ai-bot 1.3.0、flow-engine 1.4.0、system-core 1.2.0、notification 1.2.0）。
- **BE**：已 pin 18 支新版（`99b0721c3`），工作區 HEAD `74239a353`（含 CM-2135 build 修正、1.21.0b1 版號與 release note）。
- **版號**：本體定為 **1.21.0b1**（CM-2137，預發版，決策者裁；總測過後才定正式 1.21.0）。
- **188 build**：三顆 image（be／fe／init）全綠，FE 含新版前端資安修正，容器探針過。**封包用 `--skip-prod-key-check`**（jedi-license-runtime 缺 PROD 公鑰，決策者放行出內部測試包，歷來包皆如此）。
- **本體出包**：`/opt/guidant-ai-be/.build/bundle/guidant-ai-1.21.0b1.tar.gz`（944MB，188），image tag `1.21.0b1`（be／fe／init）。
- **190 專機**：第 5 棒最後派 subagent 移除本體 1.20.0＋agent 1.0.0 並全新安裝本體 1.21.0b1（agent 不重裝，等新版）；**授權匯入與開通精靈由決策者自己做**。完成與否以 CM-2110 卡最後一段回寫為準。
- **agent 輪已開跑**：第 5 棒最後派唯讀 agent 盤點 evidence-agent v1.0.0↔fix/security-b1 打包差異——**盤點已回**：必修 1 件（Nuitka `--product-version` 不收 `1.1.0b1`，照本體 build_release.sh:330 抄）、不處理會默默出錯 2 件（版號撞 1.0.0 會蓋掉已出貨產物；188 agent repo 停在 v1.0.0 main 未 fetch fix/security-b1）；本體那輪四類坑 agent 皆不擋。**CM-2138 Done**：agent bfcddd1（1.1.0b1）已推；188 出包一次過——原生 `/opt/guidant-ai-agent/.build/bundle/guidant-agent-1.1.0b1.tar.gz`、compose `/opt/guidant-ai-agent/.build/compose/guidant-agent-compose-1.1.0b1.tar.gz`（STG 鑰簽，內部測試包）。**190 本體 1.21.0b1 已裝好**（備份 `~/guidant-backup-1.20.0-before-1.21.0b1-20260924_1815.sql.gz`；新授權指紋 ff793254…，舊 license 需重簽；授權與開通由決策者做）。**下一步：agent 1.1.0b1 裝 190 並驗協定**。已知不擋：compose 版 install.sh 無安裝期時鐘提醒、agent 內建公鑰缺 PROD（LC 輪）；裝 190 時要驗協定（全新註冊、1.0.0 升級 401 自動重註冊且 agent_uid 不變、資料面、時鐘偏差），並確認 190 雲端 AGENT_AUTH JWT 私鑰路徑有設。決策者：他一邊測本體（agent 以外），agent 同步打包。

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

決策者已拍板、不容重啟：

1. 合回時機：**現在合回**，不等 5B-5／第 6 批。
2. 發版策略：**在工作區發版**（掃描線 FR-113 讀主 checkout，主線合回等掃描結束）；只發套件不發本體；BE 工作區建獨立 venv；188 放行；四 repo `fix/security-b1` 已推 GitLab。
3. #96／#97＋CM-1605：納入本批（A 案），既有郵件設定升級後不變、新建預設驗憑證、可貼內部 CA → CM-2111 Done。
4. 開機查 DB：只收窄「權限不足」（A 案），表不存在維持放行 → CM-2112 Done。
5. CM-2039 任務歸屬回歸（未指派任務 DEV 99.7% 規劃頁 404）：改讀輪次鏈 → CM-2113 Done，擴成全系統唯一任務歸屬判斷＋接 W8-1（jedi-survey CM-2114、我的任務 view CM-2115、其餘四處 CM-2119 皆 Done）。
6. 出貨基線：**整包重產**（合回後、188 build 前，已完成，5 支 active migration：1-4b、1-5b、1-9 政策、5A-5、CM-2115），已備份舊基線；「依套件產生」另開 **FR-117**，等本批結束再排。
7. 另開卡：CM-2116（角色範本，Done，改走 jedi-iam 建租戶服務注入＋管理員角色不可刪）、CM-2117（儲存密鑰後端擋，Done）、CM-2118（進度查詢補成員檢查，Done）；死方法併清理卡；代理程式離線接手記已知限制；`list_ap_parties` 總測觀察；管理者代刪不開。
8. monorepo 缺 lock：封存 6 支不補，4 支在用的合回時已 `poetry lock`。
9. 版號：**1.21.0b1**（預發版，決策者 09-24 裁；正式 1.21.0 待總測過）。
10. 順序：**先收本體（已完成）→ 再 agent → 最後 LC**。
11. 總測：**等本體與 agent 兩邊都更新後才一起做**（本體出包後先不部署 DEV，等 agent）。
12. 打包發現的問題：188 全量 build 首次 run5 撞探針⑥ FAIL，首腦派唯讀 agent 整批盤點 v1.20.0↔fix/security-b1 打包差異——探針⑥為假警報，真壞兩件（產物權限 700／600、188 FE repo 停在 main 未含前端資安修正）已修（CM-2135），另發現版號會覆蓋既有出貨 image（已改 1.21.0b1，CM-2137）。CM-2136 驗證 CM-2053 驗收②③成立。三張皆 Done。
13. 🔴 **正式版 1.21.0 發版前必做**：①第 154 項 jedi-common 1.3.1（CM-2171 已修，發版在 CM-2197）；②LC 生成 PROD 鑰對 → 加進 `jedi-license-runtime` `public_keys.py` → 發版 → 重 build BE → `build_bundle.sh` 不帶 `--skip-prod-key-check` 封包（留在 LC 那一輪做）。
14. 決策者 09-24 提、**總測後再開**（不在本輪 scope）：①本體↔agent 版本支援對應表；②本體升級偵測 agent 版本不相容要有通知——這兩項另開 FR，總測後才排。

## 🔴 第 6 棒接手後做什麼（按序，每項等令）

1. **agent 輪**（決策者裁順序：本體→agent→LC，本體已完成，輪到 agent）：
   - 先派**唯讀** subagent 比對 evidence-agent v1.0.0 ↔ `fix/security-b1`（套件 `ecdc9f3`、`9edda49`）的打包差異——照比本體這次踩過的坑：cryptography 是否編進 core（連坐）、產物權限、探針外部 python 跑法、FE／repo HEAD 是否含新版、版號撞號風險。**先盤點再 build，不要邊撞邊修**（本體那輪連撞四次的教訓）。
   - 版號建議 **1.1.0b1**（與已出貨 1.0.0 tag 不撞號），待決策者裁。
   - 188 `/opt/guidant-ai-agent` 出包（build 前依 build 機 README 規定先 `git pull` 並驗 HEAD；也要查併行 build：`pgrep -f 'nuitka|build_all'`）。
2. **LC 輪**：本批 LC 程式未改（CM-2053 回執驗的是 LC 既有簽發 token，確認即可）。🔴 **正式 1.21.0 前必補 PROD 公鑰**：LC 生成 PROD 鑰對（私鑰只留 LC）→ 加進 `jedi-license-runtime` `public_keys.py` → 發版 → 重 build BE → `build_bundle.sh` **不帶** `--skip-prod-key-check` 封包。
3. **agent 出包後**：本體＋agent 一起部署到 DEV（或 190）→ 決策者總測（決策者已裁：兩邊都更新後才一起測）。手測清單在各卡「首腦驗收」段；整理稿 `handoff/2026-09-23-merge-readiness.md` 第 7 節。
4. **總測通過** → 正式版 1.21.0（`version-bump` skill 全套，含 spec 快照）→ 才談 STG／POC。
5. **合回主線**：等資安掃描線（FR-113／115／116）結束；`docs/features-site/` 以主線為準；CM-2032 那筆主線已有同內容。合回後清主 checkout 共用 venv 那 12 個指到 jedi 工作區的 `.pth`。
6. **收尾文件（等令）**：升級手冊補三句（三顆讀取權限升級自動補、郵件憑證驗證建議開啟、共用 cluster 跑 init.sh 會重設 cmmgr／cm_app 密碼）；GUIDE-02 權限守門兩種流程；SaaS TLS 終結點一行（決策者／維運）；資安報告 CM-2111～2134 狀態重 build；188 build README 補「build 機禁止用 sudo 做 git 操作」；母卡 CM-2019 收 Done。
7. **另開卡候選（攢給決策者，等總測後排）**：本體↔agent 版本支援對應表＋版本不相容通知；compliance-audit 三支 `_require_participant` 收攏需 guard 新開入口；jedi-common dev 依賴殘留 pytestarch；`task_execution_query.py:89` 以指派列專案欄列待辦；`ext_workflow_execution.py:158` 關聯把流程 id 當專案 id（app 層零呼叫、死路徑）；`detection_job_notify_query.py:106` 指派表備援；產物根目錄 six.py／typing_extensions.py 死檔；FE image 標籤 BE／FE 版號寫法不一致要手補 tag（188 陷阱②未根治）；FR-117 出貨基線改依套件產生。
8. **延後的**：CM-2061（等 CM-1849）、CM-2071／2072（第 6 批，等第 1～5 批合回測過一版後手動派）。

## 驗收怎麼做（首腦的核心工作，程式面已用完但發版／打包驗收沿用同精神）

runner／發版動作回寫後，**不信自報、自己開檔**：
1. 到對應工作區 `git log --oneline -3`、`git show --stat <hash>`：動的檔在範圍內？
2. 逐項對照卡上「在哪裡」的 file:line：都改了？有沒有 fail-open、有沒有另立 helper 不用 `common/authz`？
3. 報告：BE 工作區 `grep -n "FR-114.<卡號>" docs/security-report/M*.md SUMMARY.md` 命中？
4. 測試：在工作區重跑，**套件卡帶 `PYTHONPATH=<套件工作區>`**（不帶會驗到 site-packages 舊版全綠）。
5. 打包／build 類：**唯讀驗證不部署**，比對上一次成功 build，不要邊 build 邊撞。
6. 信任鏈／身分驗證類裁定：**現況事實先由獨立 agent 開檔核對再裁**，不信 runner 對現況的描述（CM-2052 三個前提全被推翻的教訓）。

## 派工方式

`night-run/` 自動跑階段已於第 3 棒結束（八輪）。**剩餘工作（agent 輪／LC 輪／總測）一律手動派工**，不進自動跑。

手動派工 prompt 樣板：

```
做 CM-20xx：<卡名>
<卡 URL>
model：<建議>／effort：<建議>／理由：<一句>

工作目錄：/Users/chouraymond/Projects/Billows/Audit-Manager/compliance-manager-be
先 `python scripts/notion_case.py get <URL>` 讀完整張卡，卡是自足的。
卡上「工作區」段指定的目錄才是你改碼的地方，絕不碰主 checkout。
做完：commit → Notion append 白話補充 → 狀態改「修正待驗證」→ 停下等驗收。
不 push、不切 branch、不發版、pyproject.toml 的 path 改動不 add。
```

## 合回與發版（都等決策者下令；本體已完成，模式沿用到 agent／LC）

`fix/security-b1` 合回各 repo `feature/review`；套件發版走 Nexus；BE／agent 出包走 188 build 機（`/opt/guidant-ai-be`、`/opt/guidant-ai-agent`，git pull 更新，禁 scp/rsync）。**首腦不自己合、不自己發、不部署**。

## 已知的坑（累計，第 6 棒沿用）

- Workflow 觸發原話會原文轉發給每個 runner 且優先於腳本任務——貼給執行首腦的 prompt 必須以 runner 視角寫（第六輪零改動事故，已修正 `night-run/HANDOFF.md`，但自動跑已結束，僅留作紀錄）。
- runner 為了讓某個 build 檢查過會放寬工具的範圍參數（CM-2048 把 sync 改 `--all` 夾帶 242 檔）——派工 prompt 要寫「不改任何腳本的範圍／模式參數」。
- 套件卡 pytest 不帶 PYTHONPATH 全綠但沒測到（CM-2023）。
- 驗收用 `git grep` 不用 `grep -r`（後者會把 gitignored 的 `.claude/`、掃描產物算進來，永遠驗不到零命中）。
- **發版與改碼並行會一直補發**——同一支套件改動全做完、驗完才發（iam 1.4.1→1.4.2→1.4.3 補發三次的教訓）。
- **從 worktree 發版會漏不入版控的資產**（jedi-iam 1.4.1／1.4.2 缺 `.mo`，因套件庫 `.gitignore` 排除、worktree 從 git 開出沒有）——發前比對 wheel 內非 `.py` 檔與上一版差異。
- **動打包方式的卡驗收時要比對上一次成功 build**，不要邊 build 邊撞（CM-2053 cffi 守門連撞四次才學到）。
- **188 build 機曾有人用 root 操作 git**，build 目錄擁有者被改成 root，切分支會靜默漏檔（已 chown 修復，README 待補這條禁令）。
- **跑 build 的 shell umask 077 會出 700／600 產物**，裝機才炸（已加斷言，CM-2135 修）。
- **驗收環境打折要當場講明**：runner 在 188 dist 目錄測出的差異若是環境限制造成（如 .pyc 缺口在正式 image 不成立，因 image 不含 .pyc），要在回報寫明打折處。
- **長 session runner 會被卡上疊加的舊指令搞混**——重跑類任務開新 session 或由首腦派 subagent，prompt 明寫「只照最後一段」。
- 主 checkout 根目錄下 `CLAUDE-SECURITY-*/` 掃描產物含憑證原文（gitignored），累積多個目錄——衛生問題，已回報決策者，不在本 arc 範圍。

## 🟢 第 5 棒最後狀態（2026-09-24 深夜，首腦自核）
- **190 已升級到 1.21.0b2**（`/api/1.0/version` 回 1.21.0b2、commit 9ff0a5060；六服務 healthy；決策者開通狀態、帳號、上傳檔筆數升級前後一致）。備份 `~/guidant-backup-1.21.0b1-before-b2-20260924_2232.sql.gz`。agent 未裝。
- 1.21.0b2 內容＝b1 ＋ 測試期修正：CM-2142（檔案下載全掛，jedi-file-upload／jedi-issue 1.3.1 已推 Nexus，tag 指 ab68291b）、CM-2143（`sudo guidant setup-token`）、CM-2144（公告全公司）、CM-2145（拿掉 AI 分類設定分頁）、CM-2147（超級管理員不再免專案成員檢查——決策者裁定的新行為）、CM-2148（任務卡住查詢補成員檢查）。
- 包：188 `/opt/guidant-ai-be/.build/bundle/guidant-ai-1.21.0b2.tar.gz`（944,435,027 bytes，內部測試包 skip PROD key）。BE fix/security-b1 `9ff0a5060`、FE `6f3a075`、套件 `ab68291b`。
- **決策者 09-25 在 190 總測（agent 以外）**；測出的問題照 CM-2141 母卡模式收。
- ⚠️ 188 /opt 剩 25G（92%），下次出包前先清（只刪舊 dist 解開目錄、保留 tar.gz；`docker builder prune -f` 不加 -a；刪 image 前看 STG 在用 1.19.0）。
- 本機 8005／5185 仍起著 1.21.0b1＋修正棒原始碼（PYTHONPATH 指套件工作區），BE 工作區有一份複製的 `.env`（不入版控）——第 6 棒確認決策者不用了就停掉並刪 `.env`。
- 第 6 棒待辦順序不變：決策者總測回報 → agent 1.1.0b1 裝 190 驗協定（要先在 190 產生 agent 註冊碼；確認 AGENT_AUTH JWT 私鑰路徑有設）→ LC 輪＋PROD 公鑰 → 正式 1.21.0。

## 🟢 第 6 棒此刻狀態（2026-09-25 午，覆蓋上一節的「待辦順序」）
- **掃描線 FR-119 交接（CM-2150，`handoff-to-fix-line.md`）已消化並開成第 7 批**：母卡 **CM-2170**，子卡 **CM-2171～2197**（27 張：線一 7-1a／線二 7-2a～f＋7-2t／線三 7-3a～f／線四 7-4a～b／線五 7-5a～e／線六 7-6a～f／發版 7-R），另含既有 CM-2071／2072（線六，不重開）。spec 在 `cards/spec-b7*.json`，建卡結果 `cards/made-b7.json`，卡號對照已 append 到母卡。
- **程式面不再是「全 Done」**：CM-2037 退回（7-2a）、CM-2041 缺口（7-2b）、CM-2065 使第 154 項惡化（7-1a）。
- **決策者 09-25 裁定**：①全部進 **1.21.0b3**，190 上 b2 可先測 b3 不動的部分、測出問題照 CM-2141 收並併入第 7 批；②FR-120 主專案掃描不等，結果另出一版；③原第 6 批 CM-2071／2072 一起進 b3；④改**平行**：六條線同時跑、線內依序；同一支套件整條線做完驗完才發一次版（發版集中 7-R）；⑤六支套件異動整批同意；⑥出貨基線全部 migration 盤完一起重產一次（在 7-R）；⑦agent 裝 190 排在 b3 之後。
- **正式 1.21.0 前必做**（STATE §2 第 13 條）追加：第 154 項（jedi-common 1.3.1）。
- **首腦核對過、不開卡的**：交接 1-8「修正線啟動會炸」不成立（agent ack／result 走套件 `plugin/assembly.py` 自組的服務，參數齊；BE 那個 provider 零使用者＝死 provider，7-6f 清）；FR-120 `di-wiring-audit-fixline.md`「🔴」節多出的 4 處是拿主 checkout 容器檔比出來的誤報，工作區都已接好。
- **runner 會停下來問決策者的**（卡上已寫）：7-1a 信任幾層代理；7-3b 已棄用版本要不要擋、FE 版本選單要不要只列已發佈；7-3d 壓縮炸彈共用檢查放 compliance-audit 可否；7-5a 既有角色補 `module-frame.read` migration；7-5c 空白範本下拉縮減法；7-6d AI 儀表板入口（jedi-ai-dashboard 不在發版清單）；7-4a 回寫範圍外 `clear_ssp_body`／`import_ssp` 是否另開卡。
- **下一步**：決策者發令 → 給六條線派工 prompt（各線第一張：CM-2171、2172、2178、2184、2186、2191）→ 逐卡驗收 → 7-R。
- 本機 8005／5185 與 BE 工作區 `.env` 的去留仍待決策者回覆。
- **09-25 決策者裁（第 7 批待裁八件）**：CM-2186 三件照建議（補 `module-frame.read` migration、範本下拉「看範本或建專案」、範本 SSP 網址補看範本）；CM-2188 第 149 項選 A（只拿掉 email 與設備 IP）；YAML 匯入入口清掉（FE 死碼，BE 路由保留）；Word／Excel 建新範本版本選單只列已發佈；**另開卡候選（b3 之後）**：「執行項目清單」改／刪子項 DEV 500（套件寫回缺租戶欄位被 RLS 擋）、AI 儀表板查問卷缺模組授權（jedi-ai-dashboard 加申報欄）、`PUT /task-survey/<uid>` 空 body 500、刪有子版本／主版本的框架版本回原始 FK 錯誤、資源庫孤兒程序書掛載。

## 🟢 第 6 棒：第 7 批修正面全數完成（2026-09-25 晚，首腦逐張驗收）
- **CM-2171～2196（26 張）＋CM-2071／2072＋修正棒 CM-2168／2169 全部 Done**，首腦逐張開檔核對＋重跑測試（套件帶 PYTHONPATH 指工作區）。過程退回 3 次（CM-2190 錯誤碼撞號、CM-2196 守衛測試過期登記、CM-2172 必填參數漏改套件兩呼叫端），都已修並複驗。
- 工作區 HEAD（皆乾淨、未 push）：BE `501670e49`、套件 `ac743850`、FE `2cb7fb4`；測試 repo `feature/review` `b2395b2`（CM-2175）。
- **決策者 09-25 另裁**：CM-2072 群組／控制項成員退役（資料表先留）；CM-2071 作廢「補 project_id 欄位」、改做指派前核對任務所屬專案（CM-2113 唯一判斷），無 migration。
- **下一步＝發版卡 CM-2197（1.21.0b3）**，等決策者發令。卡上已追加的注意事項：
  - 套件發版：common 1.3.1、iam 1.4.4、compliance-audit 1.3.0、oscal-v2 2.5.0（**lock 要重產**）、survey 1.2.1、evidence-classification 1.3.1、task-platform 1.3.0（**發前修 `test_no_rls_enabled_on_these_tables` 既有紅燈**）、detection 1.2.1（CM-2168）。
  - 新 migration：主線 active 1 支（CM-2195 兩表 RLS，**要重產出貨基線**）；seed 2 支（CM-2169 問卷資料夾、CM-2186 補 module-frame.read，不進基線）。
  - 發前三支守衛測試（module_boundaries／error_code_uniqueness／error_code_mirror_parity）全綠；release note 寫「超級管理員非成員 403」與「7 支網址已退役」。
  - b3 上 190 後 e2e 全量重跑一次（CM-2177 曾遇暫態紅）。
- **e2e 既有紅燈（收口棒處理）**：J5A-6／7／8 期待碼因 CM-1802 改號沒跟上、DEV 缺 blsshino 帳號、CM-814 drawer 定位。
- **另開卡候選追加**：`_resolve_ssp` 第三段 `ap.uid`→`ap.uuid`（一行）、`GET /module-frame/item/<不存在>` 500、匯入外部服務提供者被 dedupe 丟掉、`oscal_io_service.clear_ssp_body／import_ssp` 補凍結檢查、spec 四頁仍寫已拆網址、總表第 128～180 項「已修」標記在主 checkout 合回時集中標。
- **09-26 決策者裁**：FR-120 高風險三件補進 b3——CM-2200（#188 XSS）、CM-2201（#192 重建資料夾跨客戶）、CM-2202（#212 總部層判定：落地版＝安裝精靈建的客戶租戶＋能力點，SaaS＝只原廠；理由：落地版不開原廠運維帳號給客戶，寄信／LDAP 要讓客戶自己設）。其餘 #181～218 另排。另開 CM-2199（主 checkout 回寫第 7 批已修狀態到資安報告／總表，已先知會掃描首腦）。
- **09-26 決策者再裁**：再補 CM-2203（#198 匯入任務 Excel 炸彈）、CM-2204（#194 同 Google 帳號只能接一個租戶）、CM-2205（#182 落地版拿掉授權開關，決策者：還沒 build 就一起）進 b3，接在 CM-2200～2202 同一 runner 後；#193 雲端資料夾分享 POC 階段暫緩（理論上要綁 Workspace，短期不綁）。
- **09-26 第 7 批追加全數 Done**：CM-2200～2205（#188／#192／#212／#198／#194／#182）＋CM-2199（主線報告回寫，首腦補修 `b3a569dd0`、`87833afb0`）。BE 工作區 HEAD `c8aa7d026`，全量測試對 b2 基準差集 **新增紅燈 0**（2665 passed）。退回一次：CM-2203（補空白提早停＋5,000 列上限）。
- **下一步＝發版卡 CM-2197（1.21.0b3）**，等決策者發令。追加事項已寫在卡上：active migration 兩支要重產出貨基線（CM-2195、CM-2204）；release note 補落地版授權一律執法、同 Google 帳號限一租戶、寄信／LDAP 由安裝租戶管理員設定。
- **待決策者回覆**：第 201 項（流程圖刪方塊）查不到專案時放行還是擋下；CI 密碼掃描沿用 CM-877、需確認 GitLab Runner 能否跑 docker。
- **主線待辦（非修正線）**：`FR-063/deployment-env.html` 未重 build；SPEC 授權頁「關總開關即放行」待收尾更新；主 checkout 35 支他人 rebuild 殘留 html 未 commit。
- **09-26 決策者再裁**：第 201 項（§7 第 51 項，流程圖編輯器刪任務）也進 b3 → CM-2208（查得到專案就要管理人、查不到放行）。CI 密碼掃描沿用 CM-877。

## 🟡 第 6 棒此刻（2026-09-26 傍晚）：b3 暫停 build，等掃描線全案交接
- **CM-2208（#201）Done**（`1516d90bc`）。修正線工作區 HEAD `1516d90bc`，所有已開的修正卡（第 7 批＋追加 CM-2199～2205、2208）全數 Done。
- **決策者 09-26 裁**：FR-120 主專案掃描已全部掃完，**b3 不先 build**——等掃描線把剩下的項目整理交過來，全部看過一遍、一起修進來再出一次包，不 build 過渡版本（避免重工）。
- **下一步**：等掃描首腦（第二十三任）的交接清單（預期同 FR-119 `handoff-to-fix-line.md` 格式）→ 決策者逐項裁 → 開卡（第 8 批）→ 派工驗收 → 才開 CM-2197 發版。
- CM-2197 發版卡上已累積的注意事項（套件清單 8 支＋task-platform、lock 重產、既有紅燈、兩支 active migration 重產基線、release note 各條）**保留不動**，第 8 批若再加套件／migration 追加到同一張卡。
- 事實更正：CM-2208 runner 查到 DEV 54,267 個有任務的流程實例**全部查得回專案**（CM-2113 補輪次鏈之後），卡上引用的「11,710／910」已過期；「查不到放行」實務上幾乎不會走到。
- 仍待決策者：CI 密碼掃描沿用 CM-877，需確認 GitLab Runner 能否跑 docker。

## 🟢 第 6 棒交棒前最後狀態（2026-09-26 晚）：第 8 批已開卡待派，第 7 棒接驗收與發版
- **掃描線全案收口**，交修正線清單 `docs/features/FR-120-2609-host-residual-security-scan/handoff-to-fix-line.md`（`e1831a0b8`），決策者已逐項裁完、無待問。
- **第 8 批 12 張已開**：CM-2211～2222（8-A～8-L），卡號對照與三批派法（甲 8011／乙 8012／丙 8013）在母卡 CM-2170 最末段「第 8 批」。spec／建卡結果：`cards/spec-b8*.json`、`cards/made-b8.json`。
- 撰卡 subagent 核對時的更正（已寫進各卡）：8-K SHARED 出貨基線早已支援、落後的是套件 migrations（**不需為此重產基線**）；`scripts/sql/packages/` 是 gitignore 的 build 產物；8-L `EvidenceClassificationService.js` 要修剪不是整支刪（`getRunState`／`putRunState` 仍被 `useEvidenceClassification.js` 用）；8-E M06-16 只拆閒置的 `job_execution_service` provider（`job_execution_domain_service` 大量使用要留）；8-B `db_reader.py` 實為 `infra/support/diag_db_reader.py`。
- **8-L 做完後由首腦派既有卡** CM-1871（分類容器 image 進出貨包）、CM-2061（M07 五件驗證），不重開。
- **CM-2197 發版卡**已追加第 8 批事項（jedi-ai-dashboard 新增發版、8-E 第 215 項 migration 要重產基線、release note 三句、8-D／8-F／8-L 要 190 實裝測）。
- **第 7 棒接手做**：派第 8 批三段 prompt（見下）→ 逐卡驗收（驗收紀律照本檔「驗收怎麼做」；套件卡帶 PYTHONPATH；每張做完跑三支守衛；全批做完對 b2 基準跑全量差集，基準失敗清單做法見 LOG 第 6 棒）→ 派 CM-1871／CM-2061 → CM-2197 發版。
- CI 密碼掃描：決策者 09-26 裁「先放著」（CM-877，待確認 Runner 能否跑 docker），不擋 b3。
- **b3 出包後**：回掃描首腦「b3 實際修掉的總表項次＋commit」，它照著回寫 PM 總報告第 181～218 項。

## 🟢 第 7 棒交棒前最後狀態（2026-09-26 深夜）：第 8 批全收，下一步只有 CM-2223
- **第 8 批 CM-2211～2222 全 Done**，首腦派獨立 opus 驗收員逐張開檔核對（套件帶工作區 PYTHONPATH），退回三張補完再驗（CM-2212 遮罩七種漏網、CM-2213 webhook 非 ASCII＋專案名稱跳脫、CM-2214 交換目錄被換捷徑）。各卡最末段有「首腦驗收」。
- **全量差集**（BE 工作區 `046553756`、套件 `87fd5439`，對 b2 `9ff0a5060`／`ab68291b`）：BE b2 2576 過／116 敗 → 現在 2737 過／115 敗，**新增紅燈 0**；六支套件無新增紅燈（compliance-audit、evidence-classification 測試數減少是隨功能刪除）。輸出在 `/private/tmp/claude-501/diff8/`（暫存，會消失）。做法：兩個臨時 `git worktree add --detach` 開 b2，同一個 venv、`-o addopts=` 跑，輸出寫檔只讀摘要。
- **決策者 09-26 裁：落地版證據自動分類是 b3 驗收項目，做法選「分類改成常駐服務」**（不掛主機 docker、不另做代理）。開 **CM-2223（8-M）**，CM-1871 併入其出包段。背景：落地版後端本身是容器，沒有 docker、碰不到主機 docker，190 b2 實查確認；FR-063 D4 早知道，FR-107 改判開放但 CM-1871 只寫 image 進包、漏了後端怎麼起容器。
- **順序（決策者定，不要提前）**：①派 CM-2223 → 它先回寫協定形狀與 uid／volume 對齊（十行內），首腦看過才實作 → 實作完驗收 ②CM-2223 驗收通過後才派 **CM-2061**（M07 五件驗證；#129／#130／#131 會被 CM-2223 改到，提前查是白工，卡上已註記）③CM-2061 查出要修的開卡修 ④全部驗完才開 **CM-2197 發版**（先前給過「先做 1～4 段」的 prompt，決策者叫停，**未派**）。
- CM-2197 卡上已累積：第 8 批發版事項（jedi-survey、jedi-ai-dashboard 一定要發新版＋改 pin，否則後端起不來；jedi-detection、task-platform、compliance-audit、evidence-classification 以 tag..HEAD 為準）；8-E migration 要重產基線；release note 三句＋落地版開放分類；190 實測項（8-D 真機 diag、8-F 併發開通、8-G 到期唯讀、分類全流程且 api 容器內仍無 docker）。
- **另開卡候選（攢給決策者，總測後排）**：前端「新建掃描設定檔就能勾分享」（8-K）；過期前發出的註冊碼仍能加入新代理（8-G）；`project_participant_service`／`project_control_participant_service`／`project_summary_report_history_service.py:76` 仍是「零件有接才檢查」；`DETECTION_TOOLS_400013` 與後端碼同號不同義；8-L 殘留註解與舊路由名（套件 `plugin/contract.py:124-125`、FE `EvidenceClassificationReview.vue` 的 `runFolderId`、`menu.json` 兩個舊路由名、`scripts/deliverables/out/routes.json` 待重產）。
- **資安報告狀態**：第 8 批 12 張都沒回寫報告（報告只在主線），比照 CM-2199 由主線回寫卡統一補，b3 出包前開。
- BOARD.md 已落後（第 7、8 批未更新），以 Notion 與本檔為準。
- 仍待決策者：CI 密碼掃描沿用 CM-877，GitLab Runner 能否跑 docker。


## 🟢 第 8 棒交棒（2026-09-27 上午）：b3 已裝 190，進入「收回報→分批修」階段
**此節覆蓋上面所有「第 6／7 棒此刻狀態」節的待辦，以此為準。**

### 現況（首腦逐項實查過，不是 runner 自報）
- **190 = 1.21.0b3 全新安裝**：`/api/1.0/version` 回 1.21.0b3、commit `fa2d59b30`；七服務 healthy；`docker exec guidant-api which docker` 空、無 docker.sock；分類 image 只有包內 `evidence-classifier:1.4.0`；`.env`／api／classifier 三處 CLASSIFIER token 一致；分類服務只在 `guidant_guidant-classifier` 網路。`setup/status` 未初始化，**決策者自己匯授權、跑精靈**。
- **包**：188 `/opt/guidant-ai-be/.build/bundle/guidant-ai-1.21.0b3.tar.gz`（1,375,946,886 bytes，sha256 OK，內部測試包 skip PROD key）。四顆自建 image ＋ compose 的 `guidant-classifier` 段都在包裡。188 剩 59G；BE／FE clone 已還原 detached；STG 仍 1.19.0 未動。
- **程式面**：修正線三 repo 都在 `fix/security-b1` 且**已 push**：BE `fa2d59b30`、套件 `35ba8e84`（含 tag）、FE `53a8d6a`。十支套件發 Nexus：common 1.3.1／iam 1.4.4／task-platform 1.3.0／evidence-classification 1.4.0／file-upload 1.3.2／ai-dashboard 1.4.0／detection 1.2.1／compliance-audit 1.3.0／survey 1.2.1／oscal-v2 2.5.0；188 build venv 實裝逐支相同。出貨基線已重產（1.21.0b3）。
- **本棒收掉的卡**（全部首腦自己開檔＋實跑驗收，紀錄在各卡尾「首腦驗收」）：CM-2223（分類改常駐服務）、CM-2061（M07 五件驗證：只 #130 消失）、CM-2224（清 188 磁碟，Done）、CM-2225（#89 提示注入，真金鑰實測注入無效）、CM-2226（#132 鎖版本，竄改 hash 實測被擋）、CM-2227（#129 目錄清理＋#131 開發機上限，實測容器帶 2g／2cpu／256、逾時後容器已不在）、CM-2228（#217 刪檔先刪紀錄）、CM-2229（base image 釘 digest＋分類 pip 走 Nexus）、CM-2197（發版）。除 2224 外皆停「修正待驗證」，**決策者 190 總測後才收 Done**。
- **決策者桌面有一份 `b3-資安修正驗證清單.html`**（234 項依 24 模組分組、單勾「通過」＋備註、進度存 localStorage、可匯出文字）。**不通過的他會直接貼到首腦對話（含截圖）**，頁面不收截圖。

### 🔴 下一棒的工作型態：常態收錯誤回報，累積再統整分批修
1. **收到一則回報就做三件事、不急著修**：①`tail log/app.log`／190 `docker logs guidant-api` 找 stack trace ②對照驗證清單項次與 CM 卡（哪張卡改的、是回歸還是新問題、是否落地版才會發生）③一句話回決策者「已收、初判是什麼」，記進 CM-2141 母卡模式的收集卡（沿用第 5 棒做法：一張母卡下逐則 append，不逐則開卡）。
2. **累積到一批（決策者說「統整」或約 8～10 則）**：分「回歸／新 bug／設定或環境／不是問題」四類，同模組併卡，每張卡照 `notion-card-templates.md` 開，派 runner 在**修正線工作區**改，驗收後決定進 b4 還是等正式版。
3. **修完一批要不要重出包**：小修累積、一次出 b4；出包流程照 CM-2197 卡（已含所有坑）。190 升級走 `--upgrade`（**這次要驗升級補寫 token 那條**，b3 是全新裝沒驗到）。
4. **不要做的**：不合回 feature/review（等總測過）、不動 STG／POC、不發正式 1.21.0（要先補 LC PROD 公鑰）、不碰主 checkout 的資安報告（報告回寫等合回統一做）。

### 已開、待派或待驗的卡（接手先查狀態）
- **CM-2230（8-T）已開卡待派**：診斷包補認 guidant-classifier（改 BE `host_collector.py` KNOWN_SERVICES，是產物、要 b4 重 build 才到 190）＋FE 映像 build 改 BuildKit secret 掛 npmrc、**刪 `build_fe_image.sh:52` 寫死入版控的 Nexus base64 帳密**（自 `8c503ae5a` 起存在）。決策者裁直接修進修正線隨 b4 帶出。派工 prompt 在卡上；**Nexus admin 帳密是否輪換待決策者裁**（輪換要同步 188 的 pip.conf／poetry auth.toml／npmrc）。
- CM-2223／2061／2225～2229／2197：修正待驗證，等決策者 190 總測後收 Done。

### 攢給決策者的候選（總測後排，不擋 b3）
- 主線資安報告回寫：第 8 批 CM-2211～2229 全部＋第 217 項（M02 第 12 條／SUMMARY #212）；比照 CM-2199 開一張主線回寫卡。
- apt 鎖版號（BE production／分類 Dockerfile）、Nexus 加 apt proxy。
- 188 `~/.config/pip/pip.conf` Nexus 帳密明文（既有狀況，未擴散）。
- jedi-file-upload 2 條測試斷言過期；多支子套件 poetry.lock 與 pyproject 不符。
- CM-2223／2061 驗收時列的：前端新建掃描設定檔就能勾分享（8-K）、過期註冊碼仍能加代理（8-G）、三支 `_require_participant` 零件有接才檢查、8-L 殘留註解與舊路由名、`DETECTION_TOOLS_400013` 同號不同義、工作目錄 volume 會長大（維運手冊記一句）。
- 本機 8005／5185 舊服務與 BE 工作區 `.env` 去留；CI 密碼掃描沿用 CM-877 待確認 Runner 能否跑 docker。
- 正式 1.21.0 前必做（§2 第 13 條）：LC PROD 公鑰 → license-runtime 發版 → 重 build → 不帶 `--skip-prod-key-check` 封包。agent 1.1.0b1 裝 190 驗協定。

### 本棒 pre-flight（接手先跑，唯讀）
```
git -C .claude/worktrees/wt-fix-security log --oneline -1          # 應 fa2d59b30
python scripts/notion_case.py get CM-2197 | grep 狀態              # 修正待驗證（決策者驗過才 Done）
ssh jedi@192.168.50.190 'curl -sk https://127.0.0.1/api/1.0/version; docker ps --format "{{.Names}} {{.Status}}" | grep guidant'
```

## 🟡 第 9 棒此刻（2026-09-27 下午）：b3 總測回報 24 則已收、第 9 批（b4）兩批共 20 張卡，第二批 A／B 執行中
**此節覆蓋上面「第 8 棒交棒」的待辦，以此為準。**

### 現況（首腦實查）
- **收集卡 CM-2231**：決策者 190 總測回報 24 則，每則含 190 log／DB 實查根因、file:line、修法、對應 repo；驗證清單對照：只有 #19（AI 儀表板，CM-2038 回歸）、#17／#18（Drive 授權，CM-2218 連帶）、#4（郵件憑證 UI，CM-2111 改裁）對得到清單，其餘為總測順便挖出的既有問題或新需求。
- **CM-2230（8-T）驗收通過**，維持修正待驗證：BE `237ffbf86`、FE `7e8f545`。待裁：Nexus admin 帳密輪換；FE 三支 `.gitlab-ci*.yml` 明文帳密＋失效的 `--build-arg NEXUS_AUTH`（要另開卡）。188 `~/.npmrc` 不存在，b4 出包前要建（記在 CM-2197）。
- **第 9 批第一批（CM-2232～2239、2242，8 張）**：由決策者一個執行首腦 session 開 subagent 做，7 張「修正待驗證」（執行首腦逐張開檔＋突變驗收，紀錄在各卡尾「執行首腦驗收」）；**CM-2234 作廢**（DEV 63 表 140 欄無時區，subagent 兩次撐爆），改由 CM-2245 只修顯示層，全庫改 timestamptz 另開 FR。教訓：本 repo subagent 用 sonnet 必爆，且 8 支同時回報進主 session 也爆——決策者裁**之後不開 subagent，runner session 依序做、每 session ≤4 張**。
- **決策者裁定（已回寫各原卡）**：CM-2233 副作用選 B 案→CM-2246；問卷匯入刪備份→CM-2250；CM-2235 六處資料範圍 super_admin 參數不改（follow-up）；憑證欄摺進進階設定＋錯誤訊息指路→CM-2249；#23 CINC Auditor 裝進後端映像（Apache 2.0，非官方 InSpec）→CM-2247；#24 回饋整合設定搬系統設定群組→CM-2248。
- **第二批 11 張（CM-2236／2240／2241／2243／2244／2245～2250）**：session A（2245→2246→2241→2240）與 session B（2247→2248→2250）已派出並行；**session C（2249→2236→2243→2244）等 A 收完才派**（與 2240 同動 FE 工作區）。spec／made：`cards/spec-b9*.json`、`made-b9*.json`。
- **收 Done 鐵律（決策者 09-27 明令）**：所有 b4 卡維持「修正待驗證」，**只有決策者在 190 手測過並說收才收 Done**；有問題、沒做完、決策者說最後再處理的一律不准收。

### 驗收怎麼做（第二批，首腦自己做不派 subagent）
每張回寫後：到對應工作區 `git show --stat <hash>` 核範圍→逐項對 file:line→自己跑卡上的突變測試（套件帶 PYTHONPATH；BE 也要帶 jedi-integrity／jedi-compliance-audit 的 PYTHONPATH，venv 舊版會 ImportError）→三支守衛→卡尾 append「首腦驗收」；退回就退回同一個 runner session。

### 待裁／待辦
- 待裁：Nexus 帳密輪換；FE `.gitlab-ci*.yml` 明文帳密另開卡；CM-2243 若 DEV 現值會讓通知信全停要裁是否順便啟用。
- b4 出包（CM-2197 已追加全部事項）：七支套件發版、兩支主線 migration 重產基線、188 建 npmrc、190 走 `--upgrade` 並驗升級補寫 token／舊指令名刪除／Drive 五項手測。
- 另開 FR：全庫 63 表 140 欄 timestamp 改 timestamptz（CM-2234 拆出）。
- Follow-up：六處 super_admin 資料範圍參數；api log 印整個 RoleEntity 含 bcrypt hash（第 9 棒順帶發現，未開卡）。

## 🟢 第 9 棒此刻（2026-09-27 傍晚）：b4 程式面 21 張，20 張修正待驗證，只剩 CM-2245 退回改 UTC 跑中
**此節覆蓋上面「第 9 棒此刻（下午）」的待辦，以此為準。**

- **第二批 11 張＋第三批 CM-2251＋第四批 CM-2252 全部首腦逐張開檔＋自跑突變驗收通過**（各卡尾「首腦驗收」段）。做法改成 runner session 依序做（A 4 張／B 3 張／C 4 張），不再開 subagent。
- **決策者今日改裁（已落原卡）**：資料庫統一存 UTC → CM-2245 退回（五張表寫入端還原 UTC、讀取端加明列 UTC 欄位清單）；匯入原始檔必須留（存儲存後端）→ CM-2251 退回 CM-2233①／2250；save_dir 前綴＋郵件啟用 migration＋FE CI 刪明文 → CM-2252。Nexus 帳密：決策者以 `jedi` 一組通用（讀寫皆有），admin 已換密碼，188 三檔（.netrc／auth.toml／.npmrc）已設、pip.conf 不含帳密；本機 auth.toml 維持 jedi。
- **CM-2197 發版卡已追加全部**：套件發版 15 支（common 1.3.2、iam 1.4.5、task-platform 1.3.0、evidence-classification 1.4.1、file-upload 1.3.3、ai-dashboard 1.4.1、ai-bot 1.3.1、detection 1.2.2、compliance-audit、survey 1.2.2、bulletin 1.2.1、log 1.3.1、notification 1.2.1、flow-engine 1.4.1、issue）；主線 migration 四支（CM-2247 基線清理、CM-2248 選單搬家→**重產基線**；CM-2252 smtp-enable seed 不進基線；CM-2245 無 migration）；188 npmrc 已建；190 走 `--upgrade` 要驗升級補寫 token／舊指令名刪除／Drive 五項手測／CINC 抽取／匯入留檔落 SeaweedFS。
- **收 Done 鐵律不變**：全部等決策者 190 手測。
- **待決策者（不擋出包）**：GitLab CI/CD Variables 設 `NEXUS_AUTH`（要跑 SaaS CI 時才需要）；另開 FR「全庫 63 表 140 欄改 timestamptz」（CM-2234 拆出，提前排）。
- **下一步**：CM-2245 回寫→驗收→b4 出包（CM-2197，188 build，等決策者放行）→裝 190 `--upgrade`→決策者總測→收 Done。

## 🟢 第 9 棒此刻（2026-09-27 晚）：FR-121 五張全收，b4 只剩 FR-121.6 待開；agent 包已到 190 待決策者互動安裝
- **FR-121（時間欄位改 timestamptz）**：.1 CM-2254／.2 CM-2255／.3 CM-2256／.4 CM-2257／.5 CM-2258 全部首腦逐張開檔＋自跑突變驗收通過。教訓：判寫入時區看安裝版真機（190／189）不看 DEV——DEV 9/12 前資料來自舊 188 開發庫（時區 UTC）整批偏 8 小時，我原判 flow-engine 三張 UTC 寫入是錯的，真正 UTC 只有 `remote_agents.last_seen_at`／`review_marks.reviewed_at`／iam 改密碼 created_at。
- **剩 FR-121.6**：api_logs／system_logs 的 act_time 是月分割鍵不能改型別，要重建母表（手法照 `scripts/sql/2026-06-03-log-tables-partitioning.sql`），分割邊界用台北月初。決策者裁這次修，待開卡。
- **agent 1.1.0b1 裝 190**：包已由 188 推到 190 `~/agent-1.1.0b1/`（sha256 與 188 一致），`--check-only` 全綠；後端 AGENT_AUTH_MODE=full、PKI 五檔在 `/srv/guidant-ai/pki/agent/`。**互動安裝（產 token、`sudo ./install.sh`）由決策者做**；心跳時間那項 b4 上後要重看（.2 改了 last_seen_at 寫入）。
- **主機互連**：三台之間原本沒有免密（只有本機到三台），決策者已把 188 公鑰加進 190 authorized_keys，188→190 可直推；188→189、190→188 仍無。
- **b4 出包前置清單**（CM-2197）：FR-121.6 收完 → jedi-common 1.3.2 等 16 支套件發版（file-upload 1.3.3／license-runtime 1.1.1 新增）→ 188 基線庫補套 b4 全部 migration 並重產 02-schema → 188 build（FE＋BE 必須同版）→ 190 `--upgrade`。

## 🟢 第 10 棒此刻（2026-09-27 晚，接爆掉的第 9 棒）：b4 程式面 29 張全收，等三個裁示與出包放行
**此節覆蓋上面「第 9 棒此刻（晚）」，以此為準。**

- **9-X CM-2262 已開待派**（問卷範本 `||` 格式＋題目數只算主題目，收集卡 #32／#33）。
- **b4 程式面全收（29 張，全部「修正待驗證」，首腦逐張開檔＋自跑突變）**：第 9 批 22 張（2230／2232／2233／2235～2244／2246～2249／2251／2252／2260／2261）＋ FR-121 六張（2254～2259）。2234／2245 作廢。CM-2261 是最後一張（第 10 棒驗：agent 34 綠、突變 1 紅、BE 守衛 157 綠、DEV param_schema 已落）。
- **收 Done 鐵律不變**：全部等決策者 b4 上 190 手測。
- **agent**：1.1.0b1 已裝 190 並註冊成功（第 9 棒）；CM-2261 把 agent bump 到 1.1.0b2 未出包，**b4 要連 agent 一起出包並重裝 190**。
- **收集卡 CM-2231 到 #31**：#31 問卷清單看到兩個租戶的預設資料夾——決策者裁「清單頁一律只看作用租戶，跨租戶就切換」。根因是問卷列表沒加租戶條件、全靠 RLS（可見全部子孫）；帳號選單／部門選單已改，問卷沒比照。**這是全站性問題**（52 張表同一套 RLS，公告／資訊系統／專案／範本／回饋／裝置都有同樣現象），建議訂共用規則統一套。
- **Nexus**：`jedi` 一組通用，188 三檔已設，本機 auth.toml jedi。GitLab CI 變數 `NEXUS_AUTH` 等跑 SaaS CI 才需要。

### 決策者 09-27 晚已裁
- CM-2261 套件 003 准改（併入 jedi-detection 1.2.2，CM-2263 做）。#31 問卷租戶範圍**先不修**（決策者 09-27 明說，收集卡留記錄）。套件發版**放行**→ 已開 CM-2263 派工。

### 待決策者裁（歷史，已裁見上）
1. CM-2261 打折：OpenVAS 逾時 default／hint 的出貨預設在 jedi-detection 套件 003 migration，主線 seed 改不到新裝機。**建議准改 003 那一列**（套件 SQL 冪等，改法最小，新裝與升級同結果）。
2. #31 問卷租戶範圍：進 b4（再開一張 jedi-survey 卡，順便訂共用規則）或 b4 之後全站盤點一次做。**建議 b4 之後**——不擋出包，且要全站一致，單修問卷會留下「這頁對、那頁不對」。
3. 出包第 1 步放行（已放行，CM-2263 19 支：oscal-v2／integrity b3 已發不重發）——prompt 在 LOG 第 9 棒末段引用的對話中，第 10 棒可重貼。

### b4 出包順序（CM-2197）
套件發版 20 支（jedi-common 1.3.2 最先）→ BE pin 正式版號＋FE 1.21.0-beta.4 → 188 基線庫補套 b4 全部 migration 並重產 02-schema → 188 build（FE＋BE＋agent 1.1.0b2 同版）→ 190 `--upgrade`＋重裝 agent → 決策者按各卡手測清單總測 → 收 Done。

### Follow-up（未開卡）
- 註冊 token 可重複使用直到停用（設計）：是否改單次或設效期屬產品決策。
- 每台 agent 一把稽核 SSH 私鑰的安裝流程（目前 190 與 123 共用一把）→ agent 安裝手冊。
- 六處 super_admin 資料範圍參數；api log 印整個 RoleEntity 含 bcrypt hash。

## 🟡 第 10 棒此刻（2026-09-27 19:40）：b4 出包進行中——第 1、2 步完成，188 build 跑中，之後 agent 出包→190 升級
**此節覆蓋上面「第 10 棒此刻（晚）」，以此為準。決策者 09-27 指示：第 2～4 步首腦直接做到 190 升級完成，不逐步放行；push 已授權。**

- **第 1 步 CM-2263 驗收通過**：19 支發 Nexus（首腦從 188 自抓比雜湊 19/19）、BE pin `6f7e678ca`、FE 1.21.0-beta.4 `55ca905`、套件 003 `d94a472d`。
- **第 2 步完成**：基線庫備份 `188:~/backup/guidant_ai_baseline_20260927_1931_before_b4.dump`；套 5 支（4 active＋issue-integrate seed）rc=0；**12 張 `*_old` 在基線庫 DROP**（新裝不該帶舊分割表；既有客戶仍靠下一版 migration DROP）；重產 02／04／99、版號 1.21.0b4 → BE `12dee3157` 已推。四 repo `fix/security-b1` 全部已推、188 三 clone＋monorepo 已拉到 HEAD。
- **第 3 步跑中**：188 `/opt/guidant-ai-be` venv 裝 19 支新版、重攤套件 migration（72 行）、臨時庫 `guidant_ai_smoke_b4` init→migrate 對齊（0/0）、`build_all.sh --all` 19:38 起（log `.build/logs/b4-build-all.log`）。**agent 1.1.0b2 出包等 BE Nuitka 段完才起**（`/opt/guidant-ai-agent` 已在修正線 1b71a0c，`--check-only` 過）。
- **第 4 步待做**：BE bundle `build_bundle.sh --skip-prod-key-check`（內部測試包）→ scp 190 → 備份 190 DB → `sudo ./install.sh --upgrade` → agent 包 `sudo guidant-agent-compose upgrade <包>` → 升級驗證項（CM-2197：升級補寫 token、舊指令名刪除、既有時間不變、容器 TZ 仍 Asia/Taipei、心跳、CINC 抽取、匯入留檔、Drive 五項、操作紀錄區間）。190 現況：b3 七服務＋agent 1.1.0b1，TZ=Asia/Taipei，AGENT_AUTH_MODE=full。
- **190 升級後**：決策者按各卡手測清單（30 張）＋桌面 22 條 UI 清單；首腦開「API 批打驗證卡」處理 149 條非 UI 項。
- **未動／記錄**：#31 問卷清單只看作用租戶（決策者裁先不修）；smtp-enable／openvas-timeout 兩支 seed 不進基線（migrate 帶）。

## 🟢 第 10 棒此刻（2026-09-27 20:17）：**190 已是 1.21.0b4＋agent 1.1.0b2，總測可開始**
**此節覆蓋上面「第 10 棒此刻（19:40）」，以此為準。**
- b4 出包四步全部完成（細節在 CM-2197 末段）：19 支套件發版→基線重產（BE `12dee3157`）→188 build（BE 17m／agent 13m，bundle 1.49GB／compose 1.4GB）→190 `--upgrade` rc=0（7＋14 支 migration、七服務 healthy、舊指令移除）＋agent upgrade rc=0（心跳正常）。
- 升級後實查全過：版號、時間欄位型別與既有值、`*_old` 留一版、ui_routes 搬家、CHECK、OpenVAS default、CINC 在容器內、TZ、AGENT_AUTH_MODE、0 Traceback。
- **下一步（決策者）**：190 手測 30 張卡的手測清單＋桌面 22 條 UI 清單；通過的收 Done。
- **下一步（首腦）**：開「API 批打驗證卡」處理 b3 驗證清單 149 條非 UI 項（改網址／空白查詢／炸彈檔／主機殘留）；等總測回報收集。
- **Follow-up 新增**：FE image tag 兩制（`1.21.0-beta.N` vs `1.21.0bN`）每版要手補 `docker tag`，b3、b4 都踩，該收進 build 腳本；既有客戶 `*_old` 分割表下一版 migration DROP（FR-121.6 原設計）。
- 備份座標：基線庫 `188:~/backup/guidant_ai_baseline_20260927_1931_before_b4.dump`；190 `~/guidant-backup-1.21.0b3-before-b4-20260927_2011.dump`。

## 第 10 棒交棒（2026-09-27 晚）
- 190 已是 1.21.0b4＋agent 1.1.0b2，決策者總測尚未開始。
- 147 條非 UI 驗證：**只完成清單索引**（`verify/b4-verify-list.json`，四組 59／46／24／18，commit `a1adbf52b`），**尚未在 190 實跑、驗證卡尚未建**。
- 建卡方式待決策者裁：建議驗證卡只指向各修正卡既有的手測清單，照那份步驟重跑並記結果，不在驗證卡內另寫測試手法。

## 🟢 第 11 棒此刻（2026-09-28 凌晨）：b4 總測進行中，147 條非 UI 驗證三張已跑、b5 候選已開四張
**此節覆蓋上面「第 10 棒交棒」，以此為準。**
- **驗證卡**：V1 CM-2264（三輪完：✅39／打折 20，零缺口）、V2 CM-2265（✅22、0 硬缺口、挖到 RLS 洩漏）、V4 CM-2267（✅12／❌2 已開卡）皆「修正待驗證」；**V3 CM-2266 資源上限未派**（等決策者停手）。報告在 `verify/b4-verify-V{1,2,4}.md`。剩餘打折五類（要輪次走到稽核中／只 create 帳號／build-time／第三方整合／惡意檔），建議留 e2e。
- **190 新增測試帳號**：blsfrank（id=7，子租戶 4，System Manager）、blsview（id=8，租戶 3，唯讀檢視者，非專案成員）；專案 2「資料驗證」有填寫中任務問卷（task_survey id=1）。
- **b5 候選（修正線 fix/security-b1，已首腦核、未發版未出包）**：CM-2268 抽取死循環（f44d1af7，已核）、CM-2269 jedi-iam OTP 首發冷卻＋entity log（f679363d）、CM-2270 jedi-common 日誌量（bf97b904）、CM-2271 九表 RLS 前綴（BE 6c74ff0e3＋套件 6e0d0d4b，**主線 migration +1，出貨基線待重產**）。收集卡 CM-2231 記到 #40（#40：file 型基準背景重抽「Working outside of application context」，待開卡）。
- **190 手動異動（決策者核准）**：`detection_profile_versions id=1 SET extraction_error=NULL`（解 #34 死循環）。
- **未開卡**：#39 兩條健壯性小 bug（資訊系統 PUT 只帶 is_active 500；job 路由非 UUID 400 帶 psycopg 原文）等統整併小卡。
- 主 checkout 本機服務：BE 8000＋FE 5180（主線 pin 版，venv 已 `poetry install --sync` 換回 pin）；8005／5185 是修正線工作區舊服務（b2）。

## 第 11 棒交棒（2026-09-28 凌晨）：下一棒是「合回＋b5 進版」首腦
**此節覆蓋上面「第 11 棒此刻」，以此為準。決策者原話：「這邊驗過我們就準備進版吧，工作區準備回 branch 了」。**

### 現況（首腦實查）
- 190：1.21.0b4＋agent 1.1.0b2，九容器 healthy。決策者 b4 手測進行中（30 張卡手測清單＋桌面 22 條 UI）。190 手動異動一筆（決策者核准）：`config.detection_profile_versions id=1 SET extraction_error=NULL`。
- 190 新增測試帳號：blsfrank（id=7，子租戶 4）、blsview（id=8，租戶 3 唯讀檢視者、非專案成員）；專案 2「資料驗證」有填寫中任務問卷。密碼同 DEV 測試帳號（memory `reference_dev_login.md`），不入任何檔。
- **147 條非 UI 驗證**：V1 CM-2264 ✅39／打折 20；V2 CM-2265 ✅22／打折 24；V4 CM-2267 ✅12／❌2（已開卡）；**V3 CM-2266 跑中**（第一次 runner 把「炸彈／打垮」措辭當攻擊指令跑不完，已在卡末段補「驗收語言」段並重派新 session）。合計 73 擋住／2 問題／72 未驗，未驗的 48 條在 190 結構上驗不到（要稽核中輪次、188 build 機、第三方整合、惡意檔、SocketIO），**建議收 e2e 不再手造**。報告 `verify/b4-verify-V{1,2,4}.md`。
- **b5 候選四張，全部首腦開檔＋自跑核過，狀態「修正待驗證」，都在修正線 `fix/security-b1` 未發版**：

| 卡 | 套件／repo | commit | 備註 |
|----|-----------|--------|------|
| CM-2268 抽取死循環 | jedi-detection 1.2.2 | 套件 `f44d1af7` | 不用 migration |
| CM-2269 OTP 首發冷卻＋八處 entity log | jedi-iam 1.4.5 | 套件 `f679363d`；BE 報告 `b99f88620` | |
| CM-2270 正式模式日誌量 | jedi-common 1.3.2 | 套件 `bf97b904`；BE 報告 `446f4bcf6` | |
| CM-2271 九表 RLS 前綴比對 | BE＋detection／license-runtime／remote-agent | BE `6c74ff0e3`；套件 `6e0d0d4b` | **主線 migration +1（active／*），出貨基線待重產** |
| CM-2280 升級角色回補誤判管理員 | BE `scripts/init/migrate-capability-grants.sql` | BE `563355d22` | 不需 migration；**189 資料還原 SQL 等放行**（`verify/data-fix/189-restore-role-caps.sql`），190 PM 待裁 |
| CM-2281 fr093-1 假登記缺欄 | BE 主線 migration＋checks | BE `54d171378` | **主線 migration +1（active／*），出貨基線待重產**；189 補套等放行 |

- **未 push**：BE 修正線領先 origin 5、套件 monorepo 領先 4、主 checkout `feature/review` 領先 290+。push 等決策者。
- **🔴 09-28 上午決策者已把 188／189／190 都升到 1.21.0（正式版號，非 b5）**，不是本棒做的。189 從 1.19.0 直升踩到 #42／#43 兩個升級路徑 bug；190 也裝了 CM-2271 migration（00:49）。**189 現況：IT Manager／PM 能力點被塞滿、agent 心跳每 2 分鐘 500**，兩者資料修復都等決策者放行。
- 收集卡 CM-2231 記到 #43（#41 FE 改自己角色後選單未刷新，待開小卡；#42／#43 已修見上表）。**未開卡待裁**：#39 兩條健壯性小 bug（資訊系統 PUT 只帶 is_active 500；job 路由非 UUID 400 帶 psycopg 原文）；**#40 file 型基準背景重抽「Working outside of application context」**（CM-2268 runner 在 DEV 撞到，190 未重現因無人重抽過 file 型；已請決策者在 190 挑一版 file 型按重抽確認，重現就開卡進 b5）。

### 🔴 第 12 棒的工作：合回四 repo ＋ b5 出包（每步等令）
**b5 候選現為六張**（表上四張＋CM-2280／2281），主線 migration 共 +2（CM-2271、CM-2281），基線重產一次做。**189 兩件資料修復已完成（決策者 09-28 12:39 放行，第 11 棒套）**：備份 `189:~/guidant-backup-1.21.0-before-cm2280-2281-fix-20260928_1239.dump`；① 角色還原 IT Manager 98→83、PM 98→53（比升級前 89／58 少 6 個是 CM-1833 退役選單合法刪的，不回填）；② 套 CM-2281 migration＋手動補 jedi_remote_agent/003 並登記，`agent_tasks.payload_ref` 已在，agent 心跳 12:40 起 200。**190 PM(id=7) 28 個敏感能力點仍待決策者裁。**
決策者裁「驗過就進版、工作區回 branch」。順序建議（沿 CM-2197 b4 五步，細節與坑全在 CM-2197 卡與 LOG 第 10 棒 block）：
1. **等 V3 CM-2266 回報**（核完才知道 b5 要不要再多修）＋決策者 190 手測收尾（30 張卡 Done 或退回）。
2. **合回**：`fix/security-b1` → 各 repo `feature/review`（BE／FE／套件 monorepo／agent 四個）。§2 裁示 2 說「主線合回等資安掃描線 FR-113 結束」——**接手先問決策者 FR-113 是否已結束或放行**。合回後主 checkout venv 要 `poetry install --sync`（第 11 棒發現主 checkout venv 曾被指到修正線工作區 12 支 editable，起不來）。
3. **套件發版**（b5 動到：jedi-common 1.3.3、jedi-iam 1.4.6、jedi-detection 1.2.3、jedi-license-runtime 1.1.2、jedi-remote-agent 1.2.1，版號由發版棒定；**同支套件改動全做完驗完才發**，b3 iam 補發三次的教訓）→ BE pin ＋ FE 版號。
4. **188 基線庫補套 CM-2271 主線 migration ＋重產 02-schema**（步驟見 sql-migration skill「出貨基線同步」；b4 曾 DROP 12 張 `*_old`，這次不必）。
5. **188 build**（BE＋FE＋agent 同版）→ **190 `--upgrade`**（記得 FE image tag 兩制要手補 `docker tag`，b3／b4 都踩）→ 升級驗證項 → 決策者手測 b5 四張卡 → 收 Done。
6. 正式 1.21.0 前必做（§2 裁示 13）：jedi-common 1.3.1 第 154 項、LC PROD 鑰對進 `jedi-license-runtime`、封包不帶 `--skip-prod-key-check`。

### 派工方式沿用
開卡用 `scripts/notion_create_case.py`，spec 樣板在 `cards/spec-b9-*.json`；驗證卡樣板 `cards/spec-b4-verify.json`。runner 回報進來**一律開檔＋自跑突變核**，不信自報（本棒四張都這樣核、CM-2268 漏核一天才補）。

### 本棒 pre-flight（接手先跑，唯讀）
```bash
ssh jedi@192.168.50.190 'docker ps --format "{{.Names}} {{.Image}}" | sort'
python scripts/notion_case.py get CM-2266 | grep -m1 "^狀態:"
git -C .claude/worktrees/wt-fix-security status -sb | head -1
git -C ~/Projects/Jedicogy/module/jedi-python-package/.claude/worktrees/jedi-wt-fix-security log --oneline -5
```

## 第 12 棒交棒（2026-09-28 凌晨）：1.21.0 正式版已出、190＋STG 已升級，等決策者驗收
**此節覆蓋上面所有「此刻」節，以此為準。**

### 現況（首腦實查，不是 runner 自報）
- **四 repo 合回**：`fix/security-b1` → `feature/review` 零程式衝突（BE 352 個衝突全是兩邊各自遮測試密碼的措辭不同，取主線）；三支 smoke 腳本環境變數統一成既有 `PROBE_USER/PROBE_PASS`。決策者裁 b5 四張（CM-2268～2271）＋CM-2272 隨合回直接進正式版、不另出包；FR-113 掃描線已結束放行。
- **正式版前置四張全 Done 級（狀態修正待驗證等決策者收）**：CM-2273 六支套件 bump 發 Nexus＋BE pin（套件 `8765bd39`、BE `e04accb5d`，tag 只打新版六個、舊 tag 不補）；CM-2274 PROD 鑰對**擱置**（這版無 PROD LC 主機，封包仍 `--skip-prod-key-check`）；CM-2275 基線補套 CM-2271 並重產 02（`712fb5b64`）；CM-2276 進版（BE `02f680835`：RN／pyproject 1.21.0／99-stamp 185 支／spec-site v1.21.0 快照；FE `50bda00`；agent `6c17d21` 轉正 1.1.0）。**回歸 gate 決策者豁免**（測案過時，收口後另派一棒重整），RN §0 照實寫。
- **CM-2277 出包＋升級**：188 build 全綠、包 `188:/opt/guidant-ai-be/.build/bundle/guidant-ai-1.21.0.tar.gz`（1.49GB）＋Agent 兩種包；190 `--upgrade` 一支 migration 過、Agent 1.1.0 心跳正常；**188 STG 1.19.0→1.21.0 跳升 123 支 migration 全過、資料量不變**。細節與備份座標全在 CM-2277 卡。
- **🔴 升級排練抓到並修掉的地雷（BE `85ae5aadc`，已推、已進 init image 與包）**：`fr093-4d` 內建流程範本 INSERT 帶 `scope` 欄，但加欄的 CM-1790 在 manifest 行序之後——**所有 1.19.0 客戶升級必炸**，1.20.0 兩路驗證與 190 b3／b4 都沒走過這條路。修法是 4d 內冪等補欄。**教訓：升級驗證要拿真實舊版客戶庫的 dump 排練，不能只靠「上一個 beta 升上來」。**
- 主 checkout 工作區仍有約 50 個 docs/features 站產物 HTML 髒檔與三個未追蹤 `docs/spec-site/site/release-notes/v1.21.0-beta.*` 目錄——不屬任何卡，沒動。

### 決策者明早驗收清單
1. 190（1.21.0）：登入、切租戶、我的任務、匯入任務 Excel 合法範本不再 500（CM-2272）、檔案型檢測基準重抽（#40 待確認）、b5 四張手測清單。
2. 188 STG（1.21.0）：登入、既有 58 個專案還在、切租戶、時間顯示（FR-121 首次在有舊資料的庫上跑）、我的任務、公告列表。~~STG Agent 待裁~~ **更正（09-28 早）：188 是主產品機本來就沒有 Agent；`zen_sutherland` 是 8/26 T-6.6 打包測試殘留（`--version` 一次性容器、零 log、未註冊），連同 `guidant-agent-seaweedfs` 與 `/tmp/t66-*` 屬 188 衛生問題，等決策者令清。**
3. 兩台都過 → 裁 POC（189，1.19.0）何時升；POC 走同一條 1.19→1.21 路徑，STG 已排練過。

### 待裁／follow-up（皆已寫進 CM-2277 或 RN §7）
- `schema_version` 表升級路徑不更新（190 停 b3、STG 停 1.14.0），只有新裝時 99-stamp 寫；建議小卡讓 migrate 第三輪 upsert。
- `cm1796-question-answers-backfill.sql` 自帶 BEGIN 與 `--single-transaction` 重疊出 WARNING，無害。
- git tag `v1.21.0` 兩 repo等 merge main 後打，打完要 `git push origin v1.21.0`。
- site-regression 出版前回歸測試重整（決策者說會另派一棒）。

### 本棒 pre-flight（接手先跑，唯讀）
```bash
ssh jedi@192.168.50.190 'sudo -n guidantai status | head -12; curl -sk https://localhost/api/1.0/version'
ssh jedi@192.168.50.188 'sudo -n guidantai status | head -12; curl -sk https://localhost/api/1.0/version'
ssh jedi@192.168.50.189 'sudo -n guidant status | grep 版本'   # POC 應仍 1.19.0
for c in CM-2273 CM-2275 CM-2276 CM-2277; do python scripts/notion_case.py get $c | grep -m1 "^狀態:"; done
git log --oneline -6   # 主 checkout feature/review，應含 85ae5aadc / 02f680835
```

## 第 12 棒交棒（2026-09-28 午）：三環境已是 1.21.0，FR-114 主線結束，剩一條尾巴給第 13 棒
**此節覆蓋上面所有「此刻」節，以此為準。決策者原話：「114 應該是結束了，交接給下一棒，我們來整理這一兩周的 case 跟文件」。**

### 現況（首腦實查）
| 環境 | 版本 | 備註 |
|---|---|---|
| 190 測試機 | 1.21.0＋Agent 1.1.0 | 09-28 00:49 從 b4 升 |
| 188 STG | 1.21.0 | 09-28 01:03 從 1.19.0 直升，123 支全過、資料無損；主機無 Agent（昨晚誤判的 0.2.30 容器是 T-6.6 測試殘留） |
| 189 POC | 1.21.0 | 09-28 11:18 第一次升在 `jedi_iam/002` 撞 deadlock（舊版 api 未停）；停 api 重跑 11:25 過。**再撞 #42／#43 兩個 1.19 直升 bug，第 11 棒修（CM-2280／2281）並於 12:39 決策者放行後套資料修復**，心跳 12:40 起 200 |
| 121→POC、60.167→POC、122→STG | Agent 1.1.0 | 升級後 401→自動重註冊 200，uid／指紋不變 |
| 60.166→STG | Agent 1.1.0 | 它用的註冊 token 在 STG 早已 disabled，自動重註冊 401；換 STG 現行 enabled token（id 18）後手動起容器註冊成功，uid 不變 |
| 123→DEV | Agent 1.1.0 已升，**連不上** | 雲端位址 10.8.0.10 已不存在（決策者 VPN 現為 10.8.0.6）＋憑證 crt/key 不配；原生 0.2.30 已 `disable --now`（檔留）。等決策者給 DEV 註冊 token 才 `re-enroll --endpoint http://10.8.0.6:8000` |

- **四 repo `fix/security-b1` 已合回 `feature/review` 並推**（09-28 凌晨）。**但第 11 棒之後又在修正線加了 CM-2280 `563355d22`、CM-2281 `54d171378` 兩支，尚未合回**——`git log feature/review..fix/security-b1` 就這兩支。
- **主線 migration 待進基線 +1**：CM-2281 的 `2026-09-28-fr114-fr093-backfill-verify-and-unmark.sql`（CM-2271 那支 CM-2275 已進）。DEV 與 189 已套並登記；188 STG／190 未套（它們沒踩到假登記缺欄，`checks/fr093-backfill-objects-exist.sql` 盤過只有 189 缺）。
- **Notion**：FR-114 子卡 CM-2264～2281 全部「修正待驢證」等決策者收 Done；母卡 CM-2019、收集卡 CM-2231 Not started；CM-2274（PROD 鑰）擱置；CM-2278（支援頁顯示版號）、CM-2279（POC 升級卡，實際已做完未回寫）Not started。
- 主 checkout 乾淨（50 個站產物 HTML 髒檔已被第 11 棒的 commit 帶進去或不在了，`git status` 非 HTML 髒檔 0）。

### 第 13 棒要做的（每步等令）
1. **合回尾巴**：`fix/security-b1` 的兩支合回 `feature/review`（零衝突可預期）→ 188 基線庫補套 CM-2281 migration 並重產 02／99-stamp（照 CM-2275 做法）→ 這是 1.21.0 的 hotfix 還是進 1.21.1，**決策者裁**。
2. **CM-2279 回寫**（POC 升級實況含 deadlock 與兩個 bug，資料在本節與 CM-2277 末段）並改「修正待驢證」。
3. **123 Agent re-enroll**：拿到 DEV token 後 `sudo guidant-agent-compose re-enroll --endpoint http://10.8.0.6:8000 --token <t> --yes`（http 免指紋）。
4. **三個 installer／升級鏈缺口開卡**：①升級第③步套 migration 前不停舊版 api → deadlock（POC 實踩）；②`schema_version` 表升級路徑不更新（三台都停在舊值）；③Agent 用的註冊 token 被 disable 後自動重註冊必 401，1.0.0→1.1.0 升級文件要寫「先確認 token 仍 enabled」。
5. **兩週收口整理**：母卡 **CM-2282** 已開（範圍、實盤數字、四件待決策者裁、Z1～Z5 切棒建議全在卡上）。第 13 棒＝整理首腦：先拿決策者對四件待裁的答案，再開 Z1～Z5 子卡派工。FR-114 母卡 CM-2019 的 Done 也在那張卡的裁示範圍內。

### 本棒 pre-flight（接手先跑，唯讀）
```bash
for h in 190 188 189; do ssh jedi@192.168.50.$h 'sudo -n guidantai status | grep 版本; curl -sk https://localhost/api/1.0/version'; done
git log --oneline feature/review..fix/security-b1      # 應只剩 563355d22 54d171378
for c in CM-2279 CM-2280 CM-2281; do python scripts/notion_case.py get $c | grep -m1 "^狀態:"; done
```

---

## 🟢 第 13 棒此刻（2026-09-28 午後）：四件待裁已裁、七張卡已開，等決策者逐張發令派工
**此節覆蓋上面「第 13 棒要做的」，以此為準。**

### 決策者 09-28 已裁（CM-2282 四件）
- 127 張修正待驗證**一律 Done**。
- 掃描線「未修」是總表狀態欄過期，不是沒修：44 條裡 27 條已在第 8 批出貨、5 條隨舊線退場、3 條已裁記錄不修，**真正沒卡的 9 條另開 1.21.1 hotfix 母卡 CM-2289（FR-122）**，決策者之後會再加 AI 資安議題進去。
- FR-114 母卡：先合回＋基線補套（1.21.0 hotfix，不 bump）再收 Done。
- SPEC／手冊：先補前五處，其餘登記待補。v1.21.0 快照內容等於 1.20.0（切版時 current 沒補），凍結不回改。

### 已開卡（一次建完，spec 在 `cards/spec-closeout-and-hotfix.json`）
| 卡 | 做什麼 | model | 前置 |
|---|---|---|---|
| CM-2283 | Z1 Notion 批次收 Done＋13 張母卡結案段 | sonnet | 無 |
| CM-2284 | Z2 FR-114／121 README、arc SUMMARY、登記表六列＋FR-123 新列＋jedi-packages 名冊、重 build | opus | 等 Z3 改完總表數字 |
| CM-2285 | Z3 資安總表狀態欄終局化＋§0 統計＋封面／評級定義 | opus | 無 |
| CM-2286 | Z4 SPEC／手冊前五處＋待補清單 | opus | 無 |
| CM-2287 | Z5 memory 兩邊對齊＋FR-114 教訓入 memory | sonnet | 無 |
| CM-2288 | 尾巴：合回 563355d22／54d171378＋188 基線補套 CM-2281＋重產 02／99-stamp | sonnet | 無；對 188:25432 基線庫是寫入，派工即放行 |
| CM-2289 | 1.21.1 hotfix 母卡（FR-123，FR-122 已被 AI 閘道用掉）：只定範圍；子卡等決策者裁第一批與分支名 | — | 決策者先看卡 |

CM-2282 已改 In progress 並 append 裁示與清單。

### 與掃描首腦（另一 session）的分工（09-28 午後談定）
- **Notion 收卡**：掃描線全部（FR-113／115／116／118／119／120 母子卡＋module_frame＋早期掃描 arc FR-075～109 那 44 張）由掃描首腦收，卡 **CM-2290**（已派）。修正線全部＋CM-1907～1944／CM-1981～2017／FR-099～103 退役棒＋CM-1849／1871（T-6.4 實際已隨 CM-2223 做完）由本棒 CM-2283 收。
- **文件**：`docs/security-report/`（SUMMARY＋M 頁＋README）全歸本棒 CM-2285；`docs/features/security-scan-consolidated/README.md` 歸掃描首腦 **CM-2291**（已派），本棒不碰。html 各自重產自己改的頁，不帶 `--site-root`。
- 事實更正：CM-2061 結論是「#89／#129／#131／#132 都還在」，第 8 批 CM-2225／2226／2227 已修進 1.21.0，總表這五條改「已修」不是「隨退場消失」（Z3 卡已改）。CM-2221 的前端小卡從未開，併入 CM-2289 範圍 C。
- 約定：CM-2283／2285 派出時回報卡號給掃描首腦。

### 收口結果（09-28 晚，首腦逐張開檔核過）
Z1～Z5 五張＋尾巴 CM-2288 全 Done；CM-2282 兩週收口母卡 Done；CM-2019 FR-114 母卡 Done。任務清單無任何卡停在修正待驗證。commits：27f601726／4e7e2f987（尾巴）、398eea257（Z5）、887758ac7（Z3）、9cab84567（Z2）、1ccaca3cf（Z4）。

### 移到下一版（決策者 09-28 裁）
- **CM-2289（FR-123）1.21.1 hotfix 全部等下一版出貨再開子卡**：9 條沒卡未修、installer 三缺口、CM-2278／CM-2221 前端小卡、b5 三項、AI 議題（與 FR-122 重疊先對）。
- 123 Agent re-enroll：等 DEV 註冊 token。
- 188 STG／190 未補套 CM-2281 那支（不缺物件，首腦建議不補）。

### 決策者本人要做的
- 打 tag：`git tag -a v1.21.0 02f6808351 -m "Guidant AI 1.21.0（2026-09-28 三環境出貨）"`——tag 打在三環境實跑的映像 commit，之後 25 支（含三支升級修正）進 1.21.1。
- push `feature/review`＋tag；合 main（merge 或 PR 自選）。FE 對應 tag 首腦未查，需要再查。

### 本棒 pre-flight（接手先跑，唯讀）
```bash
for c in CM-2283 CM-2284 CM-2285 CM-2286 CM-2287 CM-2288 CM-2289; do echo -n "$c "; python scripts/notion_case.py get $c | grep -m1 "^狀態:"; done
git log --oneline feature/review..fix/security-b1      # CM-2288 未做前應仍為 563355d22 54d171378
```
