起因:本会话同一设计(生成主线)随 4 次 reframe 产 4 份 review/execution、过期 v1 被连推上 origin = 文档 sprawl + 过期档误导(反模式)。 预防(规则,根治): - engineering-conventions §10.4「一题一活档」:同一设计主题就地修订一份活档、禁「一 pivot 一文件」;review/execution 拆分仅当两者同时为活;终稿自洽;supersede 同提交删/归档(强化 §10.2);commit 设计档前自检。 - wave-close 第8步补:同一任务设计档收敛成最小自洽集(典型 1 review+1 execution)、被取代者同提交删/归档。 - (doc-organizer 轴①已检测 SUPERSEDED/DUP = 事后兜底;§10.4 = 事前根治) 收敛(应用): - 删 v1(对话生成修改素材-review,D5「改打包产物」前提已被评审证伪=纯误导)。 - v2(生命周期项目管理-review)生命周期原则折入固定架构 review §1 使其自洽 → 归档 _archive/ + SUPERSEDED 墓碑。 - 固定架构 review §4 从 §10.1 收敛(消 opus 点的两份 agent 表分叉)。 - _index 活地图登记(固定架构 review+execution=ACTIVE、supersede 链记 v1/v2 收敛)。 留最小自洽集 = 固定架构 review(自洽)+ execution。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
9.4 KiB
9.4 KiB
状态: SUPERSEDED(→
../2026-06-17-固定游戏架构与SAA-agentic-studio-review.md) · 归档: 2026-06-17 本档生命周期原则(游戏=长生命周期源项目、LLM=工作室、改源不改打包产物)已折入继任固定架构 review §1,继任档自洽。本档留作原则出处参考,勿照建。
生成主线 v2:游戏全生命周期项目管理(LLM as 工作室) — review 版
类型:review 版(基座重构,结论先行,供决策)。日期:2026-06-17 · owner:6c6g 领 spec · 评审:codex + opus(v1 已两轮,本 v2 基座变更需再一轮)。 supersede:本 v2 取代 v1
2026-06-17-生成主线-对话生成修改素材-review.md;v1 的 D5「改打包产物/可寻址 manifest」被创始人生命周期重构整条废除。 触发:创始人裁定——「系统不生成一次性内容;要长期/可维护/可扩展/灵活/稳定/简单/高效——这是游戏全生命周期管理。LLM 只是替代游戏工作室原本做的事。」
1. 结论:范式转变
| 旧范式(v1 及之前) | 新范式(本 v2 基座) |
|---|---|
| 生成 = 产出一坨可玩 bundle,存下来 | 生成 = LLM(工作室)创建并长期维护一个游戏源项目 |
| 修改 = 想办法 diff 打包产物(不可行) | 修改 = 工作室在源项目上做一次开发迭代,再构建 |
| 产物 = 一次性、不可维护的硬编码 blob | 规范物 = 结构化、可维护、数据驱动的源项目(像工作室的 git 仓) |
| 打包/发布是终点 | 打包=CI 构建步、发布=一次 release;项目持续演进 |
一句话:把游戏建模成长生命周期的软件项目,LLM 是它的工作室;create/modify/extend/build/release/maintain 都是项目生命周期操作。这从根上化解了"怎么改打包产物"的死结——不碰产物,在源项目上演进,再构建。
2. 现状缺口(当前是"一次性"反模式 · 已核码)
- worker 在临时目录生成源 → 打包成单 iife
bundle.iife.js→ 回调只带打包后的 bundle(service.py:199注释"游戏逻辑全在 engineBundle 内");gameConfig占位、assets[]空。 - 源生成完即弃:后端手里只有不可维护的整包 blob,无源项目、无数据驱动、无可寻址结构 → 无法维护、无法局部改、无法长期演进。
- 这正是创始人要废的"一次性内容"。
3. 规范模型
3.1 游戏源项目结构(LLM 工作室维护的"仓")
game-project/
├── game.json # 项目元数据(引擎版本/入口/品类templateId/标题/版本)
├── design.md # GDD:玩法意图/机制/胜负条件(工作室的"需求与设计")
├── config/
│ ├── params.json # 平衡参数(数值/难度/速度)——数据驱动,改这里=调平衡
│ └── levels/ # 关卡数据——加文件=加关卡
├── src/ # 模块化游戏逻辑(按系统拆:input/spawn/score/physics…)
├── assets/ # 六类:sprite/character/effect/scene/ui/music(引用,非内联)
└── build.json # 构建配置
设计驱动力:因为工作室(LLM)将来要回来改它,所以必须模块化 + 数据驱动 + 资产分离 + 有 GDD——可定位、可局部改、可扩展。硬编码 blob 不可维护 = 不合格产出。
3.2 LLM 工作室的生命周期操作 + 构建/发布管线
graph LR
Brief[一句话/对话+六类素材] --> Scaffold[create:脚手架建项目]
Scaffold --> Proj[(游戏源项目<br/>版本化·可寻址)]
Proj --> Build[build:确定性构建<br/>项目→bundle+manifest]
Build --> Release[release:发布版本→feed过审]
Release --> Play[玩家试玩]
Play --> Data[遥测/反馈]
Data --> Iterate[modify/extend/fix/balance<br/>工作室迭代]
Iterate --> Proj
- create:brief+模板品类+素材 → 脚手架出结构化项目。
- modify:改某部件——换美术/调参/改关卡 = 确定性编辑源文件(免 LLM、秒级);改玩法逻辑 = LLM 只重生成那个模块。
- extend:加关卡/机制/内容 = 加文件,additive。
- build:源项目 → 可玩 bundle(确定性、可复现;RuntimeBuild 桩转真)。
- release:构建产物发布为版本,过审入 feed(复用现 B1 发布链)。
- maintain/iterate:据遥测/反馈,工作室回项目继续演进(闭环护城河)。
4. 七质量 → 生成产出硬契约
| 质量 | 落到生成产出的硬约束 |
|---|---|
| 长期/可维护 | 模块化代码 + GDD;工作室能回来定位并改 |
| 可扩展 | additive 内容模型(加关卡/资产/模块不重写) |
| 灵活 | 数据驱动(行为走 config/data,不硬编码) |
| 稳定 | 确定性构建 + 版本化 release + 回滚 + 构建门(九门/质量门) |
| 简单 | 轻游戏轻结构,不过度工程(够维护即可) |
| 高效 | 增量改+增量构建;确定性操作免 LLM;复用模块/资产 |
这是 v1 与两评审都没抓住的根:生成质量的真标尺不是"这次能不能玩",是"工作室将来能不能维护它"。配置驱动的结构化项目 = 既好维护又更好玩。
5. 与现有模块映射(非推倒,是各归其位)
project模块 = 项目/版本台账;game_version 的内容从"打包产物"升级为"源项目工件 + 构建产物双存",version=一次 release。studio模块 = 工作室编排层(create/modify/extend 生命周期操作的入口与编排)。runtime模块 = CI 构建(RuntimeBuild 桩 → 真:源项目→bundle);宿主/feed 消费构建产物不变(blast radius 收窄)。telemetry/feed= 反馈源 → 驱动工作室迭代(P-OPS-03/04「AI 内容诊断/一键迭代」自然落地)。- W-G1 worker = 工作室的"程序员",受生成产出结构契约约束。
6. 契约 delta(基座重写)
| # | delta | 说明 | 取代 v1 |
|---|---|---|---|
| C1 | 游戏源项目工件契约 | 项目结构 schema(game.json/design/config/src/assets)+ 版本化存储(源+构建产物双存) | 新 |
| C2 | 生成产出结构契约 | worker 必须产结构化源项目(真 gameConfig/真 assets/模块化 src),非硬编码 bundle;补现 gameConfig 占位/assets 空缺口 | 新(吸收 D5 的真需求) |
| C3 | 生命周期操作契约 | /studio/{create,modify,extend} + aigc RPC(mode/baseVersion/target/idempotency);modify 产物=新预览版,不动 currentVersion、不自动入 feed,仍过审发布 |
替 v1 D3,补评审 P0 |
| C4 | build 构建步契约 | 源项目→bundle+manifest+checksum,确定性可复现;打包产物 schema 不变(现 GamePackage) | 替 v1 D5(改包)——删 manifest 可寻址 |
| C5 | assetContext(六类) | 取代 attachments(废 R7),六类枚举一次定死四处同引;以平台 assetId/ref 为主、url 只读镜像;含安全/大小/token 预算 | 收紧 v1 D1 |
| C6 | analyze 智能确认 | 结果用显式 confirmedGoal 携带(无隐藏共享态);含跳过路径+失败枚举 |
收紧 v1 D2 |
| C7 | 回调面 | 改述为 worker job 模型(非冻结契约)+ DifyCallbackReqVO(#1)additive(带 baseVersionId/源项目引用);失败枚举处置评审 P2-1 |
改 v1 D6 |
| — | 玩法模板 | = 品类引导预设(影响生成 prompt/脚手架),不进 templateId 白名单/执行器(执行器仍 generic);从 M0 关键路径摘出 | 收紧 v1 D4 |
7. blast radius / 兼容 / 风险
- blast radius:后端 studio/aigc/project(version 双存)+ worker 生成产出结构 + runtime 构建步;宿主/feed/manifest 打包产物侧不变(比 v1 D5 小)。
- 兼容:打包产物 schema 不变 → B1 发布链/feed 真玩/宿主零回归;新增源项目工件为 additive 存储;generic 兜底保留;现有一句话生成空 assetContext = 现行行为。
- 最大风险(单点):便宜模型能否稳定产"可维护的结构化源项目"(数据驱动+模块化+资产分离),而非硬编码 blob。当前游戏未做到 → 这是生成侧的真升级,必须 W-G1 实测(结构化产出的成功率/成本是否仍过 ¥0.15+P75 门)。缓解:M0 先定最小项目结构(game.json+params+单 src+assets 引用),复杂结构随品类迭代;结构合规作为生成门的一道断言。
- 次风险:双存(源+产物)存储成本;确定性构建步要可复现(锁引擎版本/依赖)。
8. 验收 + M0 切片
- M0(基座第一切片):一句话 → 工作室脚手架出结构化源项目(game.json+config+src+assets 引用)→ 确定性构建出 bundle → play 真玩;源项目与构建产物双落库、可寻址。验"非一次性"=能从源项目重新构建出字节等价产物。
- 修改(生命周期):对源项目"换美术/改第2关"= 确定性编辑源文件→重构建→新预览版,旧版可回滚,未改部分行为不变。
- 生成质量门:产出过"结构化合规"断言(数据驱动/资产分离/模块化)+ 九门真玩。
- 非阻断:空 assetContext / 不 modify 时,现行生成零回归。
9. 待确认项
- M0 项目结构最小集:game.json + config/params + 单 src 模块 + assets 引用,够不够?复杂结构(多 src 模块/levels 目录)随品类迭代——可否?
- 生成产出结构契约是否设为 Phase 1 生成侧硬约束(创始人本轮倾向:是)——结构不合规即判生成失败(进九门断言)?
- 双存策略:源项目工件存 DB(JSON/文本)还是对象存储?M0 建议 DB(简单),大资产走 ref。
- 六类素材枚举定稿(图元/角色/特效/场景/界面/音乐)。
- modify 失败回滚 = 不建新版、base 不动(评审 P1-2 建议),确认。