3.5.3 (06.08.2026) {#353-2026-08-06}
Interne Verbesserungen {#internal-improvements}
core/log: Hinzufügen des Makros „ haply_*“ für das Format „Verzögerung“ (cf7dbfc), schließt #271Kern: Hinzufügen der Primitive „Pivot“ sowie „Compose“ und „Inverse“ (01080f6), schließt #283Geräte: 0xE4 – Cache für Körperausrichtung und Routing des Trigger-Modus (#265) (4864700)Geräte: Kalibrierung des 0xE4-IMU-Sensor-Frames auf Serviceseite (#286) (e6d877c), schließt „tapi-prototype-firmware#87“ abGeräte: Aktualisierung von „body_orientation“ bei der Kalibrierung von „inkwell“ (#268) (89b190b), schließt #286 #286 #286Geräte: Trennung von Echtzeit- (0x0C) und Referenz- (0xE4) Körperausrichtung (#286 #315) (638487a), schließt #268 #266 #268http: Antworten auf nicht unterstützte Protokolle werden einheitlich mit 422 zurückgegeben (e0e7638), schließt #293 #293 #295http: Migration der „transform“, „echo“ und „sdf“-Eingaben auf den Euler-unterstützenden Patch (#279, #280, #291) (bb29404)http: Bei „scope=device“ wird die Gerätemount-Initialisierung zurückgesetzt (#265) (f6bf26b), schließt #286modules::navigation: „Clutch“-Modus zur Bewegungssperre hinzugefügt (Gate angewendet, standardmäßig deaktiviert) (4b69eed), schließt #308 #308 #283 #308modules::navigation: „prevent_default“ auf die Eingabetaste anwenden; clutch force_scale; Unterstützung für „Hold-to-Navigate“ (fb216aa), schließt #317 #318 #316 #317 #318modules::navigation: Festlegen der Obergrenze für „clutch max_motion/force_scale“ (a946088), schließt #316modules::navigation: Gespiegelte „Kill-Switch“-Funktion, beide standardmäßig aktiviert (b6ee0c0), schließt #318Patch für die Einstellungen pro Eingabe in „modules::navigation: inputs[]“; „bubble“ gibt „status.engaged“ aus (ba2058f), schließt #318Protokoll: Trennung von Capability-Dateien, Damping-Gate, Base-Hoisting (30d7d5d), schließt #293 abProtokoll: Capability-Tabelle + einzelner nicht unterstützter Herausgeber (289382e), schließt #293 und #295 abProtokoll: Anwendung der Gates „home_return“ und „pen_attached“ über die Tabelle (8a05d20), schließt #293Protokoll: Einführung von „fw_version“ und Migration der Versionsprüfung (38c2cae), schließt #293Serialisierung: v3.1 세션 패스에 grip 버튼 마스크 적용 (7b93e35), closes #316Serialisierung: Euler-Ausgabe – Euler-Werte werden an den Unterwert „config.mount-Rotation“ ausgegeben (#268) (f6b54a2)Serialisierung: Ausgabe von Euler-Werten für die Rotationswerte der „euler.output“-Untertransformation (96c6cc9), schließt #283Serialisierung: „workspace zoom-about-pivot“ in „set_transform“ verfügbar machen (#309) (c1d08fc), schließt #280Serialisierung: config/body_orientation trigger_mode Glättung (#265) (8781b8a), schließt #268Serialisierung: Den Regler „transform“ zu den sitzungsspezifischen „serial_options“ erheben (#280) (03b2fd6)Serialisierung: „config/mount“ in „scope“ und „body_orientation“ aufteilen (#265) (5618839), schließt #280Serialisierung: Übergabe der Sitzungsoptionen an die gesamte Ausgabe und Anwendung von Gates auf verschachtelte „reshape“-Anweisungen (#279, #280) (59984ce), schließt #265Serialisierung: Vereinheitlichung der Dekodierung bei WS- und HTTP-Konfigurationen (#280) (6076917)sessions: Hinzufügen eines universellen Mechanismus zur Bewegungssperre, einschließlich „Bake deaktivieren“ (c8d2a93), schließt #304Sitzungen: live_motion hinzugefügt: Bewegungssperre in Tick-Schritten (Gate anwenden) (d29013c), schließt #308 #304 #308Sitzungen: Hinzufügen eines Sitzungsbeobachters auf Manager-Ebene, der über die Hauptschleife übergeben wird (83e76ef), schließt #284Sitzungen: „Mount reparent“ und „Workspace zoom-about-pivot“ hinzugefügt (294d6e8), schließt #265, 297, #272 und #304Sitzungen: Hinzufügen des Ereignisbereichs „config.body_orientation“ mit Namespace; Warnung bei der Verwendung der veralteten Eingabe „values“ (3f70047), schließt #320Sitzungen: Vorschau – Hinzufügen von „config/mount“-Quellen und Trigger-Routing (#265) (5d11dbf), schließt #268Sitzungen: Speichern/Laden von Gerätemounts im Mount-Bereich (#265) (4cec178), schließt #292Sitzungen: Pivot-Echo in „set_workspace_transform_around“ einbezogen (0b242a2), schließt #309Sitzungen: „Grip“-Button-Maske + „force_scale“-Overlay-Mechanismus (836ef2f), schließt #316Sitzungen: Hinzufügen von Beschriftungen zum Tracy-Sitzungsdiagramm basierend auf dem Client-Profil (72a8f34), schließt #258Sitzungen: Routing und virtuelle Speicher im Mount-Bereich (#265) (9a4e7f4), schließt die Beiträge nach #286 und #293 abSitzungen: „force_scale“-Ducking nach Sitzungen (Vorschau) (bff66ad)Fehlerbehebungen {#bug-fixes}
ci: Festlegung der Release-Toolchain zur Wiederherstellung des Changelogs (72c6773), schließt #313Korrektur der Kompilierung zur Unterstützung von „Glaze“ (e2c53d3)deps: rust crate nix auf Version 0.31 aktualisiert (b3b9a84)Geräte: Anwendung des „safety-config“-Protokolls an Übertragungsengpässen (b8e8401), schließt #295Geräte: Schreibschutz für „safety-config“ basierend auf FW-Version und Kalibrierungsstandards (5ad5128), schließt #295Geräte: Aufrechterhaltung der „inverse3“-Drahtverbindung während der Stabilisierungsphase beim Aufwachen (4afed45)Geräte: Aufrechterhaltung der „inverse3“-Drahtverbindung während der Stabilisierungsphase beim Aufwachen (79c2b66)Geräte: Unterdrückung von [secure]-Akku-Benachrichtigungen beim kabelgebundenen Verse-Grip (ea54a1a), schließt #314http: Überprüfung der Kalibrierung beim Schreiben im Session-Bereich (89f9cd7), schließt #295 #293http: Integration der Euler-Drehwerte gemäß dem Session-Protokoll (#288) (97cf203)inverse_ux: Verarbeitung von „calibration_notifier“ auf Minverse beschränken (418913f)Lifetime-Bereinigung zur Vermeidung von Abstürzen (e7b3785)modules::inverse-ux: Bei einer Sperrung durch die Firmware wird immer „calibration-failed“ ausgegeben (3841d06)modules::inverse-ux: Austausch eines gekoppelten Geräts und erneute Kopplung (cf85707), schließt #278modules::sdf: Integration von „sdf transform euler“ gemäß dem Sitzungsprotokoll (#291) (9741ac6)modules::sdf: Ausrichtung von SDF-Figuren an das Koordinatensystem des Clients (c29e4f2), schließt #276Protokoll: Beseitigung eines Timer-Lebensdauer-Wettlaufs, der zum Absturz oder zum Stillstand des Dienstes führt (0cb019b), schließt #303Protokoll: Erkennung von Hot-Swap-Geräten durch Leeren des seriellen Puffers beim Öffnen des Ports (b8724d9)Protokoll: Schutz von Firmware-Client-Callbacks vor einem Race-Condition-Zustand beim Herunterfahren des Geräts (3d795bb), schließt #303Protokoll: Neufassung der 0xE4-IMU-Orientierungs-API mit typisierten Enums und korrektem Wire-Format (8733ec0)Zurück zur Startseite bezüglich „inverse3x – BIA-Hub aktivieren/deaktivieren“ (f435454)Dienst: Standardwert für adaptives Dispatching deaktivieren (9415638)Dienst: Verbesserung der Dienstbeendigung durch garantierte Reihenfolge, Begrenzung und Vermeidung von Parallelität (ff888d7), schließt #303Sitzungen: ausgerichtet auf tatsächlich erreichbare Zentren *_zentriert* Voreinstellung „Zentriert“ (ad6e726), schließt #321Sitzungen: Automatisches Entfernen von „Push“-Einschränkungen bei Siggraph-Arbeitsbereichsgrenzen beim Wechseln des Mounts (2df1654)Sitzungen: Bei Geräten, die in einer Live-Sitzung noch aktiv sind, wird das „Force Drain“ der beendeten Sitzung übersprungen (e1f9ff7), schließt #324Sitzungen: Problem behoben, bei dem `start()` die zum Zeitpunkt der Verbindung ausgehandelten `serial_options` löschte (#290) (27e27d8)Sitzungen: Nach „set_transform“ die Geschwindigkeit der Arbeitsbereichstransformation auf 0 setzen (133c3ad), schließt #280WebSocket: Dekodierung von Befehlen gemäß dem Protokoll der sendenden Sitzung (#289) (1b24049), schließt #265Leistungsverbesserungen {#performance-improvements}
core/log: Bei Deaktivierung wird „fmt::format“ übersprungen, indem das Makro „ haply_*“ mit einem Gate versehen wird (672a87a), schließt #270modules::sdf: SDF-Bake nur einmal bei der Erstellung und nicht bei jedem Tick (15350c5), schließt #277