§2
結論
- 主系統不主動連 Agent。Agent 常駐一條
GET /agents/commands?wait=30 長輪詢,主系統有事立刻回、沒事 30 秒換一條;派工、取消、重啟、升級、換證、存工具帳密、測試連線、查日誌、送檔、對帳全部走這條。
- 同步問答走「等回答插槽」(
agent_requests 表,5 分鐘過期):瀏覽器那條請求吊著等,Agent 經 POST /agents/replies/<request_id> 回答,Redis pub/sub 跨 gunicorn worker 喚醒;Agent 沒回應時逾時回「Agent 無回應」。證據檔以 multipart 隨回答送上,主系統暫存 /tmp/agent-outbound/、取走即刪。
- 直推程式不刪:主系統
AGENT_DIRECT_PUSH_ENABLED、Agent AGENT_DATA_PLANE_COMMANDS_ENABLED 預設 false,守衛測試擋預設值被改。Agent 8443 照起(/blob、/detection 仍掛著、mTLS+短效 JWT 守門),平台不連;客戶不用開任何入站埠,只有使用者瀏覽器要連 8444。
- gunicorn 改
gthread(16 執行緒);長輪詢與等回答各有每進程配額,滿了不吊(長輪詢停一下回 204、等回答回 503);每台 Agent 同時一條長輪詢,新的進來舊的回 204(P-0 實測通過)。
- 心跳只表存活;舊 Agent 全部重裝不留相容;源碼包瀏覽器直傳 8444 維持原樣。
- 文件:FR-170/171 設計檔頭指向本案;Agent 安裝手冊第一、二、三、四、九~十二章與首頁改為「只需連出」;資安報告 C20/C21、DFD 對齊。
§4
需求討論紀錄
- 2026-11-07 決策者問「主系統連不到 Agent 但 Agent 連得到主系統,功能還正常嗎」。首腦實查:FR-171 後六種指令與 FR-039 以來的證據檔、FR-178 遠端查日誌全部是主系統主動連 Agent 8443,單向網路下一個都送不到;心跳補推也是連 8443,救不了。
- 2026-11-07 決策者裁:客戶確定不能開入站埠;Agent 要定時回來拿工作。首腦指出固定間隔輪詢解不了同步問答,提長輪詢。
- 2026-11-07 決策者裁:同步問答也走輪詢同步回去;直推退役,不留兩套。開新 FR。
- 2026-11-07 決策者追問長輪詢會不會佔住 API——會,出貨
sync worker 1 台 Agent 就佔 1 個。裁:批 0 先驗 gunicorn,過了走長輪詢,不過退定時輪詢。
- 2026-11-07 決策者問證據存 Agent 後主系統怎麼拿——裁 A 經主系統中轉;D5 瀏覽器直傳先不管。
- 2026-11-07 決策者改判「8443 先不要退役、把 API 功能關掉就好,怕未來又說要開」——D6/D7 改成留程式加開關;確認客戶仍不用開 8443。
- 2026-11-07 決策者裁舊 Agent 全部重裝;D3、D8 照建議;本案獨立母卡,FR-170/171 母卡只加連結指過來。
- 本案推翻 FR-170 §3.x「落地版同內網直推一定通」的前提與 FR-171 A 指令通道;FR-171 其餘(身分、換證、金鑰登記簿、設定通道、事件通道、DPoP)保留。
- 2026-11-07 開卡:母卡 CM-3595、子卡 CM-3596~3608(13 張 7 批,四欄已補);FR-170 母卡 CM-3324、FR-171 母卡 CM-3379 各 append 一段指向本案。等決策者在工作坊派批 1。
- 2026-11-07 決策者「不想被中斷、半夜放著跑」——design v1.1:批次 7→6(F-1、F-2 併進批 1;F-3 與 E-1 同批),P-0 判據寫死不等人裁,批 4、5 驗收改本機 Agent 模擬單向網路(真機 123 擋埠在母卡收口時首腦做),A-4 釘版併進 B-1。全程只剩母卡 Done 由決策者收。Notion 13 張 Stage 已改、各卡與母卡 append 補充。
- 2026-11-07 工作坊首腦驗 A-4 時補開 B-4(CM-3619):A-4 卡列的
agent_credential_client.py 實際在主系統不在 jedi-detection(首腦拆卡位置寫錯)。FR-177 Agent 資安修正已合回主線,與本案 F-2/A-3 交集三檔合併乾淨,ws-CM-3595 上 132 passed。
- 2026-11-07 工作坊首腦驗 B-3 時補開 B-5(CM-3631):連線欄的值是 jedi-remote-agent 算的,直推關掉後在線 Agent 都會被算成 one_way,FE 改不到——首腦拆卡時漏套件那一半。B-5 發 1.17.1,主系統改釘歸 C-1。
- 2026-11-07 決策者裁「文件不用現在寫,太早」:C-1 只留釘版+守衛,文件四項拆到 C-2(CM-3632)批 7 暫緩,真機驗收過後派。
- 2026-11-07 工作坊 42 跑完(15 張程式卡 verified);決策者裁直接合回——四 repo
ws-CM-3595 已合進 feature/FR-172(未 push),本機主系統+Agent 以新版起、長輪詢通。首腦靜態驗收:BE 178/Agent 173/detection 303/契約 73 綠(補刀 b20f85c5 契約鏡像測試)。
- 2026-11-07 首腦驗收抓到 Agent 管理頁「對帳」仍走直推(§1.2 盤點併進證據檔沒單獨列),補開 B-6a~d(CM-3634~3637,批 8~10);升級路徑確認仍是 Agent 自己來主系統拿包,只有「叫一聲」改長輪詢。
- 2026-11-07 B-6 四張驗過合回;FR-182 首腦合回時連本案一併推遠端,主線釘 0.5.3/1.17.4。本機 Agent 沒授權照被 FR-182 閘門擋住 sync、主控台登不進(等 FR-179 A1「未註冊也能登」合回)。決策者裁:本案動態/真機驗收等 FR-179 合回後與 FR-182 一起測。
- 2026-11-07 FR-179 合回後本機以三案合併版(主線 1.17.5/0.5.3/1.10.1)起主系統+Agent:BE Agent 相關測試 176 passed;Agent 無照被 FR-182 閘門關 sync,主控台本機管理員登入通、主系統票登入被擋(根因閘門關時不載
holder.state,已回寫 FR-182 母卡 CM-3609 L69 待開卡)。本案動態驗收等 Agent 裝照後做。
- 2026-11-07 決策者裁首腦直接修 FR-182 主控台三個缺陷(閘門關時不載身分、8444 取不到授權閘門致授權分頁 500、總覽沒照不提示),修完本機 Agent 裝照、長輪詢與心跳跑通;123 更新到主線待裝照。動態驗收前置解除。
- 2026-11-07 決策者裁 C-2 文件收口由首腦直接做、不等真機驗收:FR-170/171 四份設計檔頭加指路行;Agent 手冊與資安報告 C20/C21、DFD 改為只需連出、8443 預設關閉。
§5
文件
以下全部由 build 掃資料夾產生,新增檔案重 build 即自動出現。標題連結指向渲染後的 HTML,md 連向源檔。
需求與討論
設計
evidence/(1 份)
證據與盤點
交接與收口時間軸(handoff/,2 份)
由新到舊。每份是某一棒次交接當下的完整現況快照,看某個時間點「當時知道什麼」請從這裡進。
§6
Notion 卡
卡片內容(決策紀錄、驗收條件)以 Notion 為準,本頁只記座標。