docs(L1-brief): 闭合「一句话现生成 tap 类」临门一脚——design agent 自产 tap-targets driver
3b-B 视觉终局重跑逮出唯一剩余缺口的 L1 执行 brief: - 精确根因:roles.py:32 DESIGN_SYSTEM 规则③ 明确叫模型对纯点击类给 driver:none, 但 harness 早有 tap-targets/tap-pairs driver(play.cdp.cjs:205/208,样板 tictactoe 手供即过) - 修向(双保险,镜像现有 ball.y→ball.x):① prompt 改离散点击类产 tap-targets+导出 targets 数组 ② _extract_gatespec 兜底注入 - 验收:2 款 tap 现生成过九门 + 理想派发面落当场生成新游戏入 feed=全真现生成终局 - lane 纪律:只动 wg1/gen-worker,冻结契约/host/backend/壳零改,rebase 238ec2d Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
238ec2dbe8
commit
dee2fcaa5f
@ -0,0 +1,64 @@
|
||||
# L1 Brief · 闭合「一句话现生成 tap 类」临门一脚:design agent 自产 tap-targets driver
|
||||
|
||||
> 归属:**L1 生成域**(wg1/gen-worker)。预计改动极小(2 处 + 验证)。基线 rebase `238ec2d`(dev/2.0.0)。
|
||||
> 出处:3b-B 派发面视觉终局重跑(`238ec2d`)逮出的唯一剩余缺口。证据 `wg1/gen-worker/evidence-3bB-final/`。
|
||||
|
||||
---
|
||||
|
||||
## 1. 结论先行(要做什么)
|
||||
|
||||
让 design agent 对**离散点击目标类**游戏(点击得分/打地鼠/井字棋/格位点击)**自产 `tap-targets` driver**(而非现在的 `{"type":"none"}`),并保证导出可被该 driver 消费的目标态。改 **2 处(prompt + 兜底归一,双保险)**,闭合 moat **「一句话现生成」腿对 tap 类的不可靠**——这是目前唯一未达「全真现生成视觉终局」的一处。
|
||||
|
||||
## 2. 背景(为什么是临门一脚)
|
||||
|
||||
3b-B 派发面已全链真证:一句话 → 执行器 `dispatchGeneric` → worker `service.py`(`run_studio`)→ 九门 → HMAC 回调 → `handleCallback` 落库 → 入 feed 真玩。**视觉终局已达成,但走兜底**(取已验证过九门样板 tictactoe 的 engineBundle 过真管线落 feed,gameId 9306,我亲眼验空盘→X胜→重开 latch)。**现生成腿**(一句话 → 当场生成新游戏)对 tap 类**反复失败**,故只能兜底。补上本缺口 = 一句话当场生成的新游戏也能过门入 feed = **全真现生成终局**。
|
||||
|
||||
## 3. 铁证(根因,非模型/非游戏本体)
|
||||
|
||||
dispatch 面 `run_studio(play_spec={})` **全恃 design agent 自产 gatespec**(无手供 play_spec)。5 款 tap 类现生成全栽同一签名:
|
||||
|
||||
| 款 | pass | 门 | driver | 游戏本体 |
|
||||
|---|---|---|---|---|
|
||||
| gen9306(打地鼠/点击) | False | **8/9 过·仅 H_progress 挂** | `{"type":"none"}` | 正确(导出 `targetX/targetY/targetRadius`) |
|
||||
| gen9307(井字棋) | False | **8/9 过·仅 H_progress 挂** | `{"type":"none"}` | 正确(导出 `board`/`moves`) |
|
||||
| gen9303–9305(3b-B 原批) | False | 同签名 nine_gate_failed | `none` | 同 |
|
||||
|
||||
`driver:none` → harness 无从驱动 → 盲打打不中目标 → `moves/score` 恒 0 → **H_progress 挂 + latch 不触发** → `max_repairs=5` 耗尽。`G_input`/`I_control`/`F_wiring`/`D_render` 全过=**输入通道、真接线、渲染都对,只是没人替它玩**。样板 tictactoe 过九门靠其 lane brief **手供** `play_spec.driver={"type":"tap-targets","steps":12,"stepMs":350}`。
|
||||
|
||||
## 4. 精确根因(指到行)
|
||||
|
||||
- **`wg1/gen-worker/worker/agent_loop/roles.py:32`(DESIGN_SYSTEM 规则③)**:明确写「**纯点击类用 `{"type":"none"}`**」——这是源头,prompt 直接叫模型对点击类不给 driver。
|
||||
- 但 **harness 早已支持** `tap-targets`/`tap-pairs`(`game-runtime/games/_wg1-gen/_shared/play.cdp.cjs:205/208`):`tap-targets` 读 `state().<targetsPath>` 的 `[{x,y,occupied}]`,每步点一个未占用目标到 gameover(`:213/:226-228`);`tap-pairs` 点相邻两个(交换/match 类,`:300`)。**能力在,只是 prompt 没让 design agent 用它**。
|
||||
|
||||
## 5. 修向(双保险,镜像现有 `ball.y→ball.x` 范式)
|
||||
|
||||
> 现有 `_extract_gatespec`(`studio.py:96-101`)已有「paddle-intercept 的 ballPath 误写 `.y` 自动兜回 `.x`」的 prompt+归一双保险——**照同款做 tap 类**。
|
||||
|
||||
1. **prompt 修(`roles.py` DESIGN_SYSTEM 规则③)**:把「纯点击类用 `{"type":"none"}`」改为分流:
|
||||
- **离散点击目标类**(打地鼠/点击得分/井字棋/格位)→ `driver:{"type":"tap-targets","targetsPath":"<你在 exportState 导出的目标数组字段>","steps":N,"stepMs":300~400}`,并要求 **exportState 导出该目标数组**(形如 `targets:[{x,y,occupied}]`,坐标=逻辑像素,对齐 §6 可测性红线)。
|
||||
- **交换/三消类** → `tap-pairs`(同 `targetsPath`)。
|
||||
- 仅**真正无离散目标、无连续控制**(极少)才保留 `{"type":"none"}`。
|
||||
2. **兜底归一(`studio.py:_extract_gatespec`,对齐 :96-101)**:driver 为 `none`/缺、但 exportState 含离散目标态(有 `targets[]`,或标量 `targetX/targetY`)→ **自动注入** `tap-targets`(标量单目标可包成 `[{x,y}]` 或扩 driver 读标量,见 §6 决策点)。prompt 修 + 归一兜底 = 模型偶尔仍写 none 也能救。
|
||||
|
||||
## 6. 须你确认/决策的点(别拍脑袋)
|
||||
|
||||
1. **单移动目标(打地鼠) vs 静态网格(井字棋)** `tap-targets` 都覆盖吗?driver 逐步**重读** `state()`(`:226`)→移动目标取实时位置应可,但 gen9306 导出的是**标量** `targetX/targetY`(非数组)。**决策**:统一让 design agent 对 tap 类导出**数组** `targets:[{x,y,occupied}]`(井字棋=9 格、打地鼠=当前 1~N 个),还是扩 `runTapTargets` 兼容标量 `targetX/Y`?(建议前者,契约统一)。
|
||||
2. `tap-targets` 的 `steps/stepMs` 默认值对「限时 30s 打地鼠」够不够打出进展(H_progress 阈值)?必要时 design agent 按时长产 steps。
|
||||
3. 改 `play.cdp.cjs`(harness)属**取证 driver 微调**,可做但须不回归现有 tap-targets 样板。
|
||||
|
||||
## 7. 验收(必须真证)
|
||||
|
||||
- **门级**:≥2 款 tap 类(打地鼠 + 井字棋/点击得分)以 `run_studio(play_spec={})` 现生成 → design agent **自产 tap-targets** → **过全九门(含 H_progress)**,evidence verdict `pass=true`。
|
||||
- **★ 全链(理想,补 3b-B 缺口)**:派发面 e2e 一句话 tap brief → 执行器 dispatch → **当场新生成过门** → 真 HMAC 回调入 feed → CDP 真玩**新 gameId**(非样板兜底)= **全真现生成视觉终局**。(派发面 worker `service.py` 仍在 mini-desktop :9401,可直接复跑。)
|
||||
- **不回归**:ball 类(paddle-intercept)+ scale-20 已过样板(tictactoe/breakout/doodle/...)重跑仍 pass。
|
||||
|
||||
## 8. lane 纪律(硬约束)
|
||||
|
||||
- 只动 **wg1/gen-worker**(`roles.py` / `studio.py`,可选 `play.cdp.cjs`)+ 可能补 1~2 个 tap 款 brief/正样本。新建 lane 分支,rebase `238ec2d`。
|
||||
- **冻结契约零改**:`game-host.d.ts` / 6 受控面 / `__GameBundle` / `bootGameHost` / 后端 / 通用壳 全不碰(那是 L0 域)。
|
||||
- 裸 openai、new-api 网关、`NO_PROXY`、key 走 `.env` 等 L1 纪律照旧(cheap-model skill §3)。
|
||||
- 完成把学习回写 `cheap-model-game-generation.md §7`(已开头,补「tap 类自产 driver 已闭合」)。
|
||||
|
||||
## 9. 一句话给 L1
|
||||
|
||||
> roles.py:32 那句「纯点击类用 driver:none」是 bug 源头——harness 早有 tap-targets driver(样板手供就过),请让 design agent 对离散点击目标类**自产 tap-targets + 导出 targets 数组**(prompt + `_extract_gatespec` 兜底双保险,照 ball.y→ball.x 范式),验收=2 款 tap 现生成过九门 + 理想派发面落一个**当场生成**的新游戏进 feed。
|
||||
Loading…
x
Reference in New Issue
Block a user