把 worker 已产出、当前在边界被丢弃的富生成轨迹(9d)接过来落库,补"放了能管/追溯/不雷同" 三件 v0 能力,全部 best-effort 非阻断(口号"放了能管,非放了能拦")。三件全关=现行字节零变。 契约先行: - contracts/api-schemas/aigc.yaml DifyCallbackReqVO 加 trace(object,nullable) additive 字段; 顺带补 engineBundle 漂移对齐(Java 已加 yaml 漏)——守契约先行收口。 9d trace 账本(公共底座): - Flyway V16.0.0:game_aigc_task 加 trace_json(JSON NULL)+readiness_score(SMALLINT NULL), additive 可空 AFTER failure_reason(接 V15 组A level,勿撞号);AigcTaskDO 加两映射字段。 - worker service.py:_extract_trace 从 run_studio result 抽 9d 子集(必填子集7项+可选段,camelCase), build_callback_payload 加 result 参可携 trace,handle_job 把 result 提到函数作用域传入(成败路都抽)。 - 后端 DifyCallbackTxService.persistTraceQuietly:succeeded 步骤⑦后 + failed markTaskFailed 后 best-effort 落 trace_json;全程 try-catch 吞异常,绝不回滚三表写链/绝不阻断 PUBLISHED。 D11 就绪评分: - 新建 ReadinessScorer:读 trace 算 0-100(playability 0.50/firstPlay 0.25/stability 0.15/efficiency 0.10, 权重占位待校准;缺字段取中性 0.5,纯函数无副作用);算分独立 try-catch,失败仅 readiness 降级 NULL、 不拖累 trace 落库(§7)。AigcTaskRespVO 加 readinessScore(BeanUtils 平铺自动映射)→ /task/page 零改透出。 D9 反同质化: - 新建 worker agent_loop/dedup.py:移植 agent-loop-v1 run_batch.py:96 _norm_text(归一≈复制) + ledger.py:50 mint_design_id 思路(compute_sig 精确撞重键);重接 _dedup_gate 逻辑——解绑实例状态 改 FS jsonl 登记表、engine 路取字段(title=brief 派生/theme=generic 占位)、落库改塞 trace.similarity。 - studio.py result 注入 similarity(AIGC_DEDUP_ENABLED 开关门控);撞重只 log.warn+dupHit=true, 照常回调入 feed(v0 只观测避免误杀,九门已是硬地板)。 回滚:三件各一开关(aigc.trace.enabled 默认 false/D11 随 trace/AIGC_DEDUP_ENABLED),全关=逐字一致; 列 additive 可空,真回滚写 V17 drop(不改 V16,遵 V2.0.0 头注铁律)。不触公平性铁律(只读 gatespec)。 验证(mini-desktop /root/build-lane-a 隔离目录): - Java:aigc-server 全模块 clean test 111/111 通过(0 fail/0 err/4 skip,BUILD SUCCESS); 含新 DifyCallbackTxTraceTest 5/5(trace 落库/失败不阻断/D11 算分 pass-vs-fail/算分失败不阻断/RespVO 可见) + 既有 DifyCallbackServiceImplTest 13/13 零回归(坐实 traceEnabled=false 现行行为字节一致)。 - worker:wg1_groupb_test.py 17/17(9d trace 必填子集完整率 5/5=100% + D9 撞重/归一/不撞/坏行容错); 真 venv 验 dedup/service/studio import 链健康 + result=None additive 兼容。 Co-Authored-By: Claude Opus 4.8 (1M context) <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 评分。