diff --git a/docs/agent-specs/2026-06-13-T1b-β引擎真接线与Runner-v2-execution.md b/docs/agent-specs/2026-06-13-T1b-β引擎真接线与Runner-v2-execution.md index 437dc9f1..824fc30a 100644 --- a/docs/agent-specs/2026-06-13-T1b-β引擎真接线与Runner-v2-execution.md +++ b/docs/agent-specs/2026-06-13-T1b-β引擎真接线与Runner-v2-execution.md @@ -55,7 +55,7 @@ ## 4. 数据流与依赖(契约可并行·验收串行) -A0 引擎主循环接管(host-dev 桩→engineInit/engineUpdate 真接管帧驱动+渲染,**所有真接线的地基**)→ A1-A6(受控面/插件/SIZES/像素门)。B(Runner v2)→ C(1.x 退役,依赖 B URL 就绪)。**D 参考件入 feed=后端发布主链**(submitPublish→admin reviewProject→PublishOrchestration.publish 五步→runtimePackage 翻包 0→1→feed upsertRank→feed stream 二次过滤 `status=PUBLISHED(4)` 才出流;`FeedServiceImpl:119-159`)。**注意 D 依赖「真实 GamePackage 产出」=Runner v2 产物(B),而 Runner 产物=packageUrl,故 D 隐含依赖 §5 的 packageUrl 写链改造,非纯前端点亮。** +A0 引擎主循环接管(host-dev 桩→**`engineInit` 五回调**〔gameInit/gameUpdate/gameUpdatePost/gameRender/gameRenderPost〕接管帧驱动+渲染;**引擎无 `engineUpdate` 外部导出**,主循环为引擎内部 RAF,外部经 engineInit 五回调接桩,**所有真接线的地基**)→ A1-A6(受控面/插件/SIZES/像素门)。B(Runner v2)→ C(1.x 退役,依赖 B URL 就绪)。**D 参考件入 feed=后端发布主链**(submitPublish→admin reviewProject→PublishOrchestration.publish 五步→runtimePackage 翻包 0→1→feed upsertRank→feed stream 二次过滤 `status=PUBLISHED(4)` 才出流;`FeedServiceImpl:119-159`)。**注意 D 依赖「真实 GamePackage 产出」=Runner v2 产物(B),而 Runner 产物=packageUrl,故 D 隐含依赖 §5 的 packageUrl 写链改造,非纯前端点亮。** **串行验收铁律**:A/B/C/D 不各自单独过门,最终同一参考包(暖阳小卖部)联验 CDP 走查门。 ## 5. 接口/数据契约(P2 冻结,contract-first) @@ -69,10 +69,10 @@ A0 引擎主循环接管(host-dev 桩→engineInit/engineUpdate 真接管帧 **Phase 0(P0+P1+P2)**:装引擎+抽签名(ENGINE-CAPABILITIES.md)+冻结三契约+产 §7 重叠清单空表。 **Phase A**: -- **A0(地基)引擎主循环接管**:host-dev `host.js`(文件头§注明的「RAF+bundle.tick+普通 2D canvas 桩」)改 `engineInit/engineUpdate` 真接管帧驱动+渲染循环——**这是 particles/physics/audio/time 一切真接线的前提**,不是可选项。 +- **A0(地基)引擎主循环接管**:host-dev `host.js`(文件头§注明的「RAF+bundle.tick+普通 2D canvas 桩」)改 **`engineInit(gameInit,gameUpdate,gameUpdatePost,gameRender,gameRenderPost,...)` 五回调接管**帧驱动+渲染循环(引擎掌帧、回调里接桩;**无 `engineUpdate` 导出可手摇**)——**这是 particles/physics/audio/time 一切真接线的前提**,不是可选项。 - A1 受控面:random 透传引擎 `RandomGenerator`;time 透传引擎 `time`(依赖 A0);input 改「对引擎轮询态(`mouseWasPressed`/`keyIsDown`)的归一化包装」(订阅形状留给 P4/P10 消费者,底层读引擎态,不另造事件系统);**probe 墙钟独立保留**。 - A2 particles-juice:粒子→`ParticleEmitter`(包装);hitStop→`timeScale`(包装);**屏震→引擎 `cameraPos`,须同步改 render.js 渲染基座到引擎相机**(否则全 Canvas2D 的 render 不响应 cameraPos;不改则屏震保留受控面偏移量补层)。 -- A3 audio-music:合成核 zzfxG/zzfxM→引擎 `Sound`/`Music`(包装);**播放/混音层=补层**(受控面 PCM playChannels 与引擎世界音频 Sound.play 不兼容,§1.5)。 +- A3 audio-music:合成核 zzfxG/zzfxM→引擎 `zzfx`/`zzfxM`(包装);音乐用 **`ZzFXMusic extends Sound`/`Sound.playMusic`**(**引擎无独立 `Music` 类**);**播放/混音层=补层**(受控面 PCM playChannels 与引擎世界音频 `Sound.play` 不兼容,§1.5)。 - A4 collision/gamefeel/physics-lite:按 §7 三分逐函数落地。 - A5 SIZES 重建(引擎首次入 bundle,单口径「引擎+插件」,**非「消双份记账」**——双份在 SIZES 从未成立,R3-P1-2)。 - A6 e2e 像素门适配 WebGL readPixels + 真接线门三件套接入。 @@ -81,29 +81,32 @@ A0 引擎主循环接管(host-dev 桩→engineInit/engineUpdate 真接管帧 **Phase D(入 feed)**:完整后端发布主链各环真翻态。 **Phase E(⑤⑥)**:P7/P8 固定清单 + storage 上提端到端 + probe 时钟拆分 + R6 三件 + R3 血统回填五条。 -## 7. 插件×引擎重叠清单(方法论 + 待 P0 验签的假设,**裁定不冻结**) +## 7. 插件×引擎重叠清单(✅ Phase 0 验签填定,`204eaed`) -> **R3 整改**:本表裁定**不在 spec 冻结**——每函数须经 §1.5 三分判定测试(签名/坐标系/语义兼容),**Phase 0 抽到引擎真实签名后填定**。下列为评审版 §2.5 初判假设,**多条经复核应从「包装」降「缺件补层」**。 +> **Phase 0 已落(2026-06-13,`game-runtime/docs/ENGINE-CAPABILITIES.md` 全签名引自 `node_modules/littlejsengine/dist/littlejs.d.ts` file:line)**。**§1.5 延迟裁定被验证有效**——4 条初判「包装」过真签名后翻「缺件补层」(collision MTV/RayHit、palette postProcess、physics 抛体),正是 R3 病灶坐实。下表「裁定」列为终值,Phase A 据此落地。 -| 件 | 函数 | 引擎候选 | 初判假设 | §1.5 测试预警 | P0 验签后裁定 | -|---|---|---|---|---|:--| -| audio-music | zzfx/zzfxM 合成核 | `Sound`/`Music` | 包装 | 合成核兼容,播放层不兼容 | 合成包装+播放补层(待核) | -| audio-music | playChannels 播放/混音 | `Sound.play`(世界坐标) | — | 空间语义不兼容(无相机) | 缺件补层 | -| particles-juice | 粒子发射/池 | `ParticleEmitter` | 包装 | 待核坐标系 | 待 P0 | -| particles-juice | hitStop | `timeScale` | 包装 | 兼容性高 | 包装(待核) | -| particles-juice | 屏震 | `cameraPos` | 包装 | 跨层:render 须改相机 | 包装+render 改 / 否则补层 | -| palette-post | postProcess | WebGL shader | 待 P1 | Canvas2D→GLSL=整体重写,P1 核名解决不了 | **高概率缺件补层** | -| palette-post | RGB↔HSL/Bayer | `Color`/`hsl` / 确无 | 部分包装 | 基元兼容,索引色表确无 | 混合 | -| physics-lite | 抛体/clampSpeed/friction | `updatePhysics`/`objectMaxSpeed` | 包装 | 待核(EngineObject 体系 vs 解耦) | 待 P0 | -| physics-lite | 弹簧+解耦运动学 | 确无 | 补层 | — | 缺件补层 | -| collision | aabbVsAabb→Manifold(MTV) | `isOverlapping`→boolean | ~~包装~~ | **boolean 满足不了 MTV 契约** | **缺件补层**(或真假判用引擎+MTV 补层) | -| collision | raycastAabb→RayHit | `isIntersecting`→boolean | ~~包装~~ | **射线vs线段+返回双不兼容** | **缺件补层** | -| collision | SpatialHash/圆·SAT/MTV/圆射线 | 确无 | 补层 | — | 缺件补层 | -| gamefeel | easing linear/smoothstep | `lerp`/`smoothStep` | 包装 | 兼容性高 | 包装(待核) | -| gamefeel | elastic/back/cubic/InputBuffer/coyote/combo | 确无 | 补层 | — | 缺件补层 | -| 受控面 | random | `RandomGenerator` | 透传 | 兼容(种子 xorshift) | 包装(透传) | -| 受控面 | time | `time` | 透传 | 依赖 A0 主循环;probe 墙钟须解耦 | 包装(透传,A0 后) | -| 受控面 | input | 轮询层 | 归一化包装 | 引擎轮询 vs 订阅,做归一化 | 包装(归一化) | +| 件 | 函数 | 引擎真签名(littlejs.d.ts) | ①返回 | ②坐标系 | ③语义 | **裁定** | +|---|---|---|:-:|:-:|:-:|:--| +| audio-music | zzfxG/zzfxM 合成核 | `zzfxG→Array:2724`/`zzfxM→Array:3730` | ✅ | n/a | ✅ | **合成包装** | +| audio-music | playChannels 播放/混音 | `Sound.play(pos,...):2551` 世界定位+range 衰减 | ✗ | ✗ | ✗ | **缺件补层** | +| particles-juice | 粒子发射/池 | `ParticleEmitter(pos,...) extends EngineObject:3232` | ✅ | ✗(世界 vs 像素) | ~ | **包装+世界↔像素阻抗层** | +| particles-juice | hitStop | `timeScale:352`/`setTimeScale:638` | ✅ | n/a | ✅ | **包装** | +| particles-juice | 屏震 | `cameraPos:334`/`setCameraPos:626` | ✅ | ~ | ⚠跨层 | **包装(须 render 切引擎相机)/否则补层** | +| palette-post | postProcess | `PostProcessPlugin(shaderCode):3578` GLSL 可注入 | — | — | ✗(CPU 像素缓冲 vs GPU GLSL) | **整体缺件补层**(引擎仅提供 GLSL 注入位) | +| palette-post | RGB↔HSL/Bayer | `Color.setHSLA/HSLA:1431-40`(单色) | ~ | n/a | ✗(单色 vs 缓冲批) | **混合:基元参照,缓冲/索引/抖动补层** | +| physics-lite | 抛体/clampSpeed/friction | `EngineObject.updatePhysics:2832`(帧步刚体)/`objectMaxSpeed:469` | ✗ | ✗ | ✗(秒级无状态纯函数 vs 帧步 OOP) | **缺件补层** | +| physics-lite | 弹簧+解耦运动学 | 引擎确无 | — | — | — | **缺件补层** | +| collision | aabbVsAabb→Manifold(MTV) | `isOverlapping→boolean:1021` | **✗(bool 给不出 depth/nx/ny)** | ✗(全宽 vs 半宽 2×) | ✗ | **缺件补层**(R3 预判证实) | +| collision | raycastAabb→RayHit | `isIntersecting→boolean:1029`/`lineTest→Vector2\|undefined:1043` | **✗(无 t/px/py)** | ✗ | ✗(线段 vs 射线) | **缺件补层**(R3 预判证实) | +| collision | SpatialHash/圆·SAT/MTV/圆射线 | 引擎确无 | — | — | — | **缺件补层** | +| gamefeel | easing linear/smoothstep | `lerp:987`/`smoothStep:1002` | ✅ | n/a | ✅ | **包装(仅这俩)** | +| gamefeel | elastic/back/cubic/InputBuffer/coyote/combo | 引擎确无(仅 lerp/smoothStep/oscillate) | — | — | — | **缺件补层** | +| 受控面 | random | `RandomGenerator(seed):1164` 种子确定性 | ✅ | n/a | ✅ | **包装(透传)** | +| 受控面 | time | `time:99`(受 timeScale/暂停污染)/`timeReal:103`(纯墙钟) | ✅ | n/a | ✅ | **包装(透传,A0 后);probe 用引擎 `timeReal`/独立墙钟** | +| 受控面 | input | `keyIsDown/mouseWasPressed:2265-2308` 轮询态 bool | ✅ | n/a | ✅ | **包装(归一化)** | + +> **裁定分布**:包装/透传 6 件(hitStop·屏震·gamefeel lerp 俩·random·time·input + audio 合成核 + particles 发射含阻抗层);**缺件补层 7 件**(collision MTV/RayHit/SpatialHash 全套·physics 抛体+弹簧·palette postProcess·gamefeel 高级缓动+时间窗·audio 播放层);混合 1(palette 调色)。**collision 整件、palette postProcess、physics 核心实为引擎缺件**——「自研合规」,但归因从「审计已确认缺件」(误)改为「逐函数验签确认缺件」(实)。 +> **render.js**:agent 生成域(合规),但 β 后绘制底座切引擎 `drawTile`/`drawText`(CJK spike 验)/`drawRect`/`Color`,作「经引擎画游戏」样板。 > **render.js**:agent 生成域(合规),但 β 后绘制底座切引擎 `drawTile`/`drawText`(CJK spike 验)/`drawRect`/`Color`,作「经引擎画游戏」样板。 @@ -121,7 +124,7 @@ A0 引擎主循环接管(host-dev 桩→engineInit/engineUpdate 真接管帧 | # | 门 | 判据 | |---|---|---| -| 0 | **引擎主循环接管(A0 地基)** | host-dev 真跑 engineInit/engineUpdate(非 RAF 桩);引擎 `time`/`frame` 随循环真推进(probe 实测)。**probe 须同时持双时钟(R4-P2)**:引擎 time(仅作本门接管断言)+ 独立墙钟(作门9 P75 埋点),两钟物理隔离互不覆盖 | +| 0 | **引擎主循环接管(A0 地基)** | host-dev 真跑 `engineInit` 五回调(非 RAF 桩,无 engineUpdate 可手摇);引擎 `time`/`frame` 随循环真推进(probe 实测)。**probe 双时钟(R4-P2)**:引擎 `time`(受 timeScale/暂停污染,仅作本门接管断言)+ 引擎 `timeReal:103` 或独立墙钟(纯墙钟,作门9 P75 埋点),两钟物理隔离互不覆盖 | | 1 | 真接线门三件套(R6) | ①esbuild metafile:littlejsengine 入产物且被各 impl chunk 真实引用 ②运行时 probe:各包装层产调引擎能力调用 ID 证据 ③负向扫描:旧裸 Canvas2D/自造合成器等价实现已删。单纯 grep 不算过门 | | 2 | SIZES 重建 | 引擎首次入 bundle,「引擎+插件」单口径(**非消双份记账**);R3 血统三件套齐 | | 3 | e2e 像素门(WebGL) | 固定 seed/frame readPixels 哈希 ×N PASS + 双开确定性过 | @@ -157,4 +160,4 @@ A0 引擎主循环接管(host-dev 桩→engineInit/engineUpdate 真接管帧 --- -> R3 复审 5P0/5P1/3P2 全采纳整改 + R4 二轮复审「可冻结」(1P1+3P2 已就地补净) + 待确认 A 默认采纳降级——**✅ 已冻结开工**。Phase 0(装引擎+抽签名+冻三契约)为首步。 +> R3 复审 5P0/5P1/3P2 全采纳整改 + R4 二轮复审「可冻结」(1P1+3P2 已就地补净) + 待确认 A 默认采纳降级——**✅ 已冻结开工**。**Phase 0 ✅ 完成(`204eaed`:装 littlejsengine@1.18.19+ENGINE-CAPABILITIES.md 50+ 能力真签名+§7 验签填定);§1.5 延迟裁定获验证(4 条初判包装翻缺件补层)。Phase A 解锁**(地基=A0 engineInit 五回调接管);P2 三契约冻结待主会话据签名定(透传白名单/Runner URL 降级/storage 根)。 diff --git a/docs/mvp/MVP作战清单.md b/docs/mvp/MVP作战清单.md index defb7d47..25f825c2 100644 --- a/docs/mvp/MVP作战清单.md +++ b/docs/mvp/MVP作战清单.md @@ -13,7 +13,7 @@ - [ ] **W-CH 渠道波(抖音+微信小游戏,✅ 范围已定稿)**:判定=[`渠道适配判定 HJ-CH-001`](../agent-specs/2026-06-12-渠道适配判定-小游戏双渠道.md)——小游戏=精选整包 L1 分发面(一壳多游·主题合集口径)/H5=UGC+L2 主场;W-CH-α 对比 spike(双 spec 齐,Codex 16 条全采纳;LayaAir 尽调出局)→**P0 段 ✅ 完成(2026-06-12 ultracode,验证门 6/6 PASS:adapter 21 测绿〔逮修 1 真 bug〕/合规 schema 30 用例/probe 八锚点哈希链/SIZES 实测 C-A 主包 gz 37.5KB=4MB 闸门 0.92%·每模板边际 gz2.9KB vs C-B Cocos 文献 1.94MB/双 RUNBOOK+证据校验器)**;**P1 只待你三件套**;C1-C2 ✅ 已拍(C1=自研流即时发布+双渠道精选发行/C2=合规为准绳,详归档⑫) - [ ] **W-G0 生成工厂契约波(▶ 现行,α 主门已过)**:第 9 契约组——把参考件实证形状升格为正式契约(取证导出 __refForensics/__refChecklist/__refHost+evidence 四件套+LOOP 协议)+黄金评估集 v0(首件=暖阳小卖部)+9g 预算分档字段;**agentic 基建 ✅ 终裁(2026-06-12):全平台单一框架化基建=AgentScope 2.x 主力**(评审版 HJ-AGI-001;五资产契约边界+L1 裸通路定案;换轨触发写死,W-G1 即 spike 门,验不过切 LangGraph 开源核心);**附带**:TPL 产品命名选项给创始人(产品文档 A/C「玩法模板」是否改名,属产品改名非清毒) - [ ] **W-G1 模型竞标 bake-off(创始人 2026-06-12 裁定:Fable 只造引擎,生产生成=便宜模型)**:同 brief 同 harness,M2.7/M3/DS-V4-Pro/Flash 比 过门率/重试数/¥每过门款,对照 ¥0.15 L1 门;品类=现有 8 插件可承载(经营/回合 RPG/弹幕/氛围);**20 游戏能力矩阵=覆盖目标与插件缺口定义**(矩阵入 W-G1 spec);**spec 增列 agent-loop-v1 处置**(冻结只修 P0/资产〔judge 决策表·ledger 幂等·预算闸〕契约化迁 AgentScope/退役时点——审计②#2);⚠️ 前置=你侧 DS key 激活 -- [ ] **T1b-β(双 spec ✅ 冻结开工,Phase 0 首步)**:评审版两轮过+裁决②扩裁(`2026-06-12-...review.md`),**执行版 HJ-T1B-B-EXEC-001(`2026-06-13-...execution.md`)经 R3 对抗复审逮 5P0(初稿§7预烤『引擎有X→包装』未核真签名=同NIH病)全整改→R4 二轮复审『可冻结』(1P1+3P2补净)→✅冻结**;待确认 A 默认采纳=Runner URL 降级 DB-manifest 带版本(不接 OSS,可逆,创始人可后切);**首步 Phase 0=装 littlejsengine 入 game-runtime(现0字节)+抽引擎真实签名(ENGINE-CAPABILITIES.md)+冻三契约**,§7 逐函数三分待 Phase0 验签后填。范围:①**裁决①+②落地(Q4 剃刀:自研=引擎外的层)**:〔裁决①〕粒子/物理/后处理三件改引擎能力包装层+〔**裁决② 2026-06-13 Opus 复查〕audio-music(re-vendor ZzFX/ZzFXM→改调引擎 Sound)+受控面 random/time(为取证砌墙→透传引擎 RandomGenerator/time)+juice hitStop·屏震(→引擎 timeScale/engineAddPlugin)+collision·gamefeel·physics-lite 逐函数三分(引擎有→包装/引擎无→缺件补层,废"维持自研"一刀切)**;**前置 P0=littlejsengine 真装入 game-runtime(现 0 字节)**+P1 引擎能力索引+P2 三契约冻结;R6 真接线门三件套(metafile+运行时调用 ID+负向扫);SIZES 重锚;render.js 切引擎 draw API;②Runner v2(防 demo 兜底假阳性);③1.x 退役(srcdoc→URL 四项兼容矩阵+CDP 走查门);④参考件经后端发布主链入 feed(解封③⑤);⑤P7/P8 固定清单(无命中默认 v2)+SDK storage 根契约收敛三套形状+probe 时钟拆分+outcome 注记(Q3 默认采纳);⑥R6 补录三件(weapp-adapter 仅 why-not 归 W-CH)+R3 血统回填五条 +- [ ] **T1b-β(双 spec ✅ 冻结开工,Phase 0 首步)**:评审版两轮过+裁决②扩裁(`2026-06-12-...review.md`),**执行版 HJ-T1B-B-EXEC-001(`2026-06-13-...execution.md`)经 R3 对抗复审逮 5P0(初稿§7预烤『引擎有X→包装』未核真签名=同NIH病)全整改→R4 二轮复审『可冻结』(1P1+3P2补净)→✅冻结**;待确认 A 默认采纳=Runner URL 降级 DB-manifest 带版本(不接 OSS,可逆,创始人可后切);**Phase 0 ✅ 完成(`204eaed`):littlejsengine@1.18.19 装入+ENGINE-CAPABILITIES.md 50+ 能力真签名+§7 验签填定——§1.5 延迟裁定获验证(4 条初判『包装』翻『缺件补层』:collision MTV/RayHit·palette postProcess·physics 抛体;collision 整件/palette postProcess/physics 核心实为引擎缺件,自研合规但归因改逐函数验签)**;**Phase A 解锁**(地基 A0=engineInit 五回调接管),P2 三契约冻结待据签名定。范围:①**裁决①+②落地(Q4 剃刀:自研=引擎外的层)**:〔裁决①〕粒子/物理/后处理三件改引擎能力包装层+〔**裁决② 2026-06-13 Opus 复查〕audio-music(re-vendor ZzFX/ZzFXM→改调引擎 Sound)+受控面 random/time(为取证砌墙→透传引擎 RandomGenerator/time)+juice hitStop·屏震(→引擎 timeScale/engineAddPlugin)+collision·gamefeel·physics-lite 逐函数三分(引擎有→包装/引擎无→缺件补层,废"维持自研"一刀切)**;**前置 P0=littlejsengine 真装入 game-runtime(现 0 字节)**+P1 引擎能力索引+P2 三契约冻结;R6 真接线门三件套(metafile+运行时调用 ID+负向扫);SIZES 重锚;render.js 切引擎 draw API;②Runner v2(防 demo 兜底假阳性);③1.x 退役(srcdoc→URL 四项兼容矩阵+CDP 走查门);④参考件经后端发布主链入 feed(解封③⑤);⑤P7/P8 固定清单(无命中默认 v2)+SDK storage 根契约收敛三套形状+probe 时钟拆分+outcome 注记(Q3 默认采纳);⑥R6 补录三件(weapp-adapter 仅 why-not 归 W-CH)+R3 血统回填五条 - [ ] **插件库扩展波 v2(缺口由 20 游戏矩阵定义,Fable 设计协议+Opus 实现 lane)**:候选四件=平台角色控制器/瓦片关卡与房间系统/2D 光照视野/行为体与程序生成工具箱——补齐后矩阵覆盖 ~19/20(Q1K3 类 3D 出 Tier1 圈归 Tier2) - [ ] **studio 链路③⑤ UI 走查闭合(⛔ 重锚至 β 后)**:5 bug 中 OG 修已落(`1921f85`),余 3 件+真走查全需 feed 有内容——W-CLEAN 后池空(2026-06-12 实测),等 T1b-β 参考件发布入池;cover 无源=生成特性归 W-G1;authorName 扩 API 可先写码但 e2e 同等内容 - [ ] **feed 翻页桩**(触发线已失效:池 50→0,W-CLEAN 清空;降为 β 内容回灌后再评,不再"必修")