AI 自定义玩法:玩法包、MCP 与 Skills
状态:设计草案,2026-10-13。 本文记录后续方向,不代表已发布能力。本次只整理文档与路线图;玩法包导入、通用任务运行、MCP 服务、可安装 Skill、分享服务与实时模型接入均待实现。文中的格式、工具名和目录是拟定契约,尚无可调用端点或正式 JSON Schema。
目标与第一版范围
玩家描述想玩的故事,由自己使用的 AI 创作一个约十分钟的任务,试玩后用自然语言修改,再把固定版本分享给朋友。例如:“做一个广州塔夜间配送任务,可以选择绕路或穿过危险街区,最后有两个结局。”趣味来自路线、选择与后果;创作入口需要让玩家看懂生成了什么、怎样修改以及怎样开始玩。
第一阶段在已有广州地图中组合配送、探索、对白和分支,复用内置地点、角色与资源。救援、战斗和合作任务在对应宿主契约完成后再开放;能力清单未声明支持时,AI 应给出替代方案,不能虚构可运行机制。
生成后的玩法包可以离线运行,游玩者无需配置模型。创作者可以使用支持相关能力的外部 AI 客户端;Skill 加载方式和 MCP 配置依客户端而定,不承诺所有客户端都支持。游戏内置创作助手与自带模型账号的接入方式留待后续确定。
第一版不开放任意 JS、HTML、插件脚本、物理规则替换、官方经济写入或任意城市生成。实时 AI 导演独立分阶段推进,不作为离线玩法包的运行依赖。
已有基础与待补模块
当前 ADV.JS 剧情接入 已有固定剧本编译、按需剧情运行、宿主活动请求与存档恢复。登记、接单等请求由宿主检查前置条件,剧情不直接结算奖励。它提供了扩展思路,但目前没有通用用户剧本加载器或用户任务注册接口。
城市地图包方案 管理道路、建筑、水域和地点;玩法包描述如何使用某个固定地图版本。两种包分别管理版本与 hash,玩法包通过依赖引用地图,不复制城市数据或另建地图下载流程。首期使用内置广州,不依赖任意城市导入或 Workshop 发布先完成。
需补的模块是统一内容校验、受控任务注册与执行、玩法包存档隔离、试玩报告以及创作工具适配。MCP、文件导入和未来游戏内创作助手都调用同一套内容校验与宿主接口,避免形成不同的规则入口。
三层接入契约
| 层次 | 负责什么 | 输入与输出 | 规则执行者 |
|---|---|---|---|
| 玩法包 | 定义可加载、可保存、可分享的游戏内容 | 声明式内容 → 经校验的固定内容版本 | 游戏宿主 |
| MCP | 向外部 AI 提供上下文与创作操作 | 类型化工具参数 → 草稿、诊断、试玩结果 | MCP 适配器调用内容模块 |
| Skills | 教 AI 理解世界设定并完成创作流程 | 玩家需求 → 能力查询、创作、校验与迭代步骤 | AI 客户端 |
接入方向是外部 AI 客户端连接 GZA 的 MCP 服务。MCP 提供工具、只读上下文与可选提示模板;模型调用仍由 AI 客户端负责。本文采用这一区分,依据 MCP 官方服务端概念。
玩家需求 → 外部 AI 客户端 + 创作 Skill
↓ MCP / 文件导入
统一内容校验与草稿管理
↓ 固定内容版本
试玩宿主 → 玩法包导出
↓
玩家导入 → 离线游戏宿主Skill 的文字说明和 MCP 的工具注解都不承担权限校验;内容模块与宿主必须独立检查每个输入。玩法文本作为故事数据处理,不能成为客户端新增工具权限的依据。
玩法包规范草案 v1
目录与清单
拟定技术格式名为 dayun-gameplay,保持 dayun-kicker 技术标识;界面统一显示《GZA:暴力电驴》。建议逻辑目录如下,压缩封装与文件导入 UI 在实现阶段确定。
manifest.json # 身份、版本、依赖、入口、内容文件校验值
tasks.json # 声明式任务图与包内变量
dialogues/*.program.json # 经允许的编译器生成并再次校验的对白数据
sources/*.adv.md # 可选的编辑源,仅供创作工具编译
attribution.md # 内容、资源许可与署名第一版使用内置资源 ID,不携带新音视频、图片、字体或模型。以后新增媒体时复用 COS 资源与离线构建 的发布、恢复、字节数、SHA-256 与许可记录;新资源类型扩充共享工具白名单和 MIME 表,不另建业务下载器。AI 生成说明是来源记录的一部分,不能代替许可确认。
清单字段形状示例:尖括号必须替换为能力查询返回的真实值,文件字节数和 SHA-256 必须由内容工具计算;此示例不是可导入成品。
{
"format": "dayun-gameplay",
"schemaVersion": 1,
"id": "creator.tower-night-delivery",
"version": "1.0.0",
"name": "广州塔夜间配送",
"author": { "name": "创作者" },
"gameVersionRange": "<受支持的游戏版本范围>",
"map": {
"id": "guangzhou",
"version": "<固定地图版本>",
"contentHash": "<64 位小写十六进制 SHA-256>"
},
"hostRulesVersion": "<固定宿主规则版本>",
"hostRulesHash": "<宿主规则与算法身份 SHA-256>",
"requires": ["task.delivery@1", "task.explore@1", "dialogue.branch@1"],
"entryTaskId": "choose-route",
"files": [
{ "path": "tasks.json", "bytes": 2048, "sha256": "<实际文件 SHA-256>" },
{ "path": "attribution.md", "bytes": 256, "sha256": "<实际文件 SHA-256>" }
],
"assetRefs": []
}| 字段 | 契约 |
|---|---|
format / schemaVersion | 识别格式与破坏性结构变更;不支持的版本直接拒绝 |
id / version | 稳定作者命名空间与包 ID、SemVer 内容版本;导出后同一 ID / 版本只对应一份内容,未导出的编辑用 revision 区分 |
name / author | 展示元数据;作者名称不证明账号身份或发布权 |
gameVersionRange / hostRulesVersion / hostRulesHash | 声明游戏兼容范围并固定宿主规则及算法身份;仅满足版本范围不足以替代能力检查 |
map | 地图 ID、版本与组合地图内容 hash,包含路网、地点表及依赖资源身份;当前媒体版本不能单独代替它 |
requires | 必需能力及其主版本;宿主逐项匹配,不支持时禁止加载 |
entryTaskId | 唯一存在的任务入口,必须能到达至少一个合法结局 |
files | 包内全部内容文件的相对路径、UTF-8 字节数与 SHA-256;清单不列自身 |
assetRefs | 对受支持资源目录的固定 ID、版本及 hash 引用;首期仅允许内置资源 |
路径必须规范化为包内相对路径;拒绝绝对路径、..、符号链接、重复路径及未登记文件。未知字段按当前 schema 拒绝,扩展必须通过明确的版本和能力协商,不能靠静默忽略改变规则。
packHash 由内容工具生成,采用 RFC 8785 规范化清单 JSON 的 UTF-8 字节计算 SHA-256;files 按规范化路径排序,requires 与 assetRefs 按稳定 ID 排序,拒绝重复身份。清单记录的文件 hash 和资源 hash 固定所有依赖;packHash 不写回清单,避免自引用。源文本作为文件时也纳入校验。清单 JSON 对象键顺序与压缩容器元数据变化不改变身份;下载地址由外部分发目录解析,不进入清单。内容文件按实际字节校验,重排任务文件 JSON 的键也会产生新 hash。
任务、对白与宿主动作
tasks.json 包含 variables 与 tasks。变量必须声明类型、初值和范围;任务具有稳定 id、type、前置条件、参数以及成功 / 失败转移。地点、对白、任务和资源全部用稳定 ID 引用,禁止用自然语言地名猜测实际坐标。
| 首期任务类型 | 允许参数与行为 | 宿主必须检查 |
|---|---|---|
delivery | 已登记取件 / 交付地点、允许的物品模板、可选时限 | 路网与交付可达性、停车交接、背包、阶段条件 |
explore | 已登记目标地点、合法交互或到达目标 | 距离、楼层 / 支撑、通路、实际到达状态 |
dialogue | 校验过的 Program ID、分支选项与包内变量映射 | Program 能力、稳定选项 ID、允许的宿主活动 |
后续 rescue、战斗或刷怪能力需要各自的模板、数量上限、位置与阶段校验,并在能力清单明确发布。不能因为游戏有僵尸或救援玩法,就允许外部包直接调用其内部状态。
条件采用有类型的声明式表达式树,首期操作符为 all / any / not / eq / gte;叶子只引用已声明包内变量和白名单宿主事实。禁止 eval、任意函数名或读取全局存储。宿主动作首期限定为 startTask / showDialogue / setVariable / endPack;动作参数、变量写入范围和合法状态转移由能力清单及 schema 共同约束。
以下仅示意任务间引用;完整字段 schema 在阶段 P0 冻结。
{
"id": "deliver-quiet-route",
"type": "delivery",
"params": {
"pickupPlaceId": "<能力清单中的取件地点 ID>",
"dropoffPlaceId": "<能力清单中的交付地点 ID>",
"itemTemplateId": "<允许的物品模板 ID>"
},
"onSuccess": [{ "action": "startTask", "taskId": "quiet-ending" }],
"onFailure": [{ "action": "startTask", "taskId": "retry-dialogue" }]
}对白可继续使用 ADV.JS 作者格式,但编译后的 Program 同样是不可信输入。编译器、Program 版本和插件能力必须受支持;宿主插件仅暴露上述允许动作的受控映射,不直接复用官方剧情的登记、接单或章节结算权限。对白文本按纯文本呈现,不执行 HTML;不允许动态加载包内插件代码。
校验、加载与版本生命周期
统一校验至少包括格式、有限数值与单位、全部引用、能力版本、文件与依赖完整性、地点 / 路线可达性、分支终止性、合法状态转移以及预算。允许的重试循环需有显式退出和次数上限;运行宿主还必须限制同一 tick 内的转移数,阻止无限动作链。
预算由能力清单提供:包大小、文件数、任务 / 变量 / 对白字数、表达式深度、活动 NPC / 敌人数、动作速率、试玩时长和缓存上限。具体数值在 P0 按现有发布与设备预算确定,未确定前不视为可对外接入。新增内容必须按需加载,退出释放;不通过提高现有性能、存档或发布预算获得验收。
生命周期为 draft → validated → previewed → exported。草稿允许尚未解决的引用以便编辑,但不能运行;试玩前重新校验确切版本与依赖,导出前检查必要试玩证据和署名。任何编辑都产生新 revision,并使旧校验和试玩记录对新内容失效。未导出的草稿可沿用暂定内容版本;导出时检查 ID / 版本冲突,相同版本若已对应其他 hash 就必须升级版本。旧导出版本保持不可变,公开发布是后续独立状态,导出不会自动上传或发布。
校验报告按检查项返回 passed / failed / not_run,并列出严重程度、错误码、文件路径 / 字段路径与修复建议。能力清单将检查项分成三组:试玩前必须通过的 previewPreflight(格式、引用、依赖、能力、预算与静态路网可达性),试玩过程中执行的运行检查(实际导航、碰撞、状态转移等),以及导出必须有对应试玩证据的 exportRequiredChecks。前置项未完成或失败时不能启动试玩;后两组在启动前可以为 not_run,导出时再检查必需证据。结构校验通过不代表实际可达或玩法已验证;尚无实机数据时必须保留未验证范围,不能用“valid”概括所有验收。
draftHash 标识编辑快照,不冒充最终 packHash。试玩前使用固定编译器与能力版本生成并冻结候选内容,计算候选 packHash;报告同时绑定 draft revision / hash 和候选 packHash。导出复用该候选内容,不重新编译成另一份字节;编译器、规则或依赖变化使证据失效,需生成新 revision 并重新校验与试玩。
首次导入若缺少固定地图或资源,安装流程先恢复、校验并原子切换;失败保留当前有效内容。运行开始后不临时联网取模型或资源。更新同一包需新内容版本,保存旧版直到新版通过检查;删除或失效的地点不能悄悄映射到其他地点。
存档、成绩与合作身份
包内进度按玩家、包 ID、内容版本、packHash 与地图身份隔离。保存有限的任务状态、包内变量、随机种子和已确认事件序号;不复用官方剧情快照或官方背包。包升级迁移需显式声明、单独验证并保留原档;没有迁移时以新进度开始,不能覆盖旧档。
任务状态变更与包内结算在宿主原子提交,操作 ID 防止重试、重复输入和恢复重播。自定义分数只属于该包与规则版本;不能写官方排行榜、云币、购买权益或制服解锁。第一版不提供外部奖励动作。
固定内容、地图、宿主规则与种子用于重复试玩;不承诺跨平台物理逐帧一致。合作阶段需所有客户端和权威端匹配 packHash / mapContentHash / hostRulesVersion / hostRulesHash / seed,不一致拒绝入房。这里 mapContentHash 对应清单的 map.contentHash。权威端执行任务,客户端只提交允许的交互意图,不能报告“任务完成”作为事实。
MCP 接入规范草案
连接与能力发现
服务技术名拟为 dayun-kicker-mcp-server,工具使用 gza_ 前缀。先考虑本地创作服务的 stdio 接入,远程服务使用 Streamable HTTP;与浏览器 / 桌面试玩宿主的会话桥接另行设计,不能把游戏页面本身视为已经存在的 MCP 服务。实际协议 / SDK 版本在实现时核对并固定,下面业务字段不替代 MCP 标准封装。
gza_get_capabilities 必须返回业务契约版本、受支持 schema、游戏版本、hostRulesVersion / hostRulesHash、地图身份、任务类型、条件操作符、动作、地点 / 物品 / 资源目录入口、全部预算,以及当前可执行的工具和试玩目标。AI 先查询再创作;不支持的能力应报告,不能降级成语义不同的任务。
本地服务只处理授权的创作目录与已配对试玩会话,不提供任意路径读写或系统命令工具;网络桥接限定本机地址,校验来源并使用短期会话凭证。远程账号服务按 MCP 授权规范 实施认证,逐请求检查资源所有权与权限。模型密钥由外部 AI 客户端持有;游戏内容、试玩报告和浏览器资源中不写入密钥。
工具与类型
以下全部待实现。PackDraft 定义为清单编辑数据及 content: Record<包内相对路径, UTF-8 文本>;只接受允许的 JSON、剧本与署名文本,不接受 Base64 媒体或宿主文件路径。草稿缺少的校验值由内容工具生成,导出时必须完整。
| 工具 | 主要输入 | 主要输出与副作用 |
|---|---|---|
gza_get_capabilities | 无 | 返回当前能力与契约版本,只读 |
gza_list_places | mapId, mapVersion, query?, tags?, cursor?, limit? | 返回该地图的稳定地点 ID、可用任务标签、可达性摘要与 nextCursor;只读 |
gza_validate_pack | pack 或 { draftId, revision },二选一 | 返回对应内容 hash、环境身份、分项诊断和未执行检查;不创建草稿或启动游戏 |
gza_create_draft | pack, idempotencyKey | 创建私有草稿,返回 draftId, revision, draftHash |
gza_update_draft | draftId, expectedRevision, pack, idempotencyKey | 完整替换草稿;冲突拒绝写入,返回新 revision 与 hash |
gza_preview_pack | draftId, revision, targetId, seed, idempotencyKey | 校验后在已配对的独立试玩会话启动;返回 previewId 与状态,不覆盖玩家存档 |
gza_get_preview_result | previewId, cursor? | 返回 queued / running / completed / failed / cancelled、事件摘要、检查项与后续读取游标;只读 |
gza_export_pack | draftId, revision, idempotencyKey | 再校验并生成固定玩法包,返回 packHash、受控下载句柄与验收摘要;不公开发布 |
分页有明确默认值与上限,由能力清单公布,超限拒绝;不返回完整地图或无界日志。地点的静态连通摘要不足以证明某辆车能完成交付,试玩仍需使用实际导航与碰撞检查。
写工具的幂等键作用域为主体、工具和目标,同一键 / 同一输入返回原结果,同键 / 不同输入返回冲突;保留时长由能力清单公布。expectedRevision 防止并发覆盖。hash 用于内容身份,不能代替所有权检查、身份认证或发布授权。
工具声明输入 / 输出 JSON Schema,成功返回结构化数据和简短文本摘要;业务失败通过工具结果 isError 报告错误码、字段路径、可否重试与修复建议,协议错误沿用 MCP 标准。预期错误包括 UNSUPPORTED_SCHEMA、UNSUPPORTED_CAPABILITY、INVALID_REFERENCE、BUDGET_EXCEEDED、REVISION_CONFLICT、DEPENDENCY_MISSING、PREVIEW_UNAVAILABLE 和 NOT_AUTHORIZED。schema 与预算检查失败不能盲目重试。
工具注解如实标记只读、破坏性、幂等及外部交互行为,但权限由服务端落实。创建、更新、试玩和导出只作用于用户已授权的草稿或会话,不内置购买、邀请、公开发布或官方进度写入。
Resources、Prompts 与试玩结果
只读上下文拟包括 gza://schemas/gameplay/v1、gza://capabilities、gza://maps/{id}/{version}/places、gza://templates/{id} 与 gza://drafts/{draftId}/{revision};后者必须验证草稿所有权。Resources 是创作上下文,不能绕过工具的输入校验。
可选 Prompts 提供“创作十分钟任务”和“根据试玩结果调整任务”;完整流程仍由 Skill 描述。缺少 Prompts 支持不影响工具接入,缺少 Skills 支持也可按文档手动执行。资源读取 / 订阅和长任务机制按所选 MCP 版本实现,不自造协议;试玩首期可以按受限游标查询。
试玩报告绑定草稿 revision / hash、地图 / 规则身份与种子,记录任务转移、分支覆盖、实际用时、卡住位置、拒绝的动作、重复结算检查和未覆盖输入 / 设备。AI 可以提出修改,但不能把未覆盖分支标为通过。报告只暴露必要摘要和诊断,不包含账号凭证、完整玩家存档或私人聊天。
Skills 接入规范草案
创作 Skill 拟名 gza-create-gameplay,采用 Agent Skills 标准目录与 SKILL.md 格式。这里只规定内容,不创建或安装实际 Skill。name 与目录一致,description 说明任务用途和触发场景;兼容信息声明需要的客户端工具与 GZA 业务契约版本。
gza-create-gameplay/
SKILL.md
references/
gameplay-pack.md # 内容契约、版本、限制与错误处理
world-guide.md # 广州世界设定与虚构内容的标注
mcp-tools.md # 工具参数、权限与典型调用
assets/templates/
delivery.json
exploration.json
branching-dialogue.json首期 Skill 以说明和轻量文本模板为主,不依赖安装脚本或打包可执行程序。模板和参考文档声明适用 schema / 能力版本,更新时保留旧版适配记录;Skill 自身版本放在 metadata 中。allowed-tools 的支持因客户端而异,不能作为服务端授权依据。
Skill 必须教 AI 按以下流程工作:
- 从玩家描述提取时长、主题、难度、地点与选择;只对影响玩法的缺失信息询问,常规参数采用明确默认值。
- 查询能力与固定地图地点,只使用真实目录中的 ID;把不支持的诉求转成可选替代方案并说明差异。
- 从受支持模板创作任务图与对白,保留稳定任务 / 选项 ID,补齐失败、重试、退出和至少一个结局。
- 运行统一校验,逐项修复阻断问题;保存草稿并记录 revision / hash。
- 在已授权目标中启动试玩,读取结果,区分实际通过、失败和未覆盖范围。
- 按反馈创建新 revision,重新校验、试玩;“更难一点”应修改已公布的时限或分支参数,不能改物理或凭空刷怪。
- 导出固定版本,并交付玩法说明、地图依赖、许可 / 署名与未验证范围;公开分享另走发布流程。
Skill 必须明确:故事文字和模型判断不直接完成任务、发放奖励或改变官方状态;不能读取密钥、覆盖官方存档、修改任意源码或调用发布工具来完成创作。文件导入路径与 MCP 路径最终使用相同内容校验,客户端缺少 MCP 时需明确说明其可完成的步骤,不冒充已执行试玩。
后续实时 AI 导演
实时 AI 导演在任务完成、玩家选择、失败或阶段切换等离散事件后提出后续内容,不进入逐帧骑行、碰撞或战斗循环。输入使用有界事件摘要和允许的世界事实,输出是带会话、期望任务 revision、过期时间及操作 ID 的动作提案。
宿主重新校验提案的能力、当前阶段、位置和预算,原子接受或拒绝;过期回复、重复请求和已结束会话不能再次生效。合作场景只由权威端请求和应用提案,其他玩家不能分别调用模型产生分歧。联网模型通过单独的提供商适配处理,MCP 不承担模型执行。
必须有固定作者内容作为无模型、超时、断线或无效输出的兜底,并提供退出 / 关闭选项。费用、请求频率、等待时间、数据范围和缓存规则在启用前明确;存档保留已接受的决定,读档时不重新请求模型改写过去。实时 NPC 闲聊、动态救援或 AI 队友分别开放能力,不与第一版离线内容混为一项完成状态。
路线图与验收
以下是后续顺序,不承诺发布日期。先完成现有城市任务体验与性能门禁,再增加开放创作入口;各阶段详细勾选状态见 路线图。
| 阶段 | 交付范围 | 必须满足的验收 |
|---|---|---|
| P0:契约与样例 | 正式 schema、能力目录、版本 / hash 规范、错误模型、预算与三个文本模板 | 配送、探索、分支对白样例均可验证;无效引用、脚本、未知能力、越界数据被拒绝;地图包和玩法包身份清晰 |
| P1:离线玩法包 | 统一校验、任务注册 / 执行、独立进度、本地导入与退出 | 十分钟任务可玩、失败可重试、两种结局可走通;退出 / 重启后恢复且不重复结算;恢复资源后无模型离线完成 |
| P2:MCP 与 Skills | 本地创作连接、草稿 revision / 幂等、试玩报告、Skill 与导出 | 从一句话生成 → 校验 → 试玩 → 自然语言修改 → 再试玩 → 导出闭环;权限 / 并发 / 断开恢复检查通过,无虚构工具执行 |
| P3:分享与合作 | 固定版本分发、安装回退、权威端能力登记;再开放受控救援 / 战斗模板 | 朋友无需模型可玩同一版本;所有端身份一致;不匹配拒绝、失败更新保留旧版、官方成绩与包内进度隔离 |
| P4:实时 AI 导演 | 有界事件、动作提案、提供商适配、固定兜底与费用控制 | 超时 / 断线 / 无效 / 过期 / 重复回复均有确定行为;合作权威一致,模型等待不阻塞模拟,恢复不重复请求或结算 |
实现阶段按范围检查桌面、手机、键盘焦点、手柄、旧存档、资源释放与现有发布 / 性能预算。自动分支覆盖和静态可达性不能代替实际操作与实机验收;验收记录保留失败和未覆盖环境。性能诊断继续遵循 游戏性能优化手册,不得用局部绘制数下降或本地 RTT 证明整体收益。
P0 还需确定实际地图快照版本来源、地点目录规范、各项具体预算、最低支持游戏 / ADV.JS 版本、压缩封装与试玩目标配对方式。P3 再确定分享平台、内容报告 / 下架与 Workshop 分发;P4 再确定模型提供商与费用方案。这些待定项不改变三层职责、宿主权威及官方状态隔离原则。
AI 可执行待办计划
本节把上面的设计拆成可独立审阅的工作包;勾选表示对应证据已经验收,不表示只写了文档或存在同名文件。范围是 AI 创作离线玩法包及其工具链,不把固定 NPC 对白、交通 AI 或已有僵尸行为计作模型接入。
基线、复用与真实缺口
初次方案于 2026-10-13(北京时间)核对远端默认分支:公开文档基线为 gza@99ad18b,游戏基线为 dayun-kicker@e353b92。本轮文档审阅已更新至 gza@ecd6df2,保留新增的僵尸生存设计;游戏主分支已推进至 dayun-kicker@011162fe,首批补丁的适配与集成验证仍在进行。下方核对结果及历史回归不替代新基线验收;每次实现与验收仍须记录当时的完整提交 SHA。
| 范围 | 核对结果 | 对实现的约束 |
|---|---|---|
| 固定剧情 | 已有固定 Program 编译、按需会话、宿主活动白名单、关闭取消和恢复;见 ADV.JS 接入 | 复用编译 / 运行时边界,新增受限包适配器;不把官方剧情插件直接暴露给外部包 |
| 官方任务与存档 | 已有教学配送、首章分支与据点进度;既有剧情数据和街区存档有大小约束 | 新建包内命名空间与结算事务,不挤入官方剧情快照,不增加官方奖励动作 |
| 开放创作 | 初次在默认分支目录、入口和关键词核对中未发现正式 dayun-gameplay 加载器、gza_get_capabilities 工具或创作 Skill;现有正文也标明待实现 | P0–P2 仍未验收;若后续分支已有实现,先对照本节补证据,避免重复开发 |
| 现有门禁 | 剧情接入记录保留入口体积失败,路线图保留移动冷启动未通过项;本次未重跑 | 历史失败是重新测量的输入,不能直接宣称当前主分支仍失败,也不能以新文档覆盖失败记录 |
公开正文只保留模块职责、公开文档链接和验收结论;私有源码、原始日志、测试存档及凭证留在各自授权环境。游戏仓库的旧文档入口继续指向本页,不复制第二份正文。
顺序与依赖
A0 → A1 → A2 → A3 → A4 → A5 → A6 → A7 → A8 → A9 为主路径。A1 的目录取证和 A2 的无界面契约测试可与 A0 基线复测并行;A0 的城市任务与性能门禁必须通过后,才进入 A3–A5 的可玩宿主及开放入口。A10 实时模型独立排期,不阻塞离线闭环。
每个工作包一次只改变一个主要边界,交付代码 / 测试 / 同步文档和验收记录。下列目录属于建议落点,创建前检查现有布局;已有同职责模块应扩展而非重建。通用 schema、hash、诊断与任务状态机放在无 UI、无网络的共享内容模块;城市适配器留在游戏宿主;MCP 服务不得导入渲染器。
| ID / 优先级 | 工作包与边界 | 依赖与交付 | 完成条件 |
|---|---|---|---|
| A0 / 最高 | 冻结基线与门禁 | 独立记录当前提交、Node / pnpm、地图 / 资源身份、测试命令和环境;重跑现有剧情 / 存档定向回归,再核对发布和冷启动预算 | 每项明确 passed / failed / not_run;城市任务线实玩与现有预算有当前证据,失败项有复现与修复归属;不修改预算消除失败 |
| A1 / 最高 | 地图、地点与规则能力快照 | 定义组合地图身份、稳定地点及允许物品 ID、规则版本 / hash 的生成来源;先输出只读 fixture,不接模型 | 同输入两次生成一致;道路 / 地点 / 规则有效变化使对应身份变化;缺失地点、旧身份、重复 ID 被拒绝;预览地图或媒体版本不能冒充运行地图身份 |
| A2 / 最高 | 正式 schema 与纯校验器 | 依赖 A1;建议共享内容模块包括 manifest / task / expression / report schema、规范化 hash、诊断、三个文本 fixture | 三个合法样例通过;下方负例全部有定向测试;相同错误稳定返回 code / file / field / severity;只校验不读玩家存档、不联网、不启动游戏 |
| A3 / 最高 | 受控任务状态机与宿主适配 | 依赖 A0–A2;实现 delivery / explore / dialogue 和四类允许动作;使用可注入时钟 / 种子 / 世界事实 | 宿主核实真实交互;伪造完成、越界变量、未授权活动不能改变状态;循环与单 tick 转移有界;重复操作不重复提交;禁止 eval / 包内代码加载 |
| A4 / 最高 | 隔离进度与恢复 | 依赖 A3;独立玩家 / 包 / 版本 / hash 命名空间,持久化已确认操作;保留旧官方存档 | 两个包、同包两版、两个玩家互不覆盖;在提交前后模拟中断,恢复不重复结算;损坏档不覆盖好档;无迁移声明时新版本从新进度开始 |
| A5 / 高 | 本地导入、十分钟样例与退出 | 依赖 A4;首个完整例子采用内置广州地点、两条路线、两个结局;共享 UI 与原输入系统 | 两个结局分别实际走通;失败重试、取消导入、重复点击、关闭后迟到回调、退出 / 重进均验证;依赖恢复后断网可完成;退出释放资源;官方存档前后对比不变 |
| A6 / 高 | MCP 只读工具与草稿事务 | 依赖 A2、A5;先 stdio,固定协议 / SDK 版本;实现能力 / 地点 / 校验与 create / update,复用同一内容模块 | 未授权草稿拒绝;分页有上限;并发 expectedRevision 冲突保留原稿;同幂等键同输入返回原结果、异输入冲突;连接中断后结果可确认;不开放任意路径或命令 |
| A7 / 高 | 配对试玩、报告与导出 | 依赖 A6;预检 → 冻结候选 → 独立试玩 → 结果游标 → 导出 | 未配对目标拒绝;全部五种试玩终态 / 中间态可观测;旧 revision、旧规则或旧地图证据不能导出;导出复用试玩过的字节,取消 / 断连不覆盖官方会话 |
| A8 / 高 | 创作 Skill 与端到端闭环 | 依赖 A7;轻量 SKILL.md、版本化参考、三个模板;分别测试 MCP 客户端与文件导入路径 | 以同一需求完成创作 → 试玩 → 修改 → 再试玩 → 导出;不支持能力有明确替代说明;提示注入内容不能新增权限;没有工具支持时不声称已试玩 |
| A9 / 后续 | 固定版本分享与合作 | 依赖 A8;先分享 / 安装原子回退,再接权威合作;救援和战斗分别登记新能力 | 更新失败保留旧包和旧档;所有端内容 / 地图 / 规则身份及种子一致才入房;客户端伪造完成被拒;未经单独授权不上传 / 公开发布 |
| A10 / 实验 | 实时 AI 导演实验 | 依赖 A8,合作需 A9;先假提供商验证,再单独确定真实服务与费用 | 超时、断线、畸形、过期、重复和跨会话回复均确定兜底;恢复不重请求或重复执行;费用 / 速率上限可测;模型等待不阻塞模拟 |
表中“最高 / 高 / 后续 / 实验”表示推进优先级;前文 P0–P4 表示产品阶段。A0–A2 对应阶段 P0,A3–A5 对应阶段 P1,A6–A8 对应阶段 P2,A9 对应阶段 P3,A10 对应阶段 P4。
A2 必测的安全与一致性负例
- 绝对路径、父路径逃逸、符号链接、路径规范化后重名、未登记文件;若选择压缩封装,再覆盖解压后尺寸 / 文件数超限与压缩炸弹
- 未知字段、未知 schema / 能力、非法 UTF-8、非有限数值、超长文本、超深条件树、变量类型 / 范围越界
- 内容 hash 不符、缺失固定依赖、同 ID / 版本不同内容、资源身份重复;清单键顺序变化保持身份,内容文件字节变化改变身份
- 不存在地点 / 任务 / 选项、无合法结局、无上限循环、动作链超限;静态通过时运行检查仍为 not_run
- HTML / 脚本 / 动态插件、原型污染键、官方奖励 / 背包 / 全局存储请求;故事文字中的工具调用要求只当数据
- 校验成功后再编辑、替换地图、升级编译器或规则;旧 preview 证据失效且不能被导出复用
阈值必须来自 A1/A2 固定的预算配置,以“阈值内 / 等于阈值 / 超出阈值”三组用例验证。不得只在文档写“有上限”而实现无界;具体数值尚待测量,不在此凭空承诺可用容量。
首批实现任务:只做 A1 + A2 的无界面切片
A0 同步整理当前回归结果。第一批代码以独立共享内容模块为范围,不引入 UI、MCP SDK、模型服务、新媒体或线上状态变化:
- 读取现有地图、地点、物品和规则来源,写一份来源映射与待定项;不能把人工复制的坐标当成正式能力目录
- 固定 schema、错误结构、hash 算法与预算配置,并补配送 / 探索 / 分支对白的最小合法 fixture;正文已有 JSON 仍是示意,不直接当成可导入样例
- 实现纯校验与身份生成,先跑合法 / 恶意 / 边界测试;动态可达性仅登记 not_run
- 交付定向测试结果和公共契约变更说明,列出 A3 的接入点;按批准范围提交独立变更,审阅与当前基线验证通过后再合并;不将合并等同于部署验收
首批停点:三个 fixture 和负例矩阵通过且静态报告稳定,或遇到必须由维护者确定的规则 / 地图身份 / 预算来源。遇到阻塞写明可继续的独立项与所需决定,不用跳过校验或临时放宽预算继续。
2026-10-13 云端首批实现记录(历史基线,集成验收中)
以下记录来自 dayun-kicker@e353b92 上的首批云端开发切片,范围刻意小于 A1/A2 完整验收;针对新主分支 011162fe 的适配、地图快照更新与验证尚未完成:
- 地图检查器复用实际地图组合、导航图和地点生成流程,输出只读地点目录、分来源数据 hash、组合数据 / 导航图 / 地点 hash 与独立草稿快照 hash。完整地图与旧版缺少输入的快照可区分;重复地点和非法坐标拒绝。不把已有媒体版本、预计算布局 hash 或草稿 hash 宣称为最终玩法包地图身份
- 清单纯预检接收 UTF-8 字节与内存内容,要求调用方明确提供预算、地图 / 规则身份及能力 / 资源白名单;检查未知字段、schema、路径、重复键、原型污染键、UTF-8、有限数值、文件字节与 SHA-256。清单键顺序和文件登记顺序不改变候选清单身份
- 该切片不接受文件系统路径、压缩包、模型请求或运行指令。报告固定禁止试玩;任务图、对白 Program、静态可达性与实际运行继续为
not_run。三个任务类型仅用于清单层测试,不代表三个合法可玩模板已完成;源代码 / HTML 等内容语义也尚未通过后续内容检查 - 生产玩法包预算、正式组合地图及规则版本、外部物品模板和受限编译器契约仍待冻结。现有官方存档 / 剧情快照限制只作为参考,不直接挪用成玩法包容量。测试阈值只用于边界测试,不是产品承诺
历史云端回归:上述旧基线与首批补丁曾完整串行运行通过 301 个测试文件、2,025 个测试;该结果不能作为 011162fe 或后续提交的验收证据。补丁中的 pnpm test:cloud 复用原资产检查与恢复流程,只把测试 worker 限制为 1;默认开发 / CI 命令、隔离、全部测试、断言和超时阈值不变。此前默认并发与两 worker 回归分别出现 5 个和 1 个超时;在未改动源码的对照中,也可通过重场景测试并发复现墙钟超时。分段诊断定位于场景准备的负载敏感性,不据此宣称游戏逻辑故障;串行通过不替代冷启动、浏览器或实机验收。
因此 A0–A2 保持未完成状态,A3 及以后尚未开始。首批代码须完成新基线适配、独立审查和当前回归后,才能按授权合并;这份公共记录不含私有源码或原始日志,文档本身的合并不代表游戏补丁已合并、功能已验收或生产已上线。
验收记录、回退与风险
每次验收记录 工作包 ID / 完整提交 SHA / 测试命令 / 环境与渲染后端 / 地图及规则身份 / 通过、失败、未执行 / 证据位置 / 回退步骤。报告中区分内容单测、浏览器模拟输入与物理设备;Linux 软件渲染不能替代手机或 Steam Deck 验收,静态路网也不能替代实际交付。
- 文档变更:运行公开仓库的
pnpm assets:git-check、pnpm docs:check、pnpm docs:typecheck、pnpm docs:build和git diff --check - 游戏变更:先跑新内容模块定向测试,再按范围跑既有剧情 / 配送 / 存档 / 输入回归、
pnpm typecheck、pnpm build、pnpm verify:performance、pnpm verify:release;最终候选执行既有pnpm release:check,不能用局部通过代替总门禁 - 包功能按需加载并保留关闭入口;A1/A2 回退为移除独立模块及调用,A3–A8 回退先关闭自定义入口、保留隔离档,再回退对应提交;绝不通过删除官方存档回退
- A9 安装采用校验后原子切换、保留旧内容;A10 默认关闭,失败回到固定作者内容。真实发布、跨库公开源码、付费 API 与凭证配置各自需要明确授权
最大风险依次为官方状态污染、地图身份不稳定、把静态校验误报为可玩、旧试玩证据用于新内容、入口体积 / 冷启动回归。分别由 A3/A4 的隔离事务、A1 的身份生成、A5 的实玩、A7 的证据绑定和 A0 的既有门禁控制。A1/A2 完整验收前必须决定预算数值及依据、正式地图身份来源、支持的编译器版本;封装格式和配对方式最晚分别在 A5、A7 开始前冻结。
参考规范
以下外部文档于 2026-10-13 核对;正式实现仍需核对当时客户端与 SDK 的兼容版本。本文的 GZA 工具名、资源 URI 与玩法包字段是本项目提案,并非外部标准规定。