games-development-ai/docs/agent-specs/_archive/2026-06-08-前端game-studio建设-review.md
zizi 7f24a344d0 docs(agent-specs): B2 归档——64 个闭线工作记录移入 _archive/,热目录顶层 90→26
承接目录治理:上轮只压缩内容未减文件数,闭线工作记录仍平铺致目录看着仍一堆(创始人指出)。本次执行 B2 归档。

64 个 ≤06-15 闭线档(25 压缩桩 + 闭线 review/report/纪要/edit-plan)git mv 入 docs/agent-specs/_archive/(文件名不变、仍 git 跟踪可查)。热目录 ≤06-15 仅留 13 活档(决策/纲领/SoT/活spike)+13 个 06-16 在飞。

活资产 20 处旧路径引用(.agents/docs/memory/_index)同步改 _archive/,引用断裂复测=0;_index 活地图 + 治理档状态收口。约束:0 个 06-16 被移、orchestrator 等未跟踪在飞档零误纳。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 13:26:19 +00:00

344 lines
20 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.

# 前端 game-studio 脊柱建设 · Review 版计划
> 文档编号 HJ-FE-SPINE-001 · 2026-06-08 · 状态:**待创始人评审**
> 类型review 版(结论先行 / 决策导向 / 多 Mermaid不含代码级执行细节
> 配套执行版:评审通过后产出 `2026-06-08-前端game-studio建设-execution.md`
> 上游依赖Wave1 后端脊柱已建成验证(`2026-06-08-后端模块并行建设-execution.md`
---
## 0. 一句话结论
**用已锁的 8 类契约做 mock并行建出 `game-studio` 的"端到端可试用脊柱"——玩家侧(游戏流→试玩→互动)+ 创作者侧(创建→生成→预览→发布)一条链路本地能跑通,技术命门是自研 Canvas Runtime + WanxiangGameSDK + iframe 宿主三方链路。本次只做 `game-studio` 两端,运营后台 `game-admin` 后置。复用 Wave1 三相并行 Workflow 编排。前端不依赖后端运行、不卡外部闸门,可立即开工。**
### TL;DR 决策速览
| 维度 | 结论 | 理由 |
|---|---|---|
| **范围** | 只做 `game-studio`(创作者+玩家),`game-admin` 运营后台**后置** | 闭环优先:「做得出→有人玩」主链路在 studioadmin 是支撑、不同栈、后端已就绪可随时补 |
| **应用形态** | **单 SPA 双区**(玩家"流"为默认首页 + 创作者"创作"入口) | 「全民」用户身份流动(既玩又创),单 app 切区比双 app 跳转顺滑;省一套地基 |
| **技术核心** | 宿主容器 + WanxiangGameSDK + Canvas Runtime **本次一起出骨架** + 1 个 demo 游戏跑通三方链路 | 「试玩/预览」是闭环命门,缺它玩家侧和创作者侧都断链;契约 #3/#4 已锁,可并行 |
| **数据来源** | vite mock 据 5 个 API YAML 自动生成,前端**零后端依赖**本地预览全闭环 | 不卡 ICP/支付/广告等日历闸门,前端可独立交付到"可试用" |
| **设计** | 套 `huijing-ai-demo.html` 现成 CSS token 起骨架ui-ux-pro-max 后续细化 | D4 已定;骨架阶段不阻塞于精细视觉 |
| **编排** | 复用 Wave1 三相并行 Workflow前端契约→并行建模块→集成+冒烟验证门) | 已实证有效Wave1 46 单测绿);前端契约已锁 → 模块解耦可 N 路并行 |
| **广告/支付** | 本次只做**桩**SDK ad/pay 插件桩),真实 SDK 切换在闸门后 | 穿山甲/微信支付需进件审核(日历闸门),与前端脊柱解耦 |
---
## 1. 背景
- **上游已就绪**:后端 Wave1 脊柱 5 模块project/aigc/runtime/feed/telemetry已建成并验证46 单测绿 + 41 模块集成编译绿13 张表 + 5 个 API 契约 + SDK/游戏包契约全锁。
- **闭环下一环 = "可试用"**:项目命题是「生成 + 流量 + 变现全闭环」。后端把"能力"建好了,但用户摸得到的是前端。脊柱闭环里「预览→发布→游戏流→试玩→互动」这几环都在前端,是把"后端能力"变成"种子用户可试用"的关键一跳。
- **前端不卡闸门**MVP 真正关键路径是 ICP 备案 / 支付进件 / 广告审核 / LLM 实名充值等不可压缩的日历闸门(见 memory `mvp-binding-constraint-calendar-gates`)。前端用已锁契约 mock 即可独立建设+本地预览,与这些闸门**完全解耦**,是当下投入产出比最高的并行工作面。
- **现状**`game-studio/``game-admin/` 均为**空目录**(从零建)。
---
## 2. 目标 / 非目标
### 2.1 目标(本次脊柱交付)
1. **可试用的端到端闭环**mock 数据,本地 `vite preview` 能完整走通):
- **玩家闭环**:游戏流(竖屏刷)→ 点开试玩(宿主加载游戏包 + SDK 注入 + Runtime 跑)→ 互动(赞/藏/享)→ 遥测上报。
- **创作者闭环**:创建项目 → 一句话生成(异步任务 + 进度轮询)→ 预览试玩(同宿主)→ 发布(门禁校验)。
2. **三方技术链路打通**:宿主容器 ↔ WanxiangGameSDK ↔ Canvas Runtime用 1 个最小 demo 游戏在 iframe 沙箱里实测 postMessage 协议(生命周期 / 遥测 / 错误 / ad·pay 桩)。
3. **可验证的前端地基**Vue3 + Vant + 路由 + 状态管理 + axios 封装 + mock 基建 + D4 设计 token + 通用组件,构建/类型检查/本地冒烟全绿。
4. **durable 化**:执行版 spec + `.agent` + 记忆 + 本地冒烟证据(截图),抗压缩续作。
### 2.2 非目标(本次明确不做)
-`game-admin` 运营后台(审核队列/精选池/数据看板——不同栈Element Plus后端 admin-api 已就绪,**后置**。
- ❌ 真实后端联调——留到 staging 拉起后(与后端同一个运行时验证闸门)。
- ❌ 真实广告/支付 SDK——本次只做契约桩真实接入在进件审核闸门后。
- ❌ Tier2/3Cocos/3D/独立 App——MVP 只交付 Tier1自研 Canvas Runtime
- ❌ 完整玩法引擎——Runtime 本次只做"最小可跑骨架 + 1 个 demo 游戏验证链路",不追求 3-5 模板全实现(模板引擎是后续)。
- ❌ ui-ux-pro-max 精细视觉打磨——骨架阶段套 demo CSS token 即可,精修后续单独迭代。
- ❌ 钱包/提现/收益(创作者变现侧)——属 Wave2 变现,本次脊柱聚焦"创作→流→试玩"主干。
---
## 3. 推荐方案总览
### 3.1 game-studio 分层架构
```mermaid
graph TD
subgraph APP["game-studio 单 SPAVue3 + Vant移动竖屏优先"]
subgraph SHELL["① 应用地基 App Shell"]
R["路由 / 双区切换<br/>玩家区·创作区"]
S["Pinia Store<br/>用户/项目/流/会话"]
H["axios 封装<br/>统一拦截/错误码"]
M["vite mock 基建<br/>据 5 个 API YAML"]
D["D4 设计 token<br/>+ 通用组件库"]
end
subgraph PLAYER["② 玩家区"]
F["游戏流 Feed<br/>竖屏刷/双专区/互动/分享"]
end
subgraph CREATOR["④ 创作区"]
C["创作流<br/>创建/模板/一句话/进度轮询"]
P["项目管理<br/>我的项目/草稿/发布门禁"]
end
subgraph HOST["③ 宿主×运行时(技术核心 · 玩家与创作共用)"]
G["GamePlayer 宿主容器<br/>iframe 沙箱 + postMessage 桥<br/>+ 三容器预加载 + origin/schema 双校验"]
SDK["WanxiangGameSDK契约#3<br/>注入游戏 iframe 侧"]
RT["Canvas Runtime &lt;15KBTier1<br/>+ 1 个 demo 游戏"]
AD["ad/pay 插件桩<br/>宿主侧渲染"]
end
end
MOCK["契约 mock 层<br/>project/aigc/runtime/feed/telemetry.yaml"] -.消费.-> H
F -->|点开试玩| G
C -->|生成后预览| G
G <-->|postMessage| SDK
SDK --> RT
G --> AD
SHELL --> PLAYER
SHELL --> CREATOR
SHELL --> HOST
```
**说明**:①地基被所有区依赖(先锁接口);③宿主是玩家与创作**共用**的"试玩/预览"引擎(命门);②④是业务页面,通过地基契约 + 宿主组件接口解耦,可并行建。
### 3.2 应用形态:单 SPA 双区
```mermaid
graph LR
START(("进入 game-studio")) --> FEED["玩家区<br/>(默认首页 = 游戏流)"]
FEED -->|"创作"入口| CREATE["创作区<br/>(创建/生成/项目)"]
CREATE -->|预览/发布后| FEED
FEED -->|点开任意游戏| PLAY["试玩(宿主容器)"]
CREATE -->|生成完成| PREVIEW["预览(同宿主容器)"]
```
- 默认落地 = **玩家游戏流**"像刷短视频一样发现并即点即玩"是产品第一体验)。
- "创作"是显式入口(底部 Tab 或悬浮 CTA切到创作区。
- 试玩与预览**共用同一个宿主容器**,只是数据来源不同(已发布版本 vs 刚生成的草稿版本)。
---
## 4. 脊柱闭环定义(端到端时序)
### 4.1 玩家闭环:刷流 → 试玩 → 互动 → 遥测
```mermaid
sequenceDiagram
participant U as 玩家
participant FE as 游戏流页
participant API as Mock(feed/runtime/telemetry)
participant HOST as 宿主容器
participant SDK as WanxiangGameSDK
participant RT as Canvas Runtime(demo)
U->>FE: 进入,竖屏刷
FE->>API: GET /feed/streamcursor分页
API-->>FE: 卡片流(封面/标题/作者)
U->>FE: 点开某游戏
FE->>API: GET /runtime/package/{versionId}
API-->>FE: 游戏包清单manifest+assets
FE->>API: POST /runtime/session/start
API-->>FE: sessionId
FE->>HOST: 加载游戏包到 iframe 沙箱
HOST->>SDK: postMessage(init: gameId/versionId/traceId)
SDK->>RT: 启动 Runtime加载 assets
RT-->>SDK: 生命周期 game_loaded/game_start
SDK->>HOST: postMessage(lifecycle/telemetry)
HOST->>API: POST /telemetry/events/batch埋点
U->>FE: 点赞/收藏/分享
FE->>API: POST /feed/interact
U->>HOST: 退出
HOST->>API: POST /runtime/session/end时长
```
### 4.2 创作者闭环:创建 → 生成 → 预览 → 发布
```mermaid
sequenceDiagram
participant C as 创作者
participant CR as 创作页
participant API as Mock(project/aigc/runtime)
participant HOST as 宿主容器
C->>CR: 创建项目
CR->>API: POST /projectstatus=0草稿
C->>CR: 选模板 + 一句话描述
CR->>API: GET /aigc/template/list
CR->>API: POST /aigc/generateprompt+templateId
API-->>CR: taskId异步
loop 轮询进度
CR->>API: GET /aigc/task/{id}
API-->>CR: 进度%(步骤+百分比)
end
API-->>CR: 终态产物versionId + 游戏包)
C->>CR: 预览试玩
CR->>HOST: 加载草稿版本游戏包(同宿主)
C->>CR: 满意,发布
CR->>API: POST /project/{id}/publish7门禁校验
API-->>CR: 进入审核 / 门禁失败原因
```
---
## 5. 技术核心:宿主 × SDK × Runtime 三方契约
> 这是脊柱最有技术含量、最该用 Opus 关键 agent 建的部分。契约 #3`sdk-interface.d.ts`)已锁,本次是**宿主侧实现 + 游戏侧 SDK 实现 + Runtime 骨架**三者对接。
```mermaid
graph TB
subgraph OUTER["宿主侧game-studioiframe 外)"]
HOST["GamePlayer 容器"]
VALID["双校验origin 白名单<br/>+ payload schema"]
ADR["ad/pay 桩渲染<br/>(广告在 iframe 外宿主渲染)"]
TEL["遥测转发 → /telemetry/events/batch"]
end
subgraph INNER["游戏侧iframe 沙箱内)"]
SDK["window.WanxiangGameSDK<br/>init/on/off/track/reportError<br/>+ ad/pay 插件"]
RT["Canvas Runtime &lt;15KB<br/>+ demo 游戏"]
end
HOST -->|"postMessage(init)"| SDK
SDK -->|"lifecycle/telemetry/error"| VALID
SDK -->|"ad/pay 请求"| VALID
VALID --> HOST
HOST --> ADR
VALID --> TEL
SDK --> RT
```
**本次要落地的三方对接点(骨架级,可验证):**
| 组件 | 归属 | 本次交付 | 验证方式 |
|---|---|---|---|
| **GamePlayer 宿主** | game-studio | iframe 沙箱挂载 + postMessage 信封收发 + origin/schema 双校验 + 三容器(当前/上/下)预加载占位 | demo 游戏能被加载并跑起 |
| **WanxiangGameSDK** | 独立构建产物(注入 iframe | 契约 #3 全接口骨架init/on/off/track/reportError + ad/pay 桩fire-and-forget不向游戏抛异常 | postMessage 往返 + 生命周期事件触达宿主 |
| **Canvas Runtime** | 独立产物 Tier1 | <15KB 最小渲染循环骨架 + 1 demo 游戏点击类验证链路足矣 | iframe 内能渲染能发 game_start/game_end |
| **ad/pay 桩** | game-studio 宿主 | 契约 #3 ad.showRewarded/showInterstitial/pay.pay 的桩 UI弹层模拟回调 rewarded/paid | 点击触发回调链路通 |
**安全边界(不可省,见 security-and-reliability §1.1**iframe 沙箱 + 宿主侧 origin 白名单 + payload schema 双校验**必须真实实现**不能用 mock 绕过——这是 UGC 游戏跑在用户设备上的信任边界前端是唯一执行点
---
## 6. Mock 策略(不卡后端 / 不卡闸门)
```mermaid
graph LR
YAML["5 个 API 契约 YAML<br/>(已锁,单一事实源)"] --> MOCK["vite-plugin-mock<br/>按 path/method 生成 handler"]
MOCK --> AXIOS["axios 实例<br/>(拦截器统一处理)"]
AXIOS --> PAGES["业务页面"]
YAML -.同源.-> BE["后端真实接口<br/>staging 联调时切换 baseURL"]
AXIOS -. 改 baseURL .-> BE
```
- mock handler **严格按契约 YAML path/method/响应结构**生成 前端写的代码与真实后端零偏差 baseURL 即联调)。
- 异步任务aigc 生成mock "递增进度 + 定时终态"模拟轮询体验
- 列表类feed/projectmock 提供 cursor 分页假数据足够验证滑动流/分页
- **关键收益**前端从"""本地可试用"全程零后端依赖与日历闸门解耦
---
## 7. 并行编排设计(复用 Wave1 三相)
```mermaid
graph TD
subgraph A["Phase A · 前端内部契约(主 agent 主导 + 评审门)"]
A1["路由表 + 双区切换约定"]
A2["Pinia store 切分 + 状态契约"]
A3["mock 数据约定(据 YAML"]
A4["D4 设计 token + 通用组件接口"]
A5["GamePlayer 宿主对外接口签名"]
end
subgraph B["Phase B · 并行建模块N 子 agent互斥目录"]
B0["① App Shell 地基<br/>(先行/被依赖,第一波)"]
B1["② 游戏流 Feed"]
B2["③ 宿主×SDK×Runtime<br/>★Opus 关键 agent★"]
B3["④ 创作流 Create"]
B4["⑤ 项目管理 Project"]
end
subgraph C["Phase C · 集成(主 agent 串行 + 验证门)"]
C1["路由总装 + 区切换接线"]
C2["vite build + vue-tsc 类型检查"]
C3["本地 vite preview 冒烟<br/>/browse 或 chrome-devtools 走双闭环 + 截图)"]
end
A --> B0
B0 --> B1
B0 --> B2
B0 --> B3
B0 --> B4
B1 --> C1
B2 --> C1
B3 --> C1
B4 --> C1
C1 --> C2 --> C3
```
**编排要点(沿用 Wave1 实证规则):**
1. **地基先行**:① App Shell 是被依赖项Phase A 末锁定其对外接口路由/store/组件/mock 约定/宿主组件签名)→ Phase B 第一波单独建地基并验证 其余模块基于已锁接口并行
2. **互斥目录**每个子 agent 只写 `game-studio/src/{区}/` 互斥子目录**共享文件**路由总表`vite.config``package.json`全局 store 注册**只由主 agent Phase C 串行碰** 无冲突 worktree
3. **关键 agent 跑 Opus**:③ 宿主×SDK×Runtime 是技术命门沙箱/协议/Runtime memory `opus-subagents-critical-tasks` Opus Max
4. **主 agent 验证门**不信子 agent 自报 build success独立复跑 `vite build` + `vue-tsc` + 本地 preview 冒烟浏览器实跑双闭环截图对应后端的 `mvn test` 验证门
5. **durable 锚点**执行版 spec workflow runId + LIVE 状态抗压缩续作
---
## 8. 关键权衡
| # | 抉择 | 选择 | 放弃的替代 | 理由 |
|---|---|---|---|---|
| T1 | studio 应用形态 | SPA 双区 | 玩家/创作两个独立 app | 用户身份流动省一套地基切区比跳 app 顺滑代价单包略大可路由懒加载缓解 |
| T2 | 宿主+SDK+Runtime 时机 | 本次一起出骨架 | 先做业务页面宿主后做 | 缺宿主则"试玩/预览"断链玩家+创作两端闭环都跑不通——脊柱不成立 |
| T3 | Runtime 深度 | 最小骨架 + 1 demo 游戏 | 完整 3-5 模板引擎 | 脊柱目标是"链路通"模板引擎是后续<15KB 硬约束下先验证三方协议 |
| T4 | 数据来源 | mock | 等后端 staging 起来再建前端 | 解耦闸门前端独立交付契约已锁 baseURL 即联调零返工 |
| T5 | 设计落地 | demo CSS token 起骨架 | ui-ux-pro-max 精修再写代码 | 不阻塞主干视觉精修可在骨架上独立迭代 |
| T6 | 运营后台 | 后置 game-admin | 本次一并做 | 不同栈非主闭环后端已就绪聚焦"做得出有人玩" |
---
## 9. 爆炸半径 / 风险 / 兼容
- **爆炸半径**全新目录 `game-studio/`**不触碰**已验证的后端 5 模块与 huijing-server零回归风险共享文件仅 `game-studio/` 内部路由/config/package.json由主 agent 串行管理
- **风险点**
1. **Canvas Runtime <15KB 硬约束**骨架阶段先保最小可跑体积红线在执行版设门禁构建产物体积断言超标则砍 demo 游戏复杂度不砍协议
2. **iframe 沙箱跨域 postMessage 双校验**本地 mock 环境同源易"假通过"须用真实跨 origin不同端口/srcdoc验证 schema 校验逻辑真生效避免到 staging 才暴露
3. **异步生成轮询体验**mock 用定时终态模拟真实 Dify 回调时延更大进度 UI 要容忍长等待 + 超时态契约已有 timed_out)。
4. **D4 视觉与 Vant 主题耦合**Vant 默认主题与深色科技 demo 风格冲突需主题化覆盖骨架阶段先粗调精修后置
- **兼容**mock 严格贴契约 后端联调零接口偏差SDK 遵循 semver 只增不改 游戏侧向后兼容
---
## 10. 验收标准(脊柱"可试用"的可验证门)
| # | 验收项 | 判定方式 |
|---|---|---|
| AC1 | 构建通过 | `vite build` 成功无错误 |
| AC2 | 类型通过 | `vue-tsc --noEmit` 零类型错误 |
| AC3 | **玩家闭环本地跑通** | `vite preview` + 浏览器刷流点开demo 游戏跑起点赞退出遥测/互动请求在 mock 命中截图为证 |
| AC4 | **创作者闭环本地跑通** | 创建选模板一句话进度轮询到终态预览试玩发布门禁响应截图为证 |
| AC5 | **三方链路实测** | 宿主 init SDK 生命周期事件game_loaded/start/end)→ 宿主收到 遥测转发postMessage 双校验对非法 origin/schema 拒绝控制台/截图为证 |
| AC6 | ad/pay 桩链路 | 触发激励视频桩 回调 rewarded=true支付桩 回调 paid截图为证 |
| AC7 | Runtime 体积 | 构建产物 Runtime <15KB体积断言 |
| AC8 | durable | 执行版 spec + `.agent` + 记忆更新 + 冒烟截图归档 |
> 验证由**主 agent 独立执行**(浏览器走查经 `/browse` 技能,禁用 `mcp__claude-in-chrome__*`),不采信子 agent 自报。
---
## 11. 待确认项(请创始人拍板)
| # | 决策点 | 推荐 | 影响 |
|---|---|---|---|
| **Q1** | 本次范围是否只做 `game-studio`创作者+玩家`game-admin` 运营后台后置 | **是**聚焦主闭环 | 决定本轮工作量与并行模块数 |
| **Q2** | `game-studio` 是否采用单 SPA 双区玩家流默认首页 + 创作入口 | **是** | 决定地基与路由结构 |
| **Q3** | 宿主 + WanxiangGameSDK + Canvas Runtime 是否本次一起出骨架 1 demo 游戏跑通三方链路 | **是**否则闭环不成立 | 决定是否设 Opus 关键 agent是否引入 Runtime 子产物 |
| **Q4** | 是否接受" mock 本地可试用真实联调留 staging"作为本次验收口径 | **是**不卡闸门 | 决定验收边界AC3/4 mock 跑通为准 |
---
## 12. 配套交付 + 闸门提醒
- **配套**评审通过执行后 staging 拉起 + 脊柱运行时冒烟手册前端 `vite build` 产物 + 后端 docker-compose 中间件 + `ruoyi-vue-pro.sql` 初始化 + Flyway 自动建 game + baseURL 真实联调)——本环境无 docker须人侧或有基建环境跑
- **闸门提醒再次强调MVP 真正关键路径**前端建设期间人侧应**即刻并行启动**长周期日历闸门——经营主体注册 / ICP 备案 / 支付进件 / 广告联盟审核 / LLM 实名充值这些不可压缩 MVP 上线的 binding constraint memory `mvp-binding-constraint-calendar-gates`越早启动越好
---
## 评审请求
请就 **§11 Q1Q4** 拍板四项若全认可推荐我即产出执行版 spec 并启动并行 Workflow复用 Wave1 三相方法)。如对范围/形态/技术核心时机有不同意见请指出我据此调整方案再执行