# Tasks INDEX — brand-product-radar

> Plan：`../plan.md`（approved 2026-08-10）  
> Spec：`../spec.md`（approved 2026-08-10）  
> Status：`approved`（使用者 2026-08-10「請開始」）  
> Updated：2026-08-10 · 33 done／6 todo

## 硬規則

| 規則 | 內容 |
|------|------|
| 交付順序 | A → B frontend＋mock → **UX 批准** → C live API → D 業務深化 |
| 後端 | 只改 `generate/api/*.api` 後跑 `make gen-api`；業務只寫 `internal/logic/**`、`internal/module/**` |
| 舊系統 | `old/` 只讀；所有交付只在 `apps/` 與本產品文件 |
| 去重 | 同 owner＋external identity 一筆 Opportunity；同 Opportunity＋Product 一筆 ProductMatch |
| 相容 | 舊 watch=generic、舊 opportunity=未指定產品，不猜測回填 |
| 誠實錯誤 | 未實作／來源失效不得回 `102000` 空資料 |
| 時間與列表 | UTC unix ns；`page/pageSize` → `pagination/list` |
| Token | 會員 JWT 與 AI provider token 分離 |
| Task 大小 | 每題約 100–200 行生產碼；不得順手帶入鄰題 |

## INDEX

| ID | Title | Phase / M | Kind | Status | Est. |
|----|-------|-----------|------|--------|------|
| T700 | radar product api contract goctl | A / M0 | feat | done | ~180 |
| T701 | mongo product match indexes | A / M0 | feat | done | ~120 |
| T702 | frontend product radar types repos | A / M0 | feat | done | ~170 |
| T703 | compatibility fixtures not-ready guards | A / M0 | test | done | ~150 |
| T710 | mock radar product repository | B / M1 | feat | done | ~190 |
| T711 | watch brand product selector | B / M1 | feat | done | ~190 |
| T712 | product readiness suggestions generic assign | B / M1 | feat | done | ~180 |
| T713 | product delete impact ui watch tests | B / M1 | test | done | ~170 |
| T720 | mock multi-product opportunity fixtures | B / M2 | test | done | ~150 |
| T721 | today product filters cards | B / M2 | feat | done | ~200 |
| T722 | product evidence primary selector | B / M2 | feat | done | ~190 |
| T723 | all opportunities page | B / M2 | feat | done | ~200 |
| T724 | explore import crm product context ux gate | B / M2 | feat | done | ~190 |
| T730 | radar watch product domain repositories | C / M3 | feat | done | ~190 |
| T731 | opportunity product match domain | C / M3 | feat | done | ~180 |
| T732 | atomic product match repositories | C / M3 | feat | done | ~200 |
| T733 | radar product mappers filters | C / M3 | feat | done | ~170 |
| T734 | ownership legacy domain integration | C / M3 | test | done | ~180 |
| T740 | product context snapshot loader | C / M4 | feat | done | ~170 |
| T741 | product demand term suggestions | C / M4 | feat | done | ~180 |
| T742 | product fit deterministic scorer | C / M4 | feat | done | ~200 |
| T743 | product fit ai structured fallback | C / M4 | feat | done | ~190 |
| T744 | product match merge primary arbitration | C / M4 | feat | done | ~200 |
| T745 | fit stale concurrency tests | C / M4 | test | done | ~190 |
| T750 | product watch create assign lifecycle api | C / M5 | feat | done | ~190 |
| T751 | sweep explore product pipeline | C / M5 | feat | done | ~200 |
| T752 | import quota sweep counters | C / M5 | feat | done | ~180 |
| T753 | today all results filters ordering | C / M5 | feat | done | ~200 |
| T754 | primary product override api | C / M5 | feat | done | ~160 |
| T755 | product delete pauses watches | C / M5 | feat | done | ~180 |
| T760 | live radar product repo mapping | C / M6 | feat | done | ~200 |
| T761 | live product radar pages states | C / M6 | feat | done | ~190 |
| T762 | p0 cross-layer integration gate | C / M6 | test | done | ~200 |
| T770 | reply uses primary product snapshot | D / M7 | feat | todo | ~180 |
| T771 | contact touch product attribution | D / M7 | feat | todo | ~180 |
| T772 | outcome event product attribution | D / M7 | feat | todo | ~160 |
| T773 | product opportunity accuracy gate | D / M7 | test | done → shared T870/T871 | ~150 |
| T774 | product match race metering regression | D / M7 | test | done → shared T872 | ~190 |
| T775 | full regression testing gaps docs | D / M7 | docs | done → shared T873 | ~140 |

## 建議執行順序

```text
T700 → T701 → T702 → T703
  → T710 → T711 → T712 → T713
  → T720 → T721 → T722 → T723 → T724
  ──【Phase B UX 批准】
  → T730 → T731 → T732 → T733 → T734
  → T740 → T741 → T742 → T743 → T744 → T745
  → T750 → T751 → T752 → T753 → T754 → T755
  → T760 → T761 → T762
  ──【P0 live 驗收】
  → T770 → T771 → T772 → T773 → T774 → T775
```

## 可並行組合

| 組合 | 收斂點 |
|------|--------|
| T701 ‖ T702 | T703 |
| T711 ‖ T712 | T713 |
| T721 ‖ T723 | T724 |
| T730 ‖ T731 | T732 |
| T741 ‖ T742 | T743／T744 |
| T753 ‖ T754 ‖ T755 | T760 |
| T770 ‖ T771 ‖ T772 | T774 |

## Spec 驗收覆蓋

| Spec §9 | 主要 tasks |
|---------|------------|
| #1 合法 Brand／Product | T711、T730、T750、T762 |
| #2 痛點而非品牌名 | T720、T742、T743、T773 |
| #3 單純同名不 eligible | T720、T742、T745、T773 |
| #4 同貼文多產品單卡 | T720–T722、T732、T744、T762 |
| #5 自動主推高分產品 | T722、T744、T762 |
| #6 人工主推不被覆蓋 | T722、T744、T754、T762 |
| #7 產品更新不改舊證據 | T731、T740、T745 |
| #8 stale 只在全部結果 | T720、T723、T745、T753 |
| #9 刪產品暫停 watch | T713、T755、T761 |
| #10 舊資料相容 | T703、T734、T760、T775 |
| #11 no eligible 空狀態 | T721、T753、T761 |
| #12 worker 競態去重 | T732、T745、T774 |
| #13 owner 隔離 | T703、T734、T750、T754 |
| #14 回覆不串牌 | T724、T770、T775 |

## 閘門

- [x] Tasks breakdown 已批准（2026-08-10／使用者「請開始」）
- README phase=`ready-to-implement`。
- 實作需由使用者指定單一 `T###` 或明確要求全部執行；目前 T700 已完成。
- T724 結束後必須先取得 Phase B UX 批准，才可開始 T730。
- T762 結束後完成 P0 live 驗收，才進 Phase D。
