外观
运行验证与画面证据
先理解修改目标与已有路径,再实现、检查、运行、观察、修复与复验。长期设计继续按主题维护,进度与证据沿用个人开发工作流;运行报告只记录一次执行,不成为另一套项目进度或资产清单
按影响选检查
| 修改 | 必须覆盖的证据 |
|---|---|
| 纯文档、索引、Skill | 文档与引用检查、适用的工具测试、Wiki 构建;Skill 另查来源完整性和宿主发现 |
| 解析、几何、状态与恢复 | 对应单元测试和失败路径;影响实际场景时增加运行检查 |
| 玩法、场景、UI、镜头、材质或动画 | 对应真实入口与场景运行,记录明确输入、状态断言和连续画面;看图发现问题后修复并重跑受影响路线 |
| 资产 | 源图与来源检查、尺寸/尺度和导出检查、实际渲染;透明边缘用不同底色查看 |
先读 game/Cargo.toml、game/Cargo.lock 与相关实现。API 以已安装 Bevy 源码和同版本示例为准,复用世界模块、输入和应用组装,不因参考 Skill 升级引擎或替换插件
Capture 的使用边界
tools/capture.py 驱动正式入口或 map_viewer 的离屏模式,二者复用 game/src/capture.rs。Viewer 复用 WorldScenePlugin、真实模型与材质、白天成像和 FreeCameraPlugin。Viewer 脚本为 game/capture/viewer-tour.json,展示相机输入、移动、观察和停止;Viewer 当前没有人物碰撞、任务交互或角色动画,这条证据只证明已存在的控制与渲染路径
正式入口通过 game/capture/game-entry.json 记录标题、真实加载、固定镜头街区、暂停返回、清理与再次进入;指定 --binary game/target/debug/n-side,构建及参数见仓库 game/README.md。脚本等待实际状态而不强制跳过加载,墙钟超时持续生效;场景未就绪或进入失败页会留下原始原因并返回非零
人物尺度实验使用 walk-preview.json,由同一正式入口接受键鼠/手柄轴输入。脚点位移、高度、支撑、阻挡源与恢复次数从 PlayerState 记录;这些断言与镜头画面分别评审,具体参数和覆盖见实验契约。工具根据该场景追加 --walk-preview,不直接修改人物位置。walk-pause.json 继续覆盖暂停同帧、持有输入、继续和重入;相机位置与旋转上限按整个区间求峰值,不能只比较头尾相等
walk-focus.json 对正式入口注入窗口焦点输入,再由原有系统决定暂停与恢复。只有这类脚本才创建逻辑主窗口;无Winit、无真实窗口激活,证据注明模拟焦点。真实桌面切窗必须另行核对合成器活动窗口、实际刷新与输入,X11内部焦点或脚本退出成功本身不能证明桌面验收通过
walk-gamepad.json 在Bevy输入插件之前注入连接消息,插件负责实际移除和恢复Gamepad;原有输入、人物及暂停系统处理后续行为。记录模拟手柄的真实连接组件状态,脚本不能直接写游戏阶段。CPU覆盖同帧断连重连、持键、固定步及加载边界,渲染检查暂停提示与恢复画面;USB/蓝牙、操作系统驱动及物理按钮另有设备验收
新增玩法后扩展同一输入/状态路径和相应验收场景。脚本可以发送输入、选场景和声明期待状态,不能直接设置受验收结果,也不能另造只供录像的场景副本
从仓库根执行,以下命令可直接用于 fish:
sh
python3 tools/capture.py --script game/capture/viewer-tour.json --output output/capture/viewer-tour分辨率、帧率、帧数、输入事件、关键帧和断言在脚本中维护;确切字段和可用命令见 game/README.md 及 python3 tools/capture.py --help。相同场景对比保持这些参数一致,输出使用新的目录,保留失败记录
输出与 game/assets/ 分离,使用忽略的 output/capture/。保留脚本、源版本、参数、运行日志、状态检查、PNG 序列和关键帧;可用时由 FFmpeg 编码视频。没有编码器时明确报告视频未生成,已有连续帧仍可检查
固定模拟步长约束输入与运动采样,不代表跨平台、跨 GPU 的像素完全一致。当前路径没有随机决策时如实记录;未来引入随机系统时,种子必须接入其真实随机源,不能只在报告里写一个数字
运行与恢复
先完成资产与场景就绪检查,再开始验收时间线;离屏纹理在相机使用前建立,截图等待实际异步完成与文件写入。加载、截图、断言失败或超时返回非零退出码并保留诊断。宿主外层超时覆盖场景准备与应用启动,不能只在已进入场景后计时
最少验证一条成功路径及一条有代表性的失败路径,例如把移动断言设为不可能达成,确认程序明确失败。失败探针单独输出,不覆盖成功录像,也不修改正式游戏结果来制造失败或成功
图形能力不足时记录 NOT RUN,给出在 Vulkan 环境可执行的相同命令。需要宿主访问 GPU 时使用环境的正常授权入口,不把沙箱不可见设备误报为机器没有 GPU
机器检查与视觉观察
| 层次 | 能回答的问题 | 记录方式 |
|---|---|---|
| 机器断言 | 资源是否加载、Transform 是否有限、输入后的状态是否变化、释放输入后是否稳定、截图是否完整 | 条件、实际值、PASS/FAIL、失败原因 |
| 视觉自查 | 构图、遮挡、材质、文字可读性、动作衔接、反馈时机是否明显有问题 | 实际看的帧号或时间段、观察与未覆盖范围,标注 self-audit |
| 作者/陌生玩家验收 | 操作是否舒服、目标是否理解、因果是否清楚、是否愿意继续 | 真实操作者、输入方式、路线、原始反馈与协助情况 |
实际观看视频;没有视频读取工具时,抽取关键帧和跨越目标动作的连续帧检查。状态通过不能替代看图,看图不能冒充手感测试。只有评审者未读设计和源码、且使用真实录制与状态证据时,才称隔离评审或盲测
调查 UI 必须清楚表达玩家已观察的信息、当前可操作对象和必要反馈;尚未发现的世界真相与剧情谜底保留信息顺序,不把“意图可读”误用为提前解释答案
CI 与交付
普通 CI 执行不需要 GPU 的文档、工具、格式、编译、测试与地图检查。渲染作为独立的手动任务,运行在明确配置 Vulkan 与 FFmpeg 的 runner;未调度、没有 runner 或图形能力不足分别记为 NOT RUN,不折算为通过
交付说明列出实际执行命令、退出结果、场景与配置、证据路径及未覆盖项。将有价值的排障知识写回工程,将本轮观察留在对应任务记录;仅在真实反馈满足验收规则时更新工作包
来源与适配
本流程基于 Godogen prompts/runtime.md 与 Bevy 指南改编,Copyright 2026 Alex Ermolov,MIT,完整许可保留在仓库 third_party/skills/godogen/。改为复用现有 Viewer、按任务影响分级验收、沿用项目唯一状态源与 Codex 工具;没有采用新项目生成、自动升级或上游发布脚本
交互状态规则、画面自查与隔离评审的分工参考 abagames/agentic-gamedev-skills;原文、固定版本和署名见仓库 THIRD_PARTY_NOTICES.md,项目适配入口为 .agents/skills/nside/