# Plan: 巡樓 Console 從零重寫

> Status: **`approved`**（與 task 拆分一併啟動）  
> Source: `docs/product/haixun-console/spec.md`  
> Last updated: `2026-07-09`

## 1. 交付策略

舊碼已在 `old/` 封存。主線 **greenfield**：

1. **先 B（前端 mock）** 讓 Harbor Desk 流程（含 lead 可回覆）你摸到滿意。  
2. **A 的 live 地基**不阻塞 B；可在 B 過關後或平行用 `services/api` 補。  
3. **C** 同一 UI 接真；**D** 海巡等。

本 plan 的 **可立即開工區間是 M0–M2（tasks T001–T022）**，對應 Phase B 完整 mock。  
Phase C/D 只定里程碑與 task 編號預留，細 task 待 B 過關再拆。

## 2. 里程碑

### M0 — 倉庫骨架

- **目標：** 可 `npm run dev` 的空應用  
- **完成定義：** `apps/web` Vite+React+TS 起來；根 README 有啟動指令  
- **Tasks：** T001  
- **驗證：** `cd apps/web && npm install && npm run build`

### M1 — 設計系統 + App Shell

- **目標：** Harbor Desk 外殼可導覽  
- **完成定義：** token、基礎元件、桌面側欄+手機底欄、5 入口路由占位  
- **Tasks：** T002–T005  
- **驗證：** 手動點 5 入口；build 通過

### M2 — Auth mock + 路由守衛

- **目標：** 未登入進不了 `/app/**`  
- **完成定義：** mock 登入/登出/重整保 session  
- **Tasks：** T006  
- **驗證：** 登入後進 Today；logout 回 login

### M3 — 資料層 mock

- **目標：** repository 介面 + localStorage + seed  
- **完成定義：** accounts/plays/outbox/jobs/notifications 可讀寫；`mock|live` 切換點存在（live 可 stub 丟錯）  
- **Tasks：** T007–T008  
- **驗證：** 重整後 seed/草稿仍在

### M4 — Crew（帳號）

- **目標：** 看帳號列表、mock 新增、不可用狀態  
- **Tasks：** T009  
- **驗證：** 列表 ≥2 假帳；連線 error 不可當 lead/cast

### M5 — Studio 列表 + Wizard 船隊/劇本

- **目標：** 建立串場；lead+cast；步驟含 lead 發言  
- **Tasks：** T010–T013  
- **驗證：** root(A)→reply(B)→reply(A) 可編輯保存

### M6 — 預覽 / 船期 / 提交

- **目標：** 預覽泡泡、排程、進 Outbox  
- **Tasks：** T014  
- **驗證：** submit 後 Outbox 有對應 bundle

### M7 — Outbox 發送模擬

- **目標：** 逐步狀態、主失敗不發後續、重試  
- **Tasks：** T015–T016  
- **驗證：** 模擬成功全 published；root fail 時 reply 不 published

### M8 — Job + 通知 + Today

- **目標：** 任務進度、鈴鐺、今日總覽  
- **Tasks：** T017–T019  
- **驗證：** 模擬 job 完成出通知；Today 有捷徑

### M9 — Scout / Settings / 收尾

- **目標：** 占位頁、datasource 切換、RWD 基線、範例劇本  
- **Tasks：** T020–T022  
- **驗證：** Scout 無假成功；手機底欄可用；build 通過

### M10 — Phase B 過關（人審）

- **目標：** 你主觀認可流程與風格  
- **Tasks：** 無新碼；走查 checklist（requirements Phase B）  
- **驗證：** 文件勾選 + 你回「B OK」

### M20 — Phase C 接真（預留，B 後再拆細 task）

- `services/api` 最小 auth/me/permissions  
- Threads OAuth + accounts  
- Jobs + notifications live  
- ThreadPlay/Outbox live 垂直切片  

預留 task 號：**T100+**（本輪不寫檔）

### M30 — Phase D（預留）

- Scout 海巡滿血等 → **T200+**

## 3. 依賴

```text
M0 → M1 → M2 → M3 → M4
                   ↘ M5 → M6 → M7
                   ↘ M8
                         ↘ M9 → M10 (人審)
                               ↘ M20 → M30
```

## 4. 風險與緩解

| 風險 | 緩解 |
|------|------|
| Task 膨脹超 200 行 | 實作時再拆子 task，更新 INDEX |
| Mock 契約與 C 不一致 | T007 介面以 spec §5 為準，C 只換 adapter |
| 過早寫 Go | M10 前禁止大範圍 `services/api` 業務 |

## 5. 刻意不做（本 plan 週期內 = 到 M10）

- 海巡真功能、舊碼搬回、重型 UI 庫  
- live Threads 發文（屬 M20）  
- email 驗證閘  

## 6. 全域驗證指令

```bash
cd apps/web && npm install && npm run build
# 之後若有測試：
# npm test
```

## 7. 批准

- [x] Plan 已批准：2026-07-09（使用者：好請幫我開始拆）  
- 實作順序：從 **T001** 起，完成一題勾 INDEX 再下一題
