docs(tier1): 约束框架定稿——15KB红线废除→三层框架,四路引擎尽调收口(HJ-T1-REDESIGN-001·创始人专门会话)
- 新增 brainstorm requirements(单一事实源):SLO地板@千元机+4G P75/预算入场券B1 gz≤350KB·raw≤1.5MB/工程增强层E1-E6;裁决语义=预算入场券·S2实测主考 - 重设计评审版 v1.1:四路尽调回填(LittleJS 8.0/Phaser 8.0/KAPLAY 6.5淘汰/自研+微库淘汰),D2引擎URL化交付铁律(HTTP+编译双缓存) - 裁定回填:tech-decisions §1.1(自研壳退役→成品轻引擎+Runner v2,终裁待spike)+glossary/product-and-architecture词条+技术决策版横幅第4条 - 1.x手册挂横幅(add-game-template/runtime-and-multichannel/game-studio/.agent),双轨冻结期仍有效;历史spec不动 - 护城河话术三处措辞修:自研边界改'宿主控制层自研+渲染引擎用开源可替换',强化B0定调 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
09d590cad1
commit
75d01f0e92
@ -46,7 +46,7 @@
|
||||
| **Golden Config 回归** | 用模板标准配置样例做比对回归,确保模型/模板迭代后生成质量不退化。 |
|
||||
| **trace_id** | Gateway 入口注入、全链路透传(含 Dify/OpenGame 调用与运行时 SDK)的追踪 ID,是调试与可观测的主线。 |
|
||||
| **DAU** | 日活跃用户;MVP 目标 1,000 DAU,正式目标 100,000 DAU。 |
|
||||
| **分层运行时(Tier1/2/3)** | 游戏产物三层:Tier1 极轻量H5/2D=自研 Canvas<15KB+OpenGame(MVP 唯一交付层);Tier2 复杂2D+3D / Tier3 独立App=Cocos Creator 3.8.8+MCP。详见 tech-decisions §1.1。 |
|
||||
| **分层运行时(Tier1/2/3)** | 游戏产物三层:Tier1 极轻量H5/2D(MVP 唯一交付层;2026-06-11 重设计中:自研 Canvas 壳→成品轻引擎+Runner v2,15KB 红线废除、改三层约束框架,见 `docs/brainstorms/2026-06-11-tier1-runtime-constraints-requirements.md`);Tier2 复杂2D+3D / Tier3 独立App=Cocos Creator 3.8.8+MCP。详见 tech-decisions §1.1。 |
|
||||
| **Cocos-MCP** | 用 MCP 协议(158 工具)让 AI 驱动 Cocos Creator 3.8.8 编辑器做复杂2D/3D/原生游戏;属有状态 agentic 编排、归 studio(区别于 OpenGame 单次文生代码归 aigc)。 |
|
||||
| **Prompt Registry(Prompt 即契约)** | git `contracts/prompts/` 为全生命周期 prompt 的单一事实源(第 8 类契约):版本化 + 输入输出 Schema 绑定 + 约束块 + Golden 集 + owner,运行时按 `id@version` 加载注入、不内嵌引擎内核。 |
|
||||
| **Prompt 轻量门禁** | prompt 改动 PR 触发的效果验证:Schema 通过率 + 生成成功率≥80% + Golden 回归 + 成本/延迟不劣化 + 人工抽检;可玩性靠行为指标反哺、不做结构化自动评分。 |
|
||||
|
||||
@ -49,7 +49,7 @@
|
||||
业务服务层 13 个 game-module(studio/project/aigc/runtime/feed/telemetry/pay/trade/community/ip/compliance/biz/ad)
|
||||
基础设施层 Yudao 原生:system(用户/权限/OAuth2) / infra(文件/任务/日志) / bpm(工作流 Flowable)
|
||||
AI 引擎层 Dify(DAG 编排/多模型) + OpenGame(Python 代码生成) + ComfyUI(图片素材) + Stability Audio / Fish Audio·CosyVoice(音频/音色)
|
||||
运行时栈 分层:Tier1 自研轻量 Canvas Runtime(<15KB,2D 游戏流,OpenGame 生成)/ Tier2-3 复杂2D·3D·原生 用 Cocos Creator 3.8.8+MCP;导出以微信小游戏格式包为枢纽;详见 tech-decisions.md §1.1
|
||||
运行时栈 分层:Tier1 轻量 2D 游戏流运行时(2026-06-11 重设计中:自研壳→成品轻引擎+Runner v2,15KB 红线废除、改三层约束框架,见 tech-decisions.md §1.1 回填)/ Tier2-3 复杂2D·3D·原生 用 Cocos Creator 3.8.8+MCP;导出以微信小游戏格式包为枢纽
|
||||
中间件层 Nacos / MySQL 8.0 / Redis 7 / RocketMQ 5 / MinIO(本地)·阿里云 OSS(生产)
|
||||
可观测性 Prometheus / Grafana / Sentry / Jaeger(链路追踪)
|
||||
```
|
||||
|
||||
@ -11,6 +11,7 @@
|
||||
## 1. 关键决策表(ADR)
|
||||
|
||||
> **⚠️ 回填(2026-06-10,HJ-AUDIT-001)**:下表「AI 生成引擎」行已被 **C2 裁定(2026-06-09)部分取代——MVP 现行生成主线 = 模板驱动**(LLM 直出 GameConfig 参数 + 固定模板 runtime,经 new-api 网关直连 LLM;Dify/OpenGame 均未部署,降级为远期增强)。§1.1 Tier1 行的「OpenGame 文生代码」同此。证据:`docs/agent-specs/2026-06-09-generation-spike/spike-summary.md`(52/52 结构层 100%)。
|
||||
> **⚠️ 回填(2026-06-11,Tier1 重设计·创始人专门会话)**:下表「游戏运行时」行的 **Tier1「自研 Canvas<15KB」被二次质疑裁定取代**——自研壳实为机制演示(资产载而不绘/零 juice/只胜不败),手搓引擎=critical risk;**15KB 红线废除**(系 srcdoc 内联架构的衍生约束,前提已失效),改为三层约束框架(SLO 地板@千元机+4G P75 / 预算入场券 B1 gz≤350KB·raw≤1.5MB / 工程增强层 E1-E6),引擎=契约下可换的实现,**终裁待 LittleJS vs Phaser eval-spike**。单一事实源:`docs/brainstorms/2026-06-11-tier1-runtime-constraints-requirements.md` + `docs/agent-specs/2026-06-11-Tier1运行时重设计-review.md`。
|
||||
|
||||
| 决策点 | 选择 | 理由 | 放弃的备选(why-not) | 风险 |
|
||||
|---|---|---|---|---|
|
||||
@ -19,7 +20,7 @@
|
||||
| **前端** | Vue3 + Element Plus(game-admin)/ Vue3 + Vant(game-studio,移动优先适配 360-430px) | Element Plus 版是 Yudao 官方主推、社区最活跃、文档最全、二开友好度最高;Vant 适配游戏流滑动体验 | **React + Next.js**:与 Yudao 前端生态不一致,二开成本高(v1 用的就是 Next.js,v2 切 Vue3) | 两端两套组件库;C 端游戏流须独立 H5,admin 风格不适用 |
|
||||
| **数据库** | MySQL 8.0 | Yudao 默认,社区方案最多,迁移成本最低;需 JSONB/全文检索时再加 PostgreSQL/ES | **PostgreSQL**:JSONB/全文检索更强但 Yudao 适配成本高 | 复杂检索能力弱,靠后续叠加 ES/PG 补 |
|
||||
| **消息队列** | RocketMQ 5 | Yudao 默认集成;延迟消息/事务消息/死信队列完整,适合生成任务调度、审核通知、事件摄取、结算触发 | **Kafka**:偏大数据流、运维重,MVP 过度;**Redis Stream**:可靠性不足,无死信/事务消息 | 运维复杂度高于 Redis Stream,但生产更可靠 |
|
||||
| **游戏运行时**(分层,见 §1.1) | Tier1 自研轻量 Canvas Runtime(<15KB);**Tier2/3 复杂2D·3D·原生 用 Cocos Creator 3.8.8 + MCP** | Tier1 首屏极快(P75<3s)、AI 生成纯 JS 直接可运行、平台完全控制沙箱;Tier2/3 用 Cocos 因 MCP(158工具)可 AI 驱动、出功能快、一栈覆盖复杂2D+3D+原生/小游戏导出 | **Three.js**:仅 web3D、与 Cocos 重复(不选);**Phaser 3 全栈**:纯 2D、导出弱(否决);**LayaAir**:无 MCP 生态、清单无快手(否决);**Unity**:AI 适配差、启动重(否决) | Cocos web 包体较重(MB级)→Tier2/3 不进游戏流、走渠道/App 分发;Tier1 仍自研薄壳保首屏 |
|
||||
| **游戏运行时**(分层,见 §1.1) | Tier1 自研轻量 Canvas Runtime(<15KB);**Tier2/3 复杂2D·3D·原生 用 Cocos Creator 3.8.8 + MCP** | Tier1 首屏极快(P75<3s)、AI 生成纯 JS 直接可运行、平台完全控制沙箱;Tier2/3 用 Cocos 因 MCP(158工具)可 AI 驱动、出功能快、一栈覆盖复杂2D+3D+原生/小游戏导出 | **Three.js**:仅 web3D、与 Cocos 重复(不选);**Phaser 3 全栈**:纯 2D、导出弱(否决);**LayaAir**:无 MCP 生态、清单无快手(否决);**Unity**:AI 适配差、启动重(否决) | Cocos web 包体较重(MB级)→Tier2/3 不进游戏流、走渠道/App 分发;~~Tier1 仍自研薄壳保首屏~~(2026-06-11 回填:Tier1 改成品轻引擎+Runner v2,见 §1.1) |
|
||||
| **多渠道导出** | **以"微信小游戏格式包"为统一中转**;Tier2/3 用 Cocos 官方一键导出,Tier1 自研 Canvas 自做 adapter | 快手无专用导出接口,标准路径=导出微信包→快手开发者工具"微信格式兼容转换";抖音有自有导出接口;导出可异步离线、不影响实时预览 | LayaAir 官方平台清单无快手,不走 LayaAir CLI 路线 | DevTool import 仍需真机验证;三平台各自真机 |
|
||||
| **AI 素材工具链** | 图片/角色/场景/封面→ComfyUI(自部署);音乐/音效→Stability Audio API;语音/音色→Fish Audio / 阿里 CosyVoice | ComfyUI 节点化、可训 IP 风格 LoRA 出系列一致素材、可被 Dify 编排、自部署无审查/无限频、长期成本低于商用 API;Stability Audio 版权清晰(全授权训练数据);Fish/CosyVoice 中文效果最佳、支持 few-shot 音色克隆 | 直接调 **Midjourney/DALL-E API**:无法训风格 LoRA、游戏场景(武器/战斗)易被拒、按次付费贵 | ComfyUI 需 GPU(无 GPU 走 CPU 慢 10x 或 mock/外部 API) |
|
||||
| **内容安全** | 图片→safe-content-ai(自部署快检)+ 阿里云内容安全(高风险兜底确认);文本/音频→阿里云审核 API;AI 输出→Dify Guardrails 节点 | 自部署做首道快检(免费/低延迟),高风险样本二次送阿里云确认;阿里云违禁词库持续更新、语义强于规则;Dify 节点内做 Prompt 注入检测 + 输出 schema 校验 | 单一商用 API:成本高且首道检测延迟大 | 双层链路一致性需治理;阈值(block 0.7 / review 0.4)须在 Nacos 调优 |
|
||||
@ -34,11 +35,11 @@
|
||||
|
||||
| 层 | 定位 | 选型 | 生成路径 | 状态 |
|
||||
|---|---|---|---|---|
|
||||
| **Tier1 极轻量H5/2D** | 游戏流即点即玩,首屏 P75<3s | **自研轻量 Canvas Runtime(<15KB)** + iframe 沙箱 + SDK 注入 | ~~OpenGame 文生代码~~ → **模板驱动(C2 裁定 2026-06-10 回填)**:LLM 填参 + 固定模板 runtime | ✅ 锁定。自研壳=护城河,**MVP 唯一交付层**;OpenGame 代码生成降级远期增强 |
|
||||
| **Tier1 极轻量H5/2D** | 游戏流即点即玩,首屏 P75<3s + 点卡→可玩 S2(常态≤2s) | ~~自研轻量 Canvas Runtime(<15KB)~~ → **成品轻引擎 + Runner v2(2026-06-11 二次质疑裁定回填)**:引擎 URL 化交付享 HTTP+编译双缓存,B1 入场券 gz≤350KB/raw≤1.5MB,**终裁待 LittleJS vs Phaser spike**;iframe 沙箱 + SDK 注入不变 | **模板驱动(C2 裁定)**:LLM 填参 + 固定模板(模板改为 Runner 内置模块) | 🔄 重设计中,**MVP 唯一交付层**。真护城河=沙箱/SDK/契约/三容器(全保留),渲染壳非护城河;存量 1.x 双轨冻结 |
|
||||
| **Tier2 复杂2D+3D** | 中重度含 3D,渠道分发 | **Cocos Creator 3.8.8 + MCP**(备选 PlayCanvas) | **Cocos-MCP** agentic 工具编排(studio 编排) | ✅ 锁定。MCP 158 工具可 AI 驱动;MVP 至多 1 个探针 demo |
|
||||
| **Tier3 独立App** | 打包为原生应用 | **Cocos 原生导出**(同 Tier2 引擎) | 同 Tier2 + 打包 | ✅ 锁定引擎。否决 Unity(AI 适配差、启动重);MVP 后投入 |
|
||||
|
||||
**自研工期评估(为什么 Tier2/3 复用 Cocos 而非自研)**:Tier1 薄壳约 0.5–1.5 人月(可行,且必须自研以控沙箱/SDK/三容器预加载);自研 3D 引擎数十人月~数年、自研原生框架数十人月——3 周窗口下绝不可行,必须复用成熟引擎。选 Cocos 因其一栈覆盖复杂2D+3D+原生/小游戏导出,且 MCP(158工具)使 AI 驱动可行(与"开源组合替代烧钱自研"总原则一致)。
|
||||
**自研工期评估(为什么 Tier2/3 复用 Cocos 而非自研)**:Tier1 薄壳约 0.5–1.5 人月(可行,且必须自研以控沙箱/SDK/三容器预加载);自研 3D 引擎数十人月~数年、自研原生框架数十人月——3 周窗口下绝不可行,必须复用成熟引擎。选 Cocos 因其一栈覆盖复杂2D+3D+原生/小游戏导出,且 MCP(158工具)使 AI 驱动可行(与"开源组合替代烧钱自研"总原则一致)。**(2026-06-11 回填:「必须自研以控沙箱/SDK」已被推翻——控制点在沙箱/SDK/契约层,与渲染引擎解耦;Tier1 渲染层亦改复用成品轻引擎,自研壳退役,见 §1.1 表)**
|
||||
|
||||
**导出枢纽 = 微信小游戏格式包**:微信=引擎导出官方格式;抖音=自有导出接口;**快手=无专用接口,走"微信格式兼容转换"**(快手开发者工具)。**LayaAir 官方平台清单无快手**,不走 LayaAir CLI 路线。Tier2/3 用 Cocos 官方一键导出微信包,Tier1 自研 Canvas 自做 adapter。
|
||||
|
||||
@ -73,7 +74,7 @@
|
||||
|
||||
| 口径点 | 权威结论 |
|
||||
|---|---|
|
||||
| **运行时技术栈** | Tier1=自研<15KB Canvas+OpenGame;Tier2/3=Cocos Creator 3.8.8+MCP(见 §1.1)。Three.js/Phaser3/LayaAir/Unity 均否决 |
|
||||
| **运行时技术栈** | Tier1=成品轻引擎+Runner v2(2026-06-11 回填:原自研<15KB 壳退役、存量 1.x 冻结,终裁待 LittleJS vs Phaser spike);Tier2/3=Cocos Creator 3.8.8+MCP(见 §1.1)。Three.js/LayaAir/Unity 仍否决;**Phaser 的旧否决仅针对「全栈通吃」语境,不约束 Tier1 单层竞标** |
|
||||
| **生成成功率指标** | MVP 验收按 **≥80%** 判定;**≥85%** 为远期蓝图目标,勿用 85% 卡 MVP |
|
||||
| **时间线** | 双路线并存:投资人版 5 人/11 周、执行 spec 10 人/3 周;执行排期以 mvp-execution-spec 为准(含逐日计划与里程碑) |
|
||||
| **MVP 范围/口径** | MVP 验收以 Doc A 的 **55 项 P0 产品功能**为准;技术实现范围经 Doc C 反查 Doc B(工作量 ≈137 技术项)。详见 [`mvp-scope-and-milestones.md`](./mvp-scope-and-milestones.md) §3 |
|
||||
|
||||
@ -2,6 +2,7 @@
|
||||
|
||||
> 蒸馏来源:`docs/agent-specs/2026-06-10-Mc模板波-execution.md`(HJ-MC-TPL-EXEC-001 §3–§9 全链)+ M-c 批① merge 模板实战收口(2026-06-10,五级验收门全过:构建/体积/契约门+真玩五AND双模板+Golden v1.1.2 PASS+校准批 accept 10/10+金丝雀10条入feed;途中逮修三真缺陷,见各节红框)。
|
||||
> 适用:给「模板驱动生成 + agent 闭环 QA」生产链**新增一个可玩玩法模板**(merge/idle/tycoon 类纯 Canvas Tier1 玩法),覆盖契约→prompt→runtime→后端→编排器→五级验收门全链。**批② idle/tycoon 直接套用本配方,压批② 成本。**
|
||||
> **⚠️ 状态(2026-06-11)**:本配方描述 **1.x 现行链路**(runtime 单工厂 switch + toString 注入 + 15KB 体积门)。Tier1 重设计已立项:15KB 红线废除、约束改三层框架(见 `docs/brainstorms/2026-06-11-tier1-runtime-constraints-requirements.md`),Runner v2 收口波将改写步骤三/体积门;1.x 双轨冻结期内本配方对存量模板仍有效。
|
||||
> 配套:新增后端业务模块(非玩法模板)见 [`./add-business-module.md`](./add-business-module.md);生成链路现实态见 [`./ai-generation-pipeline.md`](./ai-generation-pipeline.md) ⓪ 节;契约先行见 [`./contract-first-development.md`](./contract-first-development.md);运行时/SDK 见 [`./runtime-and-multichannel.md`](./runtime-and-multichannel.md);Prompt 治理见 [`./prompt-governance.md`](./prompt-governance.md);可靠性红线见 [`../rules/security-and-reliability.md`](../rules/security-and-reliability.md)。
|
||||
|
||||
---
|
||||
|
||||
@ -3,6 +3,7 @@
|
||||
> 蒸馏来源:`docs/architecture/系统概要设计-技术决策版.md`(§3.4 Game SDK / §4.2 运行时三容器 / §6.6 运行时与导出选型)、`docs/architecture/技术架构与模块.md`(runtime 模块 T-RT-* 技术功能)、`docs/architecture/系统概要设计-开发团队版.md`(§2 模块地图 / §10.4 LayaAir CLI)。
|
||||
> 适用:开发/调试 runtime 模块、WanxiangGameSDK、多渠道(微信/抖音/快手)小游戏导出。
|
||||
> 配套:SDK 降级铁律与沙箱安全红线见 [`../rules/security-and-reliability.md`](../rules/security-and-reliability.md);工程规范见 [`../rules/engineering-conventions.md`](../rules/engineering-conventions.md);架构全景见 [`../knowledge/product-and-architecture.md`](../knowledge/product-and-architecture.md);上游生成见 [`./ai-generation-pipeline.md`](./ai-generation-pipeline.md);契约见 [`./contract-first-development.md`](./contract-first-development.md)。
|
||||
> **⚠️ 状态(2026-06-11)**:本手册「自研 Canvas Runtime(<15KB)」相关段落为 **1.x 现行口径**。Tier1 重设计已立项:15KB 红线废除、改三层约束框架(见 `docs/brainstorms/2026-06-11-tier1-runtime-constraints-requirements.md`),渲染层将换成品轻引擎+Runner v2(终裁待 spike);沙箱/SDK/三容器章节不受影响。Runner v2 收口波改写本手册。
|
||||
|
||||
---
|
||||
|
||||
|
||||
222
docs/agent-specs/2026-06-11-Tier1运行时重设计-review.md
Normal file
222
docs/agent-specs/2026-06-11-Tier1运行时重设计-review.md
Normal file
@ -0,0 +1,222 @@
|
||||
# Tier1 运行时重设计 · 评审版(HJ-T1-REDESIGN-001)
|
||||
|
||||
> **状态:v1.1(四路尽调回填 + 约束框架定稿落账)→ 待创始人 §9 三项拍板。**
|
||||
> **约束框架单一事实源**:`docs/brainstorms/2026-06-11-tier1-runtime-constraints-requirements.md`(2026-06-11 创始人拍板:15KB 红线废除 → SLO 地板@千元机+4G P75 / 预算入场券 / 工程增强层三层框架)。
|
||||
> 本文件产自「Tier1 栈由创始人亲自设计的专门会话」(2026-06-11 拍板,见记忆 `tiered-engine-cocos-decision`)。主会话已完成诊断+给候选;本会话职责 = 设计 + 创始人裁决。
|
||||
> 日期:2026-06-11 | 分支:`dev/2.0.0` | 上游:`.agents/knowledge/tech-decisions.md` §1.1(裁决后须回填)
|
||||
|
||||
---
|
||||
|
||||
## 0. 一页结论(给拍板人)
|
||||
|
||||
1. **为什么重设计**:「好玩」要求暴露自研 Canvas 壳实为「机制演示」。五条代码铁证见 §1。根因是结构性的——`toString()` 注入模型**禁止一切依赖**,导致 juice 能力(粒子/音效/缓动/失败态)只能逐模板手搓,「好玩工时」随模板数线性爆炸。创始人已判「手搓引擎 = critical risk」。
|
||||
2. **重设计 = 三件事的捆绑**,缺一不可:
|
||||
- **D1 引擎置换**:自研壳 → 成品轻量引擎(候选 LittleJS / KAPLAY / Phaser,§4.1);
|
||||
- **D2 加载面换代**:`srcdoc + toString()` 内联 → **构建版 Runner 页**(iframe src URL + HTTP 强缓存)。这是任何成品引擎「进得来」的前提——现行 CSP `script-src 'unsafe-inline'` 外部脚本根本进不来(§4.2);
|
||||
- **D4 好玩基线**:失败态 + juice 清单 + 难度曲线进模板验收门。只换引擎不改玩法 = 白换(§4.4)。
|
||||
3. **不变的承重墙**(创始人已拍板,本设计严格遵守):`GamePackage` / SDK / `iframe` 沙箱 / 生命周期(`game_loaded/start/end`)契约不动;**生成模型不变**(深模板人工/agent 建 + LLM 填主题/数值/文案参);Cocos 仍只 Tier2/3;引擎是契约下可换的实现细节。
|
||||
4. **迁移零风险路径**:契约里现成的 `manifest.runtimeVersion`(semver)就是迁移缝——存量 50 款 1.x 包走冻结的 legacy 路径,新包走 2.0 Runner;回滚 = 生成默认切回 1.x(§4.6)。
|
||||
5. **推荐引擎裁决**(四路尽调已收口,证据见 §4.1):**KAPLAY 纸面淘汰、「自研+微库」路线淘汰、候选集查漏确认无遗珠;LittleJS 为默认领跑(硬约束全过:无 eval/程序化音效零网络/55KB gz/Canvas2D 自动降级),Phaser 为对照(juice 工具链与训练语料碾压,但 1.35MB+unsafe-eval+destroy 泄漏三座山)**。建议 top-2 eval-spike 实测定终裁(§5)。约束框架定稿后的语义更新:**B1 入场券(gz≤350KB/raw≤1.5MB)双引擎皆过门——Phaser 免预裁剪获入场资格,tree-shake 降为优化手段;生死改判于参考机 S2 实测(关键题=编译缓存真实表现)**。
|
||||
6. **待拍板 3 项**见 §9。
|
||||
|
||||
---
|
||||
|
||||
## 1. 背景与诊断:自研壳为什么到头了
|
||||
|
||||
### 1.1 五条代码铁证(`game-studio/src/host/runtime/index.ts`,843 行,亲读核实)
|
||||
|
||||
| # | 事实 | 证据位置 |
|
||||
|---|---|---|
|
||||
| 1 | 四模板(clicker/merge/idle/tycoon)全部内联在单个 `startRuntime` 函数体内 | `index.ts:53-843` |
|
||||
| 2 | 渲染 = 纯 `fillText` + `fillRect` + hsl 色块;**全文无一处 `drawImage`**——assets 预加载后从不绘制 | `loadAssets` 只计数(`:127-156`),无消费者 |
|
||||
| 3 | 零 juice:无粒子、无缓动、无音效、无屏震、无精灵动画 | 全文 |
|
||||
| 4 | 只胜不败:四模板全部「数到 N 即 `finish(completed:true)`」,无失败态、无难度曲线 | `:252,:414,:530,:711` |
|
||||
| 5 | `toString()` 注入禁依赖 → 工具函数(`clampInt`/`localXY`/`inRect`)被迫**逐模板复制粘贴**(注释明令「严禁提升到共享作用域」) | `:443-457,:650-664` |
|
||||
|
||||
### 1.2 结构性根因(不是写得差,是模型到头了)
|
||||
|
||||
`inject.ts` 用 `Function.prototype.toString()` 把 SDK 工厂 + Runtime 工厂序列化成文本拼进 iframe `srcdoc` 内联脚本。这个骨架期的聪明 hack 换来「零打包配置」,但代价如今全部到期:
|
||||
|
||||
- **禁止任何 npm 依赖**进 runtime → 粒子/缓动/音效全部只能手搓;
|
||||
- 函数体必须自包含 → 跨模板复用靠复制粘贴,×N 漂移靠纪律硬顶;
|
||||
- CSP `script-src 'unsafe-inline'`、`connect-src 'none'` → 外部引擎脚本进不来、音频资源载不进;
|
||||
- 「好玩工时」逐模板线性增长,且每一分都花在重造 40 年前就成熟的轮子上。
|
||||
|
||||
> 反向佐证:蓝图(技术决策版 §4.2)的 CSP 本来就是 `script-src 'self'`——同源加载构建版引擎 bundle 恰好是蓝图设计,现行 `unsafe-inline` 才是骨架期的临时偏离。
|
||||
|
||||
### 1.3 与既有裁决的关系
|
||||
|
||||
- 一次/二次裁决「Tier1 自研壳=护城河」的真实护城河成分是**沙箱 + SDK + 三容器 + 契约**,不是渲染循环本身——这些全部保留。
|
||||
- 旧 ADR 曾否决「Phaser 3 全栈」,否决语境是「全 Tier 通吃 + 导出弱」;本次 Phaser 仅竞标 Tier1 单层,不受旧否决约束(导出枢纽仍按既有裁决走微信格式包 adapter)。
|
||||
|
||||
---
|
||||
|
||||
## 2. 目标 / 非目标
|
||||
|
||||
**目标**
|
||||
|
||||
1. 新模板「好玩工时」数量级下降:juice(粒子/缓动/音效/屏震/精灵)成为引擎自带能力,模板代码只写玩法;
|
||||
2. 建立「好玩基线」并进五级验收门:失败态、难度曲线、juice 清单(§4.4);
|
||||
3. 全契约零破坏:GamePackage / SDK / 生命周期 / postMessage 信封 / storage 通道原样;
|
||||
4. 首屏不退步:P75 < 3s 红线不动;新增「点卡→可玩」S2 门(常态≤2s/全新设备首次≤3.5s,约束框架 R2);
|
||||
5. 存量 50 款内容池零影响(双轨迁移)。
|
||||
|
||||
**非目标**
|
||||
|
||||
- 不动生成模型(不做 LLM 直出代码;深模板仍由人/agent 编写、LLM 填参);
|
||||
- 不动 Tier2/3(Cocos 定位不变)、不做 3D;
|
||||
- 不动发布链 / feed / 鉴权 / 遥测后端(`game_end` 仅 additive 加字段,见 §4.4);
|
||||
- 不在本波做多渠道导出 adapter 真实化(仍按既有 backlog 排);
|
||||
- 不动 SDK Core(<8KB 约束与实现不变;SDK 与引擎解耦正是契约的意义)。
|
||||
|
||||
---
|
||||
|
||||
## 3. 设计总图
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
subgraph 生成侧["生成侧(不变)"]
|
||||
LLM["LLM 填参<br/>(designer prompt)"] --> GC["GameConfig<br/>(模板 schema 约束)"]
|
||||
GC --> GP["GamePackage v2<br/>manifest.runtimeVersion=2.x"]
|
||||
end
|
||||
subgraph 宿主["game-studio 宿主(GamePlayer.vue 不换)"]
|
||||
BR["postMessage 桥<br/>origin+schema 双校验(不变)"]
|
||||
end
|
||||
subgraph Runner["Runner v2(新:构建版 iframe 页,HTTP 强缓存)"]
|
||||
ENG["成品引擎<br/>(D1 裁决)"]
|
||||
TPL["深模板模块 ×N<br/>(与引擎同 bundle 同版本)"]
|
||||
SDKi["WanxiangGameSDK<br/>(契约 #3,不变)"]
|
||||
end
|
||||
GP -- "init 下发(postMessage)" --> Runner
|
||||
宿主 <-- "生命周期/遥测/storage/ad/pay(信封不变)" --> Runner
|
||||
GP -.-> LEG["Legacy 路径(冻结)<br/>runtimeVersion=1.x<br/>srcdoc+toString 原样"]
|
||||
```
|
||||
|
||||
**一句话**:宿主与契约一行不动;变的是 iframe 里面那张纸——从「每局现拼的内联脚本」换成「一张构建好、强缓存、带引擎和全部深模板的 Runner 页」,GamePackage 改由 postMessage `init` 下发(contract.ts 里 `init` 通道现成)。
|
||||
|
||||
---
|
||||
|
||||
## 4. 关键决策
|
||||
|
||||
### 4.1 D1 · 引擎选型(四路尽调已收口,2026-06-11,全部一手证据:官方 repo 源码/npm registry/issue/HN)
|
||||
|
||||
**硬约束对比表**(我们场景的一票项在前):
|
||||
|
||||
| 维度(硬约束在前) | LittleJS v1.18.19 | Phaser 4.1.0 / 3.90 | KAPLAY v3001 |
|
||||
|---|---|---|---|
|
||||
| CSP 无 eval(沙箱红线) | ✅ 源码实证无 eval/`new Function` | ⚠️ v3 确证需 `unsafe-eval`(单点 polyfill 可 patch;v4 未验证) | ❓ 未验证 |
|
||||
| 音效在 `connect-src 'none'` 下可用 | ✅✅ ZzFX/ZzFXM 程序化合成,零网络零资产 | ⚠️ WebAudio 播 sample 需载资源(CSP 要开口) | ❌ 仅 sample 播放,无程序化 |
|
||||
| 体积(引擎=强缓存宿主资产) | min 175.7KB raw / **≈55-60KB gz** | 全量 1.35MB raw / ≈345KB gz;tree-shake 到 gz<150KB **未实证** | 未取到数字(npm/bundlephobia 被拦) |
|
||||
| 低端 WebView 兜底 | ✅ WebGL2 不支持自动降级 Canvas2D(源码实证) | ⚠️ 有 Canvas 渲染器,但 1.35MB 低端机解析 ~1-1.3s + 多 tween 卡顿 issue | ❓ 移动端实测空白 + 2 个已知 Safari bug(加载失败/文字裁切,直击微信内核) |
|
||||
| CJK 中文 | ✅ `fillText` 系统字体路径(源码实证),缺真机案例需走查 | ✅ Text=canvas fillText→纹理(高频变更有重传成本,数字用 BitmapText) | ❓ 零官方背书,内部管线未明 |
|
||||
| juice 工具链 | 粒子(含编辑器)/ZzFX/屏震/后处理 shader/街机物理全内置;**缺 Tween 管理器**(有缓动数学,需自封薄层,一次性成本) | ★ 全维度最成熟(粒子/Tween Chains/摄像机特效/双物理) | 齐全但成色未经移动端验证 |
|
||||
| 可生成性(agent 写深模板) | 中上:文档好+单文件百行级示例对 agent 友好;语料少于 Phaser | ✅✅ 语料碾压(39.8k★/700+教程),**Phaser 官方亲出 Claude Code 教程(2026-02)**;注意语料是 v3、v4 刚出 2 个月 | ⚠️ 语料多为 Kaboom 旧 API(好在 API 近零破坏可沿用);**官方"LLM friendly/llms.txt"经核验不成立(404)——纠偏候选预设** |
|
||||
| 生命周期(feed 滑走销毁) | 无 destroy——被我们「一游戏一 iframe、滑走即卸载」契约天然规避,但**严禁同 iframe 内重启** | destroy() 不自净是多年已知泄漏(#2138/#5456)——同样靠 iframe 卸载兜底 | ❓ 未验证 |
|
||||
| 维护健康度 | 单人 bus factor(Frank Force),但近一月 8 连发极活跃;单文件 MIT,fork 自持成本极低 | ✅ Phaser Studio 公司化($2M),39.8k★,issue 仅 101 | ❌ 3 人团队 + $5/月捐赠档,v4000 滑期 ≥5 季度 |
|
||||
| 尽调评分 | **8.0 / 10** | **8.0 / 10** | 6.5 / 10 |
|
||||
|
||||
**裁决建议**:
|
||||
|
||||
1. **KAPLAY 纸面淘汰**:三重盲区(移动+中文+微信零先例)+ 2 个 Safari bug + 可持续性最弱 + 程序化音效缺失,且"LLM friendly"预设被证伪——没有任何维度赢过另两家。
|
||||
2. **「自研+微库」路线淘汰**(查漏报告关键论断):ZzFX/tween.js/手写屏震各自成熟,但这条路的形态终点**就是亲手再造一个 LittleJS**——除 CJK(本来就不输)外零独占收益,还把粒子/缓动/生命周期的维护永久揽上身。创始人「手搓引擎=critical risk」的判断被外部证据反向确认。
|
||||
3. **查漏确认候选集无遗珠**:Pixi(渲染器非引擎,CJK 丢最快路径)/melonJS/Excalibur/Kontra/Litecanvas(alpha+零语料)/Defold(MB 级)逐一排除;「为 LLM 设计的开源 2D 引擎」生态位当前为空。
|
||||
4. **终裁在 LittleJS(默认)与 Phaser(对照)之间**,本质是一道权衡题:**平台硬约束契合(LittleJS:无 eval/零网络音效/55KB/自动降级) vs 工具链成熟+语料优势(Phaser)**。LittleJS 仅剩的两处实证空白(CJK 真机、agent 写模板的实际摩擦)与 Phaser 的三座山(unsafe-eval patch 可行性、tree-shake 实测、低端机解析)恰好都是 spike 一次测清的事。
|
||||
|
||||
### 4.2 D2 · 加载面换代:srcdoc+toString → 构建版 Runner 页(推荐,随 D1 必做)
|
||||
|
||||
- **Runner = Vite 构建的独立入口**(如 `/runner/2.0.0/index.html`),内含:引擎 + 全部深模板模块 + SDK + 引导。iframe `src` 指向它(带版本号路径 → 强缓存/immutable),**引擎只在首次冷加载付一次代价,之后全游戏共享缓存**——这正是创始人「缓存抹平体积」拍板的工程形态。
|
||||
- **引擎 URL 化交付是铁律**(约束框架 KD4):URL 脚本同时享 HTTP 缓存与 Chromium 编译缓存(v8.dev 文档化行为;srcdoc 内联两者皆无——旧架构不光挡引擎进场,还白白放弃两层免费缓存)。feed 浏览期预热 Runner(下载+编译双热)。工程增强层 E1/E2/E4/E6(预热管线/首帧保障/模板共享资产入 Runner/brotli+WebP)落在 Runner 设计内,详见约束框架 R11-R16。
|
||||
- GamePackage 不再内联进 srcdoc,改走现成的 `init` postMessage 通道下发(契约 #3 已定义,零新协议)。
|
||||
- 沙箱姿态不变:`sandbox="allow-scripts allow-same-origin"` + origin/schema 双校验照旧;CSP 收敛到蓝图形态 `script-src 'self'; connect-src 'none'`(比现行 `unsafe-inline` 更紧,安全是**加强**不是放松)。
|
||||
- **音效走程序化合成**(ZzFX 类,零网络),`connect-src 'none'` 不必放开;采样音频留待后续单独评(需动 media-src,标记为契约邻接变更,本波不做)。
|
||||
- 三容器预加载护栏:N±1 容器只预取 manifest+assets,**不起活引擎实例**(WebGL context 与内存 ×3 是低端机雷区),当前容器独占活实例。
|
||||
|
||||
### 4.3 D3 · 模板架构:深模板 = Runner 内置代码模块
|
||||
|
||||
- 模板实现与引擎同 bundle、同版本、同验收(彻底告别「函数体内自包含+复制粘贴」范式);
|
||||
- `GameConfig` 仍是纯数据(schema 约束 + 后端校验 + runtime 钳制三层不变),LLM 职责零变化;
|
||||
- `add-game-template` 七步配方保留骨架,步骤三从「switch 加分支+体积门」改写为「新增模板模块+Runner 构建门」(配方升版随执行波蒸馏)。
|
||||
|
||||
### 4.4 D4 · 好玩基线(重设计的目的,建议与 D1 捆绑交付)
|
||||
|
||||
1. **juice 底线清单**(新模板验收新增门):交互必有即时反馈(缓动/粒子任一)+ 关键节点音效(程序化)+ 通关/失败演出 ≥1 处 + 屏震或等价强反馈 ≥1 处;
|
||||
2. **失败态**:模板必须有「会输」的路径(超时/失误/资源破产任一),难度参数进 GameConfig 由 LLM 填;
|
||||
3. **契约影响(additive,semver 安全)**:`game_end` 的 data 增加 `outcome: 'win'|'lose'`;`completed` 语义微调为「到达终局态」(赢或输都算 completed,弃玩才是 false)——**quality_score 完玩率口径因此保持有效**,无需动后端公式。此项动数据口径,列为待拍板(§9-Q2)。
|
||||
4. 存量四模板在新栈重做时同步补好玩基线(每模板一次五级验收门重走)。
|
||||
|
||||
### 4.5 D5 · QA 探针承重接口:隐性公式 parity → 显式只读布局契约
|
||||
|
||||
现状:merge/tycoon 的布局/按钮坐标公式要求 runtime 与 `player_cdp.py` **逐字符对齐**(隐性承重接口,收口靠人肉比对)。新栈下改为:**Runner 按模板暴露只读「取证几何清单」**(确定性布局数据,挂只读全局或 postMessage 查询),player 按清单驱动**真实输入事件**。取证纪律不变(真实事件、禁篡改内部状态),但承重接口从「散文公式 parity」升级为「显式契约」。
|
||||
|
||||
### 4.6 D6 · 迁移与回滚:runtimeVersion 双轨
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
A[GamePlayer 取包] --> B{manifest.runtimeVersion}
|
||||
B -- "1.x(存量 50 款)" --> C["Legacy 路径:srcdoc+toString 原样冻结<br/>只修 P0,不再演进"]
|
||||
B -- "2.x(新生成)" --> D["Runner v2:引擎+深模板"]
|
||||
```
|
||||
|
||||
- 阶段①:Runner v2 + 首个模板(建议 spike 的「落物 action」直接转正,§9-Q4)五级验收门全过 → 金丝雀入 feed;
|
||||
- 阶段②:四存量模板在新栈重做+好玩基线,逐模板过门;
|
||||
- 阶段③:生成默认切 2.x,1.x 冻结只读;存量包**不迁移**(零风险,自然汰换);
|
||||
- **回滚**:任一阶段生成默认切回 1.x 即回滚,legacy 路径全程在位;feed/发布链对 runtimeVersion 无感。
|
||||
|
||||
---
|
||||
|
||||
## 5. eval-spike 设计(top-2:LittleJS vs Phaser,建议方案)
|
||||
|
||||
- **题目**:同一款「落物 action」(接住坠落物得分、漏接扣命、速度随时间爬升——天然带失败态与难度曲线,正好检验好玩基线)。
|
||||
- **双引擎各搭一遍**,统一跑在 **Runner v2 雏形**里(iframe 沙箱+SDK 真接,不做编排器接入)——spike 同时就是 Runner 底座 bring-up,不是丢弃式工程。
|
||||
- **评分卡**(满分 100):好玩工时 30(达到 juice 底线清单的 agent 轮次/耗时;LittleJS 需自封 tween 薄层的成本计入)、可生成性 25(agent 首轮代码正确率+API 踩坑数;两边都喂官方示例,对齐 Phaser 官方 Claude 教程的「给 working example」方法论)、**S2 实测 20**(参考机画像 CDP 节流下首开/二开/稳态三档「点卡→可玩」耗时——B1 入场券双双过门后,**S2 是主考**,约束框架 KD3;Phaser tree-shake 从入场前提降为优化手段)、沙箱适配 15(**Phaser v4 unsafe-eval 现状 grep 实证** + 严格 CSP 下双引擎实跑 + 中文文案真机/微信 WebView 走查 + 三容器护栏)、维护健康度 10(已有研究数据直接计分)。
|
||||
- **定向钉子**(研究报告点名必须实测的空白,spike 内逐项打掉):① Phaser v4 dist 是否仍含 `new Function`(grep 即可);② Phaser 裁剪后 gz 实数;③ LittleJS 中文文案在低端 Android/微信 WebView 的真机渲染;④ 双引擎在 `script-src 'self'; connect-src 'none'` 严格 CSP 下零违规跑通;⑤ **编译缓存真实表现**:XWeb/低端 WebView 上 Runner 脚本首开/二开/三开的 parse 耗时曲线(code cache 是否生效——大引擎稳态成本的生死题,约束框架 A2)。
|
||||
- **产出**:实测计分表 + 裁决建议 → 创始人终裁;**获胜实现直接转正为模板五**(spike 钱花两次用)。
|
||||
- **预算**:每引擎 1 个执行 agent(opus 档)+ 主会话验证门,mini-desktop 构建/走查,预计 1~2 天等效(双引擎并行)。
|
||||
|
||||
---
|
||||
|
||||
## 6. 爆炸半径与兼容
|
||||
|
||||
| 面 | 影响 | 处置 |
|
||||
|---|---|---|
|
||||
| `contracts/`(8 契约) | **零破坏**。`game_end` data 加 `outcome`(additive);GamePackage/SDK/信封/storage 原样 | 契约先行流程走一遍,通知面小 |
|
||||
| game-studio 宿主 | GamePlayer.vue 加 runtimeVersion 分流 + Runner 入口构建;bridge/双校验不动 | 中等,单仓内 |
|
||||
| 后端 game-cloud | **零改**(模板白名单/schema 校验/quality 公式不动;`runtime 真实编译打包` backlog 顺势按 v2 产物形态实现,反而少走弯路) | 排期受益 |
|
||||
| 编排器 player_cdp | 每模板取证策略随新栈重写(D5 显式几何契约后更稳) | 逐模板随执行波 |
|
||||
| `.agents` 配方 | add-game-template 步骤三/体积门改写;runtime-and-multichannel、tech-decisions §1.1 回填 | 收口铁律内 |
|
||||
| 存量内容池 50 款 | 零影响(1.x 冻结路径) | 双轨保障 |
|
||||
| 体积门 | 「runtime<15KB」红线**废除**,按约束框架三层重建:B1 引擎入场券 gz≤350KB 且 raw≤1.5MB(2026-06-11 创始人拍板放宽档)+ S2 实测主考(常态≤2s/首次≤3.5s)+ R7/R8 游戏包门(首批 ≤1MB/总 ≤10MB/config ≤32KB) | ✅ 已定稿(brainstorm requirements) |
|
||||
|
||||
## 7. 风险(按严重度)
|
||||
|
||||
1. **引擎选错的纠错成本**(中高):深模板代码与引擎强耦合,换引擎=重写全部模板 → 用 spike 实测+双轨缓释;契约层保证宿主/后端/生成侧零返工。
|
||||
2. **低端 WebView 实测不达**(中):WebGL 兼容/内存——spike 评分卡含真机维度;引擎若 WebGL-only 需确认 Canvas2D 回退。
|
||||
3. **好玩基线推高生成失败率**(中):难度参数进 GameConfig 后 LLM 填参违例面变大 → schema 钳制+runtime 兜底纵深照旧,校准批先行。
|
||||
4. **completed 语义微调的数据连锁**(低中):outcome 字段 additive,但 BI/报表若有硬编码读法需 grep 一遍 → 执行波清单项。
|
||||
5. **双轨期维护两套 runtime**(低):1.x 冻结只修 P0,演进全在 2.x;冻结纪律入 rules。
|
||||
|
||||
## 8. 验收标准(重设计整体收口线)
|
||||
|
||||
1. Runner v2 + 获选引擎:构建门绿 + 首载预算达标 + 三容器护栏实测;
|
||||
2. 模板五(落物 action):五级验收门全过 + **好玩基线门全过** + 金丝雀入 feed 真人实玩;
|
||||
3. 存量四模板新栈重做:逐模板五门+好玩门,clicker 回归与 1.x 行为对照留档;
|
||||
4. 生成默认切 2.x,连续一个校准批 accept ≥80% 量级不回退;
|
||||
5. 契约 grep:生命周期/信封/storage 零破坏证据 + `outcome` 字段三端(runtime/宿主/遥测)一致;
|
||||
6. 蒸馏回填:tech-decisions §1.1 / add-game-template / runtime-and-multichannel / 总账+作战清单(按 wave-close-checklist 七步)。
|
||||
|
||||
## 9. 待拍板项
|
||||
|
||||
| # | 问题 | 选项 | 我的倾向 |
|
||||
|---|---|---|---|
|
||||
| Q1 | 引擎裁决方式 | (a) 直接拍 LittleJS(研究已足够一边倒)/ (b) **top-2 spike(LittleJS vs Phaser)实测终裁** / (c) 三款全 spike | **(b)**——KAPLAY/自研+微库纸面淘汰已稳;LittleJS 两处实证空白(CJK 真机/agent 摩擦)与 Phaser 两座山(unsafe-eval/编译缓存下的 S2 稳态)只有实测能定(tree-shake 已随 B1 放宽档降为优化手段),且 spike 顺产 Runner 底座+模板五,不是纯评测成本 |
|
||||
| Q2 | 好玩基线是否本波捆绑(含失败态+`outcome` 字段+completed 语义微调) | 捆绑 / 只换引擎先行 | **捆绑**——不捆绑则重设计只剩搬家,「好玩」无验收抓手 |
|
||||
| Q3 | 队列位置 | 插队成当前主线 / 与链路③⑤走查、W4 埋点并行 / M4 变现先行 | 创始人定(作战清单本轮完成线本就待重锁);注意 Tier1 重设计预计 2~4 个执行波,是大动脉手术 |
|
||||
|
||||
(原 Q4「spike 产物转正」并入 §5 设计默认:转正为模板五,不另问。)
|
||||
|
||||
## 10. 演进路径(拍板后的波次切分预估)
|
||||
|
||||
1. **W-T1a**:(若拍)eval-spike → 引擎终裁 + 本 spec 定稿 + execution spec(双 spec 铁律);
|
||||
2. **W-T1b**:Runner v2 底座 + 模板五转正 + D5 取证契约 + 五门收口;
|
||||
3. **W-T1c**:存量四模板新栈重做 ×4(可两批并行,复用 add-game-template 升版配方);
|
||||
4. **W-T1d**:生成默认切 2.x + 1.x 冻结 + 全链收口蒸馏。
|
||||
@ -67,7 +67,7 @@
|
||||
|---|---|
|
||||
| IP 专属定向微调垂类模型 | "通用 LLM 做底座,为每个 IP 训练**画风 LoRA**(ComfyUI/Flux/SDXL)保证系列一致。**没有自训垂类大模型。**" |
|
||||
| 四层画风锁风校验算法 | "风格指纹嵌入比对 + 阈值门 + 三档人审(标准/严格/人工)。**不是高深算法**,是让非独家 IP 能安全规模化使用的工程 + 合规流程。" |
|
||||
| 轻量化 H5 游戏引擎 | "自研 <15KB Canvas 薄壳 + iframe 沙箱 + SDK 注入,保 P75<3s 首屏与平台控制点;复杂 2D/3D 用 Cocos。**不是自研重引擎。**" |
|
||||
| 轻量化 H5 游戏引擎 | "轻量 H5 运行时——自研的是**宿主控制层**(Runner + iframe 沙箱 + SDK 注入),渲染引擎层用成熟开源轻引擎(可替换),保 P75<3s 首屏与平台控制点;复杂 2D/3D 用 Cocos。**不自研引擎。**" |
|
||||
| 全域一键分发调度系统 | "以微信小游戏格式包为枢纽的多渠道转换 + 渠道适配规则库 + 发布状态机。**快手经格式转换 + 真机验证,不是全自动。**" |
|
||||
| AI + 人工双层风控 | "机审(自部署快检 + 阿里云内容安全 + Dify Guardrails)+ 人审队列(BPM)。行业合规标配,我们做扎实了。" |
|
||||
| 流量双轨推荐算法 | "MVP 是**规则线性加权打分** + 授权IP/UGC 双区分区运营;千人千面 ML 是数据积累后的增长期演进。" |
|
||||
@ -82,7 +82,7 @@
|
||||
| "双轨推荐算法" | "规则推荐 + 授权IP/UGC 双区运营,ML 为后续演进" |
|
||||
|
||||
### B3. 自研边界(清楚地讲"自研什么、不自研什么")
|
||||
- **自研(必须自掌——控制点 + 数据入口)**:runtime 薄壳 + iframe 沙箱 + SDK 注入、feed 推荐、telemetry 数据底座、变现链路(钱包/分账/广告位)。
|
||||
- **自研(必须自掌——控制点 + 数据入口)**:运行时宿主层(Runner + iframe 沙箱 + SDK 注入;渲染引擎为可替换的开源轻引擎,不自研)、feed 推荐、telemetry 数据底座、变现链路(钱包/分账/广告位)。
|
||||
- **不自研(省 6-12 月 + 千万级,且可替换无锁定)**:大模型、生成 Agent(OpenGame)、编排(Dify)、后台(Yudao)、素材生成(ComfyUI)、内容安全(阿里云)、复杂引擎(Cocos,远期)。
|
||||
|
||||
### B4. CTO 会戳的三个点 + 怎么答
|
||||
@ -91,7 +91,7 @@
|
||||
|---|---|
|
||||
| "这六项不就是 Dify+ComfyUI+Yudao+阿里云拼的吗?" | "对,而且是刻意的。自研这些要 6-12 月烧千万,我们 4-6 周集成,省下的全投在竞品没有的 feed/变现/SDK 上。自研边界很清楚(见 B3)。" |
|
||||
| "锁风是什么高深算法?" | "不是。嵌入比对 + 阈值 + 人审。我们不声称算法领先——它解决的是工程和合规问题:让非独家 IP 安全规模化。价值在流程,不在算法。" |
|
||||
| "<15KB runtime 有什么了不起?" | "不了不起,但它是平台控制点:广告/支付在宿主侧注入、游戏沙箱零网络权限——决定了变现能否被平台掌控、合规边界划在哪。是工程选择,不是炫技。" |
|
||||
| "轻量 runtime 有什么了不起?" | "运行时本身不了不起——渲染引擎我们直接用成熟开源轻引擎。了不起的是控制点:广告/支付在宿主侧注入、游戏沙箱零网络权限——决定了变现能否被平台掌控、合规边界划在哪。是工程选择,不是炫技。" |
|
||||
|
||||
### B5. 真实工程亮点(CTO 尊重好工程,即使不是护城河)
|
||||
- **13 模块高内聚低耦合 + 契约先行**(Feign `-api` 包声明)+ 单 JAR 起步可平滑拆微服务。
|
||||
|
||||
@ -13,6 +13,7 @@
|
||||
> 1. **生成主线已转向「模板驱动」**(C2 裁定 2026-06-09,spike 52/52 结构层 100%):LLM 直出 GameConfig 参数 + 固定模板 runtime,经 new-api 网关直连 LLM;**Dify / OpenGame 均未部署**,OpenGame 代码生成降级为远期增强。本档 §2.3 模式A 时序图、§4.1、§6.2 的 Dify+OpenGame 描述保留为蓝图原案。
|
||||
> 2. **执行排期以 `mvp-execution-spec` + `docs/mvp/MVP作战清单.md` 为准**,§9 甘特仅作蓝图参考;2026-06-08 业务决策已将 MVP 验收改为「staging/内网种子灰度走通真闭环」,公网上线=MVP 后并行长周期任务(受日历闸门约束)。
|
||||
> 3. **LLM 接入现状**:D1 拍板主 DeepSeek / 备 Qwen(2026-06-08);当前实际 = MiniMax-M2.7 经 new-api 网关(DeepSeek key 未激活)。网关多通道兜底曾真实失效(二厂系全废),见 §8 风险 #12。
|
||||
> 4. **Tier1 运行时已立项重设计**(2026-06-11 创始人专门会话):本档「自研 Canvas Runtime <15KB」相关描述(§4.2/§6.6 等)被裁定取代——**15KB 红线废除**(srcdoc 内联架构的衍生约束,前提失效),改三层约束框架(SLO@千元机+4G P75 / 预算入场券 gz≤350KB·raw≤1.5MB / 工程增强层),渲染层换成品轻引擎+Runner v2(终裁待 LittleJS vs Phaser spike);沙箱/SDK/三容器控制点不变。单一事实源:`docs/brainstorms/2026-06-11-tier1-runtime-constraints-requirements.md` + `.agents/knowledge/tech-decisions.md` §1.1。
|
||||
|
||||
---
|
||||
|
||||
|
||||
@ -0,0 +1,115 @@
|
||||
---
|
||||
date: 2026-06-11
|
||||
topic: tier1-runtime-constraints
|
||||
---
|
||||
|
||||
# Tier1 运行时约束框架(替代 15KB 单一红线)· Requirements
|
||||
|
||||
## Summary
|
||||
|
||||
用三层约束框架取代「runtime<15KB」单一红线:**SLO 地板**(用户可感体验承诺,锚定参考环境)+ **分层预算入场券**(从 SLO 反推的工程门禁)+ **工程增强层**(把体感从达标拉到短视频级)。框架管辖 Runner v2 设计、引擎终裁(S2 实测为主考)与五级验收门改造。
|
||||
|
||||
## Problem Frame
|
||||
|
||||
15KB 是 `srcdoc + toString()` 内联架构的衍生约束:runtime 字节随每局游戏重复支付、无任何 HTTP 缓存,抠 KB 在当时是理性的。Tier1 重设计将引擎改为「带版本号 URL + immutable 强缓存」的平台资产(每设备每版本只付一次),前提失效,约束必须从产品体验重新推导。业界即玩生态的地板全部是 MB 级(playable ads 单文件 ≤5MB 为最严基准;微信小游戏主包 4MB/总包 30MB),15KB 仅为最严基准的 0.3%。低端机的真实瓶颈不是传输而是 **JS parse**(千元机 ≈1MB/s,且编译缓存只对 URL 脚本生效)——这是约束框架必须显式管理的成本。
|
||||
|
||||
---
|
||||
|
||||
## Key Decisions(创始人拍板,2026-06-11)
|
||||
|
||||
- **KD1 参考环境 = 主流下沿**:千元机 Android(6GB RAM 档,弱尾 4GB 归 P95)+ 微信内置 WebView + 4G(有效 ~5Mbps),P75 承诺、P95 优雅降级。无上线数据,此为产品假设,上线后用真实遥测校准。
|
||||
- **KD2 引擎预算取放宽档**:B1 硬门 gz≤350KB 且 raw≤1.5MB——预算不预判引擎赢家,全量 Phaser 亦获入场资格。
|
||||
- **KD3 裁决语义 = 预算是入场券,S2 实测是主考**:过 B1 不豁免 S2;主考最关键一题是编译缓存在 XWeb/低端 WebView 的真实表现(决定大引擎稳态 parse 成本)。
|
||||
- **KD4 引擎 URL 化交付铁律**:URL 脚本同时享 HTTP 缓存与 Chromium 编译缓存,内联两者皆无;实例级引擎复用(常驻 runner 跨游戏复用实例)受制于候选引擎 destroy 卫生,不进本波。
|
||||
- **KD5 工程增强层只收六条便宜高杠杆**(E1-E6);帧预算调速器、模板代码 code-split、实例级复用留 backlog——增强不等于镀金。
|
||||
- **KD6 文档回填 A/B/C 分治**:活文档立即改 / 1.x 手册挂横幅随 Runner v2 收口波改写 / 历史快照不动;15KB 按「前提失效→裁定取代」记档,不按「改错」记。
|
||||
|
||||
---
|
||||
|
||||
## Requirements
|
||||
|
||||
**SLO 层(产品地板,锚 KD1 参考环境,P75 口径)**
|
||||
|
||||
- R1. (S1) feed 首屏 < 3s——既有红线保留,比 Facebook Instant Games 的 <5s 更严,属合理自我加码。
|
||||
- R2. (S2) 点卡→可玩:常态(引擎已缓存)≤2s;全新设备首次 ≤3.5s。
|
||||
- R3. (S3) 参考机 juice 全开稳定 ≥30fps;P95 设备走自动降级档,不承诺帧率。
|
||||
- R4. (S4) `game_load_failed` 率 <2%;运行时 `game_error`(含 OOM)率 <0.5%。
|
||||
- R5. SLO 用现有生命周期事件时间戳测量(`game_loaded`/`game_start`),与 W4 单位经济埋点波合流;上线后以真实设备分布校准 KD1。
|
||||
|
||||
**预算层(工程入场券,进 CI/验收门强制)**
|
||||
|
||||
- R6. (B1) 引擎 bundle:硬门 gz≤350KB 且 raw≤1.5MB(KD2/KD3:过门≠过考)。
|
||||
- R7. (B2) 每游戏首批可玩 payload ≤1MB(wire);游戏总资产 ≤10MB(蓝图 §4.2 口径保留)。
|
||||
- R8. (B3) GameConfig JSON ≤32KB。
|
||||
- R9. (B4) 活跃游戏实例内存 ≤150MB;同屏仅 1 个活引擎实例,三容器的 N±1 只预取字节、不实例化。
|
||||
- R10. (B5) Runner 以带版本号 URL + immutable 缓存交付(KD4);feed 浏览期预热 Runner(下载+编译双热);资产按 `manifest.preloadPolicy` 做 eager/lazy 切分(首批可玩 eager,其余流式)。
|
||||
|
||||
**工程增强层(体验上拉,Runner v2 设计承诺,不入门禁)**
|
||||
|
||||
- R11. (E1) 预热管线:点卡→可玩体感目标 ~0.5-1s,对齐短视频起播节奏。
|
||||
- R12. (E2) 首帧保障:<300ms 绘出主题底色/标题(GameConfig 随 feed 清单先行可得),加载等待感消失。
|
||||
- R13. (E3) 自适应质量分档:首次会话探测设备能力定档存储;P95 设备自动降粒子/关后处理/限 dpr——「P95 优雅降级」的机制化。
|
||||
- R14. (E4) 模板级共享资产打进 Runner 享全局缓存;GamePackage 只装主题专属资产(为 R7 瘦身)。
|
||||
- R15. (E5) 音效优先程序化合成(参数仅数十字节,沙箱 `connect-src 'none'` 零开口);采样音频需 CSP 开口,默认不做。
|
||||
- R16. (E6) 传输压榨:brotli 优先于 gzip、图像 WebP;manifest 随 feed 下发省一次 RTT。
|
||||
|
||||
**治理层**
|
||||
|
||||
- R17. 验收门改造:15KB 体积门废除;Runner 构建门按 R6、游戏包门按 R7/R8、真机门按 R2/R3(CDP 按参考机画像节流走查)。
|
||||
- R18. 文档回填按 KD6 三类执行;对外话术中「<15KB」措辞改为引擎无关表述(平台控制点叙事不变)。
|
||||
- R19. 平台规则记档为硬约束并在渠道导出时复核:微信主包 4MB/总包 30MB(虚拟支付)、抖音 4→30MB、快手主包 6MB、playable ads 单文件 ≤5MB——全候选引擎合规。
|
||||
|
||||
---
|
||||
|
||||
## Acceptance Examples
|
||||
|
||||
- AE1. **Covers R2, R10.** Given 用户已浏览 feed ≥3s(Runner 预热完成),When 点卡,Then P75 ≤2s 可玩(体感目标 ~1s)。
|
||||
- AE2. **Covers R2, R12.** Given 全新设备首次点卡(零缓存),When 打开游戏,Then P75 ≤3.5s 可玩,且 <300ms 已有主题首帧画面。
|
||||
- AE3. **Covers R3, R13.** Given P95 低端设备(4GB/弱 SoC),When 试玩任一模板,Then 降级档自动生效、无 OOM/白屏,帧率不承诺。
|
||||
- AE4. **Covers R6, KD3.** Given 某引擎 gz=340KB 过 R6 入场,When spike 在参考机实测 S2 常态 >2s,Then 该引擎落选——预算过门不豁免 SLO 主考。
|
||||
|
||||
---
|
||||
|
||||
## Scope Boundaries
|
||||
|
||||
**Deferred for later**
|
||||
|
||||
- 实例级引擎复用(常驻 runner 跨游戏复用实例,省 init/WebGL 上下文)——候选引擎 destroy 卫生不达标,S2 实测逼出来再上(2.x)。
|
||||
- 帧预算调速器(运行中按帧时动态降效果档)。
|
||||
- 模板代码 code-split(模板库到几十个时再做)。
|
||||
- 采样音频的 CSP 开口(media-src/blob)。
|
||||
- 微信/抖音/快手小游戏导出适配(引擎进主包的打包方案)。
|
||||
|
||||
**Outside this scope**
|
||||
|
||||
- 引擎终裁与 eval-spike 本身——归 `docs/agent-specs/2026-06-11-Tier1运行时重设计-review.md` §5。
|
||||
- 好玩基线内容(失败态/juice 清单/`outcome` 字段)——归重设计 spec §4.4,待拍板。
|
||||
- SDK Core <8KB——独立约束,本框架不动。
|
||||
|
||||
---
|
||||
|
||||
## Dependencies / Assumptions
|
||||
|
||||
- A1. 参考环境(KD1)是产品假设:无上线用户设备分布数据,按 2026 千元机现状(Redmi Note 15 级,6GB RAM,¥999)锚定;上线后遥测校准。
|
||||
- A2. Chromium 编译缓存按 v8.dev 文档化行为采信(URL 脚本二载生成、三载复用);**XWeb/X5/低端 WebView 的真实表现未验证**——已列为 spike 定向钉子。
|
||||
- A3. 微信「游戏引擎插件」机制(引擎托管在平台、不占主包、跨游戏共享)为高置信知识,渠道导出规划时核官方文档。
|
||||
- 上游依赖:Runner v2 加载面(重设计 spec D2)是 R10/R14 的载体。
|
||||
|
||||
---
|
||||
|
||||
## Outstanding Questions
|
||||
|
||||
**Deferred to planning**
|
||||
|
||||
- S2 数值校准窗口:首批参考机真机数据落地后是否调整 2s/3.5s。
|
||||
- E3 分档探测的具体信号集(WebGL 能力/`deviceMemory`/首帧耗时采样的组合)。
|
||||
|
||||
---
|
||||
|
||||
## Sources
|
||||
|
||||
- 平台限额核实(2026-06-11,一手官方文档):微信/抖音/快手开放平台分包文档、Meta Instant Games bundle 指引(首下 ~1MB/首屏 <5s)、playable ads 聚合规范(≤5MB)、Poki(首下 ≤8MB/≥30fps)、CrazyGames(移动首页 ≤20MB)。
|
||||
- 引擎四路尽调(2026-06-11):LittleJS(npm registry:v1.18.19,min 175.7KB raw≈55KB gz;源码证无 eval、WebGL2 自动降级 Canvas2D)、Phaser(unpkg 一手字节:4.0.0 全量 1.35MB raw≈345KB gz;v3 确证需 unsafe-eval;destroy 泄漏 issue #2138/#5456)、KAPLAY("LLM friendly/llms.txt"证伪:404)、查漏横评(候选集无遗珠;「自研+微库」终点=再造 LittleJS)。
|
||||
- v8.dev:JavaScript code caching(编译缓存行为)。
|
||||
- 现行实现:`game-studio/src/host/runtime/index.ts`(843 行自研壳)、`game-studio/src/host/inject.ts`(toString 注入与 CSP)、`game-studio/src/host/contract.ts`(GamePackage/manifest.runtimeVersion 迁移缝)。
|
||||
- 重设计评审版:`docs/agent-specs/2026-06-11-Tier1运行时重设计-review.md`。
|
||||
@ -1,6 +1,7 @@
|
||||
# game-studio(产品端前端 · 创作者 + 玩家)
|
||||
|
||||
> **状态:双区建成并接 staging 真后端(2026-06-11 对账)。** 创作链路①与发布段 UI 走查全绿、真人试玩链路③ e2e 闭环(HJ-FE-WALK-001),mock 仅作离线兜底。**进度一律以 `docs/mvp/MVP进度总账.md` 为准,本文件只随结构变化更新。**
|
||||
> **⚠️ Tier1 重设计立项(2026-06-11)**:`src/host/runtime/` 自研壳(<15KB)将由「成品轻引擎 + Runner v2」取代,15KB 红线废除、改三层约束框架(`docs/brainstorms/2026-06-11-tier1-runtime-constraints-requirements.md`);引擎终裁待 LittleJS vs Phaser spike,存量 1.x 路径双轨冻结。
|
||||
> 上游契约:仓根 `contracts/`(5 API YAML + sdk-interface.d.ts#3 + game-package.schema.json#4,单一事实源)。
|
||||
> 建设过程与验收详见 `docs/agent-specs/2026-06-08-前端game-studio建设-{review,execution}.md`。
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user