# T720 — mock multi-product opportunity fixtures

> Status: `done`  
> Milestone: `M2` · Phase B  
> Kind: `test` · Est. change: `~150 lines`

## Goal

建立足以驗證多產品去重、證據、stale 與舊資料的固定 mock 商機資料集。

## Depends on

- T710

## Inputs

- `../spec.md` §3.2–§3.4、驗收 #2–#8、#11
- T703 legacy fixture

## Outputs

| 路徑 | 動作 | 說明 |
|------|------|------|
| `apps/web/src/data/fixtures/radarProduct.ts` | add | 六組代表性 ProductMatch／Opportunity fixture |
| `apps/web/src/data/mock/radarRepo.ts` | edit | today／list filters、primary override、explore counters |
| `apps/web/src/data/mock/radarRepo.test.ts` | edit | 去重、排序與 filter assertions |

## Behavior

- 包含雙產品單卡、20 天 stale、高分 excluded、痛點無品牌名、純同名、legacy generic。
- 同產品 watch／term 集合去重；人工 primary override 後不自動改。

## Out of scope

- 畫面呈現（T721–T724）
- 真實 scorer

## Acceptance

- [x] fixture 每組註明對應 spec case，時間使用固定 unix ns。

```bash
cd apps/web && npm run test -- radarRepo
```

Implementation result (2026-08-10): added fixed multi-product, stale, excluded,
pain-only, same-name, and legacy fixtures and made the mock repository seed them
by default; all times are deterministic UTC unix nanoseconds.
