3.5.3 (06.08.2026) {#353-2026-08-06}
Interne Verbesserungen {#internal-improvements}
core/log: Makroformat „ haply_*“ für verzögerte Formate hinzugefügt (cf7dbfc), schließt #271Kern: Umwandlungsprimitive „pivot“ und „compose/inverse“ hinzugefügt (01080f6), schließt #283Geräte: Zwischenspeicherung der Körperausrichtung von 0xE4 und Routing des trigger_mode (#265) (4864700)Geräte: Korrektur des IMU-Sensor-Frames von 0xE4 auf Serviceseite (#286) (e6d877c), schließt tapi-prototype-firmware#87Geräte: Aktualisierung von „body_orientation“ bei der Kalibrierung von „inkwell“ (#268) (89b190b), schließt #286 #286 #286Geräte: Trennung der Körperausrichtung von „Live“ (0x0C) und „Referenz“ (0xE4) (#286 #315) (638487a), schließt #268 #266 #268http: Antworten auf nicht unterstützte Protokolle werden einheitlich auf 422 gesetzt (e0e7638), schließt #293 #293 #295http: Umstellung der „transform“-Ausgabe und der SDF-Eingabe auf den Euler-kompatiblen Patch (#279, #280, #291) (bb29404)http: Zurücksetzen der Geräteeinbindung bei „scope=device“ (#265) (f6bf26b), schließt #286modules::navigation: „Clutch“-Modus bei Motion Lock hinzugefügt (mit Gate, standardmäßig deaktiviert) (4b69eed), schließt #308 #308 #283 #308modules::navigation: Schaltflächeneingabe mit „prevent_default“, „force_scale“ bei „clutch“, Langdruck-Navigation bei „bubble“ (fb216aa), schließt #317 #318 #316 #317 #318modules::navigation: Obergrenze für „max_motion“ und „force_scale“ bei „clutch“ (a946088), schließt #316modules::navigation: Kill-Switch für gespiegelte Funktionen (beide sind standardmäßig aktiviert) (b6ee0c0), schließt #318Einstellungs-Patches für jede Eingabe in „modules::navigation: inputs[]“, Ausgabe von „status.engaged“ durch „bubble“ (ba2058f), schließt #318Protokoll: Aufteilung von Capability-Dateien, Damping-Gate, Hoist von „base“ (30d7d5d), schließt #293Protokoll: „Capability“-Tabelle und Einzelemitter bei nicht unterstützten Verarbeitungsschritten (289382e), schließt #293 und #295Protokoll: „home_return“ und „pen_attached“ werden über die Tabelle gated (8a05d20), schließt #293Protokoll: Einführung von „fw_version“ und Umstellung der Versionsprüfung (38c2cae), schließt #293Serialisierung: Anwendung der Griff-Tasten-Maske auf die Sitzungsverarbeitung in v3.1 (7b93e35), schließt #316Serialisierung: Ausgabe von „euler“ durch Rotation von „config.mount“ unter „euler.output“ (#268) (f6b54a2)Serialisierung: Ausgabe von Euler-Werten durch Rotation unter „transform“ in „euler.output“ (96c6cc9), schließt #283Serialisierung: „zoom-about-pivot“ des Arbeitsbereichs über „set_transform“ verfügbar machen (#309) (c1d08fc), schließt #280Serialisierung: „trigger_mode“ in „config/body_orientation“ vereinheitlichen (#265) (8781b8a), schließt #268Anpassung der Parameter für „serialization: transform“ in die sitzungsspezifischen „serial_options“ (#280) (03b2fd6)Serialisierung: „config/mount“ in „scope“ und „body_orientation“ aufteilen (#265) (5618839), schließt #280Serialisierung: Session-Optionen in die Ausgabe übernehmen und verschachtelte „reshape“-Anweisungen filtern (#279, #280) (59984ce), schließt #265Serialisierung: Vereinheitlichung der Dekodierungsprozesse für WS und HTTP (#280) (6076917)Sitzungen: Allgemeiner Bewegungssperrmechanismus mit Bake-Verarbeitung beim Lösen hinzugefügt (c8d2a93), schließt #304Sessions: In „live_motion“ wurde ein Prozess hinzugefügt, der die Bewegungssperre tickweise vorantreibt (mit Gate) (d29013c), schließt #308 #304 #308Sitzungen: Hinzufügen eines Sitzungsbeobachters auf Manager-Ebene, der die Übertragung in der Hauptschleife unterstützt (83e76ef), schließt #284Sitzungen: „reparent“ für Mounts und „zoom-about-pivot“ für den Arbeitsbereich hinzugefügt (294d6e8), schließt #265, 297, #272 und #304Sitzungen: Hinzufügen eines namensraumgebundenen Ereignisbereichs „config.body_orientation“ und Ausgabe einer Warnung bei der veralteten Eingabe „values“ (3f70047), schließt #320Sitzungen: Hinzufügen von „config/mount“-Quellen und Trigger-Routing für die Vorschau (#265) (5d11dbf), schließt #268Sitzungen: Speichern und Laden von Gerätemounts unter „mount space“ (#265) (4cec178), schließt #292Sitzungen: set_workspace_transform_around wurde verallgemeinert, um Pivot-Echo zu unterstützen (0b242a2), schließt #309Sitzungen: Funktionsweise der Griff-Tasten-Maske und des „force_scale“-Overlays (836ef2f), schließt #316Sitzungen: Beschriftung des Sitzungsdiagramms von Tracy im Kundenprofil (72a8f34), schließt #258Sitzungen: Routing im Mount-Scope und virtuelle Speicher (#265) (9a4e7f4), schließt die Beiträge nach #286 und #293 abSitzungen: „force_scale“-Ducking pro Sitzung (Vorschau) (bff66ad)Fehlerbehebungen {#bug-fixes}
ci: Festlegung der Release-Toolchain zur Wiederherstellung des Changelogs (72c6773), schließt #313Korrektur beim Kompilieren mit der neuen Glaze-Version (e2c53d3)deps: Rust-Crate „nix“ auf Version 0.31 aktualisiert (b3b9a84)Geräte: Das „safety-config“-Protokoll wird an einer Stelle des Sendevorgangs blockiert (b8e8401), schließt #295Geräte: Schutz vor dem Schreiben von „safety-config“ basierend auf Firmware-Version und Kalibrierung (5ad5128), schließt #295Geräte: Aufrechterhaltung der Kabelverbindung von inverse3 auch während der Stabilisierungsphase von „wakeup“ (4afed45)Geräte: Aufrechterhaltung der Kabelverbindung von „inverse3“ auch während der Stabilisierungsphase nach dem Aufwachen (79c2b66)Geräte: Unterdrückung von [secure]-Akku-Benachrichtigungen bei kabelgebundenen Verse-Griffen (ea54a1a), schließt #314http: Überprüfung der Kalibrierung beim Schreiben von „safety“-Daten auf Sitzungsebene (89f9cd7), schließt #295 #293http: Integration der Euler-Rotation gemäß den Sitzungsbedingungen (#288) (97cf203)inverse_ux: Die Verarbeitung von „calibration_notifier“ auf Minverse beschränken (418913f)Lebensdauerbezogene Bereinigung zur Vermeidung von Abstürzen (e7b3785)modules::inverse-ux: Auch wenn die Firmware den Vorgang blockiert, wird stets „calibration-failed“ ausgegeben (3841d06)modules::inverse-ux: Erneutes Koppeln nach dem Austausch eines bereits gekoppelten Geräts (cf85707), schließt #278modules::sdf: Integration von „euler“ aus der SDF-Transformation gemäß den Sitzungsrichtlinien (#291) (9741ac6)modules::sdf: Ausrichtung der SDF-Geometrie an das Koordinatensystem des Clients anpassen (c29e4f2), schließt #276Protokoll: Behebung eines Konflikts bei der Lebensdauer von Timern, der zum Absturz oder zum Einfrieren des Dienstes führte (0cb019b), schließt #303Protokoll: Leert den seriellen Puffer beim Öffnen des Ports und erkennt im laufenden Betrieb ausgetauschte Geräte (b8724d9)Protokoll: Schutz des Firmware-Client-Callbacks vor Konflikten bei der Geräteentsorgung (3d795bb), schließt #303Protokoll: Neufassung der 0xE4-IMU-Orientierungs-API mit typisierten Enums und korrektem Wire-Format (8733ec0)Bei Aktivierung/Deaktivierung von inverse3x Rückkehr zur Startseite über den BIA-Hub (f435454)Dienst: „Adaptive Dispatch“ standardmäßig deaktivieren (9415638)service: Die Beendigung des Dienstes wurde so angepasst, dass sie nun in einer geordneten Abfolge, mit einer zeitlichen Obergrenze und ohne Konflikte erfolgt (ff888d7), schließt #303Sitzungen: *_zentriert* Den Mittelpunkt der Voreinstellung an den tatsächlich erreichbaren Mittelpunkt anpassen (ad6e726), schließt #321Sitzungen: Automatisches Übertragen der SIGGRAPH-Arbeitsbereichsgrenzen bei einer Änderung der Mount-Einstellung entfernt (2df1654)Sitzungen: Bei Geräten, die noch von einer Live-Sitzung angesteuert werden, wird der „Force Drain“ bei beendeten Sitzungen übersprungen (e1f9ff7), schließt #324Sitzungen: Korrektur, damit `start()` die bei der Verbindung ausgehandelten `serial_options` nicht löscht (#290) (27e27d8)Sitzungen: Nach „set_transform“ wird die Geschwindigkeit der Transformation im Arbeitsbereich auf Null zurückgesetzt (133c3ad), schließt #280WebSocket: Befehle gemäß den Konventionen der Quellsitzung dekodieren (#289) (1b24049), schließt #265Leistungsverbesserungen {#performance-improvements}
core/log: Das Makro „ haply_*“ wird so gesteuert, dass „fmt::format“ bei Deaktivierung übersprungen wird (672a87a), schließt #270modules::sdf: SDF nicht bei jedem Tick, sondern nur einmal bei der Erstellung „baken“ (15350c5), schließt #277