thread-master/docs/product/opportunity-inbox/tasks/T801-frontend-inbox-domain-...

56 lines
1.5 KiB
Markdown
Raw Normal View History

2026-08-13 02:22:24 +00:00
# T801 — frontend inbox domain repository seam
> Status: `done`
> Milestone: `M0`
> Est. change: `~160 lines`
## Goal
完成後 mock 與 live 前端共用同一組 Opportunity review、排序、CostPreview、DemandMap 與 Sweep funnel 型別repository 介面。
## Depends on
- T800
## Inputs
- `apps/web/src/domain/types.ts`
- `apps/web/src/data/repos.ts`
- Spec §2、§7.2§7.4
## Outputs
### 程式變更(預期路徑)
| 路徑 | 動作 | 說明 |
|------|------|------|
| `apps/web/src/domain/types.ts` | edit | ReviewState、RemovalReason、Priority、DemandMap、CostPreview、funnel types |
| `apps/web/src/data/repos.ts` | edit | 擴充 RadarRepo同時支援 mock/live |
| `apps/web/src/data/fixtures/**` | add/edit | 固定 legacy、pending、removed、未知時間資料 |
### 行為變更
- 型別區分 `OpportunityStatus``review_state`;舊欄位可缺省並由 mapper 補映射。
### API / 契約(若有)
- 不新增前端私有 shaperepository method 對齊 T800。
## Out of scope
- 不改頁面視覺、不接 live HTTP、不實作 mock 行為。
## Acceptance
- [ ] TypeScript 可表達五種排序、三種 review state、移除原因與兩種 key mode。
- [ ] mock/live repository signature 完全一致。
- [ ] 指令:
```bash
cd apps/web && npm run build && npm run test -- src/data src/domain
```
## Notes
保留既有 `intent_score`、`product_fit_score`,新加 `priority_score` 不取代歷史欄位。