主力批 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>
13 lines
1.9 KiB
JSON
13 lines
1.9 KiB
JSON
{
|
||
"title": "俄罗斯方块 Tetris",
|
||
"brief": "做一款经典俄罗斯方块。竖屏逻辑视口 390×844。\n- 居中网格(建议 10 列 × 18 行),七种标准方块(用受控 random 出块)从顶部持续下落。\n- 按键:ArrowLeft / ArrowRight 左右移动当前方块;ArrowUp 顺时针旋转;Space 硬降(当前方块瞬间落到底并锁定);ArrowDown 软降(加速下落)。\n- 落到底或压在已有方块上即【锁定】成为堆叠;锁定后从顶部出新方块。\n- 整行填满即消除该行、上方下移、计分(消行越多分越高)。\n- 新方块出生位置已被堆叠占据(堆到顶)= 失败。\n- 顶部文本 HUD:分数 / 已消行数 / 状态。\n- 【终态契约·务必遵守】堆到顶失败即把 _forensicsView().state().phase 置 'gameover' 并【驻留】(显示结果 + 「点击重玩」);点击重玩前 phase 恒 'gameover',绝不自动重开 / 不下一帧复位(宿主每 500ms 轮询 phase)。gameover 下输入一律忽略。\n- 【可测性·务必导出状态】_forensicsView().state() 纯只读实时真值:phase;result(null|'lose');score(整数,开局0);lines(已消行数);piecesLocked(已锁定方块总数,开局0,每锁定一块+1);board(网格占用快照)。harness 据 piecesLocked/phase 验进展与终局。\n- 反馈(juice):锁定 / 消行触发 getEngine().particles.spawnEmitter + getEngine().audio.synth.synthSfx。\n- 画面:深色背景铺满;方块 / 网格 / 文字亮色实心。",
|
||
"play_spec": {
|
||
"driver": { "type": "key-cycle", "keys": ["ArrowLeft", "ArrowUp", "Space", "ArrowRight", "ArrowUp", "Space"], "steps": 50, "stepMs": 220 },
|
||
"expectedEngineCallPrefixes": ["particles.", "audio.synth"],
|
||
"assertAfterPlay": [
|
||
{ "path": "piecesLocked", "op": "increased", "why": "循环按键下落+硬降→锁定方块数上升;不下落/不锁定则不升" }
|
||
],
|
||
"expectLatch": true
|
||
}
|
||
}
|