106 Commits

Author SHA1 Message Date
lili
6f69167d97 feat(cheap-worker): 自动 play-spec 加厚到金标同质 + 防自证(M1 U2)
ensure_play_spec 的 tap-targets occupied 族补 expectedEngineCallPrefixes,让生产自动
spec 的 F_wiring 从「宽松过(只验有调用)」升到「验调了正确 L2 插件」、达金标同质。期望取
自预置常量 _TAP_TARGETS_CALL_PREFIXES(外生 held 期望,对齐三份金标 fixtures),绝不从
该局实际 __engineCalls 反推——否则 F_wiring 退化自证、必过、假绿。key-cycle 族保持薄版
(待输入键契约 WU-C 5.4)。spec 构造抽 _build_play_spec 纯函数便于单测。

验证:test_ensure_play_spec.py 8/8(与三份金标逐字段一致 + 防自证外生恒定 + key-cycle
薄版 + 已存在不覆盖);auto-vs-golden 真跑 delta=0(打地鼠自动 spec 驱动 vs 金标 9 门全
一致,F_wiring 在自动 spec 下真验语义期望仍过)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-27 04:40:04 -07:00
lili
7dffe6b2c1 feat(cheap-worker): 便宜档预算闸 <¥10 fail-closed 接线 + 成本落盘(M1 U4)
开 CircuitBreakerMiddleware 的 ¥ 累进硬闸(enable_rmb_gate=True)+ 设便宜档专属 ¥10 硬
上限(区别 tier2 ¥3);on_model_call 发起前预估、越线 fail-closed 抛 Tier2CircuitBreak
(budget);取价不可达由 _ensure_pricing 降级次数闸(既有行为,不静默超支/阻断)。run-summary
补 costRmb(breaker.spent_rmb 同 new-api quota 折价口径)/ rmbGate(active|degraded)/
tokens(usage_sum)。

验证:test_budget_gate.py 6/6(¥10 fail-closed / 正常不拦 / 边界 / 降级放行 / 开关旁路 /
¥10 与 tier2 隔离);真跑一款打地鼠成本落盘 costRmb=1.1373<¥10、rmbGate=active、tokens 462642。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-27 02:01:20 -07:00
lili
04dbd0608b feat(cheap-worker): compare_node 加有界并发(端口池+线程,可选)
并发的真正约束=九门 play/smoke 固定端口+Chrome 实例(gameId 前缀已隔离产物)。
查清整条链端口可参数化:gen.mjs --port/--cdp(done 门 smoke 用)、play.mjs
每次独立 spawn server+Chrome+userDataDir。据此:
- _port_pool:每并发槽一对独立 (server_port,cdp_port),段不重叠。
- run_pair_sync:同步整对跑(线程内 run_studio 自带 loop)。
- run_multi 加 conc:端口池(size=conc 天然限并发)+ asyncio.to_thread 每对一线程
  + gather。conc=1 串行;conc>1 有界并发。前台进程内有界并发,非后台子代理 task。
- _gen_node 传 --port/--cdp 给 gen.mjs(并发防 smoke 撞端口)。
CLI 加 --conc。test_compare_multi 14/14(+端口池不撞)。
2026-06-26 11:00:00 -07:00
lili
3a117c1ac4 feat(cheap-worker): U2 compare_node 三品类对照 + 金标 spec 注入(生成/play 拆步)
cheap_studio.run_studio 加 run_gates 开关:gen-only(=False)跳过内部
ensure_play_spec+九门 play,让对照方在生成与 play 之间注入金标 spec。

compare_node 扩三品类×n:两路各 generation-only → 强制覆写金标 spec 到
staged _wg1-gen/<id>/play-spec.json(play.cdp.cjs 真实读取处,非 evidence)
→ 各自单独 play,把驱动器从对照变量摘掉(对照公平)。judge_genre 两层判据
+ 逐品类绝对地板 + 双低标红;按品类聚合产框架等价证据(金标 spec 下);
前缀隔离串行;报告分批次不覆盖。

修双评审:金标注入 staged 真路径(Codex C1/C4)、判据绝对地板防双低假等价
(Opus O4/F2)。test_compare_multi 13/13;回归 test_compare 8/8 零破。
2026-06-26 10:49:47 -07:00
lili
369d5bad9b feat(cheap-worker): U1 三品类金标 play-spec fixtures
点击得分/打地鼠/经营点客三份金标 play-spec(均 tap-targets occupied +
score 递增门 + expectLatch),formalize base1/base2/base4 验证过的 occupied
spec,作对照实验的恒定驱动器。只依赖 forensics 契约、不绑定具体游戏坐标。
test_golden_specs 6/6:schema/品类对位/契约依赖/无放置族-keycycle-safeOnly。
2026-06-26 10:43:39 -07:00
lili
675a8e688b feat(cheap-worker): 便宜档 Node→Python 重写进 AgentScope spike — 范式可移植坐实
WU-A 迁移面 spike:便宜档生成核心(多轮 ReAct + 五工具沙箱 + done 门)用 Python 在新建 cheap-worker/
重写成 AgentScope agent,import 复用 tier2 框架层(model client/四道熔断/历史压缩/observability),
check/build/九门 shell-out 现有 node/cjs(不重写 esbuild/CDP/形状门)。

- U1 地基:跨包 sys.path import tier2 worker + 代理旁路 + key 从内网文档注入 env + M3 装配
- U2 五工具:read/list/write Python 实现 + check/build shell-out(形状门三态与 Node 一致)
- U3 LittleJS system prompt:prompt.mjs Python 化(两条 footgun 正反例 + 输入契约)
- U4 scaffold/stage/play 薄壳 + ensure_play_spec(据 state 形态产 play-spec 治链路假绿)
- U5 ReAct 主编排:内置 Agent+ReActConfig+外层有界 resume + done 门 + 收口 stage/smoke/九门
- U6 对照 Node:产物形态 + 九门逐门 + 过门率对比

验收:同 brief Python 新路 vs Node 旧路,产物都真 src/ 6 文件、九门都 9/9 全 PASS、过门率 1.0=1.0
→ spikePass=True。端到端单局 attempt 1 一次收敛、148s。落点 cheap-worker/ 对 tier2/amodel-gen
零改动(结构性零回归)。测试 38/38 全绿。

origin: docs/plans/2026-06-26-001-feat-cheap-worker-python-spike-plan.md

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 02:42:14 -07:00