• v0.7.5 12041f2e58

    zijunchiang released this 2026-09-18 03:03:50 +08:00 | 1 commits to main since this release

    OpenDance Studio Web 服务端 v0.7.5

    两个真实缺陷修复(都由跨端边界验收暴露)+ 跨端边界验收新增两类场景。

    契约快照不变:rest-api 0.5.0 / websocket-keypoints 0.2.0 / data-models 0.7.0 /
    skeleton-topology 0.2.0 / model-formats 0.5.0 / database 0.4.0
    (与 opendance-windows / opendance-android 逐字节一致)。

    一、上传落盘:去重命中时删掉了唯一副本

    persistTempFile(动作 / 模型 / 场景上传走的通路)在 sha256 去重命中时
    直接删掉刚上传的临时文件并返回旧记录。若旧记录指向的路径已不存在
    (换过 STORAGE_DIR、只恢复了数据库、手工删过文件),上传仍返回 201,
    但后续全部失败:

    ERROR [PreprocessService] 动作 #7 预处理失败:ENOENT ... /storage/motion/2026/09/a8/<sha>.vmd
    

    实测就是在本机的验收环境上撞到的(换过存储目录后动作预处理直接 500)。
    persistBuffer(内存通路:关键点序列 / 缩略图 / 转换产物)早已有「文件缺失则按
    原路径补写」的兜底,这条通路漏了。

    修复:去重命中时先确认文件存在;缺失则按记录里的原路径 rename
    (跨设备退化为 copyFile)补写,只有确认目标存在才删临时文件。

    新增 test/storage-persist.spec.ts(5 项)。反向验证:临时还原修复后,
    「去重命中但文件已丢失」这条立刻失败;恢复后 5 项全过。

    二、不可用模型的原因归因不准确

    unusableReason() 原来只要 stats 里有 humanoid 数字就归因于 humanoid,于是
    一个直接上传的 .glb(骨架完全合规、drivable = true、只是没有 VRM 容器)
    会被写成「humanoid 不达标(19/22)」—— 审核界面据此会把修复方向引到
    「重新绑定骨骼」,而实际要做的是「以 VRM 交付」。

    用真实素材实测(PMX → Assimp → GLB,886 KB):

    原因文案
    修复前 humanoid 不达标(19/22),未产出 VRM
    修复后 未产出 VRM(格式为 GLB;humanoid 覆盖 19/22 已达标),需重新以 VRM 交付才能进入客户端目录

    现在按 drivable 区分:不满足 16 根必需骨才归因 humanoid;达标但没有 VRM 容器
    则明确说明"已达标"。新增 2 项单测(model-usability 5 → 7 项)。

    三、跨端边界验收(Windows 客户端 × 本服务端)

    accept-integration.sh 新增两类场景,两端都断言:

    1. 不可用模型:真实 PMX 用 Assimp 转 GLB 后入库(等价"管线只产出 GLB")→
      usable=false、原因准确、不进入 catalog/export、defaultModelId 不受影响;
      包内客户端的 bundle.models 里没有任何非 VRM 模型;
    2. 场景 config 只给最少字段({physics:{gravity:{y:-9.8}}})→ 服务端补齐默认
      (碰撞体 auto、地面 0.6 / 45°、静风、相机 follow、环境光 1、出生点 1 条),
      客户端解析后逐项一致。

    四、发布前自检(本版实测)

    $ npm run verify
      ✓ 契约 6 项 / 35 条路由 / 版本一致(0.7.5)
      ✓ 27 个文件 309 项测试(原 26 / 304)
      ✓ 产物级实体注册核对(dist/entities 6 项含 Scene)/启动冒烟
    $ bash web-server/scripts/accept-release.sh <tar.gz>      # 对发布包本身的验收
      ✓ /health v0.7.5 / scenes.available=true / 包内 smoke 全过
    $ 跨端集成验收(Windows v0.2.5 包内客户端 × 本服务端)
      ✓ 目录四类资源 / 场景物理参数逐项 / 关键点 2901 帧 / 不可用模型不进目录 / 最简配置补默认
    

    包内全部 356 个文件已逐字节核对:179 个源码/文档与 tag v0.7.5 一致,
    177 个构建产物与工作树构建一致(0 处不一致 / 0 处多余 / 0 处缺失)。

    五、部署提示

    • 本次不涉及表结构变更(迁移仍为 6 个),可直接替换程序文件后重启;
    • 如果你换过 STORAGE_DIR 或只恢复过数据库:v0.7.5 起,命中去重时会自动按记录中的
      路径把文件补写回去;此前的版本会出现「上传成功但预处理/下载 500」。
    Downloads