plan 2026-06-18-001 U3 迭代3-4轮(据快走查根因)。
根因(全budget+stage2 都不解,3轮prompt不解):便宜/强模型均**顽固把 tap 命中门控在分离 state 实体/计时器/turn 上**
→ 盲点驱动点不中 → tap-targets 类系统性 E_live/F_wiring/G_input/H 挂。即「让模型写 tap-handler」这条路便宜模型走不通。
引擎线根治(gd-runtime.js):新增 **clickable 声明式基元** `{kind:'clickable',score?,mark?:{shape,color,r},hitW?,hitH?}`——
运行时内置:本帧点中带此组件且 !occupied 的实体 → 自动翻 occupied+spawn 标记(可见)+计分+fx。**离散点击类声明它即可、免写 handler**。
验证:gd-runtime 单测 16(含 clickable 派发) + 全套 60/60;**手写纯声明式(behaviors:[])clickable tap-targets gamedef 过 harness 9/9**(E_live distinct=8/F_wiring/G_input/H 全过)——证基元+管线正确。
GAMEDEF_SYSTEM:教 clickable(替「写 tap-handler」)+ 参照2 改纯声明式 clickable few-shot(经探针证 9/9)。
runtime-api-2d.md:补 clickable 组件文档。
**关键测量定论(终结本机迭代)**:便宜模型 tap-targets 单管线生成**高方差**(同 brief 一轮 8/9 一轮 5/9)——
N=1~2 小样 lili-mac 早读**信噪比不足**,无法可靠优化「模型产出过门率」(我前几轮在追噪声)。
**管线/运行时/约定已证正确(手写金样两品类均 9/9)+ 引擎补了 clickable 基元**;**模型产出 cutover 率是统计量**,
需大样+全 repair 预算 → **authoritative=mini-desktop SaaFullGraphE2eTest -Dsaa.e2e=1**(多 brief+5+3 repair+stage2)。
快走查工具:加 stage2 救场升档(QC_STAGE*)+ gamedef assert 字段 coerce 到 score(治 design 造 moves/totalRound 等取证读不到字段)。
设计决策待 6c6g:design↔gamedef 的 assertAfterPlay 字段词汇契约(design 应约束到 gamedef 暴露集 score/remaining,
或运行时暴露更多)——触共享 DESIGN_SYSTEM。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
wg1/gen-worker —— W-G1 L1 生成 worker(便宜模型 → 可真玩轻游戏)
结论看
REPORT.md(durable)。本文件 = 如何跑。 验证 HJ-GEN-001:便宜模型(new-api)在插件库+装载契约上写出可真玩轻游戏,质量由 harness 七门保证。
它做什么
brief(题面)→ 便宜模型写 GameHostFactory 源码 → 静态校验门 → esbuild 打 __GameBundle iife → P1 宿主 bootGameHost 装载 → 本机 Chrome+CDP 真玩七门取证,失败回喂错因重试 ≤N。"能生成代码 ≠ 能玩"——必须过真玩门才算 pass。
目录
wg1/gen-worker/
├── REPORT.md # 交付报告(结论/四件套/成本/坑/最优模型)
├── requirements.txt # openai==2.41.1 + json-repair
├── .env # NEWAPI_KEY 等(gitignored,绝不入库)
├── worker/
│ ├── _client.py # 裸 openai 客户端 + 代理旁路 + usage(复用 spike 范式)
│ ├── prompt.py # 生成上下文包(契约/能力面/禁用项/few-shot)→ system+user
│ ├── validate.py # 校验门:抽码 + 静态契约扫描 + node --check 语法
│ ├── cost.py # ¥ 折算(new-api quota 口径,/api/pricing+/api/status)
│ └── run.py # 编排(§3 job-in/result-out + 重试门)
├── briefs/ # pong.json / simon.json / whack.json(题面 + CDP play-spec)
└── results/ # 每 run 结果(pass/retries/verdict 七门/tokens)
# 生成游戏产物在 game-runtime/games/_wg1-gen/<game>/(见该目录 .agent,解释为何落那)
前置(本机一次)
# 1) 密钥(gitignored,走环境):编辑 wg1/gen-worker/.env 写 NEWAPI_KEY(向创始人要)
# 2) game-runtime 工具链(esbuild + ws,CDP 驱动用)
npm i --prefix game-runtime
# 3) worker venv
uv venv wg1/gen-worker/.venv --python 3.12
uv pip install -p wg1/gen-worker/.venv/bin/python -r wg1/gen-worker/requirements.txt
# 4) 自测连通(列模型,零成本)
wg1/gen-worker/.venv/bin/python wg1/gen-worker/worker/_client.py
依赖本机 macOS + Google Chrome(headless)+ Tailscale 可达 new-api 网关
100.64.0.8:3000。
跑
# 生成 + 真玩一款(默认 deepseek-v4-flash;--model 换模型;--max-retries N)
wg1/gen-worker/.venv/bin/python wg1/gen-worker/worker/run.py pong
wg1/gen-worker/.venv/bin/python wg1/gen-worker/worker/run.py simon --model deepseek-v4-pro
wg1/gen-worker/.venv/bin/python wg1/gen-worker/worker/run.py whack
# 成本表(聚合 results/*.json)
wg1/gen-worker/.venv/bin/python wg1/gen-worker/worker/cost.py
# 仅重放某款已生成 bundle(不重新生成,调试 harness 用)
( cd game-runtime && bash games/_wg1-gen/_shared/serve-and-play.sh pong )
新游戏:在 briefs/<id>.json 写 {title, brief, play_spec:{inputs,expectedEngineCallPrefixes}},再 run.py <id>。
七门真玩判据(全过才 PASS,详见 REPORT §2)
A 装载 · B 未捕获 · C 掌帧[20,45] · D 真渲染 · E 活性 · F 真接线(__engineCalls) · G 输入有效(确定性 A/B 对照)。
verdict 落 game-runtime/games/_wg1-gen/<game>/evidence/verdict.json + 首帧/玩后截图。
边界
- 只消费冻结契约(game-host.d.ts / boot-game-host.js / __GameBundle / bootGameHost),零修改。
- 不推 dev/2.0.0;只在 lane 分支
wg1/gen-worker。 - 不做(创始人并行 P3/mainline):AigcGenerateExecutor 接线、白名单注册、全 20 游戏 bake-off、judge 评分。