5路并行侦察(读代码非读规格,PLANNED vs ACTUAL 以代码为准)实证:每个灰度闭环必需项 done/absorbed-by-arc 且有真机证据(A6 6/6 `3e5cab4` / P2真机6门 `5d3f7a8` / 3b-B井字棋入feed `238ec2d` / B1主链9001-9002);剩余全是 audit-debt+gold-plating, 无一在完成线(日历闸门)关键路径。 3处 spec↔代码漂移(有意改判非bug,已回填澄清): - Phase B: packageUrl外链 → engineBundle内嵌(absorbed,契约一致无split-brain) - Phase C: 1.x srcdoc→URL退役被P2 O2(b)supersede(moot,单宿主GamePlayer.vue无双轨) - Phase A: random/time/input改判插件自管(透传破粒子确定性/污染帧钟,血统债) 落档(纯文档additive/低风险): - 母spec 9处banner回填(Phase C supersede / Phase B engineBundle / Phase A drifts / 门3·门5·门12 / §12 immutable裁决) - 新收口报告 docs/agent-specs/2026-06-15-T1b-β收口报告.md(wave-close七步) - 总账(§5 backlog+推迟清单+§6执行记录row+表头日期2026-06-15) - 作战清单(§0+T1b-β item标done)+ .agent(TODO→收口block+推迟清单) - schema immutable孤儿字段标future(消无孤儿设计红线 AGENTS §7) 推迟清单(gold-plating+audit-debt)入backlog,创始人可点名某项转required。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
34 lines
6.0 KiB
Plaintext
34 lines
6.0 KiB
Plaintext
# game-runtime/.agent —— LittleJS 增强发行版工作区(Tier1 引擎+能力插件库)
|
||
|
||
> 进度一律以 `docs/mvp/MVP进度总账.md` 为准,本文件只记**职责边界与结构**。
|
||
|
||
## 定位
|
||
|
||
平台维护的「LittleJS + 插件套件」增强发行版工作区:引擎能力插件(碰撞/手感/粒子/物理/调色板/音频/存档/探针等)即插即用、可组合、版本化。**玩法/美术/关卡/UI 不在此层**——四者是 agent 造游戏时的生成域(2026-06-12 模板哲学重申)。
|
||
|
||
## 结构
|
||
|
||
- `src/core/` — core-protocol-v0:Plugin 接口+注册器+受控面(6 项,禁直透引擎)
|
||
- `src/plugins/` — 9 件插件(_example 为活样板,规格模板=`docs/PLUGIN-TEMPLATE.md`)
|
||
- `schema/` — plugin-manifest schema(零依赖校验器在 scripts/)
|
||
- `scripts/` — build/size/test/validate(esbuild 打包;SIZES.md 由 size.mjs 生成勿手改)
|
||
- `test/harness/` — 浏览器证据 harness(CDP)
|
||
- `games/wanglanmei-ref/` — 拔高样板「暖阳小卖部」(好玩基线 v2 立标件;LOOP-LOG.md=循环台账;test/=e2e 驱动+runbook;evidence/=四件套证据)
|
||
|
||
## 边界与现状
|
||
|
||
- **裁决①(2026-06-12 创始人拍)**:粒子/物理/后处理三件须改**引擎能力包装层**(包 littlejsengine 内建而非裸 Canvas2D 平行重造);β 设真接线门(bundle grep 实证含 littlejsengine)+受控面开包装透传通道+SIZES 按「引擎+包装层」重锚。collision/gamefeel 确为引擎缺件,维持自研。
|
||
- T1b-α ✅ 主门过(创始人亲玩 PASS);收口报告=`docs/agent-specs/2026-06-12-T1b-α收口报告.md`。
|
||
- **A0 地基 ✅(`11c8eaf`,门0 8/8 mini-desktop 实测)**:host-dev 真接 littlejsengine——`engineInit` 五回调掌帧(引擎内部 RAF 真推帧)+ `setGLEnable(false)` 纯 2D 渲进 mainContext;受控面 6 项零改(引擎可换边界守住,引擎 import 仅 host.js/entry.js);回滚桩 `?engine=stub` 活(α 等价)。门0 driver=`test/harness/gate0-engine-takeover.cjs`,证据=`evidence/gate0/`,编辑计划=`docs/agent-specs/2026-06-13-A0-引擎掌帧接管-edit-plan.md`。A1-A6 在此地基接线。
|
||
- **T1b-β ✅ 实质收口(2026-06-15,收口报告 `docs/agent-specs/2026-06-15-T1b-β收口报告.md`)**——完成线=引擎真接线(Phase A:A0 掌帧+A1-A4 能力包装+A6 mini-desktop real 引擎门 6/6,`3e5cab4`)+ Runner v2(经 runner-v2 全弧 P1/P2/P3,engineBundle 内嵌机制)实质收口,已支撑 feed 真玩(零灰度闭环缺口、零 split-brain)。原 TODO 五项逐项处置:
|
||
- 〔裁决①落地〕✅ **done**:粒子/物理/后处理三件改引擎能力包装层已落(A2 EngineEmitterSpec additive+薄包装引擎 ParticleEmitter 删 sim;A3 包装 zzfxG/zzfxM 删 vendored;A4 easing 走门面+collision/physics/palette 缺件补层);真接线门②(call-ID 运行时真调引擎)A6 实证 6/6。
|
||
- 〔Runner v2 产品化〕✅ **absorbed-by-arc**(无 split-brain):母 spec §5 计划「复用后端 packageUrl 外链取 iife bundle」实际被 **engineBundle 字段(契约#4 additive,随 manifest JSON 内嵌)+ `window.__GameBundle` 全局名 + `bootGameHost` 装载**取代(裁决:不接 OSS 省一条基建线,整包 sha256 单校验面);`game-host.d.ts`(第9类)真落、bootGameHost 真泛化、3b-B 井字棋真游戏真渲入 feed(gameId=9306,`238ec2d`)。packageUrl 链对引擎 bundle 从未启用(留 OSS 切换后用)。
|
||
- 〔1.x 退役〕✅ **superseded(moot,非缺口无双轨)**:母 spec「srcdoc→URL+四项兼容矩阵」已被 **P2 裁决 O2(b)(创始人 2026-06-13 追认)正式 supersede**,权威落档 `docs/agent-specs/2026-06-13-P2-runner-v2泛化宿主-execution.md` §2.1;代码现实=全 studio 单宿主 `game-studio/src/host/GamePlayer.vue`(srcdoc),引擎 vs demo 是 `inject.ts:240 'pkg.engineBundle?'` 同段 srcdoc 内确定性互斥分叉,非两个并行宿主。
|
||
- 〔参考件入 feed〕✅ **done(主链本体已验)**:B1 真游戏走后端发布主链入 feed 已 e2e(9001-9002 全链);参考件本身现走 SQL 灌库桩,**推迟**经后端发布主链入 feed(主链已被 B1 验过,非阻断)。
|
||
- 〔P7/P8 决策〕✅ **done**:default v2 兜底已是结论;裁定落档**推迟**补录(不影响行为)。
|
||
- **T1b-β 推迟清单(engine-line backlog,不在完成线关键路径,推迟到日历闸门后或 L1 空档;创始人可点名某项转 required)**:
|
||
- gold-plating:render.js 切引擎 drawTile/drawText/drawRect/Color 样板拔高(现仍 100% Canvas2D,但引擎掌帧+2D mainContext+引擎粒子同屏已达成「经引擎画游戏」);屏震切相机 cameraPos(`render.js:915` 仍 g.translate);门3 逐像素 WebGL readPixels 回归(A0 有意降级=real 通道追帧 overshoot 不可控→stub 2D 通道兜逐像素);immutable 强缓存头补端点实现(接 OSS 时,见下条孤儿字段裁决);参考件经后端发布主链入 feed;runtime-probe 改独立墙钟(Play.vue 埋点已天然满足立意)。
|
||
- audit-debt:A5 SIZES 单口径并表 + `scripts/size.mjs:150` 引擎入口(现「插件增量主表+引擎产物附录」两表并存);门1③负向扫描沉淀为可复跑 harness;`outcome:'win'|'lose'` additive 字段落地(`events.schema.json`);R6 三件尽调补录;R3 血统回填五条;矩阵① sandboxAttr 下发消费(allowOrigins 已接);门5 /preview 单独走查(/play 已 CDP 实证)。
|
||
- **immutable 孤儿字段裁决(2026-06-15)**:`contracts/game-package.schema.json:71` 的 `immutable`(URL 强缓存语义)后端**零消费**(grep 无端点实现命中),因 P2 走 DB-manifest 内嵌、packageUrl 外链未启用 → 现为有意孤儿字段;**裁决=推迟到接 OSS/CDN 时补端点实现**(additive 可选字段,留存不删,非 split-brain,门4 用 CDP Network timing 验缓存命中口径已写在字段 description 内)。
|
||
- 插件协议升格正式契约 = W-G0 第 9 契约组(契约权威在 `contracts/`,此处为实现)。
|