diff --git a/docs/plans/2026-06-26-002-feat-cheap-worker-multi-genre-plan.md b/docs/plans/2026-06-26-002-feat-cheap-worker-multi-genre-plan.md new file mode 100644 index 00000000..ecb86f29 --- /dev/null +++ b/docs/plans/2026-06-26-002-feat-cheap-worker-multi-genre-plan.md @@ -0,0 +1,224 @@ +--- +title: "feat: 便宜档 Python 路 tap-targets 三品类对照验证 → 框架等价证据(WU-A 框架收敛剩余)" +type: feat +date: 2026-06-26 +origin: docs/plans/2026-06-25-生成引擎统一执行计划-AgentScope三档-plan.md +--- + +# 便宜档 Python 路 tap-targets 三品类对照验证 → 框架等价证据 + +## Summary + +便宜档的生成核心已在 spike 用 Python/AgentScope 重写、跑通点击得分一类(n=1)。WU-A 框架收敛在便宜档这条线剩下的自有工作只有一件:把对照验证铺到三个 tap-targets 代表品类(点击得分 / 打地鼠 / 经营点客),用每品类一份金标 play-spec 喂 Python 与 Node 两路、把驱动器从对照变量里摘掉,逐品类逐门比过门率,产出"Python 路 ≈ Node 路、范式未回退"的框架等价证据。这是 plan① 头号风险 R1(把在产的便宜档主力整条重写)三道缓解闸的头一道。key-cycle 品类(2048 合成 / 躲避)的公平对照需要一道输入键契约,不是 WU-A 能立的,延到 WU-C / 生成侧就位后再做;生成质量提升归 WU-B/C/F、便宜档生产自验 play-spec 与驱动器加固归 WU-C 5.4、灰度切换基础设施归 WU-F,均不在本计划。 + +--- + +## Problem Frame + +spike 坐实了范式可移植,但只验了一类。WU-A 是框架收敛——把便宜档从 Node/SAA-Java 双轨搬上 Python/AgentScope、为 Node 退役铺路。它的剩余自有工作不是改进生成、也不是补验收机制,而是拿出"Python 路与 Node 路等价"的迁移安全证据。这条证据是 R1 三道缓解闸里的头一道(另两道 = Node 旧路灰度兜底、WU-F ≥80% 达标门)。 + +要让证据成立,对照必须公平:两路比的是生成质量,驱动器(play-spec)就必须恒定。这里有一条只对一半品类成立的分界,决定了本计划的覆盖面。九门驱动器对 tap-targets 族是从游戏自报的 forensics 状态里读出目标坐标再点,坐标与具体游戏实现无关,所以一份按品类手写的金标 spec 能公平地驱动两路各自生成的同品类游戏。key-cycle 族不同:驱动器按 spec 里硬编码的按键逐键轮发,而按哪个键是 LLM 写 game-logic 时的自由选择、不在 forensics 契约里,两路独立生成完全可能绑不同键——一份固定按键的金标 spec 对绑定一致的那路驱得动、对另一路驱不动,恰好在该中立的地方制造新的不公平。公平的 key-cycle 对照需要先有一道"两路绑同一套输入键"的契约,那是生成侧 / WU-C 的事。 + +因此本计划的代表品类收敛到三个 tap-targets 品类——点击得分、打地鼠、经营点客,它们都是"点冒出来的 occupied 目标"、同属反应族,金标 spec 的公平性在它们身上完全成立。key-cycle 两品类延到输入键契约就位再对照。框架等价这件事本就不靠 key-cycle:生成范式(多轮 ReAct / 五工具沙箱 / done 门 / 历史压缩)是 genre-agnostic 的,三个 tap-targets 品类在它上面跑出等价,已足证范式正确移植。 + +便宜档当前五款九门 3/5,卡在两类的生成幻觉,那是生成侧质量,归 WU-B/C/F,本计划不碰。三个在范围品类里若有现有 Node 样本卡 menu(生成侧),对照会如实标红、判为"对照不充分",不算本计划失败,也不算坐实。 + +--- + +## Requirements + +- R1. 三个 tap-targets 代表品类(点击得分 / 打地鼠 / 经营点客)各跑 Python 路与 Node 路,每路产真 `src/` 多文件工程,经金标 play-spec 驱动九门,逐品类逐门比过门率与产物形态。 +- R2. 每品类一份金标 play-spec(三类同属 occupied 反应族 + score 递增进度断言),held constant 喂两路、把驱动器从对照变量里摘掉。金标 spec 是对照实验 fixtures,不是便宜档生产自验 spec(后者归 WU-C 5.4)。注入点 = staged 路径 `games/_wg1-gen//play-spec.json`,在生成完成与九门 play 之间写入。 +- R3. 判据两层 + 逐品类绝对地板:相对层——Python 过门率不低于 Node;绝对层——对 Node 本身不过可玩门的品类,要 Python 真过(driven 且 H 门有进展)才算坐实;坐实的品类还要 Python 带余量过可玩门、不只是 ≥Node,防"两路都勉强平庸也判等价";两路同卡菜单 / 同低分的品类标红、不计入坐实。成功定义 = 坐实"Python ≈ Node、范式未回退"(金标 spec 下),不等于"过九门"、也不等于"生产退役许可"。 +- R4. 迁移契约逐项钉死成 WU-A 自有 / 移交 WU-C / 移交 WU-F / 质量归 WU-B·C·F 的分界对账,含 key-cycle 品类待输入键契约、生产退役授权的 auto-vs-golden 前置。 +- R5. 样本口径 `n>5` 小批(每类 n=3–5),不走 `n≥30` 统计批跑(创始人 2026-06-26 口径);统计达标判定归 WU-F。 +- R6. 零跨档:全部改动在 `cheap-worker/` 内,不碰 tier2 热路径、不碰 `_shared` 驱动器、不碰 Node `amodel-gen`,对已 accept 的 feie-005 金标零回归。 + +--- + +## Key Technical Decisions + +- KTD1. WU-A 剩余自有 = 只做对照验证。框架收敛要的生成核心重写在 spike 已完成——prompt 是单一通用、各品类同一套核心跑出来,没有 per-genre 核心可写;剩下只需证明范式等价。生成质量(3/5→5/5)归 WU-B 实例达验收 + WU-C 5.4 三层校验与 oracle 护栏 + WU-F ≥80% 达标门;便宜档生产自验 play-spec 的自动生成与 key-cycle 等驱动器加固归 WU-C 5.4(plan① §WU-A 明文把验收侧加固归 WU-C 5.4 三层校验);灰度切换基础设施归 WU-F。本计划一概不碰,只产对照证据。 + +- KTD2. 代表品类 = 三个 tap-targets 品类:点击得分(`base1`)、打地鼠(`base2`)、经营点客(`base4`),brief 取自各自 `run-summary.json`,作两路固定输入。三者同属 occupied 反应族——都是点冒出来的 occupied 目标计分。key-cycle 品类 2048 合成(`base3`)、躲避(`base5`)延到输入键契约就位再对照(理由见 Problem Frame:按键绑定不在 forensics 契约、金标 spec 做不到游戏无关)。拖拽合成(merge-2)与放置经营(idle / incremental)无现成样本、tap-pairs 可测性弱,也出范围。 + +- KTD3. 对照用每品类金标 play-spec 喂两路、held constant——这是对照公平的核心,且只在 tap-targets 族成立。三个在范围品类都是 occupied 反应族,驱动器从 `_forensicsView().state()` 自报的 targets 里读 occupied 目标坐标再点,坐标与具体游戏实现无关,所以一份金标 spec 能公平驱动两路各自生成的同品类游戏。三份金标 spec 同形:`tap-targets` + `targetMode:'occupied'` + `assertAfterPlay` 含 `{path:'score',op:'increased'}`(三类都是有效点击后 score 递增;经营营收即 score 递增、无花钱机制,不用"货币递减"门)。点击得分按 occupied 反应族写——它与打地鼠 / 经营同族,`base1` 的 forensics targets 即 `occupied:true`、现有可用 spec 也是 occupied,不是放置族。金标 spec 是对照实验 fixtures,与便宜档生产自验 spec(WU-C 5.4 的生成器)是两回事。 + +- KTD4. 对照模型固定 MiniMax-M3,同 spike、同 Node 旧路,保对照公平。便宜档模型画像 = M3,高级档 = GLM-5.2(GLM-5.2 属高级档 tier2,不在便宜档对照内)。 + +- KTD5. 判据两层 + 逐品类绝对地板 + 成功定义对齐 plan①。Node 基线 flaky(五款 3/5)下,只"不低于 Node"会把"两路都没真玩起来 / 两路都勉强平庸"判成等价坐实;故绝对层(Node 不过门品类要 Python 真过)+ 坐实品类绝对地板(Python 带余量过)+ 双低标红三道一起兜。成功定义是坐实"Python ≈ Node、范式未回退",且明确加注"金标 spec 下"——证据是在手写金标驱动器下采的,生产里 Python 将用 WU-C 自动 spec 驱动,面向生产的 Node 退役授权要另在下游核对"自动 spec 达金标同等过门率",本计划不产那张许可。 + +- KTD6. 复用 spike `compare_node.py` 的纯逻辑层(`gates_from_verdict` / `src_shape` / `compare_logic` / `_pass_rate`)不动;扩编排时把每路的"生成"与"九门 play"拆成两步,中间把金标 spec 写进 staged 路径——这是金标 spec 真正生效的注入点(`play.cdp.cjs` 从 staged 目录读 spec,`ensure_play_spec` 的"已存在不覆盖"语义恰好让先写入的金标 spec 留住)。 + +--- + +## High-Level Technical Design + +对照公平的数据流——三品类各 n=3–5,两路同输入,金标 spec 在生成与 play 之间注入 staged 路径、两路共用: + +```mermaid +flowchart TB + subgraph IN["三 tap-targets 品类固定 brief(取自 base1/base2/base4 run-summary)"] + B["点击得分 / 打地鼠 / 经营点客(均 occupied 反应族)"] + end + subgraph GOLD["每品类金标 play-spec(U1 · 对照 fixtures)"] + G["tap-targets occupied + score 递增门"] + end + subgraph LOOP["compare_node 三品类编排(品类 × n 串行 · U2)"] + direction TB + PY["Python 路:生成到 stage → 注入金标 spec → 九门 play
前缀 cheap-<genre>-<k>"] + ND["Node 路:gen 到 stage → 注入金标 spec → 九门 play
前缀 node-<genre>-<k>"] + end + subgraph INJ["注入点 = staged games/_wg1-gen/<id>/play-spec.json"] + I["生成与 play 之间写入金标 spec
ensure_play_spec 不覆盖 → 金标生效"] + end + subgraph OUT["按品类聚合 + 两层判据 + 逐品类绝对地板(U3)"] + R["逐品类逐门 Py/Node 对照表
相对不低于 + 绝对真过 + 坐实带余量
双低标红 → 框架等价证据(金标 spec 下)"] + end + B --> PY & ND + G -.-> I + I -.写入两路 staged.-> PY & ND + PY --> R + ND --> R +``` + +--- + +## 迁移契约对账(WU-A 自有 / 移交他 WU) + +plan① §WU-A 把迁移契约逐项钉死作"R1 回滚与 WU-F 切换门的对账依据"。本计划只实现其中的对照验证一项,其余按 plan① 的 WU 分解各归其位、列明作对账依据。这张表是工作单元之间的交接契约,WU-F 收口时逐行核对。 + +| 契约项 / 关注面 | 归属 | 本计划处理 | +|---|---|---| +| Python↔Node 对照验证(tap-targets 三品类) | **WU-A 本计划** | U1–U3 实现(R1 / R3) | +| 当前链路(Node 旧路)/ 目标链路(Python 新路)定义 | 对账依据 | 钉死定义,作对照源(KTD2) | +| key-cycle 品类(2048 / 躲避)对照 | 待输入键契约(WU-C / 生成侧)就位后再做 | 不做;公平对照需两路绑同一套输入键,按键绑定不在 forensics 契约 | +| 面向生产的 Node 退役授权 | 下游门:本计划金标等价证据 + 生产自动 spec 达金标同等过门率(auto-vs-golden delta,WU-C 自动 spec 就位后核对) | 本计划只产"金标 spec 下"的等价证据,不等于生产退役许可 | +| 生成质量(便宜档 3/5→5/5,生成幻觉护栏) | WU-B 实例达验收 + WU-C 5.4 + WU-F ≥80% 达标门 | 不碰;对照如实暴露、不改生成 | +| 便宜档生产自验 play-spec 自动生成 + 驱动器加固 | WU-C 5.4 三层校验(验收侧加固) | 不做;本计划金标 spec 是对照 fixtures、非生产生成器 | +| 路由 feature flag / A2A 任务状态 / 幂等 key / 在途任务 | WU-F | 仅列明 | +| D12 配额扣退 / 补偿 | WU-F(后端集成) | 仅列明 | +| 超时重试 / JSON 容错稳态策略 | spike 已随重写移植 + WU-F 生产调参 | 保持不退化 | +| 切换门槛(≥80% 达标 + 对照等价) | WU-F | 仅列明。本计划产的小批对照证据只满足"对照等价"子条件;"≥80% 达标"须 WU-F 另跑统计批跑、**按品类**判,不可复用本计划 n=3–5 小批样本 | +| 回滚触发条件 | WU-F | 仅列明 | + +--- + +## Implementation Units + +### U1. 三品类金标 play-spec fixtures + +**Goal**:为三个 tap-targets 代表品类(点击得分 / 打地鼠 / 经营点客)各手写一份金标 play-spec,三份同属 occupied 反应族,作对照实验的恒定驱动器,喂 Python 与 Node 两路同一份。 + +**Requirements**:R2。 + +**Dependencies**:无(起点单元)。 + +**Files**: +- `cheap-worker/fixtures/golden-specs/`(三份按品类命名的 `*.play-spec.json`,新建) +- 测试:`cheap-worker/tests/test_golden_specs.py`(新建) + +**Approach**:三品类同属 occupied 反应族——点击得分 / 打地鼠 / 经营点客都是点冒出来的 occupied 目标。每份 spec = `tap-targets` + `targetMode:'occupied'` + `assertAfterPlay` 含 `{path:'score',op:'increased'}`。`expectLatch` 按品类:三类都有时限,有进展即降 advisory(对齐本周 latch 口径修法)。spec 只依赖便宜档 forensics 契约(`_forensicsView` 的 targets occupied 标记与 `state.score`),不绑定单个游戏的具体坐标或对象名,因此一份金标 spec 能驱动两路同品类游戏——这条对 tap-targets 族成立(坐标来自 forensics),正是把 key-cycle 排除在外的根据。点击得分按 occupied 反应族写(与打地鼠 / 经营同族),复用 `base1` 现有可用的 occupied spec 形态,不写成放置族。 + +**Patterns to follow**:`game-runtime/games/_wg1-gen/_shared/play.cdp.cjs` 的 `runTapTargets` occupied 语义与菜单起局扫点;现有 `_wg1-gen/{base1,base2,base4}/play-spec.json` 作对位源。 + +**Test scenarios**: +- schema 合法:三份 spec 都能被 `play.cdp.cjs` 解析(`driver.type:tap-targets`、`targetMode:occupied`、必填字段在)。 +- 品类对位:三份均为 occupied + `score increased` 断言;不产放置族(点空位)、不产 key-cycle、不产 `safeOnly`。 +- 契约依赖:spec 只引 forensics 契约字段(targets occupied / `state.score`),不含某个具体游戏的硬编码坐标或对象名。 +- base1 同族:点击得分 spec 与 `base1` 现有 occupied spec 同族,非放置族。 + +**Test expectation**:spec 是静态 fixtures,test 断言结构、品类对位、契约依赖正确,**非"现有样本能被驱动"门**(现有样本真玩结果移 U3 按 R3 判)。 + +**Verification**:三份金标 spec 落盘,schema / 驱动家族 / 契约路径校验过;此处只验 spec 自身正确,不要求当前 Node 样本能驱动进对局(那在 U3,允许按 R3 标"生成侧导致对照不充分")。 + +### U2. compare_node 三品类对照 + 金标 spec 注入(生成 / play 拆步) + +**Goal**:把单品类 n=1 的 `compare_node.py` 扩成"品类 × 重复次数"批量对照,把每路的生成与九门 play 拆成两步、中间把该品类金标 spec 写进 staged 路径,按品类聚合逐门对照、按两层判据 + 逐品类绝对地板出等价判定。 + +**Requirements**:R1, R3。 + +**Dependencies**:U1。 + +**Files**: +- `cheap-worker/compare_node.py`(改 CLI + 真跑编排 + 生成 / play 拆步 + 金标 spec 注入 + 报告聚合) +- 测试:`cheap-worker/tests/test_compare_multi.py`(新建) + +**Approach**:CLI 加品类列表(默认三 tap-targets 品类,brief 取自 `base1` / `base2` / `base4` 的 run-summary)与 `--n`(默认 3,上限 5)。关键改动:把 `run_python` / `run_node` 的"生成到 stage"与"九门 play"拆成两步——生成到 stage → 把该品类金标 spec 写进 staged `games/_wg1-gen//play-spec.json`(这是 `play.cdp.cjs` 真实读取的路径;`ensure_play_spec` 的"已存在不覆盖"语义让先写入的金标 spec 留住,不是写 evidence 目录)→ 再 shell-out `play.cdp.cjs` 跑九门。编排按品类 × n 串行,gameId 用 `cheap--` / `node--` 前缀隔离。聚合按品类:两路逐门 PASS 计数、过门率、产物形态命中率;按 R3 两层判据 + 逐品类绝对地板出结论,两路同卡 / 同低分标红。纯逻辑层(`gates_from_verdict` / `src_shape` / `compare_logic` / `_pass_rate`)按单次调用复用不动。报告按批次分文件、不覆盖。串行跑(便宜档线已栽过后台并发撞同名产物的坑)。 + +**Patterns to follow**:spike `compare_node.py` 现 `main_async` / `run_python` / `run_node`(单对起点);`play.cdp.cjs` 的 spec 读取位置(staged `play-spec.json`)。 + +**Test scenarios**: +- 金标 spec 注入(真路径):跑后 staged `games/_wg1-gen//play-spec.json` 内容等于该品类金标 fixture(锚 staged 路径、不是 evidence 目录);verdict 实际用的 spec 与 fixture hash 一致。 +- 生成 / play 拆步:生成步产 stage 后、play 步前金标 spec 已就位,`ensure_play_spec` 不覆盖已写入的金标。 +- 批量聚合(mock verdict):构造三品类各 n=3 的 verdict,聚合函数正确按品类算两路过门率。 +- 判据两层 + 绝对地板:相对层 Python ≥ Node 判过;绝对层对 Node 不过门品类要求 Python `driven` + H 进展;坐实品类要 Python 带余量过、非仅持平;两路同卡标红、不计坐实。 +- 隔离:品类 × k 的 gameId 前缀两两不撞、产物各自独立。 +- 上限:`--n` 超 5 被夹到 5(对齐 `n>5` 小批口径)。 +- 报告不覆盖:两次批跑产两份报告、历史不被覆盖。 + +**Verification**:`test_compare_multi.py` 全绿;对一个小批(三品类各 n=1 快跑)产按品类聚合报告;金标 spec 经 staged 路径确被注入、verdict 用的 spec 与 fixture hash 对得上(防 evidence 目录假阳)。 + +### U3. 三品类对照实跑 + 框架等价证据(金标 spec 下) + +**Goal**:跑三品类各 n=3–5 的 Python↔Node 对照,产逐品类逐门对照表与按两层判据 + 逐品类绝对地板的等价判定,输出"框架等价证据(金标 spec 下)";面向生产的 Node 退役授权显式 gate 在下游(WU-C 自动 spec 达金标同等过门率)。 + +**Requirements**:R1, R3, R5。 + +**Dependencies**:U2。 + +**Files**: +- `cheap-worker/results/`(对照报告产物,gitignore) + +**Approach**:前台串行跑 `compare_node.py` 三品类批量(每类 n=3–5),Python 与 Node 同 brief、同模型(M3)、同 `_template` 源、同金标 spec 四项恒定。按 R3 两层判据 + 逐品类绝对地板逐品类核对,报告对两路同卡 / 同低分标红。产物命名"框架等价证据(金标 spec 下)",明确这是金标驱动器下的范式等价,不是生产退役许可:生产里 Python 将用 WU-C 自动 spec 驱动,退役授权要另在下游核对"自动 spec 达金标同等过门率"(auto-vs-golden delta),本计划把这条前置写进对账表、不在本计划做。现有样本若卡 menu(生成侧)按 R3 标"对照不充分"、不算本计划失败。整跑前台同步,禁后台 task / `tail -f` monitor / 自我唤醒重试(便宜档线已栽过后台失控的坑);串行稳妥。 + +**Execution note**:本单元是验收实跑,产证据而非代码。品类不达标按对照报告定位:驱动侧根因(spec 配不动)回 U1 调金标 spec;生成侧根因(prompt 品类鲁棒性 / 生成幻觉)出本计划范围、归他 WU,不在本单元堆改生成。 + +**Test scenarios**:Test expectation: none——本单元是实跑验收,判据由 R3 与 U2 单测覆盖。 + +**Verification**:三品类对照报告落盘、命名标"金标 spec 下";每品类按 R3 两层判据 + 绝对地板得明确结论(坐实等价 / 对照不充分);生产退役授权的 auto-vs-golden 前置在对账表列明、移交下游。 + +--- + +## Scope Boundaries + +### 移交他 Work-Unit(非本计划) + +- key-cycle 品类(2048 合成 / 躲避)对照 → 待输入键契约就位(WU-C / 生成侧)。公平对照需两路绑同一套输入键,而按键绑定是生成侧自由选择、不在 forensics 契约里,金标 spec 做不到游戏无关——立了输入键契约(或驱动器从每路自报输入映射派生键集)再纳入对照。 +- 生成质量 3/5→5/5(便宜档生成幻觉护栏、实例达验收口径)→ WU-B 实例就位 + WU-C 5.4 三层校验与 oracle 护栏 + WU-F ≥80% 达标门。本计划只产对照证据,不改生成质量。 +- 便宜档生产自验 play-spec 的自动生成 + key-cycle 等驱动器加固(含菜单起局)→ WU-C 5.4 验收侧加固(plan① §WU-A 明文归此)。本计划的金标 spec 是对照实验 fixtures,不是这套生产生成器。 +- 灰度切换基础设施(路由 flag / A2A 任务状态 / 幂等 key / D12 扣退 / 在途任务 / 切换门槛 / 回滚)→ WU-F 与后端集成。 + +### Deferred to Follow-Up Work + +- 拖拽合成(merge-2 两同级图标合并)与放置经营(idle / incremental 数值养成):无现成样本、tap-pairs / drag 驱动可测性弱,出代表品类范围。 +- `n≥30` 统计批跑:本计划按 `n>5` 小批,统计达标判定归 WU-F。 + +--- + +## Risks & Dependencies + +- **金标 spec 跨两路适配(已收敛到 tap-targets)**:本计划三品类都是 tap-targets occupied 族,驱动器坐标从 forensics 读、与具体游戏无关,一份金标 spec 公平驱动两路成立。残余风险:某路游戏不按契约暴露 occupied 标记或 `state.score`,金标 spec 驱不动——那是生成缺陷,九门如实 fail、对照公平暴露,不是 spec 的锅。缓解:U1 金标 spec 只依赖契约字段;U3 实跑先核对 spec 能驱动两路。 +- **Node 基线 flaky(五款 3/5)**:仅"不低于 Node"会把两路同卡 / 同低分、或两路都勉强平庸判成等价坐实。缓解 = R3 绝对层判据 + 坐实品类逐品类绝对地板 + 双低标红三道。 +- **证据驱动器 ≠ 生产驱动器**:本计划在金标 spec 下采证,生产里 Python 用 WU-C 自动 spec;面向生产的退役授权显式 gate 在"自动 spec 达金标同等过门率",写进对账表、不在本计划做。U3 产物命名加注"金标 spec 下",防被当成生产退役许可。 +- **小批波动**:n=3–5 是机制验证、非统计达标;判据看相对 + 绝对口径,不看绝对成功率。 +- **对照公平性**:同模型(M3)、同 brief、同 `_template` 源、同金标 spec 四项恒定,否则过门率差不可归因于生成。 +- **零跨档零回归**:全部改动在 `cheap-worker/` 内,不碰 tier2 热路径、`_shared` 驱动器、`amodel-gen`;收口前跑一次 tier2 金标 fixture 冒烟确认 feie-005 仍 ACCEPT(R6)。 +- **依赖**:tier2 `worker` 包的 `config` / `client` / `middleware` 维持现有显式传参接口;spike `compare_node.py` 的纯逻辑层为复用基。 + +--- + +## System-Wide Impact + +- 本计划全部改动在 `cheap-worker/` 内(`compare_node.py` + golden fixtures),**零跨档**:不碰 `_shared/play.cdp.cjs`(驱动器加固、含 key-cycle 起局已归 WU-C 5.4)、不碰 tier2 热路径、不碰 Node `amodel-gen`。 +- 便宜档双轨期:Node `amodel-gen` 旧路与 SAA Java 外层壳保留活跑作生产路由,本计划不动生产路由。 +- 产出是 plan① R1 回滚的对照证据输入;面向生产的 Node 退役授权另在下游(WU-C 自动 spec 达金标同等 + WU-F ≥80% 按品类)核对,本计划只产"金标 spec 下"的框架等价证据,覆盖三个 tap-targets 品类。 + +--- + +## Sources & Research + +- 主计划 plan① `docs/plans/2026-06-25-生成引擎统一执行计划-AgentScope三档-plan.md`:§WU-A(迁移面 / 迁移契约 / R1 头号风险三道闸 / 验收侧加固归 WU-C 5.4)、§WU-B(便宜档实例达验收、达标门交 WU-F)、§WU-C 5.4(三层校验与九门 / oracle 护栏 / 驱动器)、§WU-F(≥80% 达标门 bake-off)。 +- WU-A spike 计划 `docs/plans/2026-06-26-001-feat-cheap-worker-python-spike-plan.md`:`cheap-worker/` 落点、`compare_node.py` 起点。 +- 多品类面摸底(本会话 Explore)与双评审(Codex + Opus,均码级坐实):prompt 单一通用、各品类同一套核心跑出;`base1` / `base2` / `base4` = 三个 tap-targets occupied 反应族(`base1` 点击得分 forensics targets 即 `occupied:true`、现有 spec 为 occupied),`base3` / `base5` 为 key-cycle;tap-targets 驱动器坐标从 forensics 读、key-cycle 按键为生成侧绑定不在契约(决定了对照覆盖面与 key-cycle 延后);`play.cdp.cjs` 从 staged `play-spec.json` 读 spec(决定金标注入点);`compare_node.py` 单品类 n=1、纯逻辑可复用。 +- 便宜档活状态:本周 latch 口径修法、生成幻觉护栏、play-spec 链路三修后,当前 HEAD 干净 re-gen 五款九门 3/5;过不了的品类根因在生成侧,归 WU-B/C/F。