3.5.3 (2026-08-06) {#353-2026-08-06}
内部改进 {#internal-improvements}
core/log: 新增延迟格式化的 haply_* 宏形态 (cf7dbfc), closes #271core: 新增 pivot 以及 compose/inverse 变换原语 (01080f6), closes #283devices: 缓存 0xE4 body orientation 并路由 trigger_mode (#265) (4864700)devices: 在服务端补偿 0xE4 IMU 传感器坐标系 (#286) (e6d877c), closes tapi-prototype-firmware#87devices: 在 inkwell 校准时刷新 body_orientation (#268) (89b190b), closes #286 #286 #286devices: 拆分实时(0x0C)与参考(0xE4)的 body orientation (#286 #315) (638487a), closes #268 #266 #268http: 将不支持协议的响应统一为 422 (e0e7638), closes #293 #293 #295http: 将 transform 回显与 sdf 输入迁移为支持 euler 的补丁 (#279, #280, #291) (bb29404)http: 在 Delete scope=device 时重置设备挂载 (#265) (f6bf26b), closes #286modules::navigation: 在运动锁上新增 clutch 模式(受开关控制,默认关闭)(4b69eed), closes #308 #308 #283 #308modules::navigation: 带 prevent_default 的按钮输入;clutch force_scale;bubble 长按导航 (fb216aa), closes #317 #318 #316 #317 #318modules::navigation: 为 clutch 设置 max_motion/force_scale 上限 (a946088), closes #316modules::navigation: 镜像的功能 kill switch,两者默认均开启 (b6ee0c0), closes #318modules::navigation: 对 inputs[] 中的每个输入应用设置补丁;bubble 发出 status.engaged (ba2058f), closes #318protocol: 拆分 capability 文件,新增 damping 门控,并将 base 上提 (30d7d5d), closes #293protocol: capability 表 + 统一的不支持响应发射器 (289382e), closes #293 #295protocol: 通过表对 home_return 与 pen_attached 进行门控 (8a05d20), closes #293protocol: 引入 fw_version 并迁移版本检查 (38c2cae), closes #293serialization: 在 v3.1 会话通道中应用握把按钮掩码 (7b93e35), closes #316serialization: 在 euler.output 下为 config.mount 旋转输出 euler (#268) (f6b54a2)serialization: 在 euler.output 下为 transform 旋转输出 euler (96c6cc9), closes #283serialization: 在 set_transform 上开放 workspace zoom-about-pivot (#309) (c1d08fc), closes #280serialization: 扁平化 config/body_orientation 的 trigger_mode (#265) (8781b8a), closes #268serialization: 将 transform 参数提升为每个会话的 serial_options (#280) (03b2fd6)serialization: 将 config/mount 拆分为 scope 与 body_orientation (#265) (5618839), closes #280serialization: 将会话选项贯穿至输出,并对嵌套 reshape 进行门控 (#279, #280) (59984ce), closes #265serialization: 统一 ws 与 http 的 configure 解码 (#280) (6076917)sessions: 新增带脱离 bake 的通用运动锁机制 (c8d2a93), closes #304sessions: 新增 live_motion 逐 tick 推进运动锁(受开关控制)(d29013c), closes #308 #304 #308sessions: 新增 manager 级会话观察者,并通过主循环投递 (83e76ef), closes #284sessions: 新增挂载 reparent 与 workspace zoom-about-pivot (294d6e8), closes #265 297/#272 #304sessions: 新增命名空间化的 config.body_orientation 事件作用域;对旧版 'values' 输入发出警告 (3f70047), closes #320sessions: 新增 preview config/mount 源与 trigger 路由 (#265) (5d11dbf), closes #268sessions: 在 mount 空间中存储与加载设备挂载 (#265) (4cec178), closes #292sessions: 泛化 set_workspace_transform_around,并加入 pivot 回显 (0b242a2), closes #309sessions: 新增握把按钮掩码与 force_scale 叠加机制 (836ef2f), closes #316sessions: 为 Tracy 会话图表添加客户端 profile 标签 (72a8f34), closes #258sessions: 挂载 scope 路由与存储虚拟项 (#265) (9a4e7f4), closes post-#286 #293sessions: 按会话进行 force_scale 衰减(预览)(bff66ad)错误修复 {#bug-fixes}
ci: 固定发布工具链以恢复更新日志生成 (72c6773), closes #313修复新版 glaze 的编译问题 (e2c53d3)deps: 将 rust crate nix 更新到 0.31 (b3b9a84)devices: 在发送入口处对 safety-config 协议进行门控 (b8e8401), closes #295devices: 根据固件版本与校准状态对 safety-config 写入进行保护 (5ad5128), closes #295devices: 在唤醒稳定窗口期间保持 inverse3 通信链路存活 (4afed45)devices: 在唤醒稳定窗口期间保持 inverse3 通信链路存活 (79c2b66)devices: 在有线 verse grips 上抑制 [secure] 电量通知 (ea54a1a), closes #314http: 对会话作用域的 safety 写入进行校准检查 (89f9cd7), closes #295 #293http: 按会话约定归一化 euler 旋转 (#288) (97cf203)inverse_ux: 将 calibration_notifier 的处理限制为 Minverse (418913f)为防止崩溃而进行生命周期清理 (e7b3785)modules::inverse-ux: 固件阻止时始终发出 calibration-failed (3841d06)modules::inverse-ux: 更换一台已配对设备后重新配对 (cf85707), closes #278modules::sdf: 按会话约定归一化 sdf transform 的 euler (#291) (9741ac6)modules::sdf: 在客户端坐标系下正确定向 SDF 形状 (c29e4f2), closes #276protocol: 消除导致服务崩溃或挂起的定时器生命周期竞争 (0cb019b), closes #303protocol: 打开端口时刷新串口缓冲区,以识别热插拔设备 (b8724d9)protocol: 为固件客户端回调添加保护,防止设备销毁竞争 (3d795bb), closes #303protocol: 使用带类型的枚举和正确的传输格式重写 0xE4 IMU 朝向 API (8733ec0)在 inverse3x 通过 bia hub 启用/禁用时返回 home (f435454)service: 默认禁用自适应分发 (9415638)service: 使服务关闭流程有序、有界且无竞争 (ff888d7), closes #303sessions: 将 *_centered 预设居中到实际可达的中心点 (ad6e726), closes #321sessions: 挂载变更时移除 siggraph 工作区边界自动推送 (2df1654)sessions: 对仍由活动会话驱动的设备,跳过关闭会话时的强制排空 (e1f9ff7), closes #324sessions: 停止 start() 清除连接时协商的 serial_options (#290) (27e27d8)sessions: 在 set_transform 之后将 workspace transform 速度清零 (133c3ad), closes #280websocket: 按发送方会话的约定解码命令 (#289) (1b24049), closes #265性能改进 {#performance-improvements}
core/log: 对 haply_* 宏进行门控,关闭时跳过 fmt::format (672a87a), closes #270modules::sdf: 在创建时烘焙一次 SDF,而非每个 tick 都烘焙 (15350c5), closes #277