Skip to content

Latest commit

 

History

History
131 lines (102 loc) · 10.8 KB

r03-r04-acceptance.md

File metadata and controls

131 lines (102 loc) · 10.8 KB

R03 / R04 验收记录

日期:2026-10-08。目标 Game/Mania 2026.1005.0、Framework 2026.921.1。 用户负责游玩及回放播放中的表现;本轮负责曲库、预览控制、回放读写和异常输入边界。 这是独立审查 R03/R04 的验收,不是路线图同名阶段。R03 的 OJM 资源政策仍未实施。

客户端结果

通过仅验收版启用的测试桥调用正在运行的原生服务。 测试前已保存停机 Realm、配置及原 DLL;没有修改源谱面库、清除曲库或运行 benchmark。 真实数据目录为 D:\osu-lazer,来源为 E:\o2jam。

项目 实际证据与结果
启动和 BMS 共存 BMS 2026.920.0.0 已载入;有关正式回放、图标、统计和编辑入口的补丁注册没有检查错误。不是完整 BMS 游玩/结算验收。
正常更新两次 两轮均找到 7,480 个路径、索引 7,028 个导入来源;没有需要写入的新来源或缺失星级,原生通知日志均到达 Update complete.。
更新后的数据保留 两轮之后的全部谱面身份、成绩元数据/关联/附件和收藏夹摘要均与基线相同。73,311 张总难度中 O2Lazer 为 21,082 张;535 条成绩、38 个收藏夹、305,193 个文件模型的数量不变。
预览暂停 两次间隔读取的时间均为 4,015.8467 ms,运行状态为 false。这里只证明音乐时钟和控制状态,不证明所有声音已停止。
预览跳转与恢复 暂停中前跳至 60,000 ms、后跳至 15,000 ms 均到达目标且保持暂停;恢复后时间继续推进。
同组难度切换 原生选择成功、音轨加载完成并继续运行,采样时钟从约 15.8 秒延续至约 17.7 秒。该选曲有一个音频采样,不能据此补记多 KS 混音听感。
模式切换 Mania → O2Lazer 均完成筛选、选择及音轨加载;恢复测试前选中的难度。动画外观没有实测。
正式回放读取 本地 O2Jam 与 MS 样本分别恢复 19,977 帧和 10,896 帧;MS 的负有限首帧时间仍接受。
原生导出 两个文件分别为 213,654 和 119,083 bytes,SHA-256 与原存储附件一致,没有重新编码。
原生重新导入 O2Jam 样本命中原生重复检查,没有创建新成绩;MS 样本的合法元数据被接受,记录分数、准确率、评级、最大连击及两种判定统计保持。下方另列文件名引起的原生替换行为。
临时库清空 正常清空、取消及清空后重启/原生文件回收共 3 项通过;成绩 ID、历史 Hash、分数和回放附件保留,已移除谱面的关联变空。没有清空实际曲库。
清理和重启 已撤销本轮 MS 导入产生的唯一替换;重启后上述全部数据摘要、数量与基线一致。两个原成绩 ID 可读,完整时间/动作帧摘要与重启前一致。

身份摘要不包含星级缓存、最后游玩时间或在线元数据等可正常变化的字段。 更新测试覆盖已有曲库的正常重复更新;不能替代首次整库导入、源文件变更、故障中断的实机验收。

附件文件名的原生行为

选中的旧 MS 成绩是正式 v5,但原谱面对象已不存在。原生导出因此使用 unknown 文件名, 与存储附件的原文件名不同。RealmArchiveModelImporter.CanReuseExisting 同时比较文件 Hash 和文件名;此次导入不满足复用条件,原生成绩服务软删除旧模型、建立新模型并恢复谱面关联。 这不是 R04 数值校验导致的数据改写,也不能将它记作“重复导入保持所有成绩 ID”。

新旧总分、准确率、评级、最大连击、统计、日期、Mod 和附件字节相同; 新模型 ID、谱面关联、附件文件名和未在归档中保存的 live Combo 不同。 单局 Combo 不是 MaxCombo,不属于本轮元数据非负规则。

验收清理时使用了备份中的原生模型,只恢复这一条原成绩并移除测试替换,没有整库回滚。 原生 RealmAccess 初始化会清理软删除模型,因此不能把其构造视为只读验证,也不能在 构造后才假定旧模型仍可 Undelete。记录了这个清理前提;项目生产逻辑未因此修改。

后续如果要求附件改名也严格保持成绩 ID,需独立讨论 O2Lazer 的重复导入政策, 不能扩大成所有 ruleset 共用的全局补丁。当前沿用原生处理。

用户 NoMod 新一局保存对照

用户于 2026-10-08 21:22:50 完成 fripSide – Fortissimo -From Insanity Affect [EX Lv.22], 本局无 Mod,使用 O2Jam 计分。随后只读取本局成绩并调用原生回放读取/导出,没有重新导入、 修改成绩或中断客户端。实际成绩由 535 条增加至 536 条,谱面身份及收藏夹摘要保持。

  • 本地成绩:513,895 分,93.5613% 准确率,最大连击 390;一个回放附件。
  • 原生 ScoreManager.GetScore 恢复 19,871 帧,时间 0 至 299,142.419 ms。
  • 原生导出 212,876 bytes,SHA-256 与存储附件一致。
  • 归档为 v5、判定版本 20261005、ruleset 为 o2lazer,全部帧接收标记为 true。 分数、去 Mod 分数、准确率、评级、最大连击、两类判定统计、日期、Mod、暂停、玩家、 客户端版本及谱面 Hash 与本地模型一致。

该记录确认安装版一局 NoMod 的保存、附件、原生读取与导出链路;不代替 MS 新成绩或 实际回放播放/跳转的游玩验收。证据为 .artifacts/r03-r04-acceptance/user-game-verification.json 和对应数据、回放读取快照;导出文件已归档到本工作区的验收目录。

用户 MS 新成绩与回放向前跳转

同日 21:36:18,用户完成同一谱面的 Mania Score 一局,随后播放回放并连续向前跳转。 用户反馈为“均正常,只测了向前跳转”;游玩、结算和本轮回放表现按该范围记录正常, 当时只测向前跳转;向后跳转已于后续补测,见下节。不要求重复已验证的正常流程。

  • 本地成绩:797,693 分,94.4472% 准确率,最大连击 626;Mod 为 MS。
  • 成绩由 536 条增加至 537 条、文件模型增加一个;观看回放未新增另一条成绩。 上一局 NoMod 成绩模型、谱面身份和收藏夹摘要保持不变。
  • 原生读取 19,986 帧,时间 0 至 298,984.514 ms;原生导出 214,265 bytes, SHA-256 与存储附件一致。v5、判定版本、完整帧标记及归档元数据与本地模型一致。
  • 日志记录 21:36:27 进入 ReplayPlayer、28 次非零向前跳转、最后到 298,400 ms, 21:36:48 进入结算;该会话未记录向后跳转,没有回放读取/保存失败。

证据为 .artifacts/r03-r04-acceptance/user-ms-game-verification.json、对应原生读取/ 导出/数据库快照及 user-ms-game-data-log-checks.json。此次没有重新导入或修改成绩, 仅将本次生成的导出归档到验收目录;既有用户导出保留。上述时间采用 Asia/Tokyo, 原生日志时间为 UTC。本谱面只有一个音频采样,用户反馈不替代多 KS、冷缓存或不同 设备的完整听感组合;没有实际输出采集。随后通过原生普通退出/启动完成重启验证:537 条成绩、全部成绩元数据/关联/附件摘要、谱面身份、收藏夹及文件数量均保持;两局 ID 与完整回放帧摘要不变,已恢复原选曲、预览时间和暂停状态。重启证据为 user-game-restart-verification.json。

用户补测回放前后跳转

同日 21:45:51 至 21:46:18,用户在重启后的同一客户端再次观看 fripSide – Fortissimo -From Insanity Affect [EX Lv.22] 的回放,完成前后反复跳转。 原生日志记录 47 次前跳、19 次后跳,例如 53,585.9 → 44,312.7 → 34,982.5 ms, 以及 240,478.0 → 124,793.3 ms 的连续回退;随后再次向前到 298,400 ms 并进入结算。 会话内没有回放读取、保存失败或异常记录。用户反馈“已测试”,未报告异常; 没有独立采集声音或判定画面,不能仅据日志声明所有播放细节和组合都已验证。

原生数据读取对照确认仍为 537 条成绩;全部成绩元数据/关联/附件、谱面身份、 收藏夹摘要和文件数量均与补测前一致。原 MS 回放仍恢复 19,986 帧,完整帧摘要 与保存后、重启后相同。此次只读取数据,没有修改成绩、重新导入或重启客户端。 证据位于 .artifacts/r03-r04-acceptance/user-backward-replay-verification.json 和对应原生数据/回放读取快照。

本次正常样本的前后跳转流程、NoMod/MS 保存、原生读写与重启对照已完成。 R03 的 OJM 剩余保护、多采样/冷缓存/设备与完整视觉组合,以及首次导入/故障恢复 实机矩阵仍是独立范围,不因这份验收记录自动关闭。

隔离异常验证

使用既有测试版生产 DLL,在独立临时 Realm/存储运行了 77 项过滤测试,全部通过:

  • O2JamReplayImportTest 全部 73 项:资源预算、外部元数据拒绝、明文/GZip、其他 ruleset 的未认领输入、原生有效导入/附件存储/重载、保存失败保分以及已有成绩播放。
  • OJN 预算的四项 Realm 验证:同步/后台超限计划没有预留或写入;扫描失败仍保留成绩、 回放和收藏夹;难度计算的源读取在返回载荷前拒绝超限。

没有向真实客户端导入恶意或巨大文件,也没有给真实源目录增删文件。 另按用户问题运行清空相关 3 项,其中新增真实原生重启/文件回收后的成绩与附件保留验证。 本轮合计 80 项全部通过,不与历史 250 项或 R03 数字累加。

部署与未验收范围

客户端安装的是本轮 R03/R04 加 opt-in TestSupport 的验收 DLL。 普通 Release 另行构建,二进制元数据确认 TestSupport 类型为 0;验收 DLL 有 1 个 TestSupport 命名空间类型,不作 release 资产。生产语义分层检查为 0 错误、0 越界、 0 过时例外;模块/存储/计分源边界检查通过。存储探针仅允许在编译守卫成立的 TestSupport/Persistence/Realm,生产六条精确例外、两个跨层 partial 不变。 操作日志、两轮更新结果、数据/帧摘要、停机备份、导出文件信息及 TRX 位于 .artifacts/r03-r04-acceptance/。本轮没有提交或推送。

Windows 窗口控制运行时初始化两次失败,客户端实测通过测试桥/原生日志完成。 通知是否出现/完成可从原生日志确认;通知布局、动画及其他视觉效果不能记作通过。 NoMod/MS 两局新成绩的本地保存及原生回放读取/导出已确认;用户确认本轮游玩、结算和 MS 回放向前跳转正常。两局新成绩重启后读取也通过,随后完成回放前后跳转补测及数据保留对照;完整视觉/音频组合仍未据此关闭。 没有改变核心判定、音频播放或生产持久化实现。