# 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 / 契約(若有) - 不新增前端私有 shape;repository 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` 不取代歷史欄位。