39 Commits

Author SHA1 Message Date
lili
b112f888cf feat(game-runtime): U2 build-from-source 装配器(gameDefinition → 可玩工厂源文本)
plan 2026-06-18-001 U2 · 引擎线 · 解锁「源 → 可玩」装配链。

新增 game-runtime/src/host/build-from-source.mjs:
- validateSourceProject(sp) → {ok,errors,gameDefinition}:轻量校验 + top-level strip
  (产线容错必做——剥模型塞的 schema 外键);引用完整性(entity.components→components[].id /
  scene.entityRefs→entities[].id)+ behavior 缺逻辑 code 揪错。守 game-runtime「本机零依赖」
  不引 ajv(inner 键宽松保留运行时用的 vx/vy/tags,待 schema 迭代再收紧)。
- assembleFactoryFromSource(sp,{runtimeImportPath?}) → generated-factory.js 源文本:
  对齐已冻装载契约(game-host.d.ts:default export 工厂 → GameInstance{init,update,render,
  destroy,_forensicsView}),五法委托 U1 createRuntime;gameDefinition 内联为 JS 字面量、
  behavior.code 作数据串随之内联(运行期 new Function 编译)。校验失败 fail-loud(err.validationErrors
  供 buildNode 回灌 repair feedback)。

接现有零改下游:产出文本 → scaffoldNode 落 generated-factory.js → scripts/build.mjs(esbuild,
不动)→ bundle.iife.js → 九门 harness(零改);entry-bundle.template.js 不动。

验收(lili-mac 快走查):
- node --test src/host/build-from-source.test.mjs 5/5——校验+strip / 装配产物含装载契约要件 +
  node --check 过 / fail-loud / **端到端功能证**(装配文本经 createRuntime 真跑到 win + fx 真接线);
  全 runtime 套件 46/46 无回归。
- 真 esbuild 链探针(探针目录已清,不入仓):金样 gameDefinition → assemble → scaffold(正确深度)→
  真 build.mjs → bundle.iife.js(215KB,语法过,__GameBundle 全局在);metafile 实证
  gd-runtime.js + boot-game-host.js + littlejsengine 全内联。

范围说明:U2 的后端 Java 接线(SaaGenNodes.buildNode/scaffoldNode 从 K_SOURCE_PROJECT 装配、
SaaStudioNodes.modifyNode deterministic 解除 fail-loud)属后端线、需 mvn/mini-desktop 验证,
随 U3 后端线一并落(plan 允两线并行)。本提交 = U2 引擎线核心(本机可验的装配地基)。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 23:04:46 -07:00
lili
000f87d98b feat(game-runtime): U1 运行时约定基座 createRuntime/rt(2D 适配器 behavior 侧 API)
plan 2026-06-18-001 U1 · 引擎线 · 真结构化 gameDefinition 产线化地基。

新增 game-runtime/src/host/gd-runtime.js:
- createRuntime(boot, gameDefinition) → 建可变世界(entities 实例)+ 产 rt 对象;
  rt 即 U2 装配器编译每 behavior 时 new Function('rt','self','dt',code) 注入的那个 rt。
- rt 面(落 plan KTD2):实体 getEntity/entities/query/spawn/destroy(.x.y.vx.vy.alive
  .components.tags+.get/set/destroy);输入轮询 input.isDown/justPressed/justTapped/pointer
  (包 ctx.getInput 受控事件);时间随机 time.now(相对 elapsed,非绝对钟)/dt/random/randRange
  /randInt(走 boot.ctx 受控种子,禁 Math.random/Date.now);分数胜负 score/addScore/setScore
  /win()/lose()(置 latch 终态 gameover,不可逆=H门);工具特效 clamp/dist/overlap(AABB)+
  fx.burst/beep(经 ctx.getEngine 真调引擎粒子/合成核=满F门,无引擎优雅 no-op)。
- behaviors 各带逻辑 JS 经 new Function 编译(init 跑一次/其余每帧),抛错隔离+回灌质量信号;
  rules condition 编 JS 布尔(win/lose latch、score/advance 上升沿);物理组件 opt-in 积分;
  声明式渲染器逐实体按 render 组件画 rect/circle/fill(behaviors 只逻辑不画)+极简 HUD。

受控面铁律:经 boot.ctx(PluginContext)注入,不触裸引擎/DOM;缺 ctx fail-loud。
迭代状态 v0(plan「别冻早」):契约 runtime-api-2d.d.ts 待收 3-5 类真实模型输出补 idiom 再正式化。

验收(lili-mac 快走查):node --test src/host/gd-runtime.test.mjs 10/10 过——
三条必验(rt.random 同种子可复现/win latch 驻留不可逆/fx.burst 真触发 ctx.getEngine)
+ 集成(behavior 编译跑通/rule latch/spawn-destroy-回收/输入轮询/物理积分/渲染出图)+缺 ctx 守卫。
全 runtime 套件 41/41 无回归。测试文件就近 src/host/(贴 npm test 的 src/**/*.test.mjs 约定,
非 plan 所写 test/unit/——遵仓内既有 co-located 约定)。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 22:53:38 -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
zizi
f59991b9f3 feat(game-runtime): T1b-α Gate0 七件落地(core-protocol-v0-rc)
- core 协议:Plugin 接口/注册器(重名拒绝/生命周期正序逆序/dispose幂等/错误隔离不连坐)+受控面 PluginContext(禁直透 littlejsengine)——前任agent核心设计17测绿收编(死于收尾的工具调用解析失败,续作字节级未碰)
- _example 空插件样例五件全(克隆母本)+PLUGIN-TEMPLATE 六节规格+manifest schema+零依赖校验器(负例自检逮6违规)
- scripts:esbuild锁参build/增量法size/test.sh遍历;browser-evidence harness纯计算口径冻结(FNV-1a/直方图/几何,CDP四函数=集成段占位)
- 22/22 测全绿(RESULT.txt 留档);ESM JS+JSDoc+手写d.ts 零工具链纪律全程
- rc 状态:待 Gate0.1 受控面补丁(input/audio+per-plugin派生RNG+useContext守卫)后冻结 core-protocol-v0

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