3.5.1 (2026-05-28) {#351-2026-05-28}
内部改善 {#internal-improvements}
core/gates: backoff_time_gate と suppressed-hit カウンター (cc989c0), closes #244core/gates: streak_gate と keyed バリアント (748f419), closes #244devices: wireless verse grip に充電インジケーターを追加 (6482bd6)devices: inverse3 のモーション状態を 20 Hz でポーリング (bfc160d)devices: ready スナップショットのデバッグログで v3.1 シリアライズを使用 (0c59c26)http: 詳細設定/非推奨設定で完全一致の GET ルートを許可 (2b5f037)http: フラグによって GET /settings の表示を制御 (4f013d8), closes #251modules::inverse-ux: preview_mode ゲートの背後で paired_with.auto を公開 (1f7f0e1), closes #230serialization: リリース前フィールド用のグローバルフラグ preview_mode を追加 (422e822), closes #230serialization: v3.1 のクォータニオンにオイラー表現を追加 (c32dd6b), closes #239serialization: 明示的な quaternion コンストラクタとコアの代入演算子 (677ed6f)sessions: ストリーミング応答のスロットルでミリ秒未満の間隔を許可 (9a42719)sessions: プレビューゲート付きの /sessions v3.1 拡張 (6c1c8f2)settings: misc/deprecated を詳細設定に昇格 (b3528d7)tutorials: ストリーミング応答のフレームチェック用プロトタイプ (6b57c39)バグ修正 {#bug-fixes}
command_processor: Force/Position 切り替え時のモード反転を防止 (d754ef1), closes #232command_processor: ワンショットのインラインドレインを ZOH 制御から分離 (5960498), closes #117core::gates: keyed time-gate がヒットごとに最新の期間を反映 (c73b86a)detection: extra_ports の初回注入ログを統合 (57e21d7)detection: keyed_gate によるポートごとのログ制御 (04b8d54), closes #243devices: handle 情報の取得後にのみ wireless verse grip を ready にマーク (dfd7d5d)devices: wireless verse_grip に対する set_extension_data のレート制限 (011d5a0)http: デバイスセレクターが "#1234" と "1234" をデバイス ID として受け付けるように (1452c10)http: macOS のリリースビルドをブロックしていた未使用の context フィールドを削除 (-Wunused-private-field) (5345989)modules::inverse-ux: 1 台の Inverse3 と 1 個の grip が接続されたときに自動ペアリング (41b3024), closes #227 #227modules::inverse-ux: トポロジーが 1↔1 を超えて拡大した場合は自動ペアを破棄 (e4fb80c)modules::inverse-ux: Minverse のキャリブレーションで force_attached による上書きを尊重 (e24bf84), closes #224modules::inverse-ux: Minverse および初回 POST で paired_with の attached が常に [secure] になるように (cafb574)modules::inverse-ux: デバイスごとの Inverse3 ↔ VerseGrip ペアリングレジストリ (ac63d2a), closes #224modules::inverse-ux: POST および DELETE の paired_with ルートが計算された attached 状態を返すように (a751208)サービスが非 WVG デバイスを WVG として検出しようとした際の繰り返し警告を防止 (17ad373)protocol::inverse3: 可変長の 0xBA 通知ペイロードを処理 (61f7b1f)service: インデックスと併せてデバイスセレクターのクラスを適用 (2d6422a)service: 404 メッセージ内でデバイスセレクターの式を保持 (d2c4626)sessions: defaults / arm_front の適用時に apply_preset がマウントをリセット (a333da8), closes #240sessions: セッション横断 ID が不明な場合は自身をターゲットにフォールバック (14367ed), closes #239sessions: セッション横断の force_render_full_state で全スナップショットを返信 (8afc646)sessions: session.configure.serialization の execute:[secure] を尊重 (3458af0)sessions: defaults / arm_front プリセット適用時にデバイスのマウントをクリアした状態を維持 (698008b), closes #252 #253sessions: defaults / arm_front プリセットでマウントを identity にリセット (a0a2b29), closes #240sessions: スロットルされたストリーミングスナップショットでの WS 応答を復元 (787a656), closes #248sessions: 持続的なシミュレーション負荷下での WS RX ホットパスを安定化 (e4e55d0)パフォーマンス改善 {#performance-improvements}
command_processor: 制御のみのバッチ向けに WS RX のファストパスを追加 (92bb4e8), closes #241engine: AIMD ダンピングによる適応的ディスパッチレートの収束 (b8fc1c8), closes #249main_loop: 処理中ティックの上限で asio キューを制限 (8d77823)serialization: プレビューオプションを static な構造体にキャッシュ (8698636), closes #241sessions: ホットパスでの session::_mutex の競合を削減 (bf117c8), closes #241 #242sessions: セッションのデバイス呼び出しに Tracy の ZoneScoped を付与 (7404990)