games-development-ai/docs/agent-specs/_archive/2026-06-09-agent化生成QA闭环-review.md
zizi 7f24a344d0 docs(agent-specs): B2 归档——64 个闭线工作记录移入 _archive/,热目录顶层 90→26
承接目录治理:上轮只压缩内容未减文件数,闭线工作记录仍平铺致目录看着仍一堆(创始人指出)。本次执行 B2 归档。

64 个 ≤06-15 闭线档(25 压缩桩 + 闭线 review/report/纪要/edit-plan)git mv 入 docs/agent-specs/_archive/(文件名不变、仍 git 跟踪可查)。热目录 ≤06-15 仅留 13 活档(决策/纲领/SoT/活spike)+13 个 06-16 在飞。

活资产 20 处旧路径引用(.agents/docs/memory/_index)同步改 _archive/,引用断裂复测=0;_index 活地图 + 治理档状态收口。约束:0 个 06-16 被移、orchestrator 等未跟踪在飞档零误纳。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 13:26:19 +00:00

36 KiB
Raw Blame History

agent 化生成 QA 闭环 · 评审版设计(创始人拍板版)

  • 文档编号: HJ-AGENT-LOOP-REVIEW-001
  • 日期: 2026-06-09
  • 状态: 已拍板2026-06-09 创始人对 §7 四项全部采纳推荐答案execution 版起草中)
  • 终审修订: 2026-06-09 按总架构师终审 5 条意见修订(修订账见 §2.4:落包三表写入链 / runtime-api 扩面如实计量 / M2 两段式口径 / 漂移表述降格 / 裁决决策表要求)
  • 评审方式: 三镜头提案mvp-first / quality-first / compound-first× 三评委独立裁决(工程正确性 / 范围 YAGNI / 产品护城河),评委均做了超出事实清单的代码核验
  • 裁决结果: 三位评委 ranking 首位一致 = mvp-first → 以其为骨架,嫁接另两案 steal 亮点fatal 逐条化解(见 §2

0. 结论(先行)

推荐架构一句话以「2 个 LLM 角色(独立策划 + 对抗策划)+ 2 个确定性组件CDP 玩家取证 + 纯代码裁决)+ 1 个脚本编排器」组成全自动生成 QA 闭环;后端新增 = aigc 回调实做(内联 PackageFactory+ runtime-api 扩落包方法(一次闭合 aigc 链 2→5 唯一断点,未来真 Dify 接入零改动,通道与三表写入清单见 §4 接线②);发布前可运行证据 = CDP 捕获宿主 lifecycle emits规避预览页不发遥测的真实断点v1 仅 clicker 走全闭环staging 单批 20 创意全自动流完、accept 率 ≥80% = M2 成功率指标口径达标M2 整体收口另以 M-b 生成半下沉为准,两段式定义见 §7 待确认 4任一 accept 在 feed 真可玩为终验。

为什么是它:

  1. 集成切面全场最准(三评委一致):全仓既有 HTTP 写入面只有 /admin-api/aigc/dify/callback 桩,实做它 = 零新对外端点runtime-api 扩落包方法为内部 RPC 契约,见 §4 接线②)、状态机首获写入方、与未来真 Dify 共用同一契约(contracts/dify-workflow-io.json)、无弃件。
  2. 裁决确定性最高(诚实口径)accept/fix/kill 全部为纯代码规则(非 LLM规则变更走 PR 可审计——裁决规则确定,但闭环并非全确定accept 硬条件中「无 P0/P1 残留」的判定仍来自对抗评审LLM 输出面),同一 prompt 下模型批间漂移(非 prompt 变更,四道闸管不到)仍可影响 80% 达标。靠 Golden 创意集回归、批报告对抗评审稳定性披露§3.4)、换模型 20% 抽检冻结阀三件共同缓解与监控,而非封死
  3. 零创始人参与达成staging 自动 APPROVE裁决即审核员走 admin 审计日志)、批报告自动生成仅留档——对齐「初版完全由 agent 完成、无需创始人参与或读 CSV」的指令生产保留人审开关对齐 D-PUB α 设计)。
  4. 复利内建:闭环批报告直接充当 Prompt 治理四道闸的「成功率 ≥80%」闸数据源(门禁与生产同源);每条裁决按 prompt id 回流 contracts/prompts/eval/ Golden 集自动生长C1 的 52 条为种子)。

1. 背景与依据

1.1 两条已验证的事实底座

底座 结论 出处
C1 生成 spike结构层 100% 4 模板 × 13 创意 = 52/52 全过HTTP 通 + JSON 合法 + 逐字段 schema含 2 条故意模糊创意;通道 = new-api 直调 MiniMax-M2.7 + json_object。战略含义「模板驱动生成LLM 填参 + 固定模板 runtime」高度可行可绕开高风险 LLM 代码生成 docs/agent-specs/2026-06-09-generation-spike/spike-summary.mddocs/agent-specs/2026-06-09-generation-spike/gen_spike.py
B2 真人浏览器试玩闭环已通 staging + 真无头 Chromefeed 真标题 → 点卡进试玩 → clicker 真玩通关 → 遥测 game_play_end{completed:true} 落库 → quality 0→60 → feed 翻转登顶CDP 真实输入可穿 sandbox iframe 点 canvas通关程序可确定点 target 次) docs/mvp/MVP作战清单.mdB2 行)

1.2 三个待解问题(本设计的靶子)

  1. C1 的诚实边界:可运行层仅 clicker 有 runtime 真验;可接受层完全未评,原计划靠创始人 A4 盲评(人读 CSV——创始人已改向用 agent 化 QA 闭环替代盲评,零人参与
  2. aigc 链唯一断点入口submitGenerate真、出口completeWithVersion真但全仓无调用方中段「生成执行器 + PackageFactory链路 2→5」缺失任务永远停 queued出处game-cloud/game-module-aigc/game-module-aigc-server/src/main/java/cn/wanxiang/game/module/aigc/service/task/AigcTaskServiceImpl.java 及调研清单)。
  3. 质量真值缺位发布链B1与数据回路telemetry→quality_score→feedB2均已真 e2e但「什么样的生成结果配进 feed」没有机器口径。

1.3 一个评委查实的关键断点(影响所有方案)

发布前预览页 /create/preview/:versionIdgame-studio/src/views/create/Preview.vue,路由见 game-studio/src/router/index.ts不发任何遥测——game_play_start/end 遥测映射只存在于发布后的 game-studio/src/views/play/Play.vue。因此「发布前试玩以遥测落库为证据」按文不可执行,必须换证据通道(见 §3.3 runnableOk 定义)。


2. 评审过程与 fatal 化解账

2.1 三案三评委裁决摘要

提案 评委1工程正确性 评委2范围 YAGNI 评委3产品护城河 总评
mvp-first 1st (8) 1st (7.5) 1st (8) 骨架。接缝最准、裁决最便宜、口径纪律最好;两处 fatal 均「小修可愈」
quality-first 2nd (7) 3rd (5.5) 2nd (7.5) 纵深与诚实度最高,但 durationMs<3s 口径错误会让首批数据报废 + 工程量最大
compound-first 3rd (6) 2nd (6.5) 3rd (6.5) 单点亮点密度最高eval 生长/克隆配方但外部脚本→JVM 接口通道缺失 = 按文不可执行

2.2 骨架mvp-firstfatal 逐条化解

# fatal评委原话要义 化解方式
F1 发布前试玩证据链断accept 硬依赖遥测落库,但 Preview.vue 不发遥测B2 证据是发布后路径,引用越界) 嫁接 compound-first 的证据通道PlayReport 主证据 = CDP 注入监听捕获宿主 lifecycle emitspostMessage 层,零前端改动、既有预览路由现成可用);发布后抽样 1 条走 Play.vue 真玩,以「遥测落库 + quality_score + feed 重排」做双锚复核B2 配方原样)
F2 playerScorefun/clarity 1-5作 accept 硬条件,对全通关的 clicker 无区分度,退化为二次文本评审且噪声可左右 80% 达标 v1 砍掉 LLM 玩家评分门:玩家 agent 退为纯确定性取证(不评分);「可接受层」由对抗评审 findings无 P0/P1 残留)+ 文案非占位贴题 + 批内查重承担;主观趣味真值交给发布后真实玩家完玩率回路(已真 e2e
F3 「顺手补上全链唯一断点」过度声明只补了落包半3→5生成半留在编排器脚本studio 真实用户任务仍永久 queued 如实降格表述 + 给归处v1 = 补落包通道(回调实做),生成半由编排器承担(伪装 Dify 出参v1.1 把编排器的生成调用下沉为 aigc 内薄轮询执行器(复用同一回调语义),接通真实用户链路——列入里程碑与风险 R6不假称已通
F4 回调实做工作量略报:DifyCallbackReqVO 现无 gameConfig/assets 字段、端点带 @PreAuthorize('aigc:dify:callback') 权限位 两件显式列入 v1 交付清单VO 扩字段对齐 contracts/dify-workflow-io.json + 回调权限配置(见 §4 接线②)
F5 状态机 1(running) 仍无写入方(回调直接 0→2/3 回调实做受理即置 1同事务推进至 2/3——状态机全口径获得写入方

2.3 嫁接清单(另两案 steal 亮点 → 本设计落点)

来源 嫁接件 落点
compound-first CDP 捕宿主 emits 为主证据;durationMs>0 断言(防 startMs 缺省 =0 假象eval 集自动生长kill 负例/fix 对照/accept 正例按 prompt id 落 contracts/prompts/eval/4 模板 schema 一次落盘;批内同质化查重;连续 5 条同因 kill 停批新模板「四件套」克隆配方Verdict 预留 completed:false 语义 §3.2 / §3.3 / §3.4 / §5
quality-first 「声明不作证据」铁律(证据核对由编排器代码强制,非 prompt 约束预算闸数字化LLM≤8 次/创意、实玩≤3 次、整批 30min 收口、浏览器池≤2金丝雀限额每批入 feed ≤10+ 换模型抽检复核 20%(分歧 >10% 冻结发布并告警);「现无下架接口」诚实披露列 M3禁止 evaluate_script 篡改游戏状态的取证纪律;漏斗归因 +「不得以降低裁决口径换达标」红线 §3.3 / §3.4 / §6
(新增防御) demo 兜底假阳性防御:取包失败会静默兜底 demo 包target:5 恒可通关PlayReport 必须校验所玩包 checksum / config 与落包一致兜底包64 位 '0' checksum判 infra_fail 而非通过 §3.3 runnableOk ⑤

被有意不采纳的项防过度设计LLM 裁决 agent 与 rubric 三维评分、任何「试玩时长 < 阈值」类质量门bot 点击节奏 ≠ 人类体验时长,评委证实该规则会系统性打穿首批 accept 率)、三个无 runtime 模板的批量静态空跑spike 已 52/52 实证重复证明零信息增量、Java 侧依赖未实现的 PromptRegistryLoader编排器直接读 contracts/prompts/ 文件渲染git 即事实源)、新增预览路由(已存在)。

2.4 终审补查与修订账5 条,全部采纳并已回写正文)

# 终审发现severity均经代码实查复核 修订落点
Z1 接线②按文不可执行high:原步骤序列缺「创建 game_runtime_package 行」——实查 createForPackage 只建 game_version 行;DbPackageStore.putManifest 未命中行时静默 log.warn 跳过、不抛错(回调事务不回滚,任务带病 succeeded全仓无任何生产代码插入 game_runtime_packageB1 闭环的行来自 staging 手工灌数)。缺行连锁:预览取包抛 1-102-001-001 → demo 兜底 → 被 §3.3 ⑤ 判 infra_fail → 整批熔断发布翻包同样必失败。execution 版照抄原文则闭环 100% 跑不通 §4 接线②补建行步骤putManifest 之前)+ putManifest 未命中改显式失败 + 「三表一次事务写入清单」为 execution 验收断言
Z2 落包写入通道跨模块边界缺失mediumPackageStore 位于 runtime-server 内部包,跨模块唯一面 RuntimePackageApi 仅 publish/getStatus 两方法且 javadoc 明文「禁止上游依赖 runtime 的 -server」aigc 回调实做要么违纪,要么必须扩 runtime-api =第二个后端改动点;且 aigc-server pom 现无 project-api/runtime-api 依赖。原「唯一新增后端代码=回调实做;其余零改动」的拍板前提不成立(不影响 mvp-first 骨架结论,但工作量口径必须如实) §0/§4/§5.1/§6 回滚行:统一修正为「回调实做 + runtime-api 扩落包方法 + pom 依赖」
Z3 M2 过线口径与进度总账叙事冲突medium原文「accept 率 ≥80% 即过 M2 验收线」而进度总账明言「80% 验收线依赖 aigc/Dify 真实接通、接通前无法测量、是 M2 命门」;本设计 v1 生成半仍留编排器F3/R6 自承),创始人可能批了口径却误以为 v1 收口=M2 完成 M2 过线拆两段式定义§0/§3.3/§5.2 口径注),单列 §7 待确认 4 显式拍板,拍板后同步回写进度总账
Z4 「从根上封死 LLM 评分漂移」表述过度mediumaccept 硬条件含「无 P0/P1 残留」P0/P1 判定本身是 LLM 输出面F2 砍掉的是玩家评分,对抗 findings 这个噪声入口还在,批间漂移仍可左右 80% 达标——影响创始人对「零人在环可信度」的判断 §0 第 2 点改述为「缓解与监控而非封死」§3.4 批报告增加对抗评审稳定性披露
Z5 裁决规则存在未覆盖分支mediumschema 不合法 @round=0 既不满足 kill 条款(要求 round=1 仍不合法)也不满足 fix 条款(要求结构/运行 OK重出算不算 fix 轮、round 如何计数、按序短路完整执行序均无口径——引擎无法按文落成纯代码 §3.3 补回炉计数总则 + schema-fail@round=0 重出规则execution 版强制显式决策表(全分支可单测)

3. 推荐架构

3.1 agent 角色与边界

flowchart LR
    I[创意批次 N≥20] --> O

    subgraph ORCH[编排器 · 确定性脚本]
        O[批次驱动 / 预算闸 / 熔断<br/>JSONL 账本 / eval 回流]
    end

    subgraph LLMZ[LLM 层 · prompt 全入 Registry]
        D[独立策划 agent<br/>创意→GameDesign]
        A[对抗策划 agent<br/>只批不改→findings]
    end

    subgraph DETZ[确定性层 · 非 LLM]
        P[玩家 agent<br/>CDP 真玩取证→PlayReport]
        J[裁决引擎 · 纯代码规则<br/>accept / fix / kill]
    end

    subgraph BE[后端真实链路]
        CB[(Dify 回调实做<br/>内联 PackageFactory)]
        PUB[发布六步编排→feed]
        TQ[telemetry→quality_score 回路]
    end

    O --> D --> A
    A -- "P1 findings 回灌(≤1轮)" --> D
    A --> J
    D --> J
    O -- "伪装 Dify 出参 POST 回调" --> CB
    CB -- versionId 真包 --> P
    P --> J
    J -- accept --> PUB --> TQ
    J -- "kill / fix / 全量 Verdict" --> O
角色 输入 输出 禁区
独立策划 agentLLM 创意一句话 + 模板 schema + 批内禁重列表fix 轮追加 findings GameDesign含完整 GameConfig 候选) 不得超出模板 schema 自由发挥不自评fix 轮只改指出项
对抗策划 agentLLM GameDesign 全文 findings[]P0/P1/P2 + 整改建议) 只批不改;不下最终结论;评审时不可见试玩数据(保独立性)
玩家 agent(确定性 CDP 驱动,非 LLM versionId落包后真包 PlayReport纯客观取证 只产证据不评分;游玩必须真实 pointer 事件,禁止 evaluate_script 篡改游戏状态;不调任何后端写接口
裁决引擎(纯代码规则,非 agent GameDesign + findings + PlayReport Verdict{accept|fix|kill} 无 LLM 参与;缺 PlayReport 硬证据不得 accept代码强制规则变更 = 改代码走 PR
编排器Workflow 脚本) 创意批次 账本 + 真实链路调用 + 资产回流 prompt 不内嵌(走 Registry 文件渲染);不做内容判断;不得绕过裁决发布

Prompt 归置(沿 Registry 既有 8 阶段目录,不新增 stage策划 → 04-config、对抗 → 06-quality、fix 变体 → 07-fixfrontmatter 按 docs/agent-specs/prompt治理体系-execution.md §5.1;改 prompt 必升 version、走四道闸。LLM 通道沿用 spike 已证配方new-api + MiniMax-M2.7 + json_object

3.2 工件契约(字段级)

GameDesign(新增 contracts/agent-loop/game-design.schema.json

{ designId: sha256(idea+templateId+round), idea: str, templateId: enum,
  designIntent: str(≤100字玩法意图), expectedPlaySeconds: int,
  config: GameConfig, round: 0|1 }

GameConfigC1 spike 口径固化为 contracts/templates/*.schema.json,补齐「模板级 schema 今天不存在」缺口,兼作门禁④静态校验对象;4 份一次落盘v1 仅 clicker 走闭环

clicker: { templateId:"clicker", title:str非空, theme:str非空, target:int(5-30), scoreLabel:str非空 }
dodge / runner / match: 按 gen_spike.py 已验 schema 同步落盘(仅契约,不跑批)

诚实边界runtime 今天只消费 targettitle 经 meta 上 feed 卡片theme/scoreLabel v1 仅为文本评审面不渲染v1.1 扩渲染面)。

Verdict(新增 contracts/agent-loop/verdict.schema.json,全量落 JSONL 账本并按 prompt id 回流 eval 集)

{ designId, taskId, versionId?, decision: accept|fix|kill,
  structureOk: bool, runnableOk: bool,
  playReport: { loaded: bool, clicks: int,
                gameEnd: { completed: bool, durationMs: int } | null,
                consoleErrors: [str], assetLoadErrors: int,
                packageChecksumVerified: bool,        // 防 demo 兜底假阳性
                emitsCaptured: [str] },               // CDP 捕获的宿主 lifecycle 事件序列
  findings: [{ severity: P0|P1|P2, issue: str, suggestion: str }],
  reasons: [str], round: int,
  evidence: { traceId, promptVersions: {} } }

playReport.gameEnd.completed 预留 false 语义——dodge 引入判负时契约零改动。

3.3 裁决口径(可执行规则,按序短路)

runnableOk 定义(五条 AND编排器代码强制核对agent 自述一律不作证据) ① CDP 捕获 game_loaded;② 捕获 game_end{completed:true};③ durationMs>0(证明 game_start 真触发,防 startMs 缺省 =0 假象);④ 零 game_error 且 console 无致命错误;⑤ 所玩包 checksum/config 与落包一致demo 兜底包判 infra_fail不算通过也不算 kill

回炉计数总则Z5round = 该 designId 的回炉计数0=首轮1=回炉轮GameDesign/Verdict 的 round 字段即此口径),全流程回炉额度合计 1 轮schema 重出与 P1-fix 共享同一额度。schema 不合法 @round=0 → 携 schema 校验错误回灌策划 agent 本地重出 1 次消耗唯一回炉额度不经对抗评审、不落包免费门先行round=1 后任何不满足 accept 的分支一律不再回炉。

  1. kill即时不给 fix
    • schema 不合法且 round=1 仍不合法 → 回调 failed + config_invalid
    • findings 含 P0违规/敏感/年龄不适)→ 回调 failed + unsafe_prompt(均取 FailureReasonEnum 既有 7 值,不扩枚举);
    • 批内同质化撞重theme/文案查重)→ kill 留档负例;
    • 落包后真玩重试 1 次仍非 runnableOk → 不发布、留档告警,任务保持 succeeded(区分「运行环境劣」与「设计劣」,不污染任务状态机语义)。
  2. fix与 schema 重出共享回炉额度,合计至多 1 轮):结构/运行 OK但 ∃P1题文不符、target 与意图矛盾、文案不通/占位)且 round=0 → findings 回灌策划 agent 重出 → 全流程重走target 可能变必须重玩round=1 仍 ∃P1 → kill 留档(不再回炉)。
  3. accept全部满足structureOk ∧ runnableOk ∧ 无 P0/P1 残留 ∧ 批内查重通过。

execution 版硬要求Z5:裁决必须落成显式决策表——输入 (schemaOk, findings, playReport, round) → 唯一输出分支,覆盖全部输入组合(含 schema-fail@round=0/1、P1@round=0/1、runnable-fail 重试、infra_fail 旁路),「按序短路」的完整执行序以该表为准;引擎照表落码,单测覆盖全分支。

「可接受」v1 机器口径 = accept 四条 AND替代创始人 A4 盲评;长期第二裁判 = 发布后真实玩家 telemetry→quality_score→feed 重排(已真 e2e明确不设任何「试玩时长阈值」质量门——bot 点击节奏与人类体验无关。

成功率统一口径三案口径分歧已收敛M2 两段式过线定义见 §7 待确认 4Z3 accept 率 = accept 数 ÷ (提交创意数 infra 类)≥80% = M2 成功率指标口径达标v1 编排器代产批跑即可测量——这是 80% 这条 MVP 核心指标首次可测量);但 M2 整体收口另需生成链路贯通(以 M-b 薄轮询执行器落地为准),编排器代产批次过线不得单独宣称 M2 完成。infra 类new-api 超时 / 浏览器环境挂 / demo 兜底触发不计分母、designId 幂等可重放;批报告分层披露结构层 / 可运行层 / 可接受层三层通过率(对齐 C1 三层口径)。

3.4 并行编排形态

  • 流水(贵的资源最后用)N 创意 → 策划(并发 ≤3、间隔 0.3s,沿 spike 通道纪律)→ 本地 schema 门(免费)→ 对抗评审 → fix 回炉≤1 轮)→ 过文本面者落包§4 回调)→ 玩家 agent 真玩(无头 Chrome 串行池 ≤2防互扰→ 裁决 → accept 走发布 / kill 留档。并行边界 = 创意边界,零共享状态(复用三相 Workflow 编排方法,见 .agents/workflows/mvp-execution-orchestration.md)。
  • 预算闸:每创意 LLM ≤8 次、实玩 ≤3 次;整批 30 分钟强制收口。
  • 熔断:批内 infra_fail >30% 自动停批告警(防带病出数);连续 5 条同因 kill → 停批告警prompt/环境系统性问题,防预算空烧);试玩环境不可用 → 整批暂停runnable 证据不可豁免,禁降级为「跳过试玩」)
  • 账本与资产回流(每批强制,非可选)JSONL ledgerVerdict 全量 + taskId/traceId幂等断点重放批末自动摘要accept 率/三层漏斗/kill 原因分布/成本/对抗评审稳定性披露)——同时就是 prompt-eval.yml 闸②④的数据源(门禁与生产同源);每条 Verdict 按 prompt id 落 contracts/prompts/eval/<id>/kill 负例 / fix 前后对照 / accept 正例C1 的 52 条 spike 数据为种子。全程无任何人读 CSV。
  • 对抗评审稳定性披露Z4监控 LLM 批间漂移):批末对同批随机抽样 ≥3 条 GameDesign 做对抗评审同 prompt 重测,披露 P0/P1 判定一致率(判定翻转即不一致);与既有换模型 20% 抽检冻结阀共同构成 findings 这一 LLM 噪声入口的监控面——一致率持续走低 = 漂移预警,触发 Golden 集回归排查(修 prompt 走四道闸),不得以放宽 P1 口径回应
  • 发布纵深:每批入 feed 金丝雀限额 ≤10accept 随机 20% 由换模型独立复核重裁,分歧率 >10% 自动冻结本批发布开关 + 告警落库(人可事后审但不在环)。

4. 与 aigc / runtime / feed / telemetry 的最小集成

后端改动 = aigc 回调实做(内联 PackageFactory+ runtime-api 扩落包方法Z2 修正,工作量如实计);发布链 / telemetry / feed / 前端全部走已验真实链路,零改动。

sequenceDiagram
    participant O as 编排器
    participant S as studio/aigc(真)
    participant CB as Dify回调实做(后端件,含runtime-api扩面)
    participant P as 玩家agent(CDP)
    participant F as 发布链+feed(真)

    O->>S: ① createDraft→submitGenerate(B1配方鉴权)
    S-->>O: taskId(queued)+traceId
    Note over O: LLM出GameConfig+对抗评审(文本面)
    O->>CB: ② 按dify-workflow-io.json出参伪装Dify POST回调
    Note over CB: 受理置1→组GamePackage(sha256)<br/>→createForPackage(建game_version行)<br/>→建game_runtime_package行(status=0)<br/>→putManifest→completeWithVersion→置2<br/>(三表同事务,幂等;经runtime-api扩面)
    CB-->>O: studio轮询getTask拿versionId
    P->>P: ③ 既有预览路由真玩,CDP捕宿主emits
    O->>F: ④ accept→publish→admin APPROVE(staging自动批)
    F-->>O: 六步编排落feed(PUBLISH_BASELINE)
    Note over F: ⑤ 发布后抽样1条走Play.vue真玩<br/>遥测落库+quality_score+feed重排双锚复核
  1. 入口(真)编排器以测试创作者身份B1 配方token=test1 + tenant-id走 studio 真链 createDraft → submitGenerate得 taskId(queued) + traceId。
  2. 落包后端件Z1/Z2 终审修正后口径):实做 /admin-api/aigc/dify/callback 桩为事务服务 = 内联 PackageFactory,一次事务完整写入序列:校验 → 组 GamePackage契约#4 contracts/game-package.schema.jsonsha256 manifest/checksumassets=[])→ ProjectVersionApi.createForPackage(按 genTaskId 幂等,建 game_version 行)→ 建 game_runtime_package 行status=0 预览就绪) → 写 manifest → AigcTaskService.completeWithVersion(幂等)→ 状态机受理置 1、终态 2/3failed 按 FailureReasonEnum
    • 为何必须补建行步骤Z1:终审实查 createForPackage 只建 game_version 行,全仓无任何生产代码插入 game_runtime_packageB1 闭环的行来自 staging 手工灌数);缺此步则预览取包抛 1-102-001-001 → demo 兜底 → 被 §3.3 ⑤ 判 infra_fail → 整批熔断,发布翻包亦必失败——闭环 100% 跑不通。
    • 落包写入通道Z2PackageStore 是 runtime-server 内部件aigc 不得直依赖(守门纪律:跨模块只依赖 runtime 的 -api——RuntimePackageApi 新增「建包行 + 写 manifest」落包方法,沿既有 @FeignClient + 本地 @Primary ApiImpl 同事务模式(与 ProjectVersionApi.createForPackage 同款),事务内禁 Feign/HTTP/@Async/REQUIRES_NEW对齐该接口既有纪律aigc-server pom 新增 project-api / runtime-api 依赖,列入交付清单。方法签名与事务约束细节由 execution 版给出。
    • 失败路径Z1「putManifest 未命中运行包行」必须由现状静默跳过(DbPackageStore log.warn 即返回,事务不回滚)改为显式失败——回调同事务回滚、任务置 failed禁止带病 succeeded
    • 配套两小件(评委查实,计入工作量):DifyCallbackReqVO 扩 gameConfig/assets 字段对齐 contracts/dify-workflow-io.jsonaigc:dify:callback 权限配置。未来真 Dify 接入零改动。
    • execution 版验收断言Z1:以「回调一次事务的完整写入清单 = game_aigc_task / game_version / game_runtime_package 三表」为准——回调成功后三表行齐备、预览取包不走 demo 兜底;任一表写入失败则三表全回滚且任务置 failed。
  3. 试玩(真,零前端改动):玩家 agent 经既有预览路由 /create/preview/:versionIdgame-studio/src/views/create/Preview.vue)取包真玩;主证据 = CDP 注入 postMessage 监听捕获宿主 lifecycle emitsloaded/start/end/error游玩操作为真实 pointer 事件点 canvas target 次B2 三坑(画布 0 高/兜底误判/completed 漏发,已修 d279898固化为 PLAY 前置回归断言。
  4. 发布(真)accept → POST /app-api/project/{id}/publish(适龄 + 合规门禁MVP 桩 pass→ admin reviewProject APPROVEstaging 自动批;生产保留人审开关,对齐 D-PUB α)→ 既有六步编排落 feedgame-cloud/game-module-project/.../PublishOrchestrationServiceImpl.javaB1 已验)。
  5. 回路(真):发布后抽样真玩走 game-studio/src/views/play/Play.vue → 遥测落库 + quality_score + feed 重排双锚复核B2 配方);长期裁判 = 真实玩家完玩率回路。telemetry/feed 零改造

诚实边界(对应 F3:本 v1 只补「落包半」studio 真实用户 submitGenerate 的任务仍停 queuedv1.1 将编排器的生成调用下沉为 aigc 内薄轮询执行器(复用同一回调语义)后才真正接通——在此之前不得宣称「生成链路已通」。


5. v1 范围与里程碑clicker 先行 → 克隆扩展)

5.1 v1 交付物5 件)

  1. Registry 3 条 prompt策划 04-config / 对抗 06-quality / fix 变体 07-fix+ frontmatter + 各自 eval 目录骨架;
  2. contracts/agent-loop/ 两个 schema + contracts/templates/ 4 模板 schema仅 clicker 走闭环);
  3. 编排器脚本(批量 / JSONL 账本 / 幂等重放 / 预算闸 / 熔断 / eval 回流 / 批报告);
  4. DifyCallback 真实做(内联 PackageFactorygame_aigc_task/game_version/game_runtime_package 三表同事务写入 + putManifest 显式失败语义)+ runtime-api 扩落包方法(含本地 @Primary ApiImpl+ VO 扩字段 + 权限配置 + aigc-server pom 依赖project-api/runtime-api含单测
  5. 玩家 agent clicker 取证策略CDP emits 捕获 + demo 兜底检测 + B2 三坑回归断言)。

5.2 v1 验收

staging 上一批 20 创意全自动流完(零人工介入、零人读中间产物),统一口径 accept 率 ≥80%,批报告 + eval 集自动落盘,抽任一 accept 在 feed 真可玩(浏览器实证 + 遥测/quality/feed 重排双锚)

口径注Z3:本验收过线 = M2 成功率指标口径达标80% 这条核心指标首次可测量),不等于 M2 整体收口——后者另需真实用户生成链贯通M-b 薄轮询执行器,真实 submitGenerate 不再停 queued见 §7 待确认 4。

5.3 里程碑

阶段 内容 出口判据
M-a本案 v1 clicker 全闭环 + 回调实做 + 4 schema 落盘 §5.2 验收过线
M-bv1.1 ① 生成半下沉aigc 内薄轮询执行器复用同一回调语义studio 真实用户链路活;② 最小 runtime 改动放大渲染面theme/scoreLabel 入画布,守 toString 注入 + <15KB 红线) 真实用户 submitGenerate 不再停 queued
M-c衔接 B3 按「四件套」克隆 dodge → runner → match模板 schema已落盘+ 模板 runtime补 update(dt)/碰撞/判负)+ 玩家策略表条目(随机性模板加 debug 自动通关钩子)+ registry prompt 变体dodge 首次引入 completed:false 判负(契约已预留);编排器/裁决口径/资产管道零改动 每模板独立过一批 ≥80%

clicker 同质化产能拐点(批内查重 kill 率持续走高)= dodge runtime 的立项触发信号——用数据驱动模板扩张节奏。

5.4 明确不做v1

dodge/runner/match runtime 及其批量静态空跑OpenGame 代码生成 / ComfyUI 素材Dify 编排迁移回调契约兼容后接零改MQ 异步化LLM 裁决 agent / 玩家主观评分 / 多 personapromptHash MD5→sha256 顺手修runtime destroy() 补发 game_end与闭环 happy path 无关,列 B3下架接口M3模板列表接 studio 正式入口。


6. 风险与降级

# 风险 应对 / 降级
R1 clicker 可评审面窄(玩法差异仅 target + 文本,对抗评审实质在文本层) 诚实接受为 v1 边界M-b 以最小 runtime 改动放大渲染面;真趣味判定交发布后完玩率回路
R2 同质化刷屏clicker 参数空间小) 策划注入批内禁重列表 + 裁决批内查重 + 金丝雀限额(每批 ≤10拐点即 dodge 立项信号
R3 自产自评偏置 / Goodhart(调松评审刷指标) 裁决纯代码 + 规则变更走 PRprompt/阈值升版必过四道闸 + 固定 Golden 创意集回归;换模型抽检 20%、分歧 >10% 冻结发布;红线:任何情况不得以降低裁决口径换达标80% 不达线按漏斗归因分段处方(损耗在策划/填参 → 收紧 prompt 至模板近似填空;损耗在实玩 → 修 runtime/驱动,不放宽门槛)
R4 试玩遥测污染 quality v1 发布前试玩走 Preview不发遥测天然无污染发布后抽样真玩量小且限 staging生产化硬前置 = bot 账号排除规则(三案共性盲点,显式立项)
R5 new-api / 无头浏览器单点 退避重试 ×2 → infra_fail 不计分母infra_fail>30% 停批试玩环境不可用整批暂停禁跳过试玩最终兜底链agent 闭环挂 → 回退 C2 已裁决「模板驱动 + schema 门禁」(人工抽检)→ 再降 = demo 预设包,发布链不断
R6 真实用户生成链 v1 仍断F3 化解后的残余,如实列险) 种子用户内容池 v1 依赖编排器批跑代产M-b 薄轮询执行器为第一优先后端件
R7 现无下架接口评委查实AdminProjectController 仅两端点、QUALITY_REFRESH 不动 status 发布后异常(如首 24h completeRate<20%)仅告警不自动下架;下架接口列 M3 缺口,不虚构;金丝雀限额收敛血量
R8 换模型复核的第二模型可用性未验new-api 多通道未实测) 复核模型不可用时降级为「同模型异版本 prompt 重裁 + 告警」,冻结阀照常生效
回滚 整体回滚 编排器 + agent 层为纯叠加:关停即回现状;后端件(回调实做 + runtime-api 扩落包方法)独立可灰度——扩面为纯新增方法、不动既有 publish/getStatus关闭调用方即失活aigc 入口/出口、发布链、telemetry 回路均无侵入改动

7. 待创始人确认项4 项 · 2026-06-09 已全部拍板)

拍板记录2026-06-09主 agent 当面征询创始人)1=认可机器口径A4 盲评降级为事后抽看校准2=接受「staging 零人在环、生产人审」分界3=v1 后先投 M-b 生成下沉4=认可 M2 两段式定义(进度总账口径已同步回写)。

  1. 「可接受」机器口径替代 A4 盲评v1 accept = 结构合法 ∧ 真玩通关CDP 证据)∧ 对抗评审无 P0/P1 ∧ 批内查重通过,不含人类趣味盲评A4 盲评降级为「事后抽看 accept 样本」的校准动作(非门禁)。是否认可以此机器口径作为「生成成功率」的测量定义本项只拍测量口径M2 过线问题单列第 4 项,两件事分开拍。)
  2. 发布门分界staging 全自动 APPROVE裁决即审核员走 admin 审计日志 + 金丝雀限额 + 抽检冻结阀生产保留人审开关。是否接受「staging 零人在环、生产人审」这条分界线?
  3. M-b 资源排序v1 收口后「生成半下沉真实用户链路活」与「dodge runtime内容池扩品类B3」二者先投哪个建议前者——M2 命门是真实生成链贯通,且 clicker 同质化拐点数据可让 dodge 立项更有据。)
  4. M2 过线两段式定义Z3防过度承诺:① 成功率指标口径达标 = 本案 accept 率 ≥80%v1 编排器代产批跑即可测量,使「接通前无法测量」成为历史);② 生成链路贯通 = 真实用户 submitGenerate 不再停 queuedM-b 薄轮询执行器落地为准)。v1 收口仅完成 ①,不得据此宣称 M2 完成M2 整体收口 = ① ∧ ②。 是否认可此两段式定义?拍板后由执行者同步回写 docs/mvp/MVP进度总账.md其现行表述「80% 验收线依赖 aigc/Dify 真实接通、接通前无法测量」需更新为「v1 起可测量;贯通另以 M-b 计」)。

附:引用文件清单(仓库相对路径)

  • 事实底座:docs/agent-specs/2026-06-09-generation-spike/spike-summary.mddocs/agent-specs/2026-06-09-generation-spike/gen_spike.pydocs/mvp/MVP作战清单.md
  • 契约:contracts/game-package.schema.jsoncontracts/dify-workflow-io.jsoncontracts/prompts/README.mdcontracts/prompts/registry.yamldocs/agent-specs/prompt治理体系-execution.md
  • 后端:game-cloud/game-module-aigc/game-module-aigc-server/src/main/java/cn/wanxiang/game/module/aigc/service/task/AigcTaskServiceImpl.javagame-cloud/game-module-aigc/game-module-aigc-server/src/main/java/cn/wanxiang/game/module/aigc/controller/admin/task/vo/DifyCallbackReqVO.javagame-cloud/game-module-project/game-module-project-server/src/main/java/cn/wanxiang/game/module/project/service/publish/PublishOrchestrationServiceImpl.javagame-cloud/game-module-studio/game-module-studio-server/src/main/java/cn/wanxiang/game/module/studio/service/studio/StudioServiceImpl.java
  • 后端(终审 Z1/Z2 实查面):game-cloud/game-module-runtime/game-module-runtime-api/src/main/java/cn/wanxiang/game/module/runtime/api/RuntimePackageApi.java(仅 publish/getStatus + 守门纪律)、game-cloud/game-module-runtime/game-module-runtime-server/src/main/java/cn/wanxiang/game/module/runtime/service/pkg/store/DbPackageStore.javaputManifest 未命中行静默跳过)、game-cloud/game-module-project/game-module-project-server/src/main/java/cn/wanxiang/game/module/project/service/version/GameVersionServiceImpl.javacreateForPackage 只建 game_version 行)、game-cloud/game-module-aigc/game-module-aigc-server/pom.xml(现无 project-api/runtime-api 依赖)
  • 前端:game-studio/src/host/runtime/index.tsgame-studio/src/host/inject.tsgame-studio/src/host/GamePlayer.vuegame-studio/src/views/create/Preview.vuegame-studio/src/views/play/Play.vuegame-studio/src/router/index.ts
  • 方法论:.agents/workflows/mvp-execution-orchestration.md.agents/skills/contract-first-development.md