diff --git a/.agents/skills/game-e2e-cdp-harness.md b/.agents/skills/game-e2e-cdp-harness.md index 6a6c38b9..6f244599 100644 --- a/.agents/skills/game-e2e-cdp-harness.md +++ b/.agents/skills/game-e2e-cdp-harness.md @@ -121,7 +121,7 @@ ## 10. E1 2D 适配器:声明式 gameDefinition → 可玩件(plan 002 U1/U2 实证,2026-06-17) -固定架构消费侧 = 把 `SourceProject.gameDefinition`(声明式)适配成命中 `game-host.d.ts` GameInstance 的工厂(非 LLM 直写整 factory)。`game-runtime/src/adapter/`:`adaptGameDefinition(source)→GameHostFactory` 解释 entities/components(render)/scenes/rules + 最小 behavior 词汇(`input:hit-nearest-target`);`scaffold-from-source.mjs` 把 sourceProject 落成 `generated-factory.js`(entry-bundle 固定 import 目标)→ build.mjs → bundle(= 后端确定性 modify guard-pending 在等的"从源真构建"件)。`_adapter-probe` 真九门全过(A–I + 首局门;tap-targets driver、score 0→3、rule-driven latch)。 +固定架构消费侧 = 把 `SourceProject.gameDefinition`(声明式)适配成命中 `game-host.d.ts` GameInstance 的工厂(非 LLM 直写整 factory)。`game-runtime/src/adapter/`:`adaptGameDefinition(source)→GameHostFactory` 解释 entities/components(render)/scenes/rules + 最小 behavior 词汇(`input:hit-nearest-target`);`scaffold-from-source.mjs` 把 sourceProject 落成 `generated-factory.js`(entry-bundle 固定 import 目标)→ build.mjs → bundle(= 后端确定性 modify guard-pending 在等的"从源真构建"件)。**三 archetype 家族经同一适配器均过真九门**:① 静态点击(tap-targets)② realtime 漂移(drift-targets/update 行为)③ **控制类(control-x + fall-and-catch,paddle-intercept driver,点亮仅控制类才有的 I 门控制跟手)**。词汇:input(hit-nearest-target/control-x)· update(drift-targets/fall-and-catch)· rule(win/lose,序前优先)· assets[] 消费(spec-only 几何兜底)。退役"声明式过拟合/做不了真游戏"之虑。 **★ 必踩契约坑(第一版写错):`_forensicsView()` 返 `{ seed?, state: ()=>snapshot }`,不是裸 snapshot。** `boot-game-host.js:283` 的 `host.state()` 调 `gameForensics.state()`——即 `game._forensicsView().state()`(state 是 thunk)。直接返 `{phase,...}` → `host.state()` 调 `.state()` 时 `undefined()` 抛错、九门 H 读不到态。参照 `tictactoe/generated-factory.js:226`。snapshot 给 `targets:[{idx,x,y,occupied}]`(中心逻辑坐标)喂 tap-targets driver、`phase`(booting|playing|gameover)+ 进展字段(score/moves)喂 H 门 latch。