# T860 — sweep pipeline demand map prefilter

> Status: `done`（2026-08-11）
> Milestone: `M6`
> Est. change: `~200 lines`

## Goal

完成後每日／手動巡邏使用同一 DemandMap、QueryPlan、前處理與判定快取流程，並保存每階段版本與數量。

## Depends on

- T833、T841、T850、T851、T852

## Inputs

- `apps/backend/internal/module/radar/usecase/sweep_run.go`
- `apps/backend/internal/module/radar/usecase/sweep_fetch.go`
- `apps/backend/internal/module/radar/usecase/judge_pipeline.go`
- Spec §6.4、驗收 #8、#14–#16

## Outputs

### 程式變更（預期路徑）

| 路徑 | 動作 | 說明 |
|------|------|------|
| `apps/backend/internal/module/radar/usecase/sweep_pipeline.go` | add/edit | query→fetch→prefilter→cache→judge→persist |
| `apps/backend/internal/module/radar/usecase/sweep_run.go` | edit | 版本、funnel、partial status wiring |
| `apps/backend/internal/module/radar/usecase/sweep_pipeline_test.go` | add | 0 hit、全排除、merge、version tests |

### 行為變更

- API search 成功 0 hit 正常計 search；prefilter reject 不計 AI；removed tombstone 只 merge。

### API / 契約（若有）

- Sweep 保存 input/map version、QueryPlan 摘要與 funnel counts。

## Out of scope

- 不做 checkpoint／budget stop 的 worker 續跑（T861）。

## Acceptance

- [x] daily／manual／import 不各自重寫判定流程。
- [x] created、merged、tombstone、judge 數量可分辨。
- [ ] 指令：

```bash
cd apps/backend && go test ./internal/module/radar/usecase -run 'SweepPipeline|Sweep' -count=1
```

## Notes

先讀取有效 cache，避免跨 watch／query 重判。
