# FR-181 Agent 只出站通道 — 交接日誌（LOG）

> append-only：每棒收工追加一個 block，既有 block 不改。現況看 `fr181-STATE.md`。

## 第 1 棒 — 2026-11-07 00:30～20:05 — 首腦（分析／設計／開卡／監控／合回／靜態驗收）

**做了什麼**
- 探脈：實查 FR-171 後八種「主系統連 Agent 8443」用途（六種指令＋同步問答），證明心跳補推也連 8443。決策者裁客戶不開入站埠、改 Agent 長輪詢、直推退役（後改判留程式加開關）。
- 討論稿 → design v1.0 → v1.1（無人值守：批次 7→6、P-0 判據寫死、驗收改本機模擬）→ 開卡 CM-3595 母卡＋13 子卡 → 工作坊 42 跑 16 小時。
- 監控處置：E-1 契約互鎖轉 A-1；F-3 撞 FR-178 先發的 1.15／1.16（決策者裁 B：工作區 merge `ws-CM-3533` 再發）；C-1 runner 斷線首腦接手收尾（PYTHONPATH 指工作區跑守衛）。
- 工作坊首腦補開 B-4（CM-3619，`agent_credential_client.py` 在主系統不在套件，首腦拆卡位置寫錯）、B-5（CM-3631，連線欄值是套件算的，首腦漏套件那一半）；決策者裁文件太早 → C-1 縮為釘版＋守衛、C-2 文件拆出暫緩。
- 首腦驗收抓到「對帳」仍直推（§1.2 併進證據檔沒單獨列）→ 補開 B-6a～d（CM-3634～3637）。
- 決策者裁直接合回：四 repo `ws-CM-3595` merge 進 `feature/FR-172`；FR-182 首腦合回時一併推遠端。
- 靜態驗收：BE 178／Agent 173／detection 303／契約 73（補刀 `b20f85c5`）綠；remote-agent 接受 runner 540 打折。
- 磁碟 1 G → 99 G：清 poetry／pip 快取、已結束 job tmp、兩個已結案 BE 工作區、37 個 Agent venv 孤兒；Docker.raw 71 G 是 sparse 只長不縮（實際內容 17 G）。

**關鍵決策**：D1～D8 全文 design v1.1 §3；文件等真機驗收過後寫；工作坊 44（FR-182）先合回、40（FR-179）後合回、本案釘版跟進不自改。

**教訓**
- **Nexus 允許同版號重傳**：本案 B-6a 發契約 0.5.2，FR-182 P3-4a 首腦更正版號後也發 0.5.2 蓋掉（少 `KIND_VERIFY_FILE`）。FR-182 自己發 0.5.3 合併版修掉。平行工作坊發同一套件，publish 前要查 Nexus 最新號（已進 memory）。
- **拆卡盤點要逐個選單項對實作**：B-4／B-5／B-6 三張補卡都是「盤點時併類沒單獨列」或「漏套件那一半」。
- **共用 `.venv` 對應主線**：runner 在工作區 `poetry update` 是當棒有效、合回後被蓋回；驗收用 `PYTHONPATH` 指工作區原始碼，不動共用 venv。
- **每個工作區 `poetry install` 各建一個 venv**（37 個孤兒 ~9 G）＋ BE 工作區帶 4.3 G `docs/`（spec-site build 產物入版控）＝今天磁碟漲 50 G 的來源之一。
- **已註冊無照的 Agent 主控台登不進**（FR-182×FR-179 縫，根因閘門關時不載 `holder.state`）——回寫 FR-182 母卡，不是本案的。

**推翻了什麼**：FR-170 §3.x「落地版直推一定通」；FR-171 A 指令通道（D2／D3／D11）。首腦自己的「直推整支刪」（決策者改判留開關）、「F-1／F-2 要等 P-0」（不吃結論，併批 1）。

**commits（主 repo 文件）**：`0c190344a` 討論稿＋design v1.0；`081a28a23` 開卡；`3eec74a11` design v1.1；`0978de723` B-4；`2493f266a` B-5；`83d136056` C-2 拆；`c5df193a8` B-6；`445f69bbe`／`3d02aec61` README 進度。合回：BE `b61d9710c`／`a577aec82`。

## 第 2 棒 — 2026-11-07 20:30～21:40 — 首腦（接手、排除本機驗收前置、123 更新）

**做了什麼**
- 接手 pre-flight 與 STATE 一致；決策者回報「主系統登不進主控台、沒授權卻沒地方輸入照」。
- 查到並直接修掉 FR-182 主控台三個缺陷（決策者兩度裁「直接改」，三筆回寫 FR-182 母卡 CM-3609）：
  - Agent `1a47d90`：閘門關時 `start_planes()` 先用既有 `cert_files.load_enroll_state()` 載身分，只載不起同步。
  - FE `2a07071b`：總覽授權提醒列加 missing／invalid／mismatch 紅條；沒照時隱藏「斷線＋網路除錯」條。
  - Agent `24ee084`：8444 主控台改經 `license.current_gate()` 取 gate（原本找根容器 provider，但 8444 拿到的是 files 子容器）；`ServerError` 參數修正；fixture 改真實容器形狀。
- 本機 Agent 裝照後 sync 起來：心跳 200、長輪詢 `commands?wait=30` 循環——新通道第一次在真實執行環境跑通。
- 推 evidence-agent 與 FE；123 由決策者解 keyring 後 `git pull` 到 `24ee084`、首腦 `poetry install`（契約 0.4.1→0.5.3）並起 Agent，閘門 missing 待裝照。

**關鍵決策**：FR-182 缺陷由本案首腦直接修（決策者裁），不另開卡；總覽中間卡／狀態燈「可以接工作」誤導未改，建議開 FR-182 卡（未裁）。

**教訓**
- **FR-182 的授權分頁在真實 Agent 上從沒正常過**：測試 fixture 自己往根容器塞 gate，真實啟動交給 8444 的是 files 子容器。fixture 要用真實的物件形狀，否則守不到「取不到」這種接線錯誤。
- **前端改了沒效果時先實打 API 看資料**：總覽提示沒出現，前端早已生效，缺的是後端回的欄位；第一輪只改前端白繞一圈。
- **123 git pull 靠 GNOME keyring**：重開機（今天 17:14）後沒人登入桌面就解不開，ssh 進去 pull 失敗；Agent 17:11 停掉也是重開機造成的，不是故障。

**推翻了什麼**：第 1 棒 STATE 寫「主控台本機管理員登入通」只代表登得進，授權分頁其實是 500；「主系統票登入被擋由 FR-182 開卡」改為本案直接修完。

**commits**：Agent `1a47d90`、`24ee084`；FE `2a07071b`（皆 `feature/FR-172`，已推）；主 repo 本棒文件見下一筆 commit。

### 第 2 棒補記 — 2026-11-07 22:00 — C-2 文件收口

- 決策者裁 C-2 由首腦直接做、不等真機驗收：BE `5de3ae6cc`（已推；同次 push 帶到另一 session 的 FR-184 `5ac49c456`）。卡 CM-3632 改修正待驗證。
- **教訓**：寫文件前實打程式，抓到設計 D7「8443 只剩健檢」不成立——`/blob`、`/detection` 仍無條件掛著，只有 FR-171 cmd_* 受開關；先寫進手冊的「只剩健檢」當場改掉。
- **教訓**：資安報告是 render_index 站，單檔 `render_doc.py` 會把 css 改指 `specs/_shared` 並丟導覽列；要整站重 build。
