• v0.2.3 a78a536476

    zijunchiang released this 2026-09-17 05:18:08 +08:00 | 10 commits to main since this release

    ⚠️ 本版已被 v0.2.4 取代(建议直接用 v0.2.4):
    v0.2.4 把编码取整与契约参考实现对齐(-2.5 的取整口径差异),
    并修掉了「发布包内夹带开发/验收工具」——本版 OpenDance.pck 里含有
    构建探针与一个故意违反协议的测试夹具(res://build/integration/*.gdc),
    体积占 pck 的 54%(315,464 B → v0.2.4 的 145,400 B)。
    功能不受影响,但不该被用户拿到。

    OpenDance Studio -- Windows 客户端 v0.2.3

    跨端集成验收 + 两个真实缺陷修复。建议所有用户改用本版。

    契约快照不变: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-web / opendance-android 逐字节一致)。

    一、新增:跨端集成验收(拿发布包里的客户端打真实服务端)

    本仓单测用的是假 HTTP 夹具,Web 端测试只验自己那一侧 —— 两端各自绿灯,
    不代表契约字段真的对得上(字段名、嵌套、null、单位、范围都可能一侧对一侧错)。
    所以本版加了 build/accept-integration.sh:用 --main-pack 加载包内 pck,
    打真实 Web 服务端,逐项断言:

    [integration] Windows 包内客户端 × 真实 Web 服务端:http://127.0.0.1:3100
      ✓ GET /health 200(服务端版本 0.7.4);契约 6 项全部一致
      ✓ 目录指纹非空;目录四类资源齐备:songs=… motions=… models=… scenes=…
      ✓ defaultModelId 解析为默认模型
      ✓ 重力 y=-3.50;基础风 (2.0,0.0,-1.0);阵风 4.0 m/s @ 0.50 Hz;风坐标系 world
      ✓ 地面摩擦/坡度 0.80/30°;碰撞体 mesh;出生点 yaw 90°;相机 orbit/6.0/2.0
      ✓ 环境光 2.0/雾 0.20;风采样 t=0 等于基础风;场景 GLB 可下载且魔数正确
      ✓ 动作内部标准 mediapipe33@0.1.0;客户端解析 2901 帧 == 服务端 2901 帧
      ✓ 无解析失败行;首帧 33 点;每帧带服务端关节角;30.00 fps;96.67 s
      ✓ 动作缩略图可下载且为 PNG;模型 vrm/默认模型/文件可下载
    [integration] ✓ 跨端集成探针全部通过
    

    播种用的是真实素材(示例文件/ 下的真 VMD → 内部标准 33 点;真 PMX → VRM)。

    二、探针首次运行就抓到的两个真实缺陷

    1. Motion.thumbnailUrl 被客户端丢掉 —— 服务端 catalog/export 从
    data-models 0.6.0 起一直在发该字段(同一文件的 Model / Scene 都有解析),
    客户端类型里却没有。已补字段与解析(缺失时为 "",兼容旧服务端),
    并新增 tests/test_catalog_types.gd(4 项 / 20 条断言)用服务端真实报文形状锁住;
    同时显式记录一处刻意不消费的差异:Model.usable / unusableReason
    (目录只下发可用模型,恒为 true,不可用模型的可见性由 Web 管理端负责)。

    2. 二进制响应白做 UTF-8 解码 —— ApiClient._request() 对所有响应无条件
    raw.get_string_from_utf8()。数据本身没错(二进制路径返回原始字节),但:

    • 每下载一个文件都会打印一条
      Unicode parsing error … Invalid UTF-8 leading byte (N) 噪声(探针里第一次注意到);
    • 白白把整个文件(模型可达数十 MB)解码成一份 String 拷贝后丢弃。

    已改为只在需要文本时解码。

    顺带修掉测试里写死的契约版本:tests/test_api_integration.gd 断言三项契约均为
    0.1.0。该用例只在服务端可达时才跑、平时一直 skip,所以契约升到 0.5.0 后没有任何
    地方发现它。现改为从仓库 contracts/VERSION 读期望值并与 /health 比对。

    三、附件与解压(重要)

    资产 说明
    opendance-windows-v0.2.3.zip 单个完整包,不分卷:OpenDance.exe + OpenDance.pck(必须同目录)+ THIRD_PARTY.md + README.txt + README.md + contracts/
    SHA256SUMS 裸文件名,下载目录内直接 sha256sum -c SHA256SUMS

    解压需要 7-Zip / WinRAR / PeaZip:本包用 LZMA 压缩(26,644,121 B)以绕过本站
    前置 IIS 的 maxAllowedContentLength = 30,000,000 字节上限
    (同内容 deflate 包约 38 MB,会 HTTP 413)。Windows 10 资源管理器不支持
    LZMA(method 14) 的 zip
    ,双击会报错。上限放开后可用
    ZIP_METHOD=deflate bash build/package-release.sh 0.2.3 重打包为可直接双击解压的包。

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

    $ bash build/check-version.sh 0.2.3
      ✓ 版本一致:v0.2.3(project.godot = project.yaml = export_presets.cfg = 期望值)
    $ bash build/check-pe-version.sh <exe> 0.2.3
      ✓ PE 版本资源一致:FileVersion 0.2.3.0 / 资源字符串 0.2.3
    $ GODOT_BIN=... bash build/accept-release.sh dist-release/opendance-windows-v0.2.3.zip
      ✓ 包内 application/config/version = 0.2.3 / AboutScreen.app_version() = 0.2.3
      ✓ 主场景 / autoload / 15 项关键资源 / pck 内契约表与快照一致
     发布包级验收全部通过
    $ bash build/verify.sh
      == 结果:820 通过 / 0 失败,5 跳过 ==
    

    五、未在本环境验证的部分(诚实声明)

    • 本仓库在 Linux 上导出 Windows 产物,没有 Windows 机器与真机 30 分钟联调:
      运行行为仍以「无头断言 + 包内 pck 启动 + 包内探针」为证据;
    • 跨端集成验收需要已部署的 Web 服务端(本项目不部署它,契约边界如此)。
    Downloads