2026-07-09 创始人方向性质疑经五路审计坐实,正式推翻两个历史结论(80% 天花板=口径混淆 +stripCode 污染;玩法坏死主因=判卷合约缺口误标),病根三条=判定语义膨胀/判卷合约反噬/ 真相层缺失。本批为纯文档批: - 诊断档 docs/brainstorms/2026-07-09-生成线harness方向性诊断与换轴方向.md(人审版) - SoT 修订×4(双评审修入、docs-gate 绿):质量模型裁定三(L1 双证据=机械预筛∧独立模型 玩法判定,fail-closed+金标校准)/图说护城河改「分层验收」/验收门 §2.4/AGENTS.md §3.1 - 执行版 plan×2:07-09 三波换轴 + 07-10 验收v2(测试agent替E/G/H,创始人已批, 含附录A SoT 修订逐字终文与波0-3 工单拆分) - 策展层定点勘误:tech-decisions/三份生成线 skill 追加 2026-07-09 勘误注记(过九门 自此只算机械预筛),feature-design-doc 固化「人审版=brainstorm/SoT、执行版=plan」定位 - 在飞板登记 W-AXIS Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
13 KiB
topic, status, sot-impact, 上级
| topic | status | sot-impact | 上级 |
|---|---|---|---|
| cheap-gen-harness-direction-diagnosis | draft(待创始人拍方向) | 本档不改 SoT;若换轴获批,判定语义与判卷合约的变更须另立设计档申报 agentic运行时架构图说 的 sot-impact | docs/architecture/架构/生成引擎/agentic运行时架构图说.md |
生成线 harness 方向性诊断与换轴方向(2026-07-09)
2026-07-09 凌晨创始人提出方向性质疑:harness 与 agent 设计有方向性错误,各种伪装成功伪装失败,模型能力被限制被误导,过去的结论建立在错误结果上,且从未有人做过真实链路的端到端验证。本档是对这一质疑的取证与裁定:五路独立审计(harness 约束机制清单、真实链路端到端还原、验证信号真伪、知识层对标 TapTap、微信/抖音/QQ 行业方案调研)+ 主会话亲手复核四项要害证据。
一、结论
质疑主体成立,但病根与直觉不同。不在「知识层薄」——知识层其实厚且路子对(薄提示+模型自读知识库,与 TapTap 同构);真正的方向性错误有三处,互相咬合成一个自我蒙蔽的循环:
- 判定语义膨胀:机械信号被系统当成「可玩」事实。九门唯一的玩法语义门 H_progress 实测退化为「score 涨了就行」;终态闭环(latch)在「有进展」时一律降级 advisory。结果是「点哪都加分、永不结束」的游戏能过全部九门。与此同时真正懂玩法的 LLM 丰富度评审被设计成非阻塞旁路,richness=0 或 null 照样 pass——判定权威给了不懂玩法的机械门,懂玩法的模型判断靠边站。
- 判卷合约反噬生成:盲驱动器判卷要求游戏暴露私有内省合约(
state().targets键名锁死、phase 命名、score 键)。合约没对上,失败反馈却措辞成「玩法坏死/终态不可达/空壳」,既误导了模型的续修方向,也误导了我们的根因结论;系统提示甚至教模型用「两层奖励」围着盲驱动器的盲区设计计分——验证器的局限反向塑造了游戏设计与失败归因。 - 真相层缺失:trace.jsonl 只落事件骨架(工具名/参数增量/成败/token 数),模型文本、工具返回、门反馈一个字都不落盘;失败 run 的产物被同 gameId 重跑直接覆盖;同一 evidence 目录混着不同 run 的 verdict 与 verdict-feedback。「没人端到端读过链路」不是偶然失职——磁盘上物理没有这份数据。所有历史结论都建立在聚合数字上,于是每次事故只能催生又一层兜底补丁(现存 14+ 层事故驱动补丁、约 36 个约束机制),层层叠成创始人说的「不成体系」。
二、证据(全部可复核,标注来源)
2.1 判定语义膨胀(审计三 + 主会话亲验)
- 九门 A/B/C/D/F(装载/无异常/掌帧/真像素渲染/真接线)是真实机械信号,E/G/H/I 是半启发式。放行判据
gate_judge.py:382=pass && guards 非空。 - 亲验实锤:
_wg1-gen/hard-trpg/evidence/verdict.json顶层pass=true,guards.H_progress仅凭{"path":"score","op":"increased","before":0,"after":216}通过,latch:{pass:false, advisory:true, reason:"未驱动到终态但有真进展(限时/无快速失败态类→advisory)"}。同构的 score-only pass 现存至少五份:hard-heritage / hard-trpg / hard-idle-sim / c2v-1 / c2v-3,其中 hard-heritage 与 c2v-3 连 firstPlay 的 firstFeedback=False 都照样 pass(首局门非阻塞)。降级机制在play.cdp.cjs:1150-1161。 - 创始人点名的三类假阳(秒死/存档刷分/死锁,AGENTS.md §6.13、commit ec276b1b)与该机制严丝合缝:score 单调上升即可过,不问是否靠刷、不问能否结束。
- 唯一质量判断
cheap_verify.py是纯 LLM judge,合规(不违「模型能力不写代码校验」红线),但被三重声明钉成「不进 verdict、不改 ok、不动达标」——xtheme-v1-prefix 批里 rich=0 与 rich=null 的游戏全部 verdictPass=true。 - 静态 check 六类里语法(node --check)与未定义标识符(esbuild 作用域分析)是真实信号;红线八条(禁裸 Math.random/Date.now 等)靠自制 stripCode 正则,已坐实假阴事故:字符串内
//(如赛博文案 'JACK IN // FLOOR')被当注释误抹真代码 → 误报红线缺失 → 模型明明写对却被反复拒到熔断烧钱(commit 0be0f61c,2026-07-08 23:27 才修)。系统提示为此教模型「check 按去注释后的纯文本正则命中,把裸调封装进函数内部照样被拦」——教模型绕正则,而不是写对代码。
2.2 判卷合约反噬(审计二)
- 8 份留存失败反馈(verdict-feedback.json)里 H_progress 8/8 挂:4 例 phaseNow=menu(驱动器进不去菜单),3 例进了 play 但 score 键没接上。反馈文本却统一措辞「无真实进展/终态不可达/空壳」。
- 干净的证伪案:xt-puzzle-huarong turn1 被拒(「终态不可达/空壳」),turn2 模型的 finish summary 原文是「menu/over 按钮加入 targets(occupied:true)让 tap-targets 驱动可导航;phase 名改 'game...'」——只是把按钮暴露进 targets、改了 phase 名就过,游戏本体(804 行真 15-puzzle,行优先归位判定、3×3→5×5 关卡递进)一直是好的。
- 系统提示(contracts/prompts/04-config/cheap-system.md:30)明文:「九门自动验收会盲点 occupied:true 目标、判 score 涨,所以做成两层奖励——基础分(保盲驱动器能跑通过门)+技巧分」。游戏计分结构为判卷器而设计。
- resume 后模型为了自证,去读判卷器源码 play.cdp.cjs、读自己的 trace.jsonl、自写 smoke 测试:xt-puzzle-huarong 一局烧到 ¥11.48 / input 180,292 tokens / 19 分钟;同品类干净一次过(xt-trpg-cyber)只要 ¥0.79——14 倍成本方差全是 harness 摩擦,与品类难度无关。
2.3 真相层缺失(审计二 + 主会话亲验)
- 亲验实锤:amgen-xt-puzzle-huarong/trace.jsonl 每行只有
{"ext":{"raw":{"event":"ToolResultTextDeltaEvent"},...}}类事件骨架,全文件 grep ERROR/PASS/FAIL 仅 5 处(argsDelta 碎片),模型推理文本与门反馈文本零落盘。 - 失败 run 无归档:重跑同 gid 直接覆盖 amgen-/ 与 _wg1-gen//;现存 10 条 trace 全是通过 run,it4-baseline 的失败链路、xtheme-v1-prefix 的熔断链路(trpg-cyber ¥13.84 / puzzle 7 次 ¥10.09)已被抹掉。
- evidence 目录卫生:hard-heritage 目录里 verdict.json(07-09 00:20,pass=True)与 verdict-feedback.json(07-08 17:06,passed=False,init 字符串不同=不同代码)并存——红线③只清 verdict.json 与 service-run-summary.json,不清反馈残留。
- OTLP sink 默认 no-op(CHEAP_OTLP_ENDPOINT 缺省即不发),观测线没有第二处留存。
2.4 约束面全景(审计一)
系统提示 10,814 字符 / 92 句,强制与禁止词密度约每句一个(必须×12、绝不×11、别×30、钉死×6、红线×9);7 个工具、框架原生 Planning/Team/Bash/Edit/Glob/Grep/Read/Write 全被 monkeypatch 关闭;熔断经济学 = ¥10 软停 + ¥15 硬地板 + 6 次续修 + 150 步 + stuck 4 连同签名。约 36 个约束机制、14+ 层事故补丁,每层注释都自认「兜底/纵深/fail-open」——层数本身就是「主判定不可信」的证据。写锁(20fb8754「换皮写锁」)已被创始人当夜纠偏全撤(22da3464,同时 max_tokens 16K→512K),但 reskin 机器(build_reskin_system_prompt、白名单管路)休眠在代码里待清理;唯一正当的白名单残存 = modify 路「只改玩法」的语义收窄。
2.5 被推翻的两个历史结论(审计二)
- 「真实率 ~80% 是 MiniMax-M3 天花板」不成立。它是三个口径的混淆(死圈修复 plan 实测真过门率 39%、跑到门率 83%;bake-off-7 是 3 个简单街机品类 n=2 的 100%;AGENTS.md 的 80% 是 MVP 目标值),且在 stripCode 假阴修复前测得(污染)。修复+per-genre 起点后 xtheme / it5-lockcore / r1 三批各 5/5 全过,模型没变——过门率随工具移动,不随模型。(诚实边界:近批 n=1/品类,不能反推「已稳定 95%+」,只能判「80% 不是模型天花板」。)
- 「主导根因=玩法坏死」大半是误标。多数失败真因是判卷驱动器合约缺口(进不去菜单/认不出终局/score 键没对上),小补丁即过;真坏死(heritage 黑屏渲染没接线)是少数,且已被 per-genre scaffold 修掉。
2.6 模型真实能力重估(审计二)
五套通过产物亲读:L1 五文件字节全同(固定 plumbing),game-logic/core/render 五款 md5 各异——是「模板骨架+模型自著内容」,不是字节换皮。story-campus 377 行真分支叙事(8 节点/4 结局/双属性轴/结局图鉴)、heritage 310 行节拍火候玩法、puzzle 804 行真解谜。工程质量整体良好,几乎无死代码。M3 在被解开限制后的表现,支持创始人「llm 能力很强,一直被限制被误导」的判断。
三、哪些资产是对的(不推倒)
知识层:薄入口+read_file 自取知识库的架构(cheap_roles.py:4 铁律)、6 份品类设计 skill(~933 行)、11 份插件 api.d.ts、❌→✅ 幻觉速查表、6 套黄金脚手架、「先设计后写码+⑨否决项」的设计纪律——这些与 TapTap/行业同构,是对的地基。真浏览器 CDP 九门里 A/B/C/D/F 五门是真实机械信号,该留作地板。tier2 的双路经济门(赢得了且输得了且都到终态)是结构性可玩地板的正确样板。LLM 丰富度评审本身合规且已接线,只是权威位置放错。¥ 硬地板 fail-closed 的成本封顶正确。撤写锁+放开 max_tokens 的纠偏方向正确。
行业对照(审计五):TapTap/微信 CodeBuddy/抖音/QQ 四家收敛的最小结构 = (半)通用 coding agent + 规则/知识文件 + 真实编译/预览/真机验证 + 人在环。没有一家用代码启发式判玩法;没有一家用正则拒改 agent 输出;约束要么进知识库(软),要么进工具权限层 Deny/Ask/Allow(CodeBuddy),不进语义层。我们知识层已同构,自造的私有物恰好是出问题的两处:判定语义与判卷合约。
四、换轴方向(三波七件,待拍)
波 1 · 真相层(先行,其余一切验证的前提) ① 链路全文落盘:模型文本、工具返回、门反馈逐 turn 留存;per-run 归档(带 attempt 序号),永不同 gid 覆盖;evidence 目录卫生(残留反馈/快照全清)。 ② 判卷驱动器合约失败与游戏失败分开归因:反馈文本按真实层次措辞(「驱动器无法导航:菜单按钮未暴露进 targets」≠「玩法空壳」),失败分类进批次账。
波 2 · 判定语义重置(§6.13 的产品化) ③ 九门 pass 语义降级为「未见明显死」的机械预筛;验收 = 机械门绿 且 模型判定过——把 LLM judge 从非阻塞旁路升为阻断权威,并从「读源码」扩到「看运行」(录屏/连拍截图喂视觉模型 + agent 按 brief 试玩判定:能玩到终局吗、决策有代价吗、像不像 brief 要的游戏)。终态可达按品类做成 tier2 式双路门。 ④ 拆真正误导模型的残笼:清理休眠 reskin 机器;stripCode 类正则红线换 esbuild/AST 词法层判定;删「两层奖励围着盲驱动器设计」的提示文案(判卷改为 agent 试玩后此合约整体可退役);edit_file 锚点容错(行号/模糊匹配),消 5 连拒螺旋。
波 3 · 知识层补强(对标清单的三个真缺口) ⑤ 类型硬门:tsc 对 api.d.ts 做真类型检查(TapTap 的 LSP 门对等物)。 ⑥ examples 索引 + recipes 场景库(现有 5 份设计范式是「什么好玩」,补「场景怎么实现」)。 ⑦ 暗资产接线:6 个模型不可见插件、11 份 PLUGIN.md、引擎能力摘要,接进模型面并建防漂移对账。
收尾:n=5 重测基线——波 1/2 落地后按品类重跑,作废全部污染数字,重锚真实率与单局成本;所有下过的相关结论(容量、成本、品类难度)以新基线为准。
五、风险与验证
- 视觉模型+agent 试玩升为阻断权威后,单局验收成本上升(多一次模型判定)。对冲:机械预筛先挡明显死,判定只对过筛者跑;且当前 14 倍成本方差主要来自 harness 摩擦,拆笼后净成本预期下降而非上升。判定模型的假阳假阴同样存在——用 n=5 收敛环+创始人抽玩校准它,而不是回退到机械门。
- 判卷合约(targets)退役是行为面变更:现存过门游戏依赖它,需保留读取兼容或一次性重判。
- 换轴范围只及便宜档与共享 verdict 语义;tier2 自治环与双路门不动(它是样板)。
- 验证方式:每项落地都以「同一失败案例在新链路下能否一眼下钻到真根因」为验收(拿 xt-puzzle-huarong turn1 与 heritage 黑屏两案回放);重测基线用真浏览器亲玩+截图为硬证,遵 §6.13。
六、证据索引
commit:0be0f61c(stripCode 假阴)/ 22da3464(撤写锁+512K)/ 20fb8754(写锁引入,已撤)/ 88d3a237(死菜单假阳→加 played)/ 9d463f08(whack-mole E_live 假阴)/ 8b491d13(latch 词表)/ ec276b1b(§6.13 立规)。 文件:play.cdp.cjs:1150-1191(latch 降级与判定主体)/ gate_judge.py:365,382 / tools.mjs:130-134,275,302-427(静态门)/ cheap_verify.py + cheap_studio.py:424-441(LLM judge 非阻塞)/ cheap-system.md:30(两层奖励)、:65(正则语义)/ cheap_roles.py:4(知识自取铁律)/ cheap_run.py:113-134(read_file 沙箱)/ _wg1-gen/{hard-trpg,hard-heritage,hard-idle-sim,c2v-1,c2v-3}/evidence/verdict.json(score-only pass)/ amgen-/trace.jsonl(骨架化)/ results/hard-genre-.json(批次账)。 审计执行:2026-07-09 五路只读审计代理(opus)+ 主会话四项亲验;审计报告要点已并入本档,原始报告在会话内。