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: ミラーリングされた機能のキルスイッチ(両方ともデフォルトで有効) (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: disengage 時のベイク処理を備えた汎用モーションロック機構を追加 (c8d2a93), closes #304sessions: live_motion でティックごとのモーションロックを進行させる処理を追加(ゲート付き) (d29013c), closes #308 #304 #308sessions: メインループでの配信に対応した、マネージャーレベルのセッションオブザーバーを追加 (83e76ef), closes #284sessions: マウントの reparent と workspace の zoom-about-pivot を追加 (294d6e8), closes #265 297/#272 #304sessions: 名前空間付きの config.body_orientation イベントスコープを追加し、旧式の 'values' 入力に対して警告 (3f70047), closes #320sessions: プレビュー用の config/mount ソースと trigger のルーティングを追加 (#265) (5d11dbf), closes #268sessions: mount space でのデバイスマウントの保存・読み込み (#265) (4cec178), closes #292sessions: pivot エコーに対応するよう set_workspace_transform_around を汎用化 (0b242a2), closes #309sessions: グリップボタンマスクと force_scale オーバーレイの仕組み (836ef2f), closes #316sessions: Tracy のセッションプロットをクライアントプロファイルでラベル付け (72a8f34), closes #258sessions: マウントスコープのルーティングと storage virtuals (#265) (9a4e7f4), closes post-#286 #293sessions: セッションごとの force_scale ダッキング(プレビュー) (bff66ad)バグ修正 {#bug-fixes}
ci: changelog の復元のためリリースツールチェーンを固定 (72c6773), closes #313新しい glaze でのコンパイル修正 (e2c53d3)deps: Rust クレート nix を 0.31 に更新 (b3b9a84)devices: 送信処理の一箇所で safety-config プロトコルをゲート (b8e8401), closes #295devices: ファームウェアバージョンとキャリブレーションに基づいて safety-config の書き込みをガード (5ad5128), closes #295devices: wakeup の安定化期間中も inverse3 のワイヤ接続を維持 (4afed45)devices: wakeup の安定化期間中も inverse3 のワイヤ接続を維持 (79c2b66)devices: 有線の verse グリップで [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: ペア済みデバイスを1台入れ替えた後に再ペアリング (cf85707), closes #278modules::sdf: sdf transform の euler をセッション規約のもとで統合 (#291) (9741ac6)modules::sdf: SDF 形状の向きをクライアントの座標系に合わせる (c29e4f2), closes #276protocol: サービスのクラッシュやハングを引き起こすタイマーのライフタイム競合を解消 (0cb019b), closes #303protocol: ポートオープン時にシリアルバッファをフラッシュし、ホットスワップされたデバイスを認識 (b8724d9)protocol: デバイス破棄時の競合から firmware クライアントのコールバックを保護 (3d795bb), closes #303protocol: 型付き enum と正しいワイヤフォーマットで 0xE4 IMU orientation API を書き直し (8733ec0)inverse3x の有効化/無効化時、bia hub 経由でホーム復帰 (f435454)service: adaptive dispatch をデフォルトで無効化 (9415638)service: サービスの終了処理を順序付きかつ時間上限付き、競合のない形に変更 (ff888d7), closes #303sessions: *_centered プリセットの中心を、実際に到達可能な中心に合わせる (ad6e726), closes #321sessions: マウント変更時の siggraph ワークスペース境界の自動プッシュを削除 (2df1654)sessions: ライブセッションでまだ駆動されているデバイスについて、終了中セッションの force drain をスキップ (e1f9ff7), closes #324sessions: start() が接続時にネゴシエートした serial_options を消去しないように修正 (#290) (27e27d8)sessions: set_transform の後に workspace の transform の速度をゼロにリセット (133c3ad), closes #280websocket: 送信元セッションの規約に従ってコマンドをデコード (#289) (1b24049), closes #265パフォーマンス改善 {#performance-improvements}
core/log: 無効時には fmt::format がスキップされるよう haply_* マクロをゲート (672a87a), closes #270modules::sdf: SDF を毎ティックではなく作成時に一度だけベイク (15350c5), closes #277