lili
|
d00938ccbd
|
feat(cheap-worker): M3b 本机 U1-U3 — 9d trace parity 救活 D11 + D9 vendored + 跨语言反假绿门(切片一 M3b)
便宜档生成切到 cheap-worker 新路后,result_out 只产 trace.cost、缺 9d trace 七项,致后端 D11 ReadinessScorer 三维恒中性、退化成 45/55 双峰近恒定分,D9 反同质失效。
U1 cheap_studio 富化:build_trace_source + _furthest_stage,additive 捕获 verdictFull/driverType/models/stage。U2 result_out._build_trace:七项(repairs=max(0,attempts-1))+ sevenGateVerdict{pass,guards} + gatespec{driver} + cost + similarity,camelCase 镜像 _extract_trace、None 容错。U3 D9 dedup vendored 进 cheap-worker/dedup.py(registry 指自己 results/)、worker_service 接线非阻断。
Java 跨语言切片测加逐维反假绿门(反射调真 ReadinessScorer:三维脱离中性 + 合成分 100 vs 退化 ≤55 拉开 ≥35)。顺带修预存 M3a 红测:worker 异常兜底 failureReason 改传真枚举 llm_error。
验证:cheap-worker 全 16 测绿 + Java 切片 5/5 绿 BUILD SUCCESS。范围仅 cheap-worker/ + 2 fixture + 1 Java 测 + plan,零 live 触碰。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-28 02:17:41 -07:00 |
|
lili
|
a327c9913e
|
fix(m3a): result-out failureReason 对齐后端 FailureReasonEnum 真七值(catch-all=llm_error)
mini-desktop 真 e2e 部署收口抓到的契约 bug:result_out 七值集用了 content_violation/
budget_exceeded/generation_failed 三个不在 FailureReasonEnum 内的值、catch-all 用无效的
generation_failed → worker 失败回调被后端 DifyCallbackTxService.isValidFailureReason 拒
(「failureReason 不在契约#6 七值枚举内」)、回调事务回滚、任务未转终态。
修:七值集对齐 FailureReasonEnum(unsafe_prompt/intent_unclear/no_template_match/
config_invalid/llm_error/timeout/asset_gen_failed);catch-all=llm_error(SaaGraphDispatcher 同口径)。
Java slice test 原只测成功路 validateSucceededPayload、漏测失败路 failureReason 校验故没抓到 →
改为反射调后端真 isValidFailureReason(就是它拒了 generation_failed),本地即可守此 bug 类。
验证:Python result_out 13/13 + Java slice 4/4 本地绿;待 mini-desktop 重部署真 e2e 复验。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-27 22:06:50 -07:00 |
|
lili
|
847089b541
|
feat(m3a): 便宜档 Node 退役机制 U1-U4 本机交付(Python §6.1 worker + 后端路由契约/A2A/幂等)
M3a 退役机制 plan 经 Codex+Opus 双评审(needs-rework)→ 按创始人 A(全局 dispatcher
flag 整体翻转、不做 per-request 灰度)重写 → Opus 复审 minor-fixes → 发现项全数修复。
U1 Python §6.1 HTTP worker(cheap-worker/worker_service.py + result_out.py):
202 投递握手 + 有界串行队列(治串行 worker 忙 409 误判)+ 三字段 result-out
(gameConfig 占位 / engineBundle 承重含 __GameBundle / sourceProject best-effort 2.0)
+ HMAC 回调。27 单测 + 真生成 e2e 过九门 + 真网络回调。
U2 跨语言契约 slice test(CheapWorkerResultOutContractTest):反射调真
validateSucceededPayload 过薄校验 + 真 CallbackSignatureVerifier HMAC。
U3 A2A 状态(additive):AigcTaskStatusEnum.toA2aStatus + app VO/RPC DTO a2aStatus
字段(保留数字 status 不破坏调用方)+ Convert/ApiImpl backfill + 契约 aigc.yaml。
U4 创作请求级幂等(行业标准 idempotency):DO idempotencyKey + Flyway V26
(列+唯一索引,NULL 多值=不去重)+ Mapper selectByIdempotency + submitGenerate dedup。
真验证抓到并修 2 个真 bug:① worker 回调走系统代理被 fake-ip 拦 502 → 禁代理 opener;
② result-out 顶层 costRmb 不在 DifyCallbackReqVO 字段内、后端严格拒未知 → 落 trace.cost。
验证:Python 27 测 + Java 21 测全绿(mvn BUILD SUCCESS)。
剩余 U2 真派发 / U4 真 DB / U5 待 mini-desktop 真部署。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-27 21:18:28 -07:00 |
|
lili
|
ffe3a5c993
|
fix(WU-C 5.4): tap-targets harness 认单数/可空 target — 解 M2 Node 退役阻塞
M2 auto-vs-golden 门抓到的生成契约漂移修复(Codex 实现 + 主代理诊断/受控验证)。
根因:~20% click-score 款 _forensicsView 暴露单数 target(对象、菜单态为 null)
而非复数 targets(数组),tap-targets harness 只认复数数组:① _build_play_spec
推断漏判→误推 key-cycle;② 驱动器 targetsPath 找不到单数 target。
两处修(认两种合法形态、既有数组行为零变):
- cheap_run.py:_build_play_spec 以【键存在性】判 tap-targets(targets/target 键
在即可,菜单态 null/空数组仍归 tap-targets)——非值类型(空数组过/null 不过的
非对称是漏判根因)。
- play.cdp.cjs:runTapTargets 取值非数组时回退读单数 target、包成 1 元素数组。
验证:退化款 avg-click-score-14 auto 路 E_live/G_input/H_progress 0.667→1.0
(3/3 确定性复现);test_ensure_play_spec 8→13 绿。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-27 10:41:16 -07:00 |
|
lili
|
8038109ce8
|
feat(cheap-worker): 同游戏双驱动 play 编排 + auto-vs-golden 批跑(M2 U2)
run_pair_dual_sync:同一份 staged src/ 上先自动 spec(ensure_play_spec)、后金标
(inject_golden)各 play 一次,取两组逐门 verdict——隔离生成方差、只暴露驱动器差。
编排序 gen-only→smoke→断言 staged 无残留 spec→ensure→play(auto)→inject→play
(golden);auto_gates 在金标注入前捕获。run_batch 端口池+线程前台有界并发(≤15
夹取、复用 bake_off._clamp_conc)、报告 auto-vs-golden-<idx>.json 不覆盖。
mock 编排单测(调用序 + auto 先于 golden + no-spec 守卫)20/20 全绿。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-27 08:47:13 -07:00 |
|
lili
|
dd0d1cc224
|
feat(cheap-worker): Node 退役授权三条齐判定 retire_authorization(M2 U3)
读三份既有落盘报告聚合:① M1 达标(bake-off-M1-final.json overallMeets)
② 002 对照等价(compare-multi-002-final.json summary.equivalentGenres ⊇ 三品类)
③ M2 auto-vs-golden(meets)。三条全绿→authorized;任一 False/报告缺失/字段类型
不符→未授权并列明欠项(不静默当通过)。纯函数零 LLM 零真跑。单测 17/17。
真切路由/D12 扣退在 M3。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-27 08:43:58 -07:00 |
|
lili
|
423b0b6df3
|
feat(cheap-worker): auto-vs-golden 逐门 delta 判据 + double-low 守卫(M2 U1)
按品类逐门比 auto 过门率 vs golden 过门率,关键门 {E_live,H_progress,G_input}
容差 0(delta≥0)、其余门容差 -1/N。方向单边查「自动不比金标驱得差」(delta<0
退化),非查更松。double-low 守卫:关键门两路都 <0.5 → inconclusive(红),防
delta=0 假象(承 compare_node.doubleLowRed 同源风险)。aggregate_delta 三品类
全 aligned 才整体 meets、卡死品类不被平均掩盖。纯逻辑零 LLM。单测 11/11。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-27 08:41:46 -07:00 |
|
lili
|
aaa9461bd9
|
feat(cheap-worker): bake-off 达标门改质量口径 + 编排未收敛单列(M1 U3 收口)
创始人 2026-06-27 定:达标门只衡量九门质量地板,编排未收敛(M3 撞
timeout/step_cap、无 verdict)剔出达标率分母、单列 unconvergedTotal 归 M2
编排硬化。judge_genre 分母改 converged 款,rawPassRate 并报(贴近生产真实
交付率、不作判据);converged==0 → insufficient。
实测合并 14 款 click-score(batch2 满21 + batch3 补7 offset7):质量
11/12=0.917 达标(原始 0.786,2 款未收敛=timeout+step_cap),whack-mole
7/7=1.0、shop-serve 6/7=0.857 → M1 三品类全过 ≥0.8、达标门绿。
bake_off 单测 12→14(加未收敛剔除 + unconvergedTotal 汇总);全套件 86 绿。
M1 合并收口报告 → cheap-worker/results/bake-off-M1-final.json(results gitignored)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-27 07:30:53 -07:00 |
|
lili
|
452d2f2642
|
feat(cheap-worker): bake-off 加 --offset 支持补跑不覆盖既有批(M1 U3)
补跑 click-score(确认满批 5/7 是否抖动)需 gid 从 offset 起、不覆盖 bake-<key>-0..6;
run_bakeoff 加 offset 参数,gid=bake-<key>-<offset+k>。单测 11/11 仍绿。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-27 07:00:01 -07:00 |
|
lili
|
0d582b2956
|
feat(cheap-worker): ≥80% 达标门 bake-off 骨架 + 聚合判定单测(M1 U3)
新建 bake_off.py:tap-targets 三品类各 n 款 run_studio(run_gates=True)生成→自动 spec
驱动九门→取 verdict.pass,按品类聚合 pass_count/total、逐品类 ≥0.8 判达标;任一品类缺样本
报覆盖不足、任一 <0.8 整体未达标(绝不总体平均掩盖卡死品类)。判定纯走确定性九门 verdict.pass、
零 LLM。真跑复用 compare_node 端口池+线程前台有界并发(conc≤15)、gameId 品类前缀隔离、报告不覆盖。
验证:test_bake_off.py 11/11(判定 meets/below/insufficient/边界0.8 + 假绿防护不被平均 +
覆盖不足 + 上限夹取 + 零LLM确定性)。20 款 M3 达标门真跑(收口硬判据)待执行。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-27 04:47:14 -07:00 |
|
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 |
|