# P2 / P3 ロードマップ ＆ デモ資料（Muvic＆joy）

**正本（要件ストーリー）:** [features/remote-singing.md](../features/remote-singing.md)  
**Phase 1 実装・回帰:** [README.md](../../README.md) · [regression-checklist.md](../regression-checklist.md)（2026-11-07 時点 **フル相当 PASS**）

---

## 0. PoC ベースライン（P1 完了 · デモに使えるもの）

| 領域 | 状態 | デモ URL（`127.0.0.1` · 要 4 サービス） |
|------|------|---------------------------------------------|
| Work API · 投稿 | P1 | `login.html` → `submit.html` · [§1 ログ](../regression-runs/2026-11-07-p1-core.md) |
| Player 一体 UI | P1-UI | `player.html?work=work_demo_001&api=1`（楽譜 / 3D / transport） |
| Studio | P1-UI | `studio.html?work=work_demo_001&api=1` |
| 親 transport v2/v3 | 完了 | [transport-sync-v2.md](./transport-sync-v2.md) · `embedVersion` 10+ |
| P1b 重ね録り | 完了 | 音声 overlay · `syncAnchorMs` ガイド · [2026-11-07-p1b-two-user.md](../regression-runs/2026-11-07-p1b-two-user.md) |
| G4 有効プレイ | 完了 | `POST /events` **201** · duplicate **409** |
| Discover | UI-4 | `index.html?api=1` · `explore.html?api=1` |

**未着手（P2 の本命）:** コンクール **ルーム** · **WebSocket マスタークロック** · **多人数同時一発撮り / バトン** · **サーバー合成＋ワンテイク証明**。  
`remoteSinging.contestSession: true`（`work_demo_001`）· **S1〜S6 済**（並列 + バトン · 分割プレビュー含む）。P2 コンクール PoC 一通り完了。

---

## 1. P2 ゴール（コンクール基礎）

[remote-singing.md §3–5](../features/remote-singing.md) の **モード B** を、PoC で「見せられる最小」を通す。

### 1.1 プロダクトゴール

1. **2〜4 人**が同じ Work で **ルームに参加**（ローカル dev は複数ブラウザ / シークレット）。
2. **方式 1（並列）:** サーバー **3,2,1,START** → 全員ローカル高品質録画・アップロード → **分割プレビュー**（実写 2〜4 分割を先に）。
3. **方式 2（バトン）:** 順番にワンテイク · 前パート合成音を **ブラインド初見**で聴きながら録画（P1b ガイドのコンクール版）。
4. **ワンテイク証明（PoC）:** アップロードメタに **セッション ID · 開始 UTC · 端末時刻オフセット** — 改ざん検知は段階的に強化。

### 1.2 技術スコープ（Platform）

| レイヤ | P2 PoC で欲しいもの | 現状 |
|--------|---------------------|------|
| **同期** | WebSocket（または SSE）で `roomId` · `phase` · `startAtMs` | 無し（Player 親 transport のみ） |
| **クライアント** | Karaoke: 既存録画 + **ルーム待機 UI** · CDS3D: 変更最小 | Karaoke 単体 embed 済 |
| **API** | `POST /contest/sessions` · `POST .../takes` · `GET .../status` | 無し |
| **合成** | サーバー or バッチで **分割レイアウト MP4/WebM**（低解像度 PoC 可） | overlay は **音声のみ** |
| **権利・TTL** | R2 + 7日 TTL — **設計のみ**、dev はローカルディスク | [remote-singing.md §7](../features/remote-singing.md) |

### 1.3 実装スライス（推奨順）

| # | スライス | 成果物イメージ |
|---|----------|----------------|
| S1 | **ルーム API + WS** | ✅ `roomId` 作成 · 参加者 list · `countdown` / `go` · `smoke:contest-s1` |
| S2 | **Player「コンクール参加」シェル** | ✅ `contestSession` Work でサイドパネル · 招待 `?contestRoom=` · WS 表示 |
| S3 | **並列 START 同期** | ✅ `go.startAtMs` → `schedulePlayAtMs` · 親 transport + embeds |
| S4 | **テイクアップロード** | ✅ 音声 · セッション ID · 証明メタ · Work 詳細一覧（動画チャンク / 署名 URL は後半） |
| S5 | **分割プレビュー** | ✅ `contest-result.html` · 最大 4 パネル同期再生（音声 + canvas） |
| S6 | **バトンリレー** | ✅ `mode:relay` · 番順 · ブラインド guide · 24h · `smoke:contest-s6` |
| S7 | **動画チャンク / 合成** | ✅ チャンク upload · `videoUrl` · ffmpeg or クライアント Canvas 合成 · `smoke:contest-video` |

**P1b との境界:** カジュアル overlay は **非同期・ガイド任意**。コンクールは **セッション必須・時刻厳格・審査向けメタ**。

---

## 2. P2 デモシナリオ（ステークホルダー向け · 5〜12 分）

**通し脚本（正本）:** [demos/stakeholder-p2-contest.md](../demos/stakeholder-p2-contest.md) — 起動チェック · 分刻み脚本 · PoC 境界 · 失敗時バックアップ。

**前提:** 8780 · 8782 · 8790 ·（任意 8765）· 全員 `127.0.0.1` · 通常 + シークレット 2 ブラウザ。

### いま見せられる（P2 コンクール · S1〜S7）

1. **並列 2 人** — 招待 · カウントダウンで **自動録画** · GO 同期 · 終端自動停止 · 音声+動画チャンク  
2. **分割プレビュー** — 実写パネル同期再生（音あり）· 任意でクライアント／ffmpeg 合成  
3. **バトン 2 人**（任意）— 番順 · ブラインドガイド · 24h  

### 併せて見せられる（P1）

1. **公式タイアップ曲** — `player.html?work=work_demo_001&api=1`（楽譜 · 3D · 親 BGM · 8s）  
2. **重ね録り** — カジュアル overlay · [2026-11-07-p1b-two-user.md](../regression-runs/2026-11-07-p1b-two-user.md)  
3. **ランキング** — ホーム `?api=1` · G4（stub 注釈あり）  

---

## 3. P3 ゴール（AR ステージ · 表現拡張）

[remote-singing.md §2 · Phase 3](../features/remote-singing.md):

- MediaPipe 等で **実写背景除去** → CDS3D ステージ上に 2〜4 人配置（パターン①）。
- **公式 VRM DRM** · 権限マトリクス本番 — [requirements-matrix.html](./requirements-matrix.html)。
- コンクール映像の **AR フォーメーション**（V字・横一列）とカメラワーク。

**P2 が分割実写で通ってから** P3 の AR を載せる（リスク分割）。

---

## 4. 設計ドキュメント対応表

| ドキュメント | P2/P3 で更新する観点 |
|--------------|----------------------|
| [remote-singing.md](../features/remote-singing.md) | フェーズ 6 · WS 契約 · 合成パイプライン API |
| [LEGACY-CLIENTS.md](../LEGACY-CLIENTS.md) | ルーム用 postMessage / 深リンク（`muvicContestRoom` 等） |
| [player-ui-phases.md](./player-ui-phases.md) | UI-6 コンクールシェル |
| [work-catalog.schema.json](../../packages/work-schema/work-catalog.schema.json) | `contestSession` 周辺フィールド拡張 |
| [requirements-matrix.html](./requirements-matrix.html) | コンクール応募 · 実演家許諾 UI |

---

## 5. 次のアクション（PM / 実装）

1. **ステークホルダー通しデモ** — [demos/stakeholder-p2-contest.md](../demos/stakeholder-p2-contest.md) で実演 · フィードバック収集  
2. **動画チャンク / サーバー合成** — 実写提出が必須なら着手（音声 PoC の次）  
3. **デモ用 Work** — `contestSession: true` の UGC 1 本を固定 ID で seed（任意）  


---

## 関連リンク（8780 で開く）

| 種別 | URL |
|------|-----|
| ドキュメント索引 | http://127.0.0.1:8780/docs/index.html |
| 本ロードマップ | http://127.0.0.1:8780/docs/architecture/roadmap-p2-p3.md |
| **通しデモ脚本** | http://127.0.0.1:8780/docs/demos/stakeholder-p2-contest.md |
| Remote Singing 要件 | http://127.0.0.1:8780/docs/features/remote-singing.md |
| サイトマップ | http://127.0.0.1:8780/docs/architecture/sitemap.html |
