thread-master/docs/product/opportunity-inbox/tasks/T861-sweep-checkpoint-resum...

1.7 KiB
Raw Permalink Blame History

T861 — sweep checkpoint resume budget

Status: done2026-08-11 Milestone: M6 Est. change: ~190 lines

Goal

完成後 Sweep 會逐筆 checkpoint在中斷、重跑或點數耗盡時只處理未完成候選並準確回報 partialblocked budget。

Depends on

  • T842、T853、T860

Inputs

  • apps/backend/internal/module/radar/domain/sweep.go
  • apps/backend/internal/module/radar/usecase/sweep_run.go
  • apps/backend/internal/module/job/**
  • Spec §5.3§5.4、驗收 #18#20

Outputs

程式變更(預期路徑)

路徑 動作 說明
apps/backend/internal/module/radar/domain/sweep.go edit checkpoint、budget state、deferred count
apps/backend/internal/module/radar/usecase/sweep_progress.go add guarded per-candidate progress
apps/backend/internal/module/radar/usecase/sweep_resume_test.go add interruptionquotarace tests

行為變更

  • CreditCeiling方案額度用完停止新 provider 呼叫,已完成保留,剩餘為 deferred。
  • Redis lock value 保持 workerID晚到 worker 不覆寫終態。

API / 契約(若有)

  • status 為 completepartial_budgetblocked_budgetfailed不以成功空資料表示 budget stop。

Out of scope

  • 不改 usage meter cost 定義、不做 live page mapper。

Acceptance

  • 第五筆中斷重跑不重扣前五筆。
  • 多 worker race 不突破 owner ceiling。
  • 指令:
cd apps/backend && go test ./internal/module/radar/... ./internal/module/job/... -run 'Sweep|Budget|Progress' -race -count=1

Notes

job status 更新必須 guarded只由 lock owner 續期/釋放。