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
..

wg1/gen-worker —— W-G1 L1 生成 worker便宜模型 → 可真玩轻游戏)

结论看 REPORT.mddurable。本文件 = 如何跑。 验证 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 + wsCDP 驱动用)
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 Chromeheadless+ 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/mainlineAigcGenerateExecutor 接线、白名单注册、全 20 游戏 bake-off、judge 评分。