# 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。