FR-066 · 全案收口 SUMMARY · 2026-08-23
八棒(2026-08-18~23)走完立案到收口:由 LOG 逐 block 濃縮——一句話與成果、交付清單、D1~D19 決策軌跡與三次大翻轉、驗收紀錄、教訓彙整、殘項與下一戰線、Notion 卡總帳。
由
FR-066-LOG.md八棒 block 濃縮產生,不憑記憶重建。歷史細節看 LOG,終態看 STATE,決策全文看 design.md §3。
為何立案:檢測 Agent(evidence-agent)的本職是量測宿主機——機器指紋(product_uuid / machine-id / MAC)在 docker 容器內讀不到或會漂移(已發生過 machine-id 空檔退回隨機 MAC 的指紋漂移事故),現行靠 collect-host-id.sh workaround 硬撐;而業界同類(Nessus / Qualys / Wazuh / Datadog)全部原生套件+systemd 交付。所以立案目標是:Nuitka 編譯+外部工具全包一顆 tarball,一鍵裝成 Linux systemd 原生服務。
主軸翻轉——立案要做原生版,收口出貨的是 compose 版。來龍去脈:.1~.3 把原生版整條做完(SQLite 化、自起 mTLS、tarball、install.sh、188 build 通關、123 真機驗收),但 .5(Rocky/RHEL)開卡時 PM 揭示 agent 的本源需求其實是跨網段證據存放(FR-039 儲存鏈)——客戶要的是「有 docker 的機器快速起一個帶內建儲存的 agent」,不是封閉網路裸機。於是 .6 立案:compose 形態+SeaweedFS 內建儲存+指紋二源化(拿掉容器內量不到的 MAC,改掛載可得的兩源)。.6 全系收完後決策者裁 D16:原生 tarball 暫不出貨、現階段一律 compose 版——原生開發成果保留不廢(封閉網路/無 docker 客戶出現時解凍),且原生期的產物(Nuitka 編譯、簽章、install.sh 積木)全部是 compose 版的地基,沒有白做。
最終出貨形態:guidant-agent-compose 一顆包通吃(install/upgrade 不分包,差 82MB seaweedfs image 不值得維護兩條路)——Nuitka 編譯產物+SeaweedFS+互動安裝程式+configure-storage+恢復出廠。Windows 三路線一日生死劇後全線凍結(D19),評估與實測資產留檔待客戶訊號。
程式面(evidence-agent feature/FR-066,0.2.27→0.2.28):
session_scope() 無條件 SET LOCAL,走 B 案修套件(0.0.31 已發 Nexus,依 dialect 判斷、PG 路徑行為恆等);storage_scope 欄位自癒改清單驅動sha256(product_uuid|machine-id),MAC 退場;撞號防護搬 BE enroll 端(豁免條件必須「憑 uid 認出」,不是「resolve 到同一列」)install.sh --upgrade(原生=切 symlink;compose=新包 upgrade,資料與憑證不動)BE/FE 面(皆 feature/FR-066):CM-937 心跳自報 capabilities(enroll 從不寫的申報鏈缺口);CM-1322 基線補漏(stage_objects+Profile 進基線+哨兵斷言);CM-1331 系統設定四頁守門分流;CM-1333 儲存設定「恢復系統內建儲存」端點+FE 按鈕;CM-1317 時區分流(心跳統一 UTC/公告日期營運時區)。
文件面:design.md D1~D19 完整決策鏈;兩本安裝手冊(CM-1347 onprem 對齊 55 commit 落差+CM-1299 agent 手冊 11 章:憑證三世界全景/資料保護責任/時鐘同步排錯;CM-1348 全 21 章白話化);Windows 三報告(T-4.3 評估 windows-feasibility.md+T-7.1 Docker Desktop 實測+T-7.4 WSL 生死驗證);T-6.2 防篡改宣稱邊界查證。
里程碑級 commits(全列見 LOG 各棒):evidence-agent e6aff6a(SQLite 化)→265f5f8(.1 build 就緒)→0fc80c8(.1 收口)→fc9cd23 系(install.sh)→1132150(指紋二源)→dd62b00 系(互動安裝)→a89a701(交付包收斂一顆);jedi-common ec3d4ee(0.0.31);BE 7c037530(時區)/ffca7c41(恢復);FE 1143e37(恢復按鈕)。
D1~D19 一行版(全文見 design.md §3):
| # | 一行 |
|---|---|
| D1 | Nuitka standalone → tarball → systemd(不用 onefile:啟動慢+逐檔驗章難做) |
| D2 | agent-db postgres 退役換 SQLite(只服務一張表;Q2 方言掃描前置守門) |
| D3 | 外部工具全包一顆 tarball、離線自足,~1GB+ 接受(封閉網路漏帶=現場死局) |
| D4 | nginx sidecar 退役,agent gunicorn/ssl 自起 8443 mTLS |
| D5 | 設定=agent.env(systemd EnvironmentFile),install.sh 問答三題生成 |
| D6 | 簽章瘦身版:build 期 manifest 簽章+啟動驗章,不做 runtime 全家桶 |
| D7 | 升級=versions/ + current symlink;資料不隨版本走、無備份模型 |
| D8 | Windows 只出評估文件不實作(附錄初判非定案) |
| D9 | 指紋只做 Linux 直讀,不預抽 OS 抽象層;collect-host-id.sh 廢除 |
| D10 | EL(Rocky/RHEL)=低 glibc 容器編譯(隨 .5 暫緩) |
| D11 | 指紋二源化全域(MAC 退場);撞號防護=BE enroll 端守門 |
| D12 | 雙形態單產線:同一顆 Nuitka 產物同一套簽章,build_all 兩出口 |
| D13 | 「使用 Agent 服務」=FR-039 既有功能,BE/FE 零新功能 |
| D14 | 儲存設定 CLI 先做;web 下發開評估卡等 PM(資安題:憑證進不進雲端) |
| D15 | compose 版配互動安裝程式——受眾一線工程師,不假設會 docker |
| D16 | 出貨收斂:原生暫不出貨、一律 compose 版;交付包一顆通吃 |
| D17 | Windows Docker Desktop 路線先行(當日即被 T-7.1 推翻) |
| D18 | 原生 Windows 服務版為唯一出貨路線;code signing 階段策略(客戶在望買 OV) |
| D19 | Windows 全線凍結(PM):Linux 為主,客戶真有需求再開卡 |
三次大翻轉:
殘項(各自掛置,不擋收口——照母卡 CM-1284 收口段):
--skip-prod-key-check 內部測試包,正式交付前必辦;移入 189 遷移線);agent 自更新 follow-up(觸發=單客戶十台級)下一戰線(決策者 2026-08-23 拍板順序):①決策者未揭露之「發版前要先處理的需求」(下一棒開工先問)→ ②merge feature/FR-066→main+v1.16.0 進版(version-bump skill 全套;收斂 191 的 1.15.0 內容超前不一致)→ ③PROD 簽章鑰 → ④189 遷 bundle 形態(pg_dump→裝 bundle→灌回→upgrade;POC 異動等當次明示;兼 FR-065 T-4.2 補驗②)→ ⑤FR-065 母卡 CM-1189 收口。
母卡 CM-1284:Done(2026-08-23 收口,卡上有完整交付清單+殘項)。全案累計 65 張卡(1284~1349 連號段+復活舊卡 CM-937):
| 狀態 | 張數 | 明細 |
|---|---|---|
| Done | 43 | 母卡 1284;子需求 1285(.1)/1323(.6);.1 系 1289~1291+追加 1303~1309;.2/.3 系 1292~1297+追加 1310~1315;真機缺口 1316/1317;.6 系 1324~1328/1330~1335;基線 937/1322;Windows 探路 1337/1346;手冊四卡 1347/1299/1348/1349;FR-066.4 收斂項 1300(Windows 評估) |
| 暫緩 | 15 | 1298(T-4.1 隨 D16);1318~1321(.5 EL);1336/1338/1339(.7);1340~1345(.8)+FR-065 側 1265(由本案三份文件取代) |
| 等 PM | 1 | 1329(web 下發儲存設定) |
| 收斂註記 | — | 1286/1287/1288(子需求 .2/.3/.4)隨母卡收口一併收束;1299 曾暫緩後復活(Linux only 範圍)收 Done |
註:張數以卡號段推算;逐卡權威狀態以 Notion 為準(
python3 scripts/notion_case.py get CM-<n>)。
檔案座標:STATE FR-066-STATE.md(終態)/LOG FR-066-LOG.md(八棒全軌跡)/design ../design.md(D1~D19)/Windows 三報告 ../windows-feasibility.md+T-7.1/T-7.4 報告/手冊 docs/user-manual/onprem/+agent/。