zizi 99b6c82dec feat(runner-v2): P1 王蓝莓上引擎=游戏宿主装载契约 spike 实(mini-desktop real 引擎 5 门全过)
Runner v2 全弧第一相(HJ-RUNNER-ARC-001 / P1):用王蓝莓把"上层游戏宿主装载契约"
从零 spike 到"引擎真掌帧 + 游戏美术与引擎粒子同屏可玩",解锁 P2 泛化 / P3 生成。

契约与共享件
- 新增装载契约 game-runtime/src/core/game-host.d.ts(第9类 additive·暂名):
  GameHostBootContext / GameInstance / GameHostFactory;游戏=纯模块工厂,零引擎 import,
  能力经下层 ctx.getEngine()(受控面 6 项零改),绘制面 render(g) 的 g=引擎 mainContext
- makeEngineCaps 闭包提升为可 import 模块 host-dev/engine-caps.js(createEngineCaps):
  host-dev/ref/未来生成游戏共用;engineMode 短路 / __engineCalls 探针 / null-engine 语义逐行不变

王蓝莓 real 通道(games/wanglanmei-ref)
- 增 ?engine=real:主循环从浏览器 RAF 改挂 engineInit 五回调(掌帧唯一源=引擎);
  游戏美术绘制面从 #game 改引擎 mainContext(同屏合并);bundle 延后到 setupReal 内以
  mainContext 建(getContext2d 闭包快照修);保 ?engine=stub 逐像素确定性回滚
- game-shop.js 抽为独立 GameHostFactory(零引擎 import,P3 生成 agent 可复制范本)
- entry.js 动态 import('littlejsengine')=node-import-safe ∧ esbuild iife 入包两全
- 驱动 e2e-input.cdp.cjs real 改造:禁 stepFrames 手摇(防双掌帧),真触摸+轮询;
  门②同屏像素判据(暖色 warmHits ∧ 引擎粒子 brightHits 同张 #game-engine)

真机验收(mini-desktop real 引擎,5 门)
引擎掌帧 dFrame=31∈[20,45] / 同屏 warmHits=682∧brightHits=13028 同张 #game-engine /
particles.spawnEmitter+synthSfx call-ID 运行时真调引擎 / CDP 517 真触摸跑通整局
(第1天接待18·营收¥79.9·连击9) / console 零错;本机 88 单测全绿(含修复 4 红+补回归)
证据:games/wanglanmei-ref/evidence/p1-real/(e2e-evidence.json pass=true + 5 截图肉眼复核)

诚实 caveat:门② brightHits 在结算屏混入亮 UI,同屏合并由 warmHits(美术落引擎画布)+
call-ID(粒子真调引擎)+ 引擎架构(粒子渲同一 mainContext)三证成立,非阻断。

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

3.0 KiB
Raw Blame History

SIZES.md —— 发行版字节预算实测增量法core-protocol-v0

scripts/size.mjs 在集成段mini-desktop生成。勿手改,改源后重跑覆盖。 口径esbuild bundle+minify+format=iife+target=es2019+sourcemap=false gz = zlib.gzipSync(buf,{level:9})(等价 gzip -9增量法 = 基线壳→+core→逐插件叠加差值为各件净增。

叠加项 累计 raw 累计 gz 增量 raw 增量 gz gz 预算 判定
基线壳 0 0 基准
+core 9327 3387 9327 3387
+example 9871 3630 544 243 2048 ✔ ≤2048
+audio-music 15944 5702 6073 2072 12288 ✔ ≤12288
+collision 20797 7733 4853 2031 8192 ✔ ≤8192
+gamefeel 24714 8895 3917 1162 4096 ✔ ≤4096
+palette-post 29123 10505 4409 1610 8192 ✔ ≤8192
+particles-juice 33383 12086 4260 1581 10240 ✔ ≤10240
+physics-lite 35786 13015 2403 929 6144 ✔ ≤6144
+runtime-probe 38746 14215 2960 1200 6144 ✔ ≤6144
+save-progress 42785 15487 4039 1272 2048 ✔ ≤2048

合计插件 gz 增量 ≈ 12100B(自律线 60K超 60K 须创始人显式放行,执行版 §5


游戏产物(引擎+包装层——P1 王蓝莓上引擎口径

口径区别:上表「增量法」量的是插件净增(基线壳→+core→逐插件叠加不含引擎。游戏产物一款 game-shop bundle= 引擎 + 能力插件库 + 游戏代码 整包,是另一口径,不并入上表。 同一 esbuild 锁参(bundle+minify+iife+es2019+sourcemap=falsegz=zlib.gzipSync(buf,{level:9})

产物 引擎入包 raw gz B1 入场券(gz≤350KB) 备注
ref stub 通道 ~197KB 不打引擎(回滚锚;引擎 import 经 engineMode 短路不触达运行时,但 esbuild 仍随 entry 引擎 import 打入——故 stub/real 同一份 bundle差异在运行时通道不在产物字节
ref real(引擎真入) 是(littlejsengine.esm.js 640KB 源经 tree-shake+min 264KB 88KB gz 88KB ≪ 350KB entry.js/main.js import 引擎Q4只 entry/hostgame-shop.js 游戏工厂零引擎 importmetafile 实证)。grep -q ParticleEmitter 核入包

实测来源6c6g node scripts/build.mjs games/wanglanmei-ref/entry.js → /tmp dry-buildraw=264476 / gz=895832026-06-13。引擎入包凭据metafile inputsnode_modules/littlejsengine/dist/littlejs.esm.js,且仅 main.js/entry.js import 之Q4:插件增量法不覆盖游戏产物口径——勿把游戏产物字节并入上表「合计插件 gz 增量」。mini-desktop 可经 size.mjs 复测覆盖本节。 勿引「13KB / 55KB」自研 Canvas 旧口径(已废,见 [.agents tech-decisions §1.1]);引擎=LittleJS 完整版。