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

28 lines
2.6 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"title": "打砖块 Breakout",
"brief": "做一款经典打砖块 Breakout。竖屏逻辑视口 390×844。\n- 底部一块玩家挡板(水平移动,厚度≥14,避免高速穿透)。\n- 一个球斜向匀速运动:碰左/右墙与顶墙反弹;碰挡板反弹,且按击中挡板的位置微调水平速度(越靠边角度越斜)。\n- 顶部一片砖块网格(如 6 列 × 4~5 行),球击中砖块则该砖消除、得分 +1;可让部分砖需击中多次(颜色随剩余命数变化)增加层次。\n- 球掉到挡板下方(越过底边)= 失败;清光所有砖 = 通关。\n- 【终态契约·务必遵守】失败或通关都进入终态:把 _forensicsView().state().phase 置为 'gameover' 并【驻留】——画面停在终态(可显示 GAME OVER / YOU WIN 文案,可提示「点击重玩」),但在玩家主动点击重玩之前 phase 必须恒为 'gameover',**绝不自动重开 / 不下一帧复位回 playing**(宿主每 500ms 轮询 phase 判结束,瞬时终态会被漏读)。\n- 【控制·务必跟手】挡板朝触摸点 x 平滑逼近(每帧向目标 x 插值移动一定比例,如 0.2~0.35),**绝不是每次点击只挪一格**——玩家手指移到哪,挡板要顺滑跟过去。\n- 【可测性·务必导出位置】_forensicsView().state() 除 phase/score/remaining 外,额外导出 ball:{x,y,vx,vy} 和 paddle:{x,y,w}(实时真值,与画面一致)——harness 据此自动接球真玩并验证控制跟手与碰撞。\n- 球速中等:合速度约每秒 300~420 逻辑像素。\n- 反馈(juice):每次击碎砖块触发 getEngine().particles.spawnEmitter 粒子爆发 + getEngine().audio.synth.synthSfx 音效;撞墙/撞挡板也可给轻音效。\n- 画面:深色背景铺满 390×844;挡板/砖块用亮色实心矩形,球用亮色实心圆;顶部单行文字显示分数与剩余砖数。",
"play_spec": {
"controlCheck": {
"paddlePath": "paddle.x",
"paddleY": 800,
"tapXs": [50, 340],
"tapsPerTarget": 6,
"moveMin": 25,
"tolerance": 70,
"why": "挡板须平滑逼近触点 x(逮「一格一跳」/卡死:连点同一 x 后挡板应明显移动且最终靠近该 x)"
},
"driver": {
"type": "paddle-intercept",
"ballPath": "ball.x",
"paddleY": 800,
"steps": 60,
"stepMs": 130
},
"expectedEngineCallPrefixes": ["particles.", "audio.synth"],
"assertAfterPlay": [
{ "path": "remaining", "op": "decreased", "why": "适配性真玩(挡板自动接球)下击碎砖块→剩余下降;接不住/碰撞失效则不降" }
],
"expectLatch": true
}
}