Files
opendance-windows/tasks/012-about-version.md
T
zijunchiang 5581cbe05d feat(scene): 场景选择与物理落地 + 整包发布(T-WIN-012/013/014)
T-WIN-013:API 升级与场景选择
- 契约快照同步到 rest-api 0.5.0 / data-models 0.7.0 / database 0.4.0
- catalog_types.gd 新增 SceneConfig(物理/环境/出生点/相机)与 Scene;
  CatalogBundle 增加 scenes[];from_dict 按契约 7.1 再收敛一次
  (缺项默认、越界夹紧、非法枚举回退),与服务端 normalizeSceneConfig 同规则
- 新增 src/scene/scene_runtime.gd:GLB 载入 -> 碰撞体(mesh 三角网 /
  auto 命名约定 *_col、*_colonly / none 不兜底)-> 场景级重力(Area3D
  SPACE_OVERRIDE_REPLACE,不改全局 ProjectSettings)-> 风(每物理帧
  apply_central_force,阵风正弦叠加,支持 local 坐标系)-> 环境光与雾
  -> 出生点与相机(follow/fixed/orbit);无碰撞体时兜底地面
- CatalogStore 增加 scenes/default_scene/find_scene/ensure_scene_cached/
  fetch_thumbnail(场景缓存带 sha256 指纹,避免换包后仍用旧 GLB)
- 主界面改为 2x2 四个选择器(曲目/动作/模型/场景)+ 场景参数面板
  (缩略图 + 重力/摩擦/弹性/碰撞体/风摘要)
- 游戏界面载入场景并落地物理,角色落在出生点;场景缺失/下载失败/
  解析失败一律回退内置空场景并提示,不阻塞开始跟练

T-WIN-012:「关于」清单展示当前版本号
- 版本唯一来源为 project.godot 的 application/config/version(v0.2.0)
- about_manifest() 输出版本/引擎/契约/协议/地址/隐私清单;
  无头测试无 autoload,读取 AppConfig 走 get_node_or_null 容错
- Credits 的单个 CONTRACT_VERSION 常量改为 CONTRACT_VERSIONS 字典
  (六项契约各自独立递增),并双向核对 contracts/VERSION

T-WIN-014:发布必须是单个完整包
- build/package-release.sh 重写:只产出单个 zip + SHA256SUMS,
  清理历史 .partN,超限时告警而非回退分卷;新增源产物与解压后完整性
  自检(PE 头 MZ / pck 魔数 GDPC / exe+pck 同目录同名)与体积-上限对比
- deploy/proxy 相关的 Gitea IIS 256MB 上限说明见 opendance-web

测试:tests/test_scene_config.gd(12 例)+ tests/test_about.gd(4 例);
无头测试 687 通过 / 0 失败(10 个套件),verify.sh 全部通过
2026-09-17 00:45:23 +08:00

1.9 KiB
Raw Blame History

T-WIN-012 「关于」清单展示当前版本号

  • 状态: done
  • 依赖: T-WIN-010
  • 文档: v1.6 §11(版本号展示)

目标

Windows 客户端在**「关于」清单**中展示当前运行版本号,且版本号只有一处权威定义。

方案

项 做法
唯一来源 project.godot 的 application/config/version(运行期用 ProjectSettings.get_setting 读取)
界面位置 关于页面新增「清单」区块,逐行「标签:值」
禁止重复 界面代码中不出现版本号字面量;由 test_about.gd 反例防护

src/ui/about_screen.gd 新增两个可直接单测的纯函数:

  • app_version() —— 返回 vX.Y.Z 的来源值(唯一来源);
  • about_manifest() —— 返回清单各行(版本 / 引擎 / 契约版本 / 接收协议 / 接收地址 / 服务端地址 / 隐私说明)。

about_manifest() 读取 AppConfig 时走 get_node_or_null("AppConfig"), 因为无头测试以 --script 运行没有 autoload,直接引用会在解析期报错。

顺带修正:契约版本不能再用单个常量

Credits.CONTRACT_VERSION 原为单个常量 0.1.0,但六项契约现在各自独立递增 (rest-api 0.5.0 / data-models 0.7.0 / skeleton-topology 0.2.0 …)。 改为 Credits.CONTRACT_VERSIONS 字典 + version_of() / summary(), 并让 test_credits.gd 逐项与 contracts/VERSION 双向核对 (新增契约若忘记同步展示,测试直接失败)。

验收(文档 §11.3)

验收项 结果
关于清单可见 vX.Y.Z ✅ 清单首行「客户端版本:v0.2.0」
与导出产物文件名一致 ✅ opendance-windows-v0.2.0.zip
与 project.yaml / project.godot 一致 ✅ 测试 test_version_is_semver_and_matches_project_yaml 核对
界面代码无版本号字面量 ✅ 测试 test_version_not_hardcoded_in_ui_sources 核对