本卡屬 FR-166(母卡 CM-母卡號(建完補)),卡 P3-1,階段 P3 接回主系統、批 5。只改 evidence-agent。依賴:P0-4、P1-3、P2-1。
斷線時結果先存本機佇列,連回主系統後心跳自動補送,送成功才刪;任務結果永不丟。
續傳本體:退避、丟棄順序、重送冪等,邊界多
extend:_result 走 P2-1 抽好的 sink,失敗入列;drain 掛 enroll.py observer;idempotency_key 配 P0-6 終態冪等
repo:~/Projects/Billows/Audit-Manager/evidence-agent
改既有:core/outbox.py(P1-3 已掛的 no-op 殼,填內容)
改既有:core/task_sinks.py(雲端 sink 失敗→入列)
細節在 design.md 對應段(~/Projects/Billows/Audit-Manager/compliance-manager-be/docs/features/FR-166-2610-agent-standalone-console/design.md §5,開 design.html 看導覽),本段只列本卡要做到的點:
outbox.py(P1-3 no-op 殼填):表(P0-4 已建);CloudSink.result 失敗→入列(idempotency_key=f'{kind}:{uid}:{status}');drain() 心跳成功後依 created_at 送 ≤50、退避 1/2/4/8 分上限 1h、送成功才刪;上限 10,000 丟棄順序 audit→local_run,task_result 不丟;磁碟門檻停 audit 入列。heartbeat_status 遲滯:3 敗→offline、2 成→online。outbox_size。POST /console/api/runs/{uid}/resend:立即 drain 該筆(P2-7 用)。斷網跑完任務→outbox 1 筆;復線一次心跳後 0 筆且主系統收到一次;滿 10,000 先丟 audit 再 local_run、task_result 不丟;3 敗切離線 2 成切在線
對照雛形:~/Projects/Billows/Audit-Manager/compliance-manager-be/docs/features/FR-166-2610-agent-standalone-console/prototype/index.html(上方「跟著走」)。
docs/claude/domain-capabilities.md 與 FE docs/claude/frontend-overview.md §4。三擇一、預設不新增:reuse → extend 加參數 → 兩邊都確認沒有才新增。既有的是 stub/壞掉 → 修它或回報,不另寫繞過。回寫列出本卡 reuse 了哪些、新增了哪些、為什麼不能 reuse。