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

13 lines
1.9 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": "俄罗斯方块 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
}
}