thread-master/docs/product/haixun-backend/plan.md

190 lines
8.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Plan: 巡樓後端Phase C · live
> Status: `approved`
> Status note: **approved** 2026-07-10 使用者「好先這樣拆吧」
> Source: `docs/product/haixun-backend/spec.md`**approved** 2026-07-10 使用者「spec 通過」)
> Last updated: `2026-07-10`
## 1. 交付策略
1. **先搬骨架再砍電商**:把 `stand-alone-service` 遷入主線(**根目錄固定 `apps/backend`**gateway + 獨立 worker main 同包),收斂 **一份 etc**,建立 **cmd/init****cmd/seeder**
2. **先身份與權限可登**:數字 uid、admin 代建、完整 Auth API含註冊三方 API、middleware前端主路徑仍 admin 代建。
3. **再 OAuth 真連帳**P0 結束時必須有 usable Threads 帳號,不是假連線。
4. **再創作Worker 真發送**PlayCompose含排程→ Outbox → worker 打 Threads驗收對齊 spec §9.12。
5. **並行加深**用量platformBYOK **分計分顯**)、人設、靈感研究、海巡雙路徑、邀請。
6. **前端 live 接線**穿插在 M2 起:每完成一域就接 `createRepos('live')` 對應 repo禁止整包最後才接。
驗收一律對照 **spec §9** 的 IDA-xx、AU-xx…task 完成定義須寫明覆蓋哪些 ID。
## 2. 里程碑
### M0 — 搬遷骨架與工程底座
- **目標:** 可編譯、可啟動的 go-zero gateway + 空 worker單 etcinitseeder 殼。
- **完成定義:**
- `stand-alone-service` 已遷入主線並可 `go build`
- 刪除或 build tag 排除 cartorderproduct 等電商域。
- `etc/gateway.yaml` **僅一份**env 可覆寫 secret。
- `cmd/init`mongo index 可跑空轉或最小 ping、`cmd/seeder` 獨立入口。
- 成功 envelope 統一 **102000**(若原碼不同則改)。
- **建議 task 區間:** **T100T109**
- **驗證:** A-01A-03、A-06A-08 相關;`go test ./...` 通過或明確跳過舊電商測試。
### M1 — 會員、權限、Admin、設定殼
- **目標:** 數字 uid 會員閉環admin 代建Auth API 齊(含註冊/三方介面);設定讀寫+平台 key 進 etc。
- **完成定義:**
- Member model數字 uid、roles、status、email_verified、invite_code 欄位預留。
- loginlogoutrefreshmeprofile驗證重設密碼。
- register + 三方 OAuth **API 可測**UI 可不接)。
- AdminlistPagecreatesuspendrolesverifyresetPassword。
- Permission middlewaremember vs admin。
- Settings get/save AiPlacementkey 只 configuredetc 平台 AIExa key 可注入。
- init 建立 member 相關 indexseeder 至少一 admin 帳。
- **建議 task 區間:** **T110T129**
- **驗證:** §9.1 AU、§9.2 AR、§9.3 AP、§9.4 AO、§9.5 AD、§9.0 A-04/A-05、§9.8 ST-0104/1415。
### M2 — Threads OAuth + Job/通知 + 前端 live 地基
- **目標:** 真 OAuth 綁帳Job 狀態機 + worker 骨架;通知;前端可 live 登入me帳號列表。
- **完成定義:**
- oauthStartcallbacklistrefreshSessiondisconnecttoken 僅服務端。
- Job CRUD進度guarded 更新worker 可跑 demo job。
- Notification listread。
- `apps/web` liveAuth + Accounts + Jobs + Notifications 接真。
- **建議 task 區間:** **T130T149**
- **驗證:** §9.6 TH-0110、§9.7 JB-0110、§9.17 X-*;前端 live 手測登入→OAuth。
### M3 — 用量平台/BYOK + AI/Exa 代打
- **目標:** 外部 AI搜尋可打platform 扣點與 BYOK 次數 **分計分顯**
- **完成定義:**
- 金鑰解析 platform vs byok。
- UsageEvent + Summary`platform.*` 與 `byok.*` 分欄listEvents 可篩 key_mode。
- 產文/研究等至少一條真實外部呼叫路徑(失敗可讀)。
- 前端 UsageSettings live 對齊分顯(若 mock 結構不同則擴充 summary 型別)。
- **建議 task 區間:** **T150T164**
- **驗證:** §9.8 ST-0513、§9.9 USG-0114。
### M4 — 創作、Outbox、Worker 真發送
- **目標:** PlayCompose`schedule_start_at`)→ Outbox → **Threads 真發**
- **完成定義:**
- Personas CRUD + 分析(可 Job
- Plays save/submitCompose publishSingle + 排程。
- Outbox list/get/retry/removeworker 到點發送root fail 規則。
- OwnPosts syncsendReply、Mentions 基本狀態(真送)。
- 前端 StudioOutbox live。
- **建議 task 區間:** **T165T189**
- **驗證:** §9.10 PE、§9.11 PL、§9.12 OB、§9.13 OP。
### M5 — 靈感/研究/媒體 + 海巡雙路徑
- **目標:** 靈感 session、Exa 研究、媒體;海巡 API爬蟲。
- **完成定義:**
- InspirationResearchMedia API。
- Scout brands/products/brief/scan/posts/outreach/homework。
- `dev_mode=false` → API 掃描;`true` → 爬蟲(擴充 session
- 前端 ScoutInspire live。
- **建議 task 區間:** **T190T214**
- **驗證:** §9.14 IN、§9.15 SC。
### M6 — 邀請關係 + 收斂
- **目標:** 邀請碼、補填、admin 調歸屬;全站 live 煙測;文件與 seeder 補齊。
- **完成定義:**
- Invite getMyNetworkapplyadmin tree/move。
- 前端 Invite liveuid 數字顯示。
- P0+P1 驗收表勾選;已知缺口列表。
- **建議 task 區間:** **T215T229**
- **驗證:** §9.16 IV回歸 AU/TH/OB/SC 抽樣。
## 3. 依賴
```text
M0 骨架
└─► M1 會員Admin設定殼
└─► M2 OAuth + Job/通知 + FE live 地基
├─► M3 用量 + AI/Exa 代打BYOK 分計)
│ ├─► M4 創作 + 真發送
│ │ └─► M5 靈感 + 海巡
│ └─► M5可與 M4 末重疊:海巡依賴帳號+設定+用量)
└─► M6 邀請 + 收斂(依賴 M1 會員;可與 M5 平行後合併)
```
- **硬依賴:** M4 發送需要 M2 OAuthM5 爬蟲需要 M1 dev_mode + 擴充 session 機制M3 宜在大量 AI 呼叫前完成。
- **可重疊:** M6 邀請可與 M5 後期平行(不同 module
## 4. 風險與緩解
| 風險 | 緩解 |
|------|------|
| 搬 stand-alone 電商殘留拖慢 | M0 明確刪域清單CI 不編譯舊 module |
| Threads OAuth發文審核與限流 | M2/M4 用沙箱 AppOB 失敗可觀測;不擋其他 module 開發 |
| BYOK平台計費混用 | M3 先定 summary schema 與 USG 測試;前端分顯 |
| 爬蟲 session 安全 | 僅 dev_modespec 開放題在 M5 定協議 |
| 範圍過大 | 嚴格 milestone 閘M0M2 未過不開 M4 真發送 |
| 前端 mock uid 字串 | live 層轉換或改前端型別T 在 M2 |
## 5. 刻意不做(本 plan 週期內)
- 真實金流發票P2
- Insights 真管線、Islander agent
- 前端公開註冊/三方 **頁面**API 要做)
- 多份 etc 環境檔
- 字串 uid 主鍵
- 以 simulate 當 live 發送完成
## 6. 測試與驗收策略v2 · 必做)
對齊 **spec §9184 IDs****§9.18**。詳見 `docs/product/haixun-backend/TESTING.md`
1. **功能 task**:同 PR 至少最小 unithandler case名稱含 ID
2. **里程碑 integration task**fake 外部):
- M0T107 testkit、T108 CI
- M1T119AU/AR/AP/AO/AD
- M2T136TH/JB
- M3T156ST/USG
- M4T172PE/PL/OB/OP含 worker + fake Threads
- M5T196IN/SC 雙路徑)
- M6T219IV、T221X、T220**FE↔BE live**、T222**184 矩陣閘**、T218smoke 補充)
3. **禁止**:手測/只改 DB 冒充 TH-02OB-02mock 前端測不算 live。
4. **M 完成定義** = 功能 task done **且** 該 M 的 test task 綠。
## 7. 全域驗證指令
```bash
# 後端根目錄apps/backend
cd apps/backend
make test
make build
go run ./cmd/init -f etc/gateway.yaml
go run ./cmd/seeder -f etc/gateway.yaml
# 前端 build + FE↔BE 整合T220
cd apps/web && npm run build
LIVE_API_BASE=http://127.0.0.1:8888 npm run test:integration
# 煙測補充T218
bash scripts/smoke-p0.sh
bash scripts/smoke-p1.sh
```
## 8. Task 編號
| 區間 | 里程碑 |
|------|--------|
| T100T109 | M0 骨架 + **testkit/CI** |
| T110T129 | M1 會員Admin設定 + **T119 整合測** |
| T130T149 | M2 OAuthJobFE live + **T136** |
| T150T164 | M3 用量BYOKAI·Exa + **T156** + ST-16 |
| T165T189 | M4 創作Outbox + **T172** |
| T190T214 | M5 靈感/海巡 + **T196** |
| T215T229 | M6 邀請 + **FE-BE矩陣煙測** |
正式清單:`tasks/INDEX.md`**v3 · 59 tasks**feat + test**UI MUST + 真上傳 + Remove + `apps/backend`**)。
## 9. 批准
- [x] Plan 已批准2026-07-10 / 使用者「好先這樣拆吧」)
- [x] Tasks **v3** approved2026-07-10 使用者「ok同意」