# T760 — live radar product repo mapping

> Status: `done`  
> Milestone: `M6` · Phase C  
> Kind: `feat` · Est. change: `~200 lines`

## Goal

前端 live RadarRepo 完整映射產品型 API，並與 T710 mock 通過同一 contract。

## Depends on

- T750–T755

## Inputs

- `apps/web/src/data/live/radarRepos.ts`
- `apps/web/src/data/repos.ts`、T703 fixtures
- `../spec.md` §5.2

## Outputs

| 路徑 | 動作 | 說明 |
|------|------|------|
| `apps/web/src/data/live/radarRepos.ts` | edit | context/matches/filters/assign/primary/counters mapping |
| `apps/web/src/data/live/radarRepos.test.ts` | edit | request query/body、new/legacy response、errors |
| `apps/web/src/data/radarRepo.contract.test.ts` | edit | live mapper 與 mock 共用案例 |

## Behavior

- optional legacy fields 正規化但不偽造 product。
- query 正確使用 page/pageSize 與 product filters。
- non-102000、not-ready、forbidden 保持 ApiError，不轉空資料。

## Out of scope

- 頁面 loading/error UX（T761）
- backend 行為修補

## Acceptance

- [x] mock/live contract tests 全通過（23 files／139 tests）。
- [x] `npm run build` 通過；`npm run lint` 通過（僅既有 Fast Refresh warnings）。

```bash
cd apps/web && npm run test -- radarRepos radarRepo.contract && npm run build
```
