test(t1b-beta): A0 门0 8/8 全过(mini-desktop 实测)=引擎掌帧接管完成线达成

mini-desktop(minione-ubuntu-desktop)scratch 检出 11c8eaf,host-dev/entry.js 经
esbuild 锁参打 host-bundle.js(littlejsengine@1.18.19 真入包),systemd-run
static-serve(:4321,根=host-dev/)+chrome --headless=new(:9222,autoplay 放行),
driver=test/harness/gate0-engine-takeover.cjs+stub 通道独立核对。

门0 G0-1~G0-8 共 8 门全过(gate0_rc=0/g08_rc=0):
- G0-1 引擎真起(非桩):bootedReal/gameInit/hasEngine 皆 true
- G0-2 引擎内部 RAF 真掌帧:frame 42→72/500ms=Δ30∈[20,45](排单步假推进/失控空转)
- G0-3 time≈frame/60 一致性自检 Δ0.0167s(仅自检非掌帧证据)
- G0-4 timeReal 纯墙钟 Δ0.5001s≈500ms(P75 钟可用)
- G0-5 双时钟物理隔离(引擎 LJS.time vs probe mockNowMs 不同源)
- G0-6 受控面零改回归:initOk/verifyOk/uncaught=[](AudioContext 告警非 error)
- G0-7 渲染落 2D mainContext(#game-engine):780×1688·coloredHits=7(粒子真渲)·whiteTextHits=0(水印已除)
- G0-8 回滚桩活(stub):initOk/verifyOk/uncaught=[]/noEngine=true

对抗复审纠偏经实测兑现:setDebugWatermark(false)→whiteTextHits=0;
setCanvasClearColor(BLACK)→不透明黑底;real 像素门 overshoot→stub 通道独占逐像素。

A0=地基立住:LittleJS 引擎真成为 host-dev 运行时,受控面契约零改(引擎可换边界守住),
回滚桩活。A1-A6 在此地基接线。证据=game-runtime/evidence/gate0/。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
zizi 2026-06-13 06:49:03 +00:00
parent 11c8eafb42
commit 7efe8a4d82
4 changed files with 60 additions and 1 deletions

View File

@ -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 ✅ 完成(`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 血统回填五条
- [ ] **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 三契约 ✅冻结**(`28a57b8`+`75243fe`:受控面 getEngine 透传/packageUrl 复用/StoragePlugin 上提);**A0 引擎掌帧接管 ✅码落+本机门全绿(`11c8eaf`)**:8-agent workflow(源码取证→设计→对抗复审→实现)3/3 concerns·0 fatal·17 mustFix(P0×1/P1×9/P2×7)全采纳(P0=real像素门 overshoot→stub通道独占逐像素;P1源码级纠偏 debug水印/clearColor alpha=0/P75取timeReal),主会话亲验 155单测绿/受控面零改/Q4 import边界(仅host.js+entry.js)/真接线门①(littlejsengine 真入产物 163691B·box2d惰性);**A0 ✅完成线达成**:门0 **G0-1~G0-8 全过**(mini-desktop 实测 `11c8eaf` gate0_rc=0,`game-runtime/evidence/gate0/`)——引擎真掌帧(frame Δ30/500ms∈[20,45])·真渲2D mainContext(粒子 coloredHits=7·水印 whiteTextHits=0)·双时钟隔离·受控面零改回归 uncaught=[]·回滚桩活(noEngine=true);**A1-A6 可在此地基接线**。范围:①**裁决①+②落地(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 清空;降为 β 内容回灌后再评,不再"必修"

View File

@ -19,5 +19,6 @@
- **裁决①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 在此地基接线。
- TODO 归 T1b-β(双 spec 先行):裁决①落地 / Runner v2 产品化 / 1.x 退役 / 参考件入 feed / P7-P8 决策。
- 插件协议升格正式契约 = W-G0 第 9 契约组(契约权威在 `contracts/`,此处为实现)。

View File

@ -0,0 +1,35 @@
# A0 引擎掌帧接管 — 门0 实测结果(mini-desktop)
> **运行**:2026-06-13 mini-desktop(`minione-ubuntu-desktop`),scratch 检出 `dev/2.0.0 @ 11c8eaf`,
> 构建 `host-dev/entry.js → host-bundle.js`(engine 真入包,`littlejsengine@1.18.19`),
> `systemd-run` static-serve(:4321,根=host-dev/)+ chrome `--headless=new`(:9222,`--autoplay-policy=no-user-gesture-required`),
> driver=`test/harness/gate0-engine-takeover.cjs`(G0-1~G0-7)+ stub 通道独立核对(G0-8)。机读详情见同目录 `gate0.json`
## 判定:门0 全过(G0-1~G0-8 共 8 门,8 PASS · `gate0_rc=0` · `g08_rc=0`)
| 门 | 断言 | 实测 | 判 |
|---|---|---|---|
| G0-1 | real 通道引擎真起(非桩) | bootedReal=true · gameInit=true · hasEngine=true · engErr=null | ✅ |
| G0-2 | 引擎内部 RAF 真掌帧(帧单调推进) | frame **42→72/500ms=Δ30** ∈[20,45](排单步假推进/失控空转) | ✅ |
| G0-3 | time≈frame/60 一致性自检 | Δ0.0167s<0.05(**仅自检,非掌帧证据**) | |
| G0-4 | timeReal 纯墙钟推进(P75 钟可用) | Δ**0.5001s≈500ms** 墙钟 | ✅ |
| G0-5 | 双时钟物理隔离 | 引擎 time(LJS.time) vs probe 6 锚(mockNowMs)不同源不联动 | ✅ |
| G0-6 | 受控面零改回归(smoke) | initOk · verifyOk · **uncaught=[]** · 6 锚齐(AudioContext 告警非 error 级) | ✅ |
| G0-7 | 渲染落 2D mainContext(#game-engine) | 780×1688 · **coloredHits=7**(粒子真渲)· **whiteTextHits=0**(水印已除) | ✅ |
| G0-8 | 回滚桩活(stub 通道) | initOk · verifyOk · uncaught=[] · **noEngine=true** · hasHostdev=true | ✅ |
## 配套本机门(6c6g,主会话亲验,见 commit `11c8eaf`)
- **155 单测绿**(受控面/插件零改,基线持平)
- **受控面零改**:`src/core/api.d.ts`+`plugin.js` 零 diff(引擎可换边界守住)
- **Q4 边界**:引擎 import 仅 `host.js`+`entry.js`(metafile importers 反查证,未泄进受控面/插件)
- **真接线门①**:`littlejsengine` 真入产物 **163691 bytesInOutput**,box2d 惰性(0 wasm input)
## 关键纠偏(8-agent workflow 对抗复审逮,经实测兑现)
- **debugWatermark**:dev 构建默认 true,每帧把非确定 averageFPS 画进 mainContext 右上角 → `setDebugWatermark(false)` → G0-7 whiteTextHits=0 实证已除。
- **canvasClearColor**:引擎默认 CLEAR_BLACK **alpha=0**(透明,不铺底)→ `setCanvasClearColor(BLACK)` → 不透明黑底。
- **real 像素门 overshoot**(P0):引擎一 RAF 内追帧跑 N 次 gameUpdate(N 受墙钟抖动),异步采样落帧不确定 → 逐像素确定性由 **stub 通道独占**(G0-8 兜),real 通道只证掌帧+渲染落 2D(G0-2/G0-7)。
- **P75 埋点钟**:real 模式 host mockNowMs 退化为逻辑帧钟 → P75 候选钟改读引擎 `timeReal`(G0-4 已验纯墙钟可用)。
## 结论
**A0「引擎掌帧接管」= 地基立住**:LittleJS 引擎真正成为 host-dev 运行时(`engineInit` 五回调掌帧 + 真渲 2D mainContext),
受控面契约零改(引擎可换边界守住),回滚桩活(`?engine=stub` α 等价)。**A1-A6 可在此地基上接线**。

View File

@ -0,0 +1,23 @@
{
"meta": {
"ts": "2026-06-13T06:45:21.556Z",
"base": "http://localhost:4321",
"seed": 305441741,
"engineMode": "real",
"host": "minione-ubuntu-desktop",
"sha": "11c8eaf",
"engine": "littlejsengine@1.18.19",
"note": "A0 引擎掌帧接管门0;driver=test/harness/gate0-engine-takeover.cjs(G0-1~G0-7)+stub通道独立核对(G0-8)"
},
"gates": {
"G0-1": { "pass": true, "detail": { "bootedReal": true, "gameInit": true, "hasEngine": true, "hasHostdev": true, "engErr": null } },
"G0-2": { "pass": true, "detail": { "s0": { "frame": 42, "time": 0.6833333333333333, "timeReal": 0.6831680000000001 }, "s1": { "frame": 72, "time": 1.1833333333333333, "timeReal": 1.1832679999999998 }, "dFrame": 30, "expectRange": [20, 45] } },
"G0-3": { "pass": true, "detail": { "time": 1.1833333333333333, "frame": 72, "delta": 0.016666666666666607, "note": "consistency-self-check-only" } },
"G0-4": { "pass": true, "detail": { "t0": 0.6831680000000001, "t1": 1.1832679999999998, "dTimeReal": 0.5000999999999997 } },
"G0-5": { "pass": true, "detail": { "engineTimeFromLJS": 1.1833333333333333, "probeAnchors": ["t_boot", "t_plugins_ready", "t_game_init", "t_first_paint", "t_input_bound", "t_game_start"], "note": "engine time≠probe tMono(mockNowMs), 物理隔离" } },
"G0-6": { "pass": true, "detail": { "initOk": true, "verifyOk": true, "uncaught": [], "anchors": ["t_boot", "t_plugins_ready", "t_game_init", "t_first_paint", "t_input_bound", "t_game_start"] } },
"G0-7": { "pass": true, "detail": { "width": 780, "height": 1688, "coloredHits": 7, "whiteTextHits": 0, "note": "粒子真渲进 2D mainContext;whiteTextHits=0 证 debugWatermark 已除" } },
"G0-8": { "pass": true, "detail": { "initOk": true, "verifyOk": true, "uncaught": [], "noEngine": true, "hasHostdev": true, "note": "stub 通道:回滚桩活,无引擎接管,受控面工作,零未捕获" } }
},
"verdict": "GATE0 PASS (8/8)"
}