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

190 lines
8.8 KiB
Markdown
Raw Permalink Normal View History

2026-07-10 12:54:45 +00:00
# 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 整合測** |
2026-07-13 01:15:30 +00:00
2026-07-10 12:54:45 +00:00
| 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同意」