本文へスキップ

v3.5.1

3.5.1は、安定化および品質改善を目的としたリリースです。主なテーマは以下の通りです:1対1のInverse3 とGrip構成の自動ペアリング、開いているWebSocketセッションがなくても GET /devices/{id}最新のモーション状態の提供、力/位置モードの切り替え時に発生していたきしみ音(screech)の解消、継続的な負荷状況下で自動的に調整されるサービスティックスケジューラ。

ハイライト​

  • 1↔1Inverse3 + グリップ取り付け時の自動ペアリング。 Inverse3 デバイス1台とグリップ1個の準備が整うと、SDKが自動的にペアリングを登録します。マルチデバイス構成では、 pen_attached また、Minverse のキャリブレーションロック解除が誤ってルーティングされていた問題が修正されました。
  • オープンセッションがなくても最新情報を GET /devices/{id} スナップショット提供。 ファームウェア v7.5 以降のInverse3 / Inverse3x / Minverse は、WebSocket の動作の有無にかかわらず、20 Hz でモーション状態をポーリングするようになりました。v7.5 以前のファームウェアでは、ポーリングをスキップし、警告を 1 回出力します。
  • 力や位置の切り替え時のきしみ音を解消。 set_cursor_force ↔ set_cursor_position 切り替えはスロット排他方式で動作するため、ティック間にはデバイスごとに最新の値のみが残ります。HARPの200 msのアイドル間隔のバイパス処理は、もはや必要ありません。
  • 自己調整型ティックスケジューラ。メインループが負荷に応じてディスパッチ速度を調整するため、ティックが遅くなってもコマンドキューが無限に膨れ上がることはありません。
  • 負荷状況下における1-in-1-outストリーミング応答。 WSメッセージごとのストリーミング応答は、セッションあたり1/msに制限されています。この制限に達すると、以前のバッファが再生されるため、simループが recv()ではブロックされません。

内部の改善点​

デバイス​

  • デバイスごとの「Inverse3 」↔「VerseGrip」ペアリングレジストリ。 GET|POST|DELETE /devices/{sel}/paired_withこれは、デバイスごとの1対1のマッピングです。 POSTは、両者のいずれかと競合する既存の項目を削除(evict)し、 DELETEは選択された項目を削除します。なお、セレクタは必ず1つのIDとして解釈される必要があります。
  • ファームウェア v7.5 以降の 20 Hz モーションステータスポーリング。 GET /devices/{id}は50ミリ秒ごとに最新の cursor_position, cursor_velocity, angular_position, angular_velocity 値を返しますが、アクティブなセッションには影響しません。
  • ワイヤレス VerseGrip set_extension_data 速度制御。 古い値は破棄され、アイドル時に繰り返し送信されるパイプラインがサービスティックで処理されます。過剰に送信しても無線リンクが飽和することはなく、送信が不足しても古い値が残ることはありません。

セッション​

  • 制御専用のバッチ(力/位置)向けに、構成認識パイプラインをバイパスする新しいWS受信高速パスが追加されました。 configure / set_profile / カスタムコマンドは、依然として競合(レース)の修正経路を経由します。

観測可能性(Observability)​

  • 検知ログの頻度はポートごとに管理され、継続的な発生の有無が考慮されます。 ブラックリストに登録された各ポートは、個別に制御されます。繰り返される "...blacklisted: skipping" ログ行には、実行の合間に抑制されたティック数が表示されるようになりました。 (×N)これが表示されます。
  • 非WVGデバイスを検出した際、ワイヤレスVerseGripによる検知がログを過剰に埋めることはなくなりました。

修正内容​

  • POST /device.config.presetに defaults または arm_frontを指定すると これで、デバイスのマウントが工場出荷時の設定にリセットされます(以前は、この操作は黙って無視されていました)。 basisは維持されるため、アプリで設定したベースは、マウントプリセットを変更してもそのまま残ります。
  • force_render_full_state一致するconfigureリクエストなどのWSメッセージとして到着した場合は、もはや config ブロックが欠落したスナップショットは返されません — configure パスは、スナップショット作成前に同期的に先に処理されます。
  • クロスセッション force_render_full_stateは、対象の完全なスナップショットを返します。 これで、AとBの両方がペイロード全体を受信するようになりました(以前はAはストリーミングデータのみを受信していました)。
  • 不明 target_session_idを持つクロスセッション命令は、もはやリクエスト・レスポンスのループを停止させません。 リクエスト送信者は、自身のスナップショットと session-command-dropped イベント(cross-session-unknown-target)を受け取ります。
  • Minverse マルチデバイスキャリブレーションのロック解除が誤ってルーティングされることはありません。 Minverse Aをキャリブレーションしても、Minverse Bのロックは解除されず、inkwell-successヘッダーのブロードキャストにも同様の修正が適用されました。
  • HTTP デバイスセレクタはデバイスIDとして #1234わあ 1234すべて許可します。セレクタクラス(inverse3, verse_grip)もインデックスと併用でき、404メッセージには元のセレクタ式がそのまま表示されます。
  • ワイヤレス VerseGrip ready フラグは、初期のデバイス情報ハンドシェイクが完了した後にのみ設定されるようになりました。 以前は、特定の再接続経路において、デバイスが自身の情報を完全に通知する前に、このフラグが変更されることがありました。
  • キーベースのレートゲートの設定に対する実行時の変更は、次のヒットから適用されます(以前は最初の emplace 時点で固定され、新しいセッションでのみ変更が反映されていました)。

潜在的な互換性を損なう変更(Breaking Changes)​

  • HTTP 404 エラーメッセージの統一 — basis, preset, mount, transform, force_gate 前半で "{type} device #{id} not found" → "no device matches selector '{expr}'"に変更されました。セッション404も同様に統一されました。
  • globの設定 devices/inverse*/... → devices/*inverse/... 適用対象:フォーススケールゲイン、フォースゲートゲイン、制御タイムアウト、 safeties/expose_in_snapshot. 既存のリテラルを使用している 3.5.0 の設定ファイルは、バインディングに失敗します。
  • 設定:シリアライズされたグローバル項目が session/serialization/*へ移動されました(explicit_fields, force_complete_transforms, preview/*). 従来の serialization/* このパスは、サポートが終了したエイリアスを通じて引き続き解決されますが、バージョン4.0で削除される予定です。
  • 動作の変更:継続的なトラフィックが発生している状況において、メッセージごとの WS 応答をティック同期ハンドシェイクとして使用するクライアントは、セッションあたり 1 ミリ秒につき最大 1 回のみ応答を受け取ることになります。設定変更時の全体的なスナップショットには影響はありません。

サポート終了(非推奨)​

3.5.1にはサポート終了となる項目はありません。previewマスタースイッチは、次期バージョン3.6における「サイレント」→「警告」への移行パイプラインに向けたサポート終了の基盤となるものであり、最初のサポート終了の適用は3.5.2で予定されています。