From e963db3a347b584d2a0067aa626b0f4b6ab5e3fc Mon Sep 17 00:00:00 2001 From: lili Date: Sat, 27 Jun 2026 09:42:13 -0700 Subject: [PATCH] =?UTF-8?q?docs:=20M2=20=E6=94=B6=E5=8F=A3=20=E2=80=94=20a?= =?UTF-8?q?uto-vs-golden=20=E9=97=A8=E6=8A=93=E5=88=B0=E5=8D=95=E6=95=B0?= =?UTF-8?q?=20target=20=E5=A5=91=E7=BA=A6=E6=BC=82=E7=A7=BB=20+=20?= =?UTF-8?q?=E8=92=B8=E9=A6=8F(WU-C=205.4=20=E9=98=BB=E5=A1=9E)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit M2 机制全交付(U1-U3 门 + R5 灰度设计、全套件 106 测绿)。full 批 n=5: whack-mole/shop-serve aligned、click-score regressed(E_live/G_input auto 0.8< golden 1.0,3 次复跑确定性复现)。retire_authorization 三条:M1✓+002✓+ auto-vs-golden✗ → authorized=False。 根因(systematic-debugging 定位)= 生成契约漂移:~20% click-score 款 forensics 暴露单数 target(对象)而非复数 targets(数组),_build_play_spec 推断漏判→误推 key-cycle + tap-targets 驱动器 targetsPath 找不到。门正确履职(证伪评审「恒过」 预测)、退役授权诚实卡住。创始人定:收口 M2 机制 + 登记 WU-C 5.4 阻塞(修后转绿)。 蒸馏:auto-vs-golden 同款双驱动 delta 门范式 + 单数 target 契约漂移实证 → gen-path-parity-harness.md;M2 收口结论 + WU-C 5.4 阻塞 → M2 plan。 Co-Authored-By: Claude Opus 4.8 (1M context) --- .agents/skills/gen-path-parity-harness.md | 15 +++++++++++++++ ...-001-feat-cheap-worker-M2-node退役授权-plan.md | 9 +++++++++ 2 files changed, 24 insertions(+) diff --git a/.agents/skills/gen-path-parity-harness.md b/.agents/skills/gen-path-parity-harness.md index 46d77a62..d3aad26b 100644 --- a/.agents/skills/gen-path-parity-harness.md +++ b/.agents/skills/gen-path-parity-harness.md @@ -70,6 +70,18 @@ node_type: skill > 配套的两个生成质量前置(M1 同里程碑、归生成侧不归达标门):**U1 护栏**——共享 oracle `tools.mjs` 的 `check()` 在打包前堵「返 void 的绘制 API 被误当返回值用」这类能静态判的幻觉(过 check 却运行期卡菜单的子集),救回卡死品类进样本池;**U4 预算闸**——便宜档复用 tier2 `CircuitBreakerMiddleware`,发起每次模型调用前预估累计 ¥、越 ¥10 硬上限即 fail-closed,成本按 new-api quota 口径落盘(取价不可达降级到次数/token 闸 + 告警,不静默超支也不静默阻断)。 +## auto-vs-golden 门:同款双驱动 delta(M2 实证) + +对照门验「换实现没回退」、达标门验「绝对够格」,还差一道验「生产里那把自动产的驱动器,跟人手写的金标比有没有退化」。生产不会用金标 spec,每款游戏的驱动器是 `ensure_play_spec` 当场据 smoke state 推断产的、通常比金标薄。所以「金标 spec 下达标 / 等价」不等于「自动 spec 下生产真达标」,后者才是 Node 退役授权的条件。 + +**做法:同一款产物 play 两次、只换驱动器。** 生成一次(gen-only)→ 同一份 staged src/ 上先自动 spec(`ensure_play_spec`)play、后金标(`inject_golden`)play,逐门比过门率。同款产物两次 play 把生成方差摘掉,delta 纯反映驱动器差。编排序的坑:自动 play 必须在金标注入**之前**捕获(否则 auto_gates 被金标覆盖);ensure_play_spec 是「已存在不覆盖」语义,跑前要断言 staged 无残留 spec(撞号 / 重跑会静默复用旧 spec、污染 auto_gates)。 + +**方向是单边的**:门查「自动有没有比金标**驱得差**」(`delta < 0` 退化),不是查「自动有没有比金标松」。这点容易写反——动机一不小心就写成「防自动放过坏局」(更松),但断言同质时自动不可能比金标松(M1 已把自动 spec 断言加厚到与金标逐字段一致),真正会发生的是自动**驱不动**(薄 spec 把金标能驱起来的可玩局判进不去)。关键门 {E_live,H_progress,G_input} 容差 0(`delta≥0`)、其余六门容差 -1/N(单款 flake)。double-low 守卫:关键门两路都 <0.5(同挂)→ inconclusive,不被 delta=0 误判等价(同 `compare_node.doubleLowRed`)。 + +**鉴别力别预判为零**。评审一度判这门在 tap-targets 上「自动与金标字段同质、delta≈0 恒过、没鉴别力」。M2 实测证伪:click-score 5 款里 1 款真退化(E_live/G_input auto 0.8 < golden 1.0),3 次复跑确定性复现、非 flake。根因是一类**生成契约漂移**——M3 合法地用**单数 `target`(对象)**暴露当前目标(屏上一次只一个),而整条 tap-targets harness(`_build_play_spec` 的驱动器推断 + 驱动器 `targetsPath:"targets"`)只认**复数 `targets`(数组)**:单数款被推成 key-cycle(发方向键)、连「开始」都没点到 → 进不了 live。即门确实能逮住「自动驱动器对某类合法 forensics 形态失效」,delta≈0 只在自动与金标对该款都驱得动时才成立。教训:**自动 spec 的驱动器推断键在某个具体字段名 / 形态上时,生成侧任何等价的别样表达都会让它静默误分类**——这类漂移要么在生成侧立硬契约(强制复数 `targets`)、要么让推断与驱动器认全部等价形态。 + +**这门是「不退化确认」、不是决定性独立闸**。退役授权的强证据仍是绝对达标(M1)+ 两路等价(002);auto-vs-golden 补「生产自动 spec 没把达标驱虚」这一层。三条齐(M1 达标 ∧ 002 等价 ∧ auto-vs-golden 不退化)才授权切默认路由——任一不绿,授权如实判 NOT authorized 并列明欠哪条(`retire_authorization` 只读三份既有报告聚合、零真跑零 LLM)。M2 实证:auto-vs-golden 这条因上述契约漂移判未绿,退役授权正确卡住、把精确根因交回生成侧(WU-C 5.4)。 + ## 并发(可选,提速) 并发的真约束不是产物隔离(gameId 前缀已隔离),是九门 play/smoke 的固定端口 + Chrome 实例。 @@ -85,6 +97,7 @@ node_type: skill - `cheap-worker/compare_node.py`:`judge_genre`(两层判据)/ `inject_golden` + `_write_spec_atomic`(金标覆写 staged)/ `run_pair_sync`(生成→注入→play 整对)/ `run_multi`(端口池 + 线程 + 限并发)/ `_port_pool`。 - `cheap-worker/bake_off.py`(达标门):`judge_genre`(质量口径 = 分母 converged + rawPassRate 并报 + unconverged 单列)/ `aggregate`(按品类逐项 ≥0.8 + unconvergedTotal 汇总 + 缺收敛样本报 insufficient)/ `run_one_sync`(透传 breakerKind 供未收敛诊断)/ `run_bakeoff`(端口池有界并发 + 报告不覆盖)。 +- `cheap-worker/auto_vs_golden.py`(auto-vs-golden 门 + 退役授权):`judge_genre_delta`(逐门 delta + 关键门容差 0 / 其余 1/N + double-low 守卫)/ `aggregate_delta`(按品类聚合)/ `run_pair_dual_sync`(同款双驱动 play、auto 先于 golden、ensure 前断言无残留 spec)/ `run_batch`(端口池有界并发 + 报告不覆盖)/ `retire_authorization`(读 M1+002+auto-vs-golden 三报告聚合、零真跑零 LLM)。 - `cheap-worker/fixtures/golden-specs/`:每品类一份金标 play-spec。 - 九门 harness 本体(驱动器家族 / play.cdp.cjs / 出厂红线)见 [game-e2e-cdp-harness](game-e2e-cdp-harness.md);AgentScope 2.0.2 便宜档实现 API 见 [agentscope-2.0-facts](../knowledge/agentscope-2.0-facts.md)。 @@ -93,3 +106,5 @@ node_type: skill WU-A 后续(2026-06-26,`docs/plans/2026-06-26-002-feat-cheap-worker-multi-genre-plan.md`):三 tap-targets 品类 n=3 对照 Python 新路 vs Node 旧路全 equivalent,坐实范式未回退。Codex + Opus 双评审揪出的四个真坑都在本范式里固化成了铁律:注入路径错(evidence 而非 staged)、品类族判错(点击得分是 occupied 反应族不是放置族)、判据缺绝对地板(双低被判等价)、只精化单侧 spec 污染对照。 M1 达标门(2026-06-27,`docs/plans/2026-06-26-003-feat-cheap-worker-M1-达标门绿-plan.md` U3 收口):三 tap-targets 品类各 7 款 M3 实测 + click-score 补跑 7 款确认抖动,质量口径逐品类 ≥0.8 全过——click-score 11/12=0.917、whack-mole 7/7=1.0、shop-serve 6/7=0.857,M1 达标门绿。关键发现 = 上「达标门口径」节的口径铁律:同一批 14 款 click-score,原始 0.786(边界下)与质量 0.917(稳过)之差全在 2 个编排未收敛款(timeout/step_cap),口径决定收口。收口报告 `cheap-worker/results/bake-off-M1-final.json`(results gitignored、本地证据)。 + +M2 auto-vs-golden 门(2026-06-27,`docs/plans/2026-06-27-001-feat-cheap-worker-M2-node退役授权-plan.md`,过双评审):U1 逐门 delta 判据 + U2 同款双驱动 play + U3 三条齐退役授权判定全交付,全套件 106 测绿。full 批 n=5:whack-mole/shop-serve aligned、**click-score regressed**(E_live/G_input auto 0.8