51 Commits

Author SHA1 Message Date
lili
46aef4e11c feat(adapter): E3 补齐顶层资产消费——scene 类 → 背景(url drawImage 满幅 / 默认底兜底)
对齐 contracts/agent-loop/source-project.schema.json 冻结 assetSpec(id/category/ref/url?/provider?),补齐 sprite 之外唯一的「顶层资产消费」缺口:
- scene 类资产 = 关卡背景(非实体引用):取首个 category==='scene',有 url → 浏览器 new Image + render drawImage(0,0,满幅);node/无 url → 默认底色 #0d1117 兜底(spec-only)
- 单测:① node 兜底不崩 + forensics assets[] 可观测 scene 类;② Image stub 验 url→drawImage 满幅 390×844 分支(非兜底)
- README 增「六类资产消费」表:sprite/character/ui/effect 经 render 组件 .asset;scene 顶层背景;music 经 url 不可消费(受控面 getEngine().audio 仅 zzfx synth,无播文件音频能力——跨线契约缺口,已记)
- README 记 KTD1 族边界:aim-fire/drag-aiming/match-3 的抛射物理/旋转瞄准/读盘消除属复杂 behavior 逻辑,归 code-agent __GameBundle,不入声明式适配器(避越界+过拟合)

验证:src 全量 196/196 绿(+2 scene 用例)。music 消费缺口与复杂族边界为跨线/架构事实,已在 README 落账供后端线/创始人定夺,未臆造消费路。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 15:04:45 -07:00
lili
d45945af5b feat(adapter): E1 第6游戏族 avoidance(辨别/规避)——tap-safe 负反馈 + forensics safe 标记
补齐休闲玩法最后一个机制维度「辨别/负反馈」(点对计分、点错即负),六族覆盖点击/连续控制/离散 steer/物理/导航/辨别:
- 新增 input op `tap-safe`(点中 safe 目标 → 计分+绿反馈;点中 .hazards 列出的 hazard → 记 miss,交 lose 规则)
- forensics targets[] additive 暴露 `safe` 标记(非 hazard 即 true,无 hazard 声明时全 true 向后兼容),供 play.cdp.cjs 的 tap-targets safeOnly driver 只点安全目标跑透核心循环
- hazardIds 在 adapt 期从 tap-safe.hazards 派生(自包含于行为,不污染 component 契约)
- fixtures/avoid.source.json(3 safe + 2 hazard) + 3 条单测(safe 标记 / 点对点错分流 / 点 hazard → lose)

验证:src 全量 194/194 绿;avoidance 临时探针经真九门 A–I 全绿(首局门自动判族=avoidance,H score:0→3 increased+latch,driver 只点 3 个 safe 全避 hazard → win,F tap-safe 绿反馈真接线),探针构建件已清场。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 14:58:15 -07:00
lili
72a62cca00 feat(adapter): E1 第5游戏族 seek-x(导航/收集)——move-lr 方向 steer + reach-goal 抵达计分
声明式 gameDefinition → GameInstance 适配器再加一族,验 E1 跨族泛化(tap/drift/control/flappy/seek 五族均过真九门):
- 新增 input op `move-lr`(点左/右半 → 实体左/右移一步,方向式 steer,供 seek-x driver 经 leftX/rightX 左右驱动)
- 新增 update op `reach-goal`(控制体 x 抵达目标 x 容差内 → 计分 + particles/audio 反馈 + 受控随机重生目标)
- forensics additive 暴露 mover{x}/nextGoal{x}(供 play.cdp.cjs 的 seek-x driver 读 entityPath/targetPath)
- fixtures/seek.source.json + 3 条 seek-x 单测(forensics 暴露 / move-lr 方向 / steer 抵达计分)

验证:src 全量 191/191 绿;seek-x 临时探针经真九门 A–I 全绿(H score:0→3 increased+latch 驻留,F particles.spawnEmitter+audio.synth.synthSfx 真接线,首局门 skill 派生通过),探针构建件已清场。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 14:53:22 -07:00
lili
f0854902ae docs(adapter): E1 适配器子系统 README——契约/词汇/四族/扩展/验证(跨线消费 + 维护文档)
AGENTS §7 知识回写:文档化引擎消费侧适配器供 6c6g 跨线消费 + 未来维护。
含 _forensicsView 契约坑、受控面铁律、声明式词汇表、四族验证表、加 op/archetype 步骤、KTD1 边界。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 14:42:25 -07:00
lili
5164f28f69 feat(adapter): E1 第四游戏族 flappy——flap + flappy-gap,真九门绿(flap-to-gap driver)
flappy/runner 族:重力下落 + 点击振翅(flap input op,vy 上冲)+ 单缝隙左滚穿缝判定(flappy-gap update op:
重力推进 bird、缝隙越过 bird.x → 在缝内计分+穿缝反馈(粒子/音效)否则漏接、回收缝隙、出界=漏+复位)。
- forensics additive 暴露 bird{x,y,vy}/nextGap{centerY}(供 flap-to-gap driver 速度前瞻穿缝)。
- flappy.source.json fixture;单测 +3(forensics/flap 上冲/重力+穿缝机制),共 27 adapter。
- e2e(本机):scaffoldFromSource 落 flappy → build → 真九门 A–I 全过(score 0→2 latch、flap-to-gap 导航穿缝、F 门反馈);瞬时件已清。
- 全 game-runtime 套件 188/188 绿。

证成:E1 适配器覆盖四大游戏族(静态点击/realtime 漂移/控制类 paddle-intercept/flappy 物理)均过真九门
(含 I 门),声明式适配器跨游戏族泛化稳固。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 14:40:29 -07:00
lili
413f8edce4 feat(adapter): E1 forensics+HUD 加 remaining——对齐 prompt.py "HUD 显示剩余目标数" 硬规则
生产可玩性契约对齐:适配器渲染的游戏须像 prompt.py 硬规则要求的那样"HUD 看得到进展"。
- forensics 加 remaining=max(0,winScore-score)(harness H 门可读,tictactoe 同字段);render HUD 加"剩余 N"。
- 单测 +1(remaining 随 score 降、win 归 0);全 game-runtime 套件 185/185 绿。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 14:35:08 -07:00
lili
2d5acc5bb0 test(adapter): E1 鲁棒性边界——便宜模型畸形 gameDefinition 优雅降级(+5 测,共 23)
生产路硬化:cheap 模型产的 gameDefinition 常残缺/畸形,适配器须不崩。
- 空 gameDefinition / 实体缺 transform / 组件引用不存在 / 畸形 rule condition / 不支持 behavior op / init 前调 render·update。
- 全优雅降级(几何兜底、条件不误触发、op 忽略、阶段防御),无缺口需修;回归保护。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 14:27:16 -07:00
lili
28797531d4 feat(adapter): E1 控制类 archetype——control-x + fall-and-catch,真九门含 I 门绿
第三 archetype 家族:连续控制 + 下落物理 + 接住(paddle-intercept 族),退役"声明式过拟合"之虑。
- control-x(input op):指定实体 x 中心对齐触点(连续控制);fall-and-catch(update op):下落物每步下移、
  触底接住(中心距≤半宽和)计分 + 接住反馈(粒子/音效,F 门)、漏接计 miss、重生回顶+受控随机 x。
- forensics additive 暴露 paddle{x,w}/ball{x,y}(供 paddle-intercept driver 的 controlCheck.paddlePath/ballPath)。
- catch.source.json fixture(realtime/continuous);控制类单测 +4(共 18 adapter)。
- e2e(集成段,本机):scaffoldFromSource 落 catch → build → 真九门 A–I 全过,**含 I 门控制跟手**
  (tap60→挡板 move-135、tap330→move270)+ score 0→2 latch + 首局门 control-body-moved 判真;瞬时件已清。
- 全 game-runtime 套件 179/179 绿。

证成:三迥异 archetype(静态点击 / realtime 漂移 / 控制类 paddle-intercept)经同一适配器都过真九门
(含仅控制类点亮的 I 门)→ E1 声明式适配器跨游戏族泛化牢固成立。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 14:20:23 -07:00
lili
cbae7b7e57 feat(adapter): E1 收口 lose outcome——win/lose 规则全支持(rule 序 win 优先)
适配器从 win-only 扩到 win/lose:点空(半径内无目标)累计 state.misses;rule outcome=lose
(condition 如 misses >= config.maxMisses)→ phase=gameover + result=lose + latch 驻留。
evalCondition 已泛化(读任意 state 数值字段),update 规则循环已处理 win|lose,故 additive。
- fixture 加 lose 规则 + config.maxMisses(additive);单测 +2(lose 触发 / win 优先于 lose)。
- 全 game-runtime 套件 175/175 绿(adapter 14 + core + 9 插件)。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 14:10:35 -07:00
lili
59d4eb1c83 feat(adapter): E3 asset 产消通道——适配器消费 sourceProject.assets[] + 几何兜底
U4/E3(plan 002):打通六类资产产消通道(engine 侧)。
- 适配器读 SourceProject.assets[](§5.1 顶层 assetSpec);render 组件经 .asset 引用 sprite 资产 id。
- 有真 url → 浏览器侧 new Image + drawImage(node 无 Image 守卫);spec-only → 几何兜底(§5.5 MVP:v0 可只产 spec)。
- forensics 暴露 assets[{id,category}] → §10.2-3 通道可观测。
- fixture 加 assets[] + 组件 asset 引用(additive);E3 单测 +1(共 12 绿)。

边界:GamePackage assets[] 填充 + host 真载(§10.2-3 全链)属 build/后端侧;真资产 provider(mmx-cli)= additive 升级。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 14:07:51 -07:00
lili
67371e77dd feat(adapter): E1 泛化——drift-targets(update 行为)+ 第二 archetype 真九门绿
U1 展开(plan 002):证适配器不止 tap-targets,泛化到 realtime/update 行为。
- 加 trigger=update 词汇 op=drift-targets(目标随 ctx.time 慢漂移,amplitude/speed 可配);targets 记 baseX/baseY/phase。
- 新 fixture moving-targets.source.json(tickModel=realtime + drift behavior + tap behavior + win rule)。
- drift 单测 +2(共 8):update 后目标漂移 / 漂移下 tap 当前位仍命中计分。单测 11/11 绿(adapter 8 + scaffold 3)。
- e2e(集成段,本机):scaffoldFromSource 落 moving-targets → build → 真九门 A–I + 首局门全过
  (tap driver 命中漂移目标、score 0→3、latch 驻留;瞬时验证件已清)。

证成:两迥异 archetype(静态点击 + realtime 漂移)经同一适配器都过真九门 → 退役 adversarial F4
「声明式最小集过不了九门」之虑;E1 声明式路泛化成立。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 14:00:05 -07:00
lili
d763755117 feat(adapter): E2 从 sourceProject 真构建 formalize——scaffold-from-source + 单测
U2(plan 002):把「sourceProject → 可构建 game 工件」从手工探针formalize成可复用函数,
即后端确定性 modify guard-pending 在等的引擎线交付物(plan 001 U6 / plan 002 KTD2)。
- buildFactorySource(sourceProject)→ generated-factory.js 文本(适配器 import + 内联 source + 默认导出工厂)。
- scaffoldFromSource(...)→ 写 generated-factory + 拷 entry-bundle/index 模板,返 build.mjs 入口。
- 零依赖单测 3/3:文本合契约 / 内联 source 往返深等 / adapterImport 可覆盖。
- e2e 验(集成段,本机):scaffoldFromSource 落变体源(5 目标)→ build.mjs → 211KB bundle(LittleJS 真入包);
  端到端九门由 _adapter-probe 验过(046454d9)。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 13:51:20 -07:00
lili
046454d95e feat(adapter): E1 build→九门端到端验证——_adapter-probe 真九门全过(score 0→3 latch✓)
U1 前置另一半(plan 002):声明式 gameDefinition → 适配器 → entry-bundle → build.mjs → 真九门绿。
- _adapter-probe/:generated-factory(adaptGameDefinition+内联 source)+ entry-bundle(拷模板)+ index(拷模板)
  + play-spec(tap-targets driver, assert score increased, expectLatch) + bundle.iife.js(211KB, LittleJS 真入包)。
- 真九门(本机快走查):A装载/B未捕获0/C掌帧Δ30/D真渲染/E活性5/5/F真接线(particles+audio)/
  G输入有效/H 机制+latch(score 0→3 + 终态驻留)/I(无 controlCheck);首局门 可玩51ms/首反馈/60s闭环7s 全过。
- 适配器跟进:① _forensicsView 改契约形态 { seed, state:()=>snapshot }(对齐 boot-game-host:283 + tictactoe);
  ② 命中加引擎粒子+音效反馈(game-feel + 满足 F 门),经 ctx.getEngine 容错。单测仍 6/6 绿。

证成:E1(repo 标"真空白"最高风险件)声明式路端到端可行;build-from-sourceProject 管线(E2)可行;
回答 adversarial MVP-latch 质疑——单 behavior 声明式游戏确过 H 门 latch。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 13:46:17 -07:00
lili
fd022821ae feat(adapter): E1 2D 适配器最小贯穿实验——声明式 gameDefinition→GameInstance(单测绿)
U1 硬前置(plan 002):验「声明式路」接缝形态端到端可行。
- create-game-from-definition.js:adaptGameDefinition(SourceProject)→GameHostFactory;
  解释 entities/components(render)/scenes/rules + 最小 behavior 词汇(input:hit-nearest-target);
  零引擎 import、容错 null engine、render 到 boot.mainContext、坐标 390×844、随机/钟走 ctx。
- _forensicsView 暴露 phase/score/targets(供九门 H + tap-targets driver)。
- rule(score>=winScore→win)在 update 评估→phase=gameover+latch 终态驻留。
- 单测 6/6 绿(node --test):init/render/tap 因果/落空/命中全部 win+latch/destroy 幂等。

边界:复杂 behavior 真逻辑由 code agent 产、编进 bundle(KTD1),本切片只证声明式路。
下一步:build.mjs→九门真玩 验输出件(U2/U3 切片)。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 13:40:33 -07:00
zizi
d4f16aabff feat(wg1-groupc): 九门 harness 加首局体验门(品类化·additive 派生超集)——3 断言三款真玩全绿+skill 类首反馈 A/B 真判
组C 严谨首反馈:A/B 无输入对照,skill 类升级真判(超上一档诚实化 SKIP):
- 上一档(P1-1)把动画自走类(skill/action,如 breakout)首反馈标 SKIP,因「帧哈希 changed」对动球
  是重言式(球每帧本就在动)非输入因果。本档落地 A/B 无输入对照,把 SKIP 升级为真判——
  动画自走类的输入因果靠「有输入 vs 无输入的差异」鉴别,而非裸帧变。
- 复用 G 门 A/B 范式:三趟 fresh 实例同 seed(缺省 0x1234abcd)+LittleJS 固定步推进到【同一绝对帧】比对:
  A=无输入自走基线 / Ap=无输入纯净探针 / B=派一招首招。real 引擎自由运行(host 不掌 RAF/无法暂停回退),
  三趟落帧有 ≤数帧抖动→动球自走位置略差,故【不】用裸帧哈希等值(过严必假 SKIP),分阶梯判:
    [0] 控制体维度(input-controllable,最干净免动球抖动):spec.controlCheck.paddlePath(如 breakout
        paddle.x)——A 趟控制体停默认位、B 趟点远端边连派 tapsPerTarget 拍被移开;|ctrlB-ctrlA|>moveMin
        =真输入因果 true。这是 prompt「只比 input-controllable 维度」之意。
    [1] 否则 state 级因果(remaining/score/moves/phase A vs B 变)=次强信号,直接 true;
    [2] 否则像素信号/噪声(noise=diff(A,Ap)基线抖动地板,signal=diff(A,B));signal 显著超 noise→true(兜底);
    [3] noise 超顶=非确定性(unseeded random/wall-clock)→不可净判 SKIP(血统债,不假判);
    [4] signal≈noise 且无控制体维度→SKIP(动球抖动可能盖过信号,不假 FAIL)。
- 必须串行跑三趟:headless Chrome 对后台 target rAF 节流/冻结,并发开三个只前台跑(实测 A/Ap frame=-1、
  B=2484 全程跑完=对照失效);串行下每趟=当前唯一活动 target 满速,确定性保同绝对帧自走态可比。
- 纪律:路A 零改契约/prompt/play-spec,只动 play.cdp.cjs(additive,advanceToFrame 加 pollMs 缺省 100 向后兼容,
  G 门逐字不变);静态盘类(placement/avoidance)走原单趟口径不动;首局门 FAIL 不阻断九门;warm-only 标注保留。
- 重验(mini-desktop Chrome/CDP):breakout 首反馈 假 SKIP→真判 (控制体 paddle.x delta=145,A=195/B=50,
  control-body-moved,净判=true);tictactoe/saolei 首反馈仍真(单趟 state变=true);三款九门零回归
  (逐门 base==verify,均 A-I 全 true,base 跑于 pristine ee1b697e);firstPlay.pass 全 true。
- 诚实:breakout A/B 净判靠控制体维度(paddle.x),非裸全帧像素——实测裸全帧 noise≈signal(球每帧动+两趟落帧
  抖动污染),故有控制体路径优先取该维度免污染;无控制体路径的 skill 类退信号/噪声兜底,signal≈noise 即诚实 SKIP。

P2-1 warm-only 局限标注保留:playableMs=预热后 warm 稳态,不覆盖 bundle 首加载退化;warmupMs 记冷启;
真机 first-load 阈值校准留 staging。本门 v0 守得住卡死/装载失败退化,守不住大 bundle/慢首加载退化。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 22:38:33 +08:00
lili
06e59de659 feat(wg1): angrybirds 也翻绿——drag-aiming 解析瞄准(暴露物理常数闭可测性边界)
续 cc5fa48:最后一个 driver-coverage 边界 angrybirds 转确定性闭口(复刻 asteroids「暴露所需常数+适配 driver」范式)。

- play.cdp.cjs drag-aiming 加 45° 抛【解析模式】:游戏暴露 launch{gravity,powerScale} 即反解拖拽矢量(各发±力度微抖兜物理离散),否则退化力度扫描
- angrybirds brief:pin 死简单可解析物理(powerScale=8/gravity=1200,无阻力)+ 导出 launch:{gravity,powerScale}
- flash 重生成首发过(retries=0):launch 导出与 pin 完全一致、score 0→20 result=win 清场、latch✓
- 终局:flappy/multiball/asteroids/angrybirds 4 款翻绿;仅 t2048 余 8/9(2048 抗死锁 latch 体裁边界,游戏真可玩,建议放宽门)
- 回填:闭口报告 + game-e2e §8(drag-aiming 解析)+ cheap-model §9

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 03:36:01 -07:00
lili
cc5fa486ac feat(wg1): driver-coverage 闭口 + P2 三档对照——flappy/multiball/asteroids 翻绿,0 模型造不出
创始人 2026-06-15 定档「driver 残留闭口 + P2 对照(L1 自主)」;P1 校准放量 blocked-on-founder。

- play.cdp.cjs driver 库 1→8 型:+flap-to-gap vy 前瞻 / paddle-intercept 弃守排空 / drag-aiming(第7) / aim-fire(第8)
- flappy (重生成 score 0→5,vy 前瞻+可达缝隙 brief)
- multiball (重生成首发 retries=0,弃守排空 driver+底部丢球语义 brief)
- asteroids (enrich exportState 暴露陨石坐标+aim-fire driver,score 0→6=可测性边界转确定性闭口范式)
- t2048(8/9,键盘桥已修 score 0→4;latch=2048 抗死锁体裁边界)/ angrybirds(8/9,隐藏弹道物理可测性边界)honest 留界
- 三分类铁论:0 模型造不出 / 0 3D 硬界——全是宿主键盘桥(L0 已修)/driver 覆盖(我域已增强)/可测性边界(游戏 exportState)
- P2:同款 Breakout 三档对照(flash ¥0.194/M2.7 ¥0.514/pro ¥0.417)+ 创始人锚(pro 碰撞 bug 被两便宜 player 假绿=人锚不可替代)
- 蒸馏:game-e2e §8(driver 1→8 型 + H 假阴四因归因铁律)、cheap-model §9(重生成区分实例bug/可测性/模型短板);W-G1 spec 执行进展回填;新增 L1 闭口报告
- 顺带:run.py/prompt.py 注释 六门→九门 对齐(我域,trivial)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 02:00:07 -07:00
zizi
c2cb4d75e3 docs(t1b-beta): T1b-β 实质收口落档——引擎真接线+Runner v2(arc)支撑feed真玩,零闭环缺口/零split-brain
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>
2026-06-15 08:00:19 +00:00
zizi
824ff672e3 merge(wg1): 并入 L1 saolei-borderline 修复(tap-targets safeOnly 避负族 driver)
独立验证(saolei verdict pass=9门0挂、trial merge、roles.py 未碰)后并入 L1 38032c7:

 L1 完成(避负族 facet,真+验证):
- harness driver runTapTargets 加 safeOnly(规避/推理族只点 safe===true 确定性避负到 win;
  安全放置族缺省关、零回归)
- saolei 题面加 safe x-ray 观测位(仅 _forensicsView·勿渲染)+ safeOnly + 断言改 result==win
- 重生成 saolei flash 一次过九门(revealed 0→71/all_cleared/win-latch)=borderline→confirmed-playable;
  自产 safe 正确→坐实缺口在题面非模型;回归 tictactoe/invaders 全绿
- 家族二分法(安全放置 vs 避负/推理)沉淀进 cheap-model/game-e2e skill

冲突解:brief add/add(L1 与 L0 同路径不同切片)取 L1 版为底 + 追加 §十 L0 补充——
澄清 L1 治的是 lane/避负族(saolei),与 3b-B 派发面 driver:none 是不同 facet;
cheap-model skill auto-merge 已含两 facet(line 58 dispatch 面 / line 80 避负族)。

⚠️ 仍 pending(不同 facet):3b-B 派发面 design agent 给 driver:none(roles.py:32,安全放置族
在派发面拿不到 driver)=「一句话现生成 tap 类」缺口,L1 本次零碰 roles.py/studio.py→属 L1 下一步。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 04:56:42 +00:00
lili
38032c72b4 feat(wg1): tap-targets safeOnly oracle driver——扫雷 borderline 翻绿(自产缺口修复)
driver: runTapTargets 加 safeOnly(规避/推理族只点 safe===true、确定性避负到 win;安全放置族缺省关、零回归)。题面: saolei.json targets 加 safe x-ray 观测位(勿渲染)+ safeOnly + 断言 result==win。重生成 saolei: flash 一次过九门(revealed 0→71 / all_cleared / win-latch),自产 safe 正确→坐实缺口在题面非模型。回归 tictactoe(X)/invaders(win)全绿。沉淀 L1brief §九 + game-e2e/cheap-model skill 二分法。零碰 L0(boot-game-host/契约/门面)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-14 20:36:51 -07:00
zizi
23e86934d2 merge(wg1): 并入 L1 scale-20 放量 + 宿主键盘桥 fix(d754b71·关键盘输入缺口)
独立验证(不信自述)后并入 fix/host-keyboard-bridge(=wg1/scale-20 超集,merge-base d79f2c3):

 宿主键盘桥 fix(d754b71·5行纯增量):boot-game-host.js attachInput() 补 window keydown/keyup
  桥接(ctx.getInput 键盘通道原为空→方向键/空格游戏输入死),对齐 host-dev/host.js:427-428 既有范式,
  inputBridge _assertType 白名单本已含 keydown/keyup=零兼容风险。独立验:tetris verdict 修后
  pass=True/9门/0挂(翻绿铁证)、tictactoe pass=True。

L1 scale-20 14 款放量(briefs/results/calibration/m3_player_test.py + tictactoe/tetris 正样本):
  主力 7/8 真可玩;spec 预判门面缺口几乎全推翻(CCD/文本HUD/网格/match-finding 便宜模型自写对),
  真·L0 门面缺口收敛为唯一一处=宿主键盘桥(本 fix 已补)。trial merge 干净(仅 .agents skill
  auto-merge),我 3b-B 文件(service.py/CallbackSignatureVerifier)完好。

校正:我 §5『点击坑=moat 真壁垒』系单样本(3b-B)过度泛化,与 L1 §9 scale-20 实证矛盾→已改为
  承认便宜模型相当能干、真缺口=键盘桥(已修)+driver-coverage(harness),非模型能力。

重大上修:moat 生成质量远好于 3b-B 单样本所示;失败主因=宿主门面(已补)+harness driver 覆盖,非模型。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-14 23:49:40 +00:00
lili
4591d64818 verify(host): 重打包键盘款证 host 键盘桥生效(tetris 翻绿)
补宿主键盘桥(d754b71)后重打包 t2048/tetris/asteroids 重跑九门:tetris 整盘翻绿(piecesLocked 0→10 + latch 驻留;修前 0→1 重力假性)、t2048 score 0→4 真合并(修前 0→0)、asteroids F_wiring 0→27 + latch✓(船真动真开火;修前全冻 0)。键盘根因坐实。残留 t2048-latch(2048 盲态难死锁)/asteroids-score(盲射没瞄准)=harness driver 跟进,非键盘非模型。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-14 10:42:49 -07:00
lili
d754b71e65 fix(host): attachInput 补 keydown/keyup window 桥接(getInput 契约 key 两态)
boot-game-host.js attachInput() 原只桥 pointerdown/move/up,漏 keydown/keyup → ctx.getInput() 键盘通道空,所有方向键/空格游戏(2048/Tetris/Asteroids)输入死。对齐同仓 host-dev/host.js:427-428 范式挂 window 桥 ev.key。纯增量、零兼容风险(inputBridge _assertType 白名单已含 keydown/keyup)。W-G1 scale-20 两轮对抗诊断实证:失败严格沿键盘 vs 指针分界。属 L0 域冻结契约修复,经创始人授权隔离执行,供 cherry-pick 到 dev/2.0.0。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-14 10:34:43 -07:00
lili
4836a6f519 feat(wg1-scale20): 20基准放量(14款)+ 三方门验证 + driver库泛化 + 宿主键盘缺口定位
主力批 7/8 真可玩(Opus 对抗审计 0 假绿)、压测 match3 ;失败收敛:3 键盘款(2048/Tetris/Asteroids)挂宿主缺 keydown 桥=唯一真·L0 门面缺口(已 spawn_task 交 L0)、multiball/flappy/愤怒小鸟=driver-coverage(非模型)。spec 预判 CCD/文本HUD/网格/match/手势缺口全推翻(便宜 flash 自带 swept CCD/自写网格文本)。

- driver 库 1→6 型(tap-targets/flap-to-gap/seek-x/tap-pairs/key-cycle/paddle-intercept)+ drag 输入事件 + key() Arrow 修
- M3 视觉 player 当生产过滤器实证(与门 8/9 一致、抓显性空心)→ 门(地板)+M3(主观过滤)+创始人(人锚)三层互补
- 短板量化报告定稿 + 两 skill 沉淀(game-e2e §8 driver库/门承重/键盘缺口 · cheap-model §9 模型能力画像)
- 2 个 ultracode 对抗 workflow(审计10+诊断7 agents)抓 saolei 弱断言、纠 flappy 归因(driver 非模型)、定位宿主键盘根因

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-14 10:30:06 -07:00
zizi
c99014c243 test(aigc-3b-B): 派发面 e2e 真证安全面+全自动管线闭合(HMAC双向),P5 生成质量转 L1
3b-B e2e(mini-desktop 真跑·证据 wg1/gen-worker/evidence-3bB/):

 P0-P4 安全面+全自动管线=真证闭合(铁证 backend-callback-hmac.log + p4*.txt):
- HMAC 双向证:缺签名头→HTTP 401 / 错签(deadbeef≠482147b5)→HTTP 401 / 正签→过门(走到下游"任务不存在"非401)
  =关死 /dify/callback-internal 裸 @PermitAll 缺口
- 全自动派发链真通:执行器认领 taskId→dispatchGeneric 投 §6.1 job→worker 真生成(真烧模型)→
  HMAC 签名回调→验签通过→handleCallback 落库(gen-9303/9304/9305 三轮齐全)

 P5 一句话真生成=未达终局:三款全 nine_gate_failed。但截图(gen-9303-after-play.png)证生成
  真出 on-theme 可渲可动的「点击小怪物」游戏(Score/3s 倒计时/多彩怪物 monsters/targetScore=12),
  仅点击→计分坏(Score 仍 0)→九门确定性地板正确拦截「看着像但玩不了」=质量门正确履职、拒发不可玩。

判:L0 交付(管线+安全+质量门)已完成且证;缺=便宜模型把「点击命中→计分」写对=L1 生成域
  (prompt 点击坑+模型档+player/calibration,run_studio 自修 max_repairs 未救回)→转 L1 v3 迭代。

附带:serve-and-play.sh 跨平台 Chrome 探测(CHROME_BIN 覆盖>Linux /usr/bin>macOS>PATH 兜底,
  Linux 在前因 mini-desktop x86 是权威 e2e 机);p3bB_*.sql 发布四态/翻 feed 桩。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-14 16:20:28 +00:00
lili
a205929f15 feat(wg1-gen): L1 对齐官方 latch 壳 + 确定性手感门 + player 校准(founder 锚揭天花板)
W-G1 生成主线 L1 worker 本轮收口(lane wg1/gen-worker;便宜模型 + harness 门兜底,HJ-GEN-001):

机制/契约
- 可测性红线 + P0 latch 终态:生成工厂导出 _forensicsView().state().phase
  (booting|playing|gameover,进 gameover 恒驻留、禁自动重开),对齐官方 P3 契约;
  flash 实测能遵此契约(v4/v5 latch 驻留 ✓)。
- 套官方 generic 壳:worker 产 generated-factory.js → entry-bundle 用 buildGenericHostConfig
  装配(=官方 entry-generic.js 的取证超集,多透传 recHook 供 F 门)→ esbuild __GameBundle。

真玩门(七门→九门)
- 门 H 机制+latch:assertAfterPlay 进展断言(剩余↓ 等,证非空心) + expectLatch 真玩到
  gameover 且驻留。
- 门 I 控制手感:controlCheck 连点验控制体平滑逼近(逮"一格一跳"/卡死)。
- 适配性真玩 driver:读 state 实体位置自动接球,解"盲打固定坐标打不动技巧游戏"的
  H 假阴性(创始人亲玩 + v4/v5 regen 双重实证)。

质量评估(player 校准)
- studio(design/code/fix/player panel on AgentScope 2.0.1) + calibrate.py 校准 harness。
- 创始人亲玩锚揭结构性天花板:便宜 player(静态截图+数据)判不出物理/碰撞/控制手感
  (把碰撞有问题的 pro 高估为最佳);gate-H 盲打会假阴性;founder/人锚不可替代。
  "上下文是杠杆"实证:接地使成本 −50%、修复轮次 −80%;rubric 锚定使 player MAE 1.25→0.75。

含从 dev/2.0.0 @3108009 拉入的官方 P3 通用装载壳(_generic/ + generic-host-config.js + 双 spec)
作 L1 套壳靶(为 lane 自洽,内容与 dev/2.0.0 一致,后续 merge 自去重)。

未提交:AGENTS.md/.gitignore 的 localagents 改动(非本人);生成产物游戏目录(构建 artifact)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-14 04:58:25 -07:00
lili
6201f95146 feat(wg1-gen): 便宜模型生成可真玩轻游戏——L1 worker + 七门真玩 harness(HJ-GEN-001 成立)
W-G1 生成核心:brief→便宜模型写 GameHostFactory→esbuild __GameBundle iife→P1 bootGameHost
装载→本机 Chrome+CDP 七门真玩取证;失败回喂错因重试。只消费冻结契约,零改 P1/P2。

实测(deepseek-v4-flash 最便宜档):Pong/Simon/打地鼠 三款【七门全过真玩】,
单款 ¥0.01–0.03(远低于 ¥0.15 L1 闸门)。最优模型:flash 打底 + 难档升 deepseek-v4-pro(Simon 0 重试 ¥0.06)。

关键:实证「能生成代码 ≠ 能玩」——一处 prompt 输入坐标契约写错(误称 x/y∈[0,1],实为逻辑像素)
让生成游戏能编译/渲染/动但点击全失灵;Pong 因自走动画假绿混过、Simon 被正确判否。
为此加装 G 门(确定性 A/B 对照,隔离自走动画假绿)+ 修 prompt 后三款真过。

- harness:games/_wg1-gen/_shared/{entry-bundle 模板,index 模板,play.cdp.cjs 七门,serve-and-play.sh}(复用 ref buildRefHostConfig + browser-evidence.cjs)
- worker:wg1/gen-worker/worker/{_client(代理旁路),prompt(生成上下文包),validate(静态门+node --check),cost(¥折算),run(§3 编排+重试门)}
- golden-path 自检:ref 工厂 5/6(F=0 菜单态正确)+ probe 工厂 7/7 → harness 无假绿
- game-runtime/package.json:加 ws(CDP 驱动 devDep)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-13 22:50:24 -07:00
zizi
5d3f7a87f0 feat(runner-v2): P2 通用宿主泛化落地——引擎游戏真渲入 feed 真玩(mini-desktop 真机门验)
P2 = 把 P1 装载契约从「装载王蓝莓一款」泛化为「装载任意 GamePackage」,经发布主链入 feed、
真人浏览器真玩。4 决策落实(O2(b)纳入 Phase C / DB-manifest 内嵌 / 灌库桩 / __GameBundle)。

三轨实现
- 后端:GamePackage schema 加 engineBundle additive 可选字段;buildGamePackage 加 engineBundle put
  (P3 生成路用,P2 恒 null→put 跳过→字节零变,单测 packageBytesReproducible 证);灌库桩
  p2_seed_engine_bundle.mjs + 四态脚手架 p2_scaffold_4state.sql(W-CLEAN 后重建已发布游戏)
- 运行时:P1 bootRef 泛化为 bootGameHost(opts)(引擎骨架照搬+参数化工厂来源/插件/视口),
  bootRef 退化薄包装;固化 build:ref-bundle 产 dist/ref-bundle.iife.js(--global-name=__GameBundle)
- studio:inject.ts 引擎包分支(pkg.engineBundle? → 内联 script 暴露 window.__GameBundle →
  bootGameHost 挂引擎真渲;否则旧 startRuntime 路保兼容);掏空壳改引擎分支(Phase C);CSP 不放外域

对抗代码复审逮 2 mustFix(主 agent 亲核亲修 + 6c6g 复验)
- 灌库桩读错产物(ref-bundle.js harness vs .iife.js)→ mini-desktop 灌库返工死循环
- 引擎分支漏发 game_start → 会话/play_count 静默吞、门②检不出 → 补发(DB session 行实证已修复)
+2 shouldFix(兜底可观测信号 / 灌库 SQL @pj 防撞 max_allowed_packet)
+ 真机门逮 2 环境缺陷已修(seed charset=utf8mb4 防双编码断 checksum 链 / 四态脚手架补 W-CLEAN 空库)

mini-desktop 真机门 6 门(逐门实数,主 agent 肉眼复核证据)
①build:ref-bundle 265374B/__GameBundle 真入包 ②Java 编译过+字节复现单测 ③studio staging 重建消 mock
④灌库 status=1∧checksum 64hex∧engineBundle 键齐∧manifest sha256 一致 ⑤真人 feed 点卡→引擎真渲
暖阳小卖部(warm=1246073px)非「重构中」+game_loaded+game_start+防 demo 三锚+console 零错+DB session 行
⑥回滚:无 engineBundle→demo 壳/错误态,向后兼容未破。证据 game-studio/evidence/p2-feed/

诚实 gap:game_end(到结算)未在自动化窗口内达成=ref gameover 需分钟级真玩+srcdoc 坐标盲点的取证局限,
非引擎/渲染能力缺陷(机制已通,留人工真玩到打烊补全)。受控面 6 项+game-host.d.ts 零改。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-13 20:36:32 +00:00
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
zizi
3e5cab455c test(t1b-beta): A6 引擎真接线门 6/6 全过——A1-A4 接线 mini-desktop real 引擎收口
A6=A1-A4 引擎接线的真引擎运行时验证门(本机禁 chrome,mini-desktop headless chrome 实测)。

真接线门②(本波新增):host-dev makeEngineCaps 给每个引擎能力叶方法埋 rec()→window.__engineCalls
(仅取证,绝不入渠道产物);__hostdev.engineProbe() 经各插件真实公开 API(particles-juice.spawnEmitter /
audio-music.playSfx / gamefeel.easing.quadIn)触发 → 断言 __engineCalls 含 call-ID = 证「运行时真接线」
(动态证据,区别于门①的 esbuild metafile 静态 import)。

实测 6/6 硬门全过(evidence/a6/a6.json):
- A6-1 掌帧回归:dFrame=31∈[20,45](A1-A4 后引擎仍真掌帧);
- A6-2 粒子真接线:__engineCalls 含 particles.spawnEmitter;
- A6-3 缓动真接线:含 math.easing.quadIn(gamefeel 运行时真走引擎 Ease 门面,非内置 fallback——easing 改判运行时铁证);
- A6-4 音频真接线:含 audio.synth.synthSfx(playSfx→引擎 zzfxG);
- A6-5 引擎粒子真渲:burst 后 maxCh=240/brightHits=3/whiteTextHits=0(引擎 ParticleEmitter 渲白粒子落 2D mainContext);
- A6-6 受控面 smoke:initOk+verify.ok+0 uncaught+6 锚点。

调试坑(蒸馏入 RESULT.md / harness):①引擎粒子渲出色=spec.colorStart(burst 给白),非旧 sim 青蓝→像素门判据改
「任意亮像素 maxCh/brightHits」+ maxCh 反证 GL 关无碍粒子落 2D;②音频合成需 AudioContext 非空→探针先 unlockAudio;
③real 通道不验逐像素(引擎追帧 N 不定),逐像素由 stub 通道兜(沿 A0)。

harness:test/harness/a6-engine-wiring.cjs(driver,双通道 evidence+smoke) + a6-runbook.sh(mini-desktop 编排,
复用 run-integration.sh 的 systemd-run serve+chrome 形制 + 就绪两段探活)。host.js 仅加 host-dev 取证探针,运行时零行为改。

至此 T1b-β Phase A(A0 掌帧 + A1-A4 接线 + A5 出厂门 + A6 真引擎门)全线收口。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-13 13:42:01 +00:00
zizi
e591e9b705 feat(t1b-beta): A1-A4 引擎能力接线落地——受控面工厂/粒子/音频/手感经 getEngine 薄包装(easing 改判)
承 A0 引擎掌帧地基,按创始人「引擎↔插件边界模型」(引擎有→薄包装·引擎无→自研补层·
同一职不留两条并行路)接线 A1-A4。host.js 注入真 engineFactory,getEngine() 在 host-dev 真活。

A1 受控面+引擎工厂地基+easing 门面:
- host.js makeEngineCaps 一处构造 EngineCapabilities{particles,audio.synth,math};
- 新 host-dev/engine-math.js 包装引擎 lerp/smoothStep + Ease 曲线(11 条等价曲线门面);
- api.d.ts additive 扩 EngineEasing + EngineMath.easing?(不破已冻 lerp/smoothStep)+ 块级降级措辞校准为 null no-op;
- 受控面 random/time 保确定性(引擎粒子用全局 rand 不可种子对齐→random 留插件自管,真缺件)。

A2 particles 薄包装+删 sim:
- EngineEmitterSpec additive 扩 10 可选字段(count/coneAngle/speed/gravityScale/sizeStart-End/colorStart-End/additive);
- spawnEmitter 改走 getEngine().particles 映射引擎 ParticleEmitter,删自研逐粒子积分 sim;null-engine→no-op 句柄;
- juice 全段(hitStop/屏震/闪白)补层保留;测试转向映射纯单测+真渲出现(逐像素确定性随 sim 退役,§1.4 记账)。

A3 audio 包装+删 vendored+补 ×0.3:
- 删 vendor/zzfx.js+zzfxm.js;audio.synth 包装引擎 zzfxG/zzfxM;
- 播放层补 ×0.3 主音量(引擎样本不烤 0.3,gain 层施)+ SAMPLE_RATE=44100 本地常量;
- impl.js 走 getEngine().audio.synth,null-engine→合成 no-op(不回退 vendored)。

A4 gamefeel easing 改判=门面包装(对抗门源码证伪纠偏):
- easing 改走 getEngine().math.easing 门面(quadIn→Ease.POWER(2) 等),内置降名 builtinEasing 作 null-engine fallback(纯数学族特例);
- backInOut/elasticInOut 引擎 IN_OUT 拼接差 6.6%/17%(另一条曲线)→门面刻意不暴,这二者恒走内置=真缺件补层;
- collision/physics-lite/palette-post 加边界裁定注释(真缺件补层,源码精校:引擎仅 isOverlapping/isIntersecting 返 boolean,无 Manifold/任意几何/RayHit)。

对抗门两逮(均前置于实现·零返工):
- A4 easing 误判 fatal:前轮按小写 quadIn grep 假阴性误判「引擎无 easing」;引擎实有 Ease(esm.js:15118)→创始人拍本波包装;
- collision 注释 under-claim:已精校为源码准措辞。新红线 §1.5:引擎能力普查禁按预期名 grep,须读 export 块/.d.ts。

本机门全绿(亲验):
- node --test 168/168 绿;all-plugins+host-bundle 双 esbuild rc=0(35594B/209516B);
- 真接线门①引擎真入产物 littlejsengine 163641B;门③负扫=0 插件直 import+vendor 已删+0 自研 sim+0 假注释;Q4 引擎 import 仅 entry.js+host.js。

A6(mini-desktop real 像素门 + 真接线门② runtime probe call-ID)待主会话驱动。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-13 11:48:28 +00:00
zizi
7efe8a4d82 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>
2026-06-13 06:49:03 +00:00
zizi
11c8eafb42 feat(t1b-beta): A0 引擎掌帧接管落地——host-dev RAF桩→littlejsengine engineInit 五回调;本机门全绿,门0浏览器段待mini-desktop
host.js+entry.js:engineMode 分流。real=引擎掌帧(engineInit 五回调 engGameInit/
Update/UpdatePost/Render/RenderPost 接帧驱动+渲染)+getContext2d backing 切引擎
mainContext(setGLEnable(false) 纯2D渲进 mainContext);stub=α RAF桩原样保留(可回滚点)。

本机已验(主会话亲跑):
- 155单测绿(基线持平,受控面/插件零改故计数不变)
- 受控面零改实证:src/core/api.d.ts+plugin.js 未触(七项 backing 全在 host 层切换)
- Q4边界:引擎 import 仅 host.js+entry.js(metafile importers 反查证),未泄进受控面/插件
- 真接线门①:esbuild metafile 实证 littlejsengine 真入产物(163691 bytesInOutput),
  box2d 惰性(0 wasm input),产物 205KB min

8-agent workflow(源码取证→设计→对抗复审→实现):3/3 concerns 0 fatal。
17 mustFix(P0×1/P1×9/P2×7)全采纳:P0=real像素门 overshoot(引擎追帧 N tick/RAF 墙钟抖动
污染采样帧)→改 stub 通道独占逐像素回归,real 只证掌帧;P1 源码级纠偏=debug水印每帧画
averageFPS入mainContext(setDebugWatermark(false))/clearColor默认alpha=0不铺底
(setCanvasClearColor(BLACK))/P75须读timeReal非mockNowMs(real模式退化逻辑帧钟)。

门0 G0-1~G0-7(引擎真掌帧/真渲2D mainContext/双时钟/无uncaught/水印已除)须 mini-desktop
chrome 实测(6c6g 禁 chrome)——未实测不宣布 A0 完成。

新:docs/agent-specs/2026-06-13-A0-引擎掌帧接管-edit-plan.md(编辑计划+门0 runbook)
   +game-runtime/test/harness/gate0-engine-takeover.cjs(门0 CDP 驱动,独立闭合不复用未改造的 integration-run)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-13 06:33:27 +00:00
zizi
75243fe8db fix(core): host-dev context 补 getEngine()=null 桩——P2 契约自洽(契约加 getEngine 须参考实现跟上)
createHostDevContext 镜像 getAudioContext 范式补 engineFactory 选项+getEngineShared(无工厂返null+告警一次+lazy单例+工厂抛错降级)+ctx.getEngine();155测全绿(契约加方法+桩跟上不破现有测试,#6风险实证清除)。集成段注入真实engineFactory背书littlejsengine=引擎import唯一落点
自核(对抗复审agent解析失败死,关键检查主会话亲验):zzfxG返样本数组(synthSfx正确避开会播放的zzfx,播放归缺件补层)+schema packageUrl/immutable declared非required(存量manifest仍合法)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-13 05:20:49 +00:00
zizi
28a57b8e00 feat(contracts): T1b-β P2 三契约冻结(grounded 据真签名+插件真调用面)——待对抗复审
①受控面引擎能力透传通道 PluginContext.getEngine()→EngineCapabilities(api.d.ts):白名单3项particles.spawnEmitter/audio.synth/math.lerp+smoothStep(YAGNI核6件impl真调用点);铁律=封装禁裸Vector2/引擎import只活集成段host背书engineFactory不散进插件impl(保引擎可换+满足门1真接线);random/time集成段换引擎RandomGenerator/timeReal背书(契约形状不变)
②GamePackage manifest加packageUrl+immutable(additive,复用后端packageUrl镜像走DB-manifest降级,checksum复用旧字段供门4防demo假阳性)
③SDK StoragePlugin根契约上提(sdk-interface.d.ts):前端contract.ts定稿对象形态上提+含R4-P1 array排除契约语义声明

grounded工位核impl逮关键澄清:hitStop/屏震非通道项(impl.js:582-615=受控面输出+游戏层render.js:915应用闭环,插件不调引擎;屏震引擎化=render.js切相机属agent生成域)→通道收敛6件→3项,§7/§6 A2同步澄清;audio.synth留契约A2据SIZES定用否
JSON校验过+.d.ts括号平衡

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-13 05:12:35 +00:00
zizi
204eaede3b feat(game-runtime): T1b-β Phase 0 地基——装 littlejsengine@1.18.19 + 抽引擎真实签名
Phase 0(执行版 §2 P0/P1)地基,只装+抽,不碰任何插件 impl/受控面/host(Phase A+):

- 新建 game-runtime/package.json:ESM workspace,littlejsengine@1.18.19 入 deps
  (与 T1 spike/channel-spike 同钉版)、esbuild@0.28.1 入 devDeps(集成段打包用);
  npm i 跑通,esbuild 实测可 resolve+bundle littlejsengine(核心符号入产物);
  node_modules 经根 .gitignore 排除,仅 package.json+lock 入库。
- 新建 game-runtime/docs/ENGINE-CAPABILITIES.md:从引擎真实源码
  node_modules/littlejsengine/dist/littlejs.d.ts(v1.18.19,5710 行)逐能力抽
  导出名/完整签名/返回类型/坐标系语义/file:line 证据(R3 铁律:断言引擎能力必查源,
  不靠记忆/文档转述)。覆盖执行版 §7+P1 点名全部能力,13 处载重引用经逐行核对无漂移。
- 消两存疑项(均确证,带 file:line):
  · postProcess 可注入自定义 GLSL shader(PostProcessPlugin(shaderCode:string),
    shadertoy 风格;但 palette-post 现算法=CPU 像素缓冲/索引色/Bayer,迁 GLSL=整体重写);
  · medal 系统存在(Medal class + 本地存储,:3457)。
- 核到两处与执行版命名预期偏差(非脑补):无独立 Music 类(实为 ZzFXMusic extends Sound/
  Sound.playMusic);无 engineUpdate 导出(主循环=引擎内部 RAF,经 engineInit 五回调接管,A0 据此)。

§7 逐函数三分裁定表作为返回件给主会话审,不改 execution.md 正文(裁定不在 spec 冻结,
Phase 0 抽签名后填定)。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-13 03:57:07 +00:00
zizi
4fe0845e2d docs(close): T1b-α wave-close 七步收口——总账补今日五波欠账(渠道/W-CLEAN/T1b-α/战略审计簇/收口)+作战清单归档⑫与完成线提请重锁(候选=T1b-β+链路③⑤);蒸馏新skill game-e2e-cdp-harness(编排形制/驱动器六律/出厂红线)+game-runtime/.agent户口+e2e runbook自/tmp入库+收口报告落档;索引双同步;逮修W-CH行陈旧C1-C2待拍款
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 18:33:06 +00:00
zizi
a4b2eef6f3 docs: W-T1b主门过落账——创始人亲玩判quality passed(亲玩轮1/3即过),好玩基线v2立标,demo serve登记保留,T1b-β解锁
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 15:52:30 +00:00
zizi
02c0ec50ef docs(wanglanmei-ref): 轮1判词——REF_E2E PASS四件套全档入库,五要素预判≈4.1达线,提请创始人亲玩;亲玩校准候选2项+评估段修复清单留痕
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 14:53:05 +00:00
zizi
57ca3fb27f fix(wanglanmei-ref): e2e双开一致性改同存档态对比——二开继承首航存档多画继续按钮致哈希异(正确游戏行为非缺陷),清档重载后再比;waitRefBoot抽公共
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 14:46:13 +00:00
zizi
c7f1c35ce0 fix(wanglanmei-ref): e2e driver接待策略修——备货6×防饿死(run5声誉gameover)/全货架轮点借输入缓冲补打(冷却才是限流)/serve_ok循环内即时追踪(240环溢出假阴性)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 14:40:23 +00:00
zizi
3b142b1287 fix(wanglanmei-ref): e2e driver两修——营业phase名judge错('serving'→'open',run4首拍退循环致接待0)+截帧前waitAssets稳态(资产异步补装致双开哈希漂移)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 14:33:07 +00:00
zizi
572b3721b5 fix(wanglanmei-ref): 双修真输入坐标断层——页面壳状态行改浮层(canvas顶到0,0满幅,旧布局下推29px且裁底致真机底部按钮不可点)+driver加rect坐标映射(zone canvas系→页面CSS系),轨迹双系留痕
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 14:25:22 +00:00
zizi
43623609bd fix(wanglanmei-ref): render.js离店摆动分支const x改let——esbuild构建门逮的真bug(headless测试未执行到该行),本机esbuild全量预检过+49测仍绿
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 14:19:22 +00:00
zizi
d9b2784bec test(wanglanmei-ref): e2e评估主体e2e-input.cdp.cjs(主会话所有)——CDP真输入四件套driver,硬门=boot/probe链/真输入闭环/确定性双开,live软项如实记录
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 14:01:01 +00:00
zizi
c2fb26cb40 feat(wanglanmei-ref): 参考件轮1交付——经营深化玩法(双权衡两头能输+失败态+救单宽限)49测全绿,mmx资产16件(图14+乐2)风格统一,五要素自评≈4.1
- 逻辑/宿主两层:balance/shop-core/lines/loop-proof 纯逻辑零DOM受控时间随机;render/hostfx/audio-director/palette/assets/main 宿主层
- 手感链:同帧涟漪+弹簧按压/quadOut弧线飞行/连击升调/大额成交hit-stop+屏震+闪白/冷却期InputBuffer补打
- 美术:16件同风格词(主会话目检4张:水彩绘本暖色族高度统一)+P5派生压力色板+vignette联动
- 收编亲验:49/49+全仓155/155绿/隔离零外溢/IP gate源码资产零命中/逻辑层禁API零真调/manifest抽查5/5哈希一致
- mmx对账:quota面零增量(image/music不走Token Plan),权威用量=台账16次,扣费留月度并账
- 计数笔误15→16已纠;状态③收编提交完成,构建+e2e四件套接续

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 13:53:40 +00:00
zizi
c2221bf2bc docs(mvp): 作战清单落账——T1b-α两段全过+参考件在飞;链路③⑤实测受阻重锚β(W-CLEAN后feed已空);待办雷重分类(2活雷在修/2b并入β/Golden旧口径退役);mmx轮前配额基线入证据
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 12:47:22 +00:00
zizi
878ad3f7da feat(game-runtime): T1b-α集成段三门全PASS——SIZES九件全≤配额(全栈gz16.5KB),mini-desktop真浏览器证据(probe链/vfx像素哈希×3/CDP真输入),host-dev宿主页+参考件轮1计划
- 门①构建绿:all-plugins barrel+host-dev 双构建日志留档
- 门②SIZES增量实测:九件单件全≤配额,插件gz净增13263B(自律线60K),core基准gz 3222
- 门③浏览器证据:六锚点FNV-1a链verify.ok=true/burst-trail-drift三预设哈希×3重跑一致+几何命中+直方图非空/vignette-dither开关对照哈希互异/CDP dispatchTouchEvent真点击→probe第7条firstInput旁证
- 模板哲学红线被门③实证:particles不内置颜色致首版全黑,host作引擎供色后过——验证门逮住设计而非绕过
- α不接littlejsengine裁定留痕(host.js顶注/index.html/REPORT §4.1),受控面桩即引擎接缝点
- 遗留:probe前四锚tMono=0(冻结lane件,注入时钟拆分留β)
- games/wanglanmei-ref/LOOP-LOG.md:参考件内部预判轮1计划(五要素挂点/插件用法图/mmx资产单13次/红线五条)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 12:39:15 +00:00
zizi
384d303831 feat(game-runtime): T1b-α 八件插件三lane交付——155/155全绿,模板哲学红线全程实证
- lane-math(47测):P1 collision(空间哈希broadphase+圆AABB凸SAT带MTV+射线;brute-force对照fuzz不漏报)/P2 physics-lite(弹道解析解对照+弹簧三阻尼态+6000次fuzz无NaN+时间步收敛;与P1零编译依赖,碰撞经回调注入)/P4 gamefeel(输入缓冲/coyote/缓动13函数/连击窗,全受控时钟驱动)
- lane-vfx(27测):P3 particles-juice(发射器+burst/trail/drift中性预设+hit-stop/屏震/闪白/缩放脉冲;同seed逐字段复现;屏震amplitude=每轴上界裁定三处注记)/P5 palette-post(调色引擎零成品色板,空映射恒等专项断言;vignette/Bayer抖动/扫描线)
- lane-sys(43测):P6 audio-music(vendor ZzFX+ZzFXM bit-for-bit上游比对maxdiff=0,删模块期new AudioContext改受控注入;情绪分层声部矩阵;null上下文静默降级)/P9 save(命名空间+32KB守卫+坏档容错;alpha本地adapter,SDK契约补丁列β不虚称)/P10 runtime-probe(六锚点FNV-1a链防篡改四式;借channel-probe形状零渠道语义,grep实证)
- 主会话收编四关:155/155亲验/9 manifest全过/品类语义grep全为负向注释/禁用API 14命中全为红线声明注释零真调用;lane-math REPORT按§6代落盘

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 11:56:07 +00:00
zizi
6f854851f5 feat(game-runtime): core-protocol-v0 冻结(Gate0.1 受控面补丁,38/38 绿)
- 受控面 v0 六项冻结:getContext2d/onFrame/getInput/getAudioContext/time/random
- getInput=归一化事件订阅面(5枚举,host注入桥+_emit测试口,dispose自动清理防泄漏);getAudioContext=lazy单例无工厂返null告警降级
- per-plugin 派生随机流(FNV-1a子种子,序列互不影响同seed复现,向后兼容回退);useContext 守卫(友好错误带插件名)
- 向后兼容增量不bump版本;manifest schema 未动;三 lane 按此冻结面开工

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 11:28:52 +00:00