本卡屬 FR-167(母卡 CM-3241),卡 P4-3,階段 P4 Agent 跟進、批 7。只改 evidence-agent。依賴:P4-2、P4-5。

這張卡做什麼(白話)

Agent 這邊:心跳收到「該升級」就下載、驗雜湊、寫一張單,主機 systemd 看到單就跑 install.sh upgrade,結果隨下次心跳回報。Agent 不連外網、不連更新站。

為什麼切這一張

Agent 不連外網、不多常駐程式,跟主系統同一套形狀

reuse/extend/new

extend:observer 照 vulndb_sync.py 形狀新檔(下載、續傳、驗 sha 都 reuse 它的做法);enroll.py 掛一行;systemd 單元由 P4-5 的 install-lib 裝

在哪裡

repo:~/Projects/Billows/Audit-Manager/evidence-agent
改既有:core/enroll.py 364(一行)
改既有:agent/install-lib/upgrade_runner.sh(裝 path 單元)
新開:core/update_sync.py
新開:agent/install-lib/systemd/guidant-agent-upgrade-order.{path,service}

怎麼做

細節在 design.md §5 對應段(~/Projects/Billows/Audit-Manager/compliance-manager-be/docs/features/FR-167-2610-online-update-channel/design.md,開 design.html 看導覽);本段只列本卡要做到的點:

怎麼驗(開發期:你在本機/DEV 就要能做完)

Agent pytest:假心跳帶 update → 下載到暫存、sha 對、寫 agent-upgrade-order.json;sha 不對 → 刪檔回報;主系統 paused(無 update)時不動;observer 掛點一行;systemd 單元檔 systemd-analyze verify 綠(docker ubuntu)

測試期(不是你做):這張卡在 190 的真實情境是「lab 機:心跳帶 update → 下載、驗 sha、寫單、path 單元觸發 install.sh upgrade,成功後心跳 agent_version 變新;失敗自動退回回報 failed」,由首腦在測試期操作、決策者看畫面。你只要確保上面的本機驗收全過、程式對這個情境沒有寫死假設。

對照雛形:~/Projects/Billows/Audit-Manager/compliance-manager-be/docs/features/FR-167-2610-online-update-channel/prototype/index.html(上方「跟著走」)。

紀律