docs(架构): gamedef reframe pass-2 — broader/沙箱档 + 残留 mentions

续上轮(banner+README),把 broader/沙箱档里 gamedef-当现行/迁移中清成「已废错误路线、
A-model 现行」(opus 代理 + 我补漏):
- 00-系统总览:左轨现行 gameDefinition→A-model 写真 src/,无迁移/cutover
- 03/架构产物沙箱:scanLogic(behavior.code/rule.condition 扫描)、new Function/unsafe-eval
  标为已废 gamedef 路 build 段机制,A-model 真 src/ 经 esbuild 无 new Function;
  **沙箱层(iframe/CSP/桥/九门)对两路通用、保留**;装载路 L146 改 A-model 现行
- OpenGame对照:L325「当前实现 gamedef」→已废、L318 smart_edit 注 A-model 文本补丁回归
- 验收门:九门收窄 91.7% 标为 gamedef 路历史实测 + 该验收策略引擎无关对 A-model 适用
- 数据飞轮:去「待 gamedef→src 迁移协调」(无迁移,gamedef 已废)
门:全仓死链 0。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
lili 2026-06-25 01:16:26 -07:00
parent 95d34c03f5
commit a0a46ae32d
6 changed files with 10 additions and 10 deletions

View File

@ -93,7 +93,7 @@ status: 现行为主(系统级 9 图)· 架构图集入口 · 通用图例与按
这张图是看清「生成引擎现行 vs 远期」的**总闸**,也是本主档最该守状态纪律的一张。绘境AI 有两条生成轨:**左轨是现行的 SAA 廉价线**——已实测合入主干,承载超休闲档(打砖块 / 合成 / 挂机 / 答题 / 网格点选),一条流水线从「创作者一句话」经 SAA 裸图编排(Java·16 节点)、new-api 网关、便宜 LLM、harness 九门兜底,到 emit 出包,用 LittleJS 当引擎、产物是一份可维护的 `src/` 源项目;**右轨是 tier2 富游戏自治轨**——核心已落、0 号 spike 已过 accept(n=1 机制验证,n≥30 统计待跑),承载 premium 富游戏(经营 / 合成 / 多系统富交互),走的是与左轨正交的另一套范式:AgentScope(Python)的自治 ReAct agent、作为一个独立 service 跑、用 Phaser / Pixi 全无头引擎、靠三层校验当确定性地板加人工终审兜底,产物是 Phaser 的 `src/` 源工程。两轨**只经公共件交汇**:计费平面、送审 + feed、验收基线 + 执行沙箱、控制 / 管理面治理层。两轨**远期有可能收敛为一条**——把左轨的 SAA + LittleJS 也并入 AgentScope 自治范式(登记为未来方向,当前不做)。
读这张图,**最要紧的是把左轨的实心和右轨的紫色虚线分清**:左轨是「现行已建」;右轨那道紫色虚线是 spike 前视角的画法,而 tier2 的现状是核心已落、0 号 spike 已过 accept(n=1 机制验证,n≥30 统计待跑),状态以 SoT① [`生成引擎/agentic运行时架构图说.md`](架构/生成引擎/agentic运行时架构图说.md) 为准。还有三层意思必须读到。其一,**左轨的现行真实状态要诚实说清**:骨架立住、控制流确定、九门很硬已合入主干,但生成质量尚未稳定到 80% 门(便宜模型天花板,实测约 60%)、一部分策略被焊进机制代码;范式侧的终态产物定为可维护的 `src/` 源项目(改源不改包),现行 generate 产出的 gameDefinition JSON 只是通往它的中间脚手架、产线正把它迁成直接生成 `src/`(仍在落地,以生成引擎子树最新裁定为准);默认产线切换交 W-G1 把质量做到 80%(dispatcher flag 已存在,一行 flip)。其二,**为什么两轨不合并**:左轨声明式有向图与右轨命令式循环是两种正交范式,硬塞就成项目明令反对的「缝合设计」,而且对卡 80% 门,图的确定性本就比口头督促更稳。其三,**它们的唯一交汇面是公共件**——tier2 换的是「游戏内容怎么造出来」,换不掉「造出来之后怎么被关进笼子跑、怎么计费、怎么送审发行」。生成引擎的深度(SAA 16 节点拓扑、加节点法、救场阶梯、引擎运行时、tier2 详设)在生成引擎子树,本图只画两轨硬边界。
读这张图,**最要紧的是把左轨的实心和右轨的紫色虚线分清**:左轨是「现行已建」;右轨那道紫色虚线是 spike 前视角的画法,而 tier2 的现状是核心已落、0 号 spike 已过 accept(n=1 机制验证,n≥30 统计待跑),状态以 SoT① [`生成引擎/agentic运行时架构图说.md`](架构/生成引擎/agentic运行时架构图说.md) 为准。还有三层意思必须读到。其一,**左轨的现行真实状态要诚实说清**:骨架立住、控制流确定、九门很硬已合入主干,但生成质量尚未稳定到 80% 门(便宜模型天花板,实测约 60%)、一部分策略被焊进机制代码;范式侧的终态产物定为可维护的 `src/` 源项目(改源不改包),这一点由廉价线现行路径直接兑现:**gameDefinition 已废(判错误路线),廉价线现行 = A-model 写真 `src/`(LittleJS,经 esbuild 构建成 engineBundle)**;默认产线已是 A-model 单线,既无「迁移中」也无「cutover 切换」,质量做到 80% 仍交 W-G1。其二,**为什么两轨不合并**:左轨声明式有向图与右轨命令式循环是两种正交范式,硬塞就成项目明令反对的「缝合设计」,而且对卡 80% 门,图的确定性本就比口头督促更稳。其三,**它们的唯一交汇面是公共件**——tier2 换的是「游戏内容怎么造出来」,换不掉「造出来之后怎么被关进笼子跑、怎么计费、怎么送审发行」。生成引擎的深度(SAA 16 节点拓扑、加节点法、救场阶梯、引擎运行时、tier2 详设)在生成引擎子树,本图只画两轨硬边界。
### 图 4 · 跨域数据流(越用越聪明)SVG·流·现
@ -194,7 +194,7 @@ flowchart TB
生成引擎是绘境AI 护城河的关键路径,内容最厚、单独成一棵子树。它回答「一句话怎么变成一款可上线的游戏」这条技术主线:现行那台被刻意设计成可靠的、固定相位的生成机器(便宜模型驱动 + 确定性图编排约束控制流 + 九门 harness 兜底),以及它要往哪走的演进路线、贯穿全程的范式原则(游戏是长生命周期源项目、LLM 是它的工作室)。本主档的第一篇图 3 已给出「两条生成轨现行 vs 远期」的总闸轮廓,这棵子树是它的深度展开。
读这棵子树最该带着一条**范式定性**:这套「便宜模型 + 受限 schema + 九门验收」是一条**为超休闲轻游戏(Tier0)量身打造的可靠产线,而不是一个通用生成范式**;它最大的风险不在工程层,而在被当成通用范式去对标 demo 里那一档富交互游戏(那一档结构性地够不着,必须显式分层、复杂品类另开一轨)。子树内现行结论可能随产线化 plan(把现行的 gameDefinition JSON 中间脚手架迁成直接生成 `src/` 源项目)的推进变化,以最新裁定为准。
读这棵子树最该带着一条**范式定性**:这套「便宜模型 + 受限 schema + 九门验收」是一条**为超休闲轻游戏(Tier0)量身打造的可靠产线,而不是一个通用生成范式**;它最大的风险不在工程层,而在被当成通用范式去对标 demo 里那一档富交互游戏(那一档结构性地够不着,必须显式分层、复杂品类另开一轨)。廉价线现行已是 A-model 写真 `src/` 源项目(gameDefinition 已废、判错误路线),子树内细节以最新裁定为准。
> **跨 session 协调红线 + 链接(只链不并)**:生成引擎子树正被**另一条 session 在飞建设**,本主档对它**只链接、不并入其内部图与散文**——它的两簇(现行 SAA 廉价线 / 远期 tier2 自治轨)的逐张图、SAA 16 节点拓扑、九门逐门、tier2 详设都在子树内,本文不重复承载。
>

View File

@ -25,7 +25,7 @@ status: 现行为主 · 每图具体映射源档见该图脚注 / 内联小注
这张全景图回答整份文档的总问题:**一段模型现写的不可信 JavaScript,凭什么敢放进玩家的浏览器里跑**。答案是三层封堵,它们在不同时机、不同位置生效,合起来才是完整的封锁,单看任何一层都不够。图从左到右按「出厂前 → iframe 这层壳 → iframe 外的宿主平台」铺开,用绿色标出唯一被放行的通道、用红色虚线标出每一个被封死的逃逸面。
最左边一层最容易被忽略,因为它**不在 runtime、而在 build 段**。`build-from-source.mjs``scanLogic` 在把 gameDefinition 装配成可玩工厂、交给 esbuild 打包**之前**,对模型产出的 `behavior.code``rule.condition` 做静态扫描,命中危险模式就转成 `validationError` 回灌给 repair,而不是指望 prompt 自觉。为什么这一层必须放在 build 边界做?因为同步 JS 在进程内没法被硬中断——一个 `while(true)` 死循环或一次沙箱逃逸只要执行了就晚了,所以唯一的机会是在执行前的校验边界把危险模式拦掉。图上把 `LOGIC_BANS`(逃逸 / DOM 网络 / 死循环 / 确定性四类)和 `CONDITION_BANS`(条件必须是无副作用的纯布尔表达式)的实际拦截清单都列了出来,让人看清这层拦的不是抽象的「危险代码」,而是一份具体的黑名单。
最左边一层最容易被忽略,因为它**不在 runtime、而在 build 段**;同时要点明它属于**已废 gamedef 路的 build 段机制**`build-from-source.mjs``scanLogic` 在把 gameDefinition 装配成可玩工厂、交给 esbuild 打包**之前**,对模型产出的 `behavior.code``rule.condition` 做静态扫描,命中危险模式就转成 `validationError` 回灌给 repair,而不是指望 prompt 自觉。这套静态扫描是 gamedef 专属的——它扫的 `behavior.code` / `rule.condition` 串字段只存在于 gameDefinition;A-model 写真 src/ 多文件、没有这类逻辑串字段,这一层随 gamedef 废弃而不再是现行路径。为什么这一层必须放在 build 边界做?因为同步 JS 在进程内没法被硬中断——一个 `while(true)` 死循环或一次沙箱逃逸只要执行了就晚了,所以唯一的机会是在执行前的校验边界把危险模式拦掉。图上把 `LOGIC_BANS`(逃逸 / DOM 网络 / 死循环 / 确定性四类)和 `CONDITION_BANS`(条件必须是无副作用的纯布尔表达式)的实际拦截清单都列了出来,让人看清这层拦的不是抽象的「危险代码」,而是一份具体的黑名单。
中间是 iframe 这层壳,它叠了两道:**CSP** 硬编码进 srcdoc 的 `<meta>`,其中 `connect-src 'none'` 是最关键的一条——它禁掉一切网络出站,所以即便游戏代码想把玩家数据 `fetch` 出去也发不出去;引擎 bundle 不在 iframe 内 fetch,而是由宿主层 fetch 后内联进来,所以这条不会卡死引擎装载。**sandbox 属性**则封死宿主 DOM 逃逸、顶层导航与弹窗,并把游戏与宿主之间的通道收窄到只剩 postMessage 一条。这条收窄直接决定了产品形态:广告、支付、存储这些要碰平台资源的事,游戏在 iframe 内根本办不了(没网络、碰不到宿主 DOM),只能经 postMessage 抛给宿主侧去办、办完再回包——这就是为什么 SDK 的 ad/pay/storage 都是「游戏发请求 → 宿主执行 → 回包」的形状,而不是游戏直接调。
@ -95,7 +95,7 @@ flowchart TB
direction TB
C1["default-src 'none' —— 兜底封掉一切未显式放开的资源类型"]
C2["connect-src 'none' —— 禁一切网络出站(最关键)<br/>引擎 bundle 由宿主层 fetch 后内联,不在 iframe 内 fetch,故不被卡"]
C3["script-src 'unsafe-inline' 'unsafe-eval'<br/>gamedef 运行时用 new Function 编译逻辑串,必需 'unsafe-eval'"]:::debt
C3["script-src 'unsafe-inline' 'unsafe-eval'<br/>'unsafe-eval' 是已废 gamedef 路的 CSP 债(gamedef 用 new Function 编译逻辑串)<br/>A-model 真 src/ 经 esbuild 无 new Function,该债随 gamedef 废而可收紧"]:::debt
end
subgraph SO["② 同源红线 HJ-AUDIT-001(当前=过渡态)"]
direction TB

View File

@ -66,7 +66,7 @@ flowchart TB
B1["build 段 scanLogic 静态门<br/>编译前拦 Function/eval/import/fetch/window/while(true)…"] -.->|出厂前已净化| G
```
**第一层在 build 段,不在 runtime。** `game-runtime/src/host/build-from-source.mjs``scanLogic`(:73)在把 gameDefinition 装配成可玩工厂、交 esbuild 打包**之前**,对模型产出的 `behavior.code``rule.condition` 做静态扫描。`LOGIC_BANS`(:42-63)是实际的拦截清单:沙箱逃逸类拦 `process``require`、动态 `import(``globalThis``eval(``.constructor``Function(`;DOM 与网络类拦 `document``window``fetch(``XMLHttpRequest``addEventListener``requestAnimationFrame`;死循环类拦 `while(true)``while(1)``for(;;)`;还有确定性逃逸类拦 `Math.random``Date.now``new Date``performance.now`(取证要可复现,逻辑里只许用 `rt.random` / `rt.time.now`)。`rule.condition` 另有专属禁则 `CONDITION_BANS`(:65-70):它必须是一个无副作用的布尔表达式,所以拦 `;`(不许是语句)、拦赋值 `=`、拦调世界变更方法 `addScore/setScore/spawn/destroy`、拦 `win()/lose()`。命中任何一条就转成 `validationError` 回灌给 repair 反馈,而不是靠 prompt 自觉。这层为什么必须在 build 边界做:同步 JS 没法在进程内硬中断,死循环和逃逸一旦执行就晚了,所以在执行前的校验边界把危险模式拦掉(:13-15 的信任模型注释)。
**第一层在 build 段,不在 runtime——但它属已废 gamedef 路的 build 段机制。** `game-runtime/src/host/build-from-source.mjs``scanLogic`(:73)在把 gameDefinition 装配成可玩工厂、交 esbuild 打包**之前**,对模型产出的 `behavior.code``rule.condition` 做静态扫描。这套扫描是 gamedef 专属的:它针对的 `behavior.code` / `rule.condition` 串字段只存在于 gameDefinition,而 A-model 写真 src/ 多文件没有这类逻辑串字段,故随 gamedef 废弃而不再是现行路径`LOGIC_BANS`(:42-63)是实际的拦截清单:沙箱逃逸类拦 `process``require`、动态 `import(``globalThis``eval(``.constructor``Function(`;DOM 与网络类拦 `document``window``fetch(``XMLHttpRequest``addEventListener``requestAnimationFrame`;死循环类拦 `while(true)``while(1)``for(;;)`;还有确定性逃逸类拦 `Math.random``Date.now``new Date``performance.now`(取证要可复现,逻辑里只许用 `rt.random` / `rt.time.now`)。`rule.condition` 另有专属禁则 `CONDITION_BANS`(:65-70):它必须是一个无副作用的布尔表达式,所以拦 `;`(不许是语句)、拦赋值 `=`、拦调世界变更方法 `addScore/setScore/spawn/destroy`、拦 `win()/lose()`。命中任何一条就转成 `validationError` 回灌给 repair 反馈,而不是靠 prompt 自觉。这层为什么必须在 build 边界做:同步 JS 没法在进程内硬中断,死循环和逃逸一旦执行就晚了,所以在执行前的校验边界把危险模式拦掉(:13-15 的信任模型注释)。
**第二层是 iframe 的 CSP。** `inject.ts`(:80-81)把 CSP 硬编码进 srcdoc 的 `<meta>` 标签,内容是 `default-src 'none'; script-src 'unsafe-inline' 'unsafe-eval'; style-src 'unsafe-inline'; img-src data: blob: https:; connect-src 'none';``connect-src 'none'` 是这层最关键的一条——它禁掉一切网络出站。引擎 bundle 不在 iframe 内 fetch,而是由宿主层 fetch 后内联进来,所以 `connect-src 'none'` 不会卡死引擎装载(:72-73)。`default-src 'none'` 兜底封掉其余所有未显式放开的资源类型。这里有一处和文档对不上的真实债:`script-src` 实际是 `'unsafe-inline' 'unsafe-eval'`,不是文档写的 `'self'`,原因和承接见 §8 漂移①。
@ -143,7 +143,7 @@ bundle 是可执行脚本,内联进 `<script>` 唯一的注入面就是它可能
## 7. 两条装载路共用一套沙箱
绘境AI 有两条游戏装载路,装载形态不同,但**执行沙箱是同一套**。Tier0/1 的廉价线走 engineBundle 内嵌:当前由 gameDefinition 中间表示经 build-from-source 装配成工厂、esbuild 打成 bundle、内联进 iframe(注:gameDefinition 是通往 `src/` 源工程终态的中间脚手架、非合格终态产物,产线正迁移成"gameDefinition → src/ 工程"再构建,创始人 2026-06-20 定调,见[生成引擎子树](生成引擎/) README §3;但无论中间表示还是 src/ 工程,最终都构建成同一形态的 bundle,本档这套沙箱不受影响)。tier2 的 Phaser 真工程走另一条:经独立源项目契约构建出 bundle(`tier2实现详设.md`:10 点到 tier2 复用同一装载路)。但两条路出来的 bundle 都暴露 `window.__GameBundle`、都调 `bootGameHost`、都跑在同一套 iframe + CSP + 桥里。
绘境AI 有两条游戏装载路,装载形态不同,但**执行沙箱是同一套**。Tier0/1 的廉价线走 engineBundle 内嵌:**现行由 A-model 写真 `src/` 多文件、经 esbuild 打成 bundle、内联进 iframe**(原 gameDefinition 中间表示经 `new Function` 解释那条路已于 2026-06-21 判错误路线、废弃,见[生成引擎子树](生成引擎/) README §3.2;无论早期 gamedef 还是现行 A-model 真 src/,最终都构建成同一形态的 bundle,本档这套沙箱不受影响)。tier2 的 Phaser 真工程走另一条:经独立源项目契约构建出 bundle(`tier2实现详设.md`:10 点到 tier2 复用同一装载路)。但两条路出来的 bundle 都暴露 `window.__GameBundle`、都调 `bootGameHost`、都跑在同一套 iframe + CSP + 桥里。
从沙箱视角看,这意味着不管哪条装载路,执行隔离的边界、CSP 的封锁、桥的双校验、`__GameBundle` 全局名和 `bootGameHost` 入口约定全部一致。tier2 换的是"游戏内容怎么造出来",换不掉"造出来之后怎么被关进笼子跑"。引擎宿主侧 `game-runtime/src/host/boot-game-host.js``bootGameHost`(:75-460)在 real 通道关掉自身 GL、由引擎五回调掌帧、绘制面用引擎的 mainContext,游戏经 `boot.ctx.getEngine()` 拿能力、零直接 import 引擎——这套对两条装载路是公共的。

View File

@ -315,14 +315,14 @@ OpenGame 的 shell 执行是**重型**的:PTY 优先(node-pty 加 @xterm/headles
| 物理优先分类 | classify 工具 + 5 archetype + 易错例 prompt | 有 classify 节点,但 archetype 体系 / 物理优先 prompt 待补 | 高 | 直接做成 classify 节点 |
| GDD 结构化契约 | 6 节硬绑下游 + 三铁律 + 三层规则 | design 节点存在,契约化程度待补 | **最高** | 直接做成 design 节点 |
| 确定性贴图 | bitmask 自动贴图 + 3×3→7×7 | 无(且引擎是 LittleJS 非 Phaser) | 中 | 纯算法,直接搬 |
| smart_edit 自纠错 | 三级匹配 + LLM 重算 | gameDefinition 结构化生成弱化了文本编辑需求 | 中 | 落进 generate/modify 节点 |
| smart_edit 自纠错 | 三级匹配 + LLM 重算 | gameDefinition(已废)曾弱化文本编辑需求;A-model 写真 src/ 后文本补丁需求回归 | 中 | 落进 modify/repair 节点 |
| Template Skill 骨架库 | 五段流水线 + family 自进化 | **完全没有** | 高 | 离线进化,SAA 外挂库 |
| Debug Skill 活协议 | (sig,cause,fix) + 升格规则 | 规划过、MVP 简化 | 高 | diagnose/repair 节点 + checkpoint |
| 资产流水线 | I2V / 抠图 / 多级回退 / 装配 | 走 mmx-cli | 中 | asset 节点接 mmx |
| 可玩性验收 | 论文宣称三轴 VLM,**代码未开源** | 机制层=九门真机 CDP(强);语义层=player 软门 M3 截图判(弱) | 机制已领先 · 语义待补强 | 机制已有;语义软门待做厚 |
| 专训模型 | GameCoder-27B(权重不在仓) | 便宜通用模型 + harness | **不抄** | 路线不同 |
> 表中名词补注:**LittleJS** 是我们选定的轻量 H5 游戏引擎(对标 OpenGame 用的 Phaser);**gameDefinition** 是我们当前实现里便宜模型友好的结构化中间表示;**九门 / 九门 harness** 是我们在真浏览器里跑的九道确定性机制验收门(CDP = Chrome DevTools Protocol,用来程序化驱动真实浏览器);**player 软门** 是用视觉模型 M3 看截图打分的软性检查;**mmx-cli** 是投资人版已拍板的媒体生成命令行工具。
> 表中名词补注:**LittleJS** 是我们选定的轻量 H5 游戏引擎(对标 OpenGame 用的 Phaser);**gameDefinition** 是廉价线最初便宜模型友好的结构化中间表示(2026-06-21 判错误路线、已废,现行 = A-model 写真 `src/`);**九门 / 九门 harness** 是我们在真浏览器里跑的九道确定性机制验收门(CDP = Chrome DevTools Protocol,用来程序化驱动真实浏览器);**player 软门** 是用视觉模型 M3 看截图打分的软性检查;**mmx-cli** 是投资人版已拍板的媒体生成命令行工具。
### 3.1 第一类:设计可直接抄进 SAA 节点(价值最高)

View File

@ -96,7 +96,7 @@ date: 2026-06-24
| 契约面 | 改动 | 兼容策略 |
|---|---|---|
| `contracts/agent-loop/source-project.schema.json` | 顶层新增可选 `lineage` 对象(parentGameId/parentVersionId/originGameId/originCreatorId/depth/assetRefs) | additive:可选属性、不破 `additionalProperties:false`、原创生成不带;`schemaVersion` 是否随之升(见 §5 风险一)待与 gamedef→src 迁移协调后定 |
| `contracts/agent-loop/source-project.schema.json` | 顶层新增可选 `lineage` 对象(parentGameId/parentVersionId/originGameId/originCreatorId/depth/assetRefs) | additive:可选属性、不破 `additionalProperties:false`、原创生成不带;`schemaVersion` 是否随之升(见 §5 风险一)与 lineage 一并定(注:gameDefinition 路已废、廉价线现行 A-model 真 src/,无 gamedef→src 迁移待协调)|
| `contracts/api-schemas/studio.yaml` | `StudioCreateReqVO` 新增可选 `remixFrom`(父 gameId);新增血缘回放查询接口(查某游戏的直接同款列表 / 查某游戏作为根的派生计数 / 查某创作者作品被同款的去重创作者数) | additive:`remixFrom` 缺省=普通原创生成,老调用不传不受影响 |
| Flyway 迁移 | 新建 `game_lineage_edge` 表(列见上表,含 `child_creator_id``status``idx_origin_creator`);版本号取迁移目录当前最高 +1(变现 W4 已占 V26 规划位,落地前以 `game-cloud/huijing-server/src/main/resources/db/migration/` 实时核对、顺延取下一个空位) | 纯新建表,不改存量表;软关联无外键 |
| VO/DTO | `StudioCreateReqVO``remixFrom` 字段 + 血缘回放响应 VO | additive |

View File

@ -156,7 +156,7 @@ flowchart TD
### 2.4 生成环消费九门的口径:硬门收窄成客观健康门 AE(创始人 2026-06-22 历史回收判定捡回)
前面几节把九门 harness 讲成一道统一的"硬地板",这个说法在"开闸放行"这个语境里仍然成立——一款游戏要进信息流,确实要先过这套真玩检测。但要把一件 2026-06-20 拍下的口径变化讲清楚,否则架构档会和现行真相脱节:**生成环(SAA 管线)在迭代生成时怎么"消费"九门的裁决,已经从"九门全过才算成功"收窄成了"只认五道客观健康门 AE"。** 这是 gamedef 生成质量从 all-9 口径下的约 50% 真正做到 91.7% 的直接原因之一(另一半来自走 Anthropic 原生 thinking 分离协议)。
前面几节把九门 harness 讲成一道统一的"硬地板",这个说法在"开闸放行"这个语境里仍然成立——一款游戏要进信息流,确实要先过这套真玩检测。但要把一件 2026-06-20 拍下的口径变化讲清楚,否则架构档会和现行真相脱节:**生成环(SAA 管线)在迭代生成时怎么"消费"九门的裁决,已经从"九门全过才算成功"收窄成了"只认五道客观健康门 AE"。** 这是九门收窄后、(gamedef 路实测)生成质量从 all-9 口径下的约 50% 真正做到 91.7% 的直接原因之一(另一半来自走 Anthropic 原生 thinking 分离协议)——gamedef 路虽已判错误路线废弃,但"九门收窄成 AE 客观门"这条验收消费策略引擎无关、对现行 A-model 真 src/ 同样适用
先把九道门按"判什么"分成两类。一类是**客观健康门**,它们不依赖 driver(driver 指真玩脚本里那段"知道这款游戏该点哪、该划哪"的操作逻辑)就能判定,纯看运行时本身健不健康:A_boot(能不能起来)、B_uncaught(有没有未捕获异常)、C_frame(跑不跑帧)、D_render(画面有没有真渲染)、E_live(进程活不活着)。另一类是**driver 依赖门**:G_input(响不响应输入)、H_progress(机制有没有进展)、I_control(可控性),这三道必须有一段能真玩这款游戏的 driver 才判得了;而 F_wiring(游戏事件有没有真触发 `rt.fx` 之类特效)同样依赖游戏被真玩起来,没有 driver 必挂。