• v0.2.4 6ea2c93d66

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

    ⚠️ 本版已被 v0.2.5 取代(建议直接用 v0.2.5):
    v0.2.5 把 config 从「每 2 秒无条件广播」改为变更驱动(契约 §3.3 的语义是
    「运行中调整时下发」),并新增契约「可选/兜底」语义的定向验收
    (v0.1.0 风格对端只发帧不发 ping 也必须保住、缺 deviceId 不做去重、不发 hello 不崩)。

    OpenDance Studio -- Windows 客户端 v0.2.4

    两个缺陷修复:编码取整与契约参考实现对齐;发布包不再夹带测试夹具。
    建议所有用户改用本版。

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

    一、编码取整与契约参考实现不一致

    KeypointFrame.encode() 用的是 GDScript 的 roundi(半数远离零),
    而契约参考实现(opendance-web 的 keypoint-codec.ts)与生产发送方 Android
    (Kotlin Math.round)都是「半数朝 +∞」:

    -2.5 2.5 -0.5
    JS / Kotlin Math.round(参考 + 生产发送方) -2 3 0
    GDScript roundi(本端旧实现) -3 3 -1

    跨实现向量实测:12 个用例里有 1 例 33 字节不同。

    影响:本端是接收方,encode() 只用于自测与协议回归,对产品无影响;
    但它让「跨实现一致性」只能停留在宽松口径("差异仅限取整边界"),
    而宽松口径会退化成永远没人看的"已知差异"。修复:_round_like_js(v) = floor(v + 0.5),
    用于 4 处取整;验收口径收紧为「编码差异必须为 0」。

    二、发布包内夹带了开发/验收工具

    export_filter="all_resources" 且 exclude_filter 里没有 build/*,于是每次新增
    构建/验收脚本都被编译进产物 —— 包括故意不合规的坏服务端夹具
    (probe-ws-bad.gd)与向量文件:

    res://build/probe-release.gdc
    res://build/integration/probe-integration.gdc
    res://build/integration/probe-ws.gdc
    res://build/integration/probe-ws-bad.gdc      ← 故意违反协议的夹具
    res://build/integration/probe-frame-vectors.gdc
    res://build/integration/frame-vectors.json
    

    体积:OpenDance.pck 315,464 B → 145,400 B(54% 的 pck 是测试夹具)。
    已发布的 v0.2.3 同样带着这些残留。修复:exclude_filter 增加 build/*;
    并新增产物级防线 build/integration/list-pck.gd(遍历包内条目、标出
    res://build/、res://tests/、res://_scratch/、res://dist-release/、*.md 残留),
    接进 accept-release.sh 断言「无开发残留」—— 否则下次加个新工具目录又会重演。

    三、附件与解压(重要)

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

    解压需要 7-Zip / WinRAR / PeaZip:本包用 LZMA 压缩(26,632,886 B)以绕过本站
    前置 IIS 的 maxAllowedContentLength = 30,000,000 字节上限
    (同内容 deflate 包约 38 MB,会 HTTP 413)。Windows 10 资源管理器不支持
    LZMA(method 14) 的 zip
    ,双击会报错。

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

    $ bash build/accept-release.sh dist-release/opendance-windows-v0.2.4.zip
      ✓ PE 版本资源一致:FileVersion 0.2.4.0 / 资源字符串 0.2.4
      ✓ 包内 pck 启动 180 帧无错误(退出码 0)
      ✓ pck 共 58 项,无开发残留(build/ tests/ _scratch/ *.md)
      ✓ 包内 version=0.2.4 / AboutScreen.app_version()=0.2.4 / 15 项关键资源可加载
      ✓ pck 内契约表与包内 contracts/VERSION 快照一致
    $ bash build/accept-ws.sh <zip>
      == 结果:30 通过 / 0 失败 ==(客户端)+ 服务端侧 16 项事实
    $ bash build/accept-frame-vectors.sh <zip>
      ✓ 解码用例 12/12,逐点比对 396 个,解码差异 0 项
      ✓ 编码器字节与参考实现完全一致(0 项差异)
    $ bash build/verify.sh
      == 结果:785 通过 / 0 失败,6 跳过 ==
    

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

    • 本仓库在 Linux 上导出 Windows 产物,没有 Windows 机器与真机 30 分钟联调:
      运行行为仍以「无头 785 项断言 + 包内 pck 启动 + 三条产物级验收」为证据;
    • 跨端集成验收(accept-integration.sh)需要一个已部署的 Web 服务端。
    Downloads