本文对应标题中标注的版本;当前源码和适用范围请查看项目资料。
自动单元与构建检查
npm run game:test 检查读取到的原始 Bill 控制片段与新模块/桥接。包含 324 组瞄准输入、1,000 步固定随机序列、平台边界、组合键边沿、碰撞范围和异常清理。
构建与 HTTP 测试用明确标为 synthetic 的宿主环境包住真实控制片段;不是完整游戏。假锁仅在测试临时目录里使用,生产 baseline.json 不变,不存在生产 --force。
可选的真实浏览器状态对照
需你的完整游戏及素材、已安装 Python Playwright 与 Chromium。脚本不会自动下载依赖。 分别启动两个终端:game:dev(4180)和 game:reference(4181)。然后:
cd packages/mario-mix
python scripts/browser-compare.py这会使用已在第一期实际源码中看到的 ?test=1、window.__test、window.__mixTest、window.__mixReady,对三角色执行 7 组步进序列。
它检查真实引擎返回状态;使用固定随机数和虚拟输入,不代表真实手柄、键盘事件、音频听感或完整关卡已通过。
缺资源、页面错误或状态不同会记录 failed-or-blocked 并非零退出。R05 历史记录未执行此项完整游戏验证。
维护者手工检查
原版与候选分别新开页面。首选比尔;至少试马里奥与洛克人的基本起步/跳跃,防止桥接影响其他角色。
| 场景 | 预期 |
|---|---|
| 左右移动、正上、斜上、地面单下、空中单下 | 和原始对照相同;八向瞄准优先级不改变 |
| 上下同按、左右同按 | 和旧版一致,不私自“修正”优先级 |
| 空中先按住下+跳,落地继续保持 | 不自动穿平台;释放后重按才产生新边沿 |
| 地表普通砖/问号平台下+跳 | 允许既有下穿;hidden 或地面 row13 不可穿 |
| 敌人/弹丸穿过同一位置 | 不得到玩家专有碰撞例外 |
| 死亡、换角色、进入与离开基地 | 输入残留清理不退步 |
| 三角色死亡/暂停/胜利音频 | 没有因重构出现额外变化;R05 未修改音频系统 |
记录浏览器、设备、角色、场景、候选 SHA-256、步骤、结果、录屏证据;有一项未测就写未测。
发布门槛
docs/RELEASE_REVIEW.json 默认为 pending。完整回归、键盘、实体手柄、音频、许可核验和维护者批准,分别需要 reviewer 与 evidence。candidateSha256 必须等于待审核候选。
game:release-check 仅验证记录与哈希匹配,不替人判断证据真实性。它不会发布。未通过时仍可以开展文档/测试贡献,不应谎称游戏已能正式发布。