3.5.3 (06/08/2026) {#353-2026-08-06}
Améliorations internes {#internal-improvements}
core/log : Ajouter Makro-Form haply_* avec mise en forme différée (cf7dbfc), résout le problème n° 271core : ajout d'une primitive de transformation « pivot » et « compose/inverse » (01080f6), résout le ticket n° 283périphériques : mise en cache de l'orientation du corps (0xE4) et transmission du mode de déclenchement (#265) (4864700)périphériques : compensation côté service du cadre de capteur IMU 0xE4 (#286) (e6d877c), inclut tapi-prototype-firmware#87dispositifs : mise à jour de l'orientation du corps lors de l'étalonnage Inkwell (#268) (89b190b), résout #286 #286 #286Périphériques : distinction entre l'orientation en temps réel (0x0C) et l'orientation de référence du corps (0xE4) (#286 #315) (638487a), résout les problèmes #268 #266 #268http : uniformiser les réponses sur 422 en cas de protocole non pris en charge (e0e7638), résout les tickets #293, #293 et #295http : Conversion des « Transform-Echos » et des entrées sdf en patchs compatibles avec Euler (#279, #280, #291) (bb29404)http : Réinitialisation du montage de l'appareil lors de la suppression de scope=device (#265) (f6bf26b), résout le ticket #286modules::navigation : Ajouter le mode « Clutch » au verrouillage de mouvement (contrôlé, désactivé par défaut) (4b69eed), résout les tickets #308 #308 #283 #308modules::navigation : Saisie via les boutons avec `prevent_default` ; `force_scale` pour Clutch ; navigation par bulles via le maintien (fb216aa), inclut #317 #318 #316 #317 #318modules::navigation : limites supérieures de Clutch pour max_motion/force_scale (a946088), clôture le ticket n° 316modules::navigation : commutateurs de désactivation des fonctionnalités en miroir, tous deux activés par défaut (b6ee0c0), résout le ticket n° 318modules::navigation : correctifs de configuration par entrée dans inputs[]; la bulle envoie le statut « status.engaged » (ba2058f), clôture le ticket n° 318protocole : fractionnement du fichier de capacités, porte d'atténuation, Base-Hoist (30d7d5d), résout le ticket n° 293protocole : tableau des capacités et émetteurs individuels pour les fonctions non prises en charge (289382e), inclut les numéros #293 et #295protocole : sécuriser « home_return » et « pen_attached » via la table (8a05d20), clôture du ticket n° 293protocole : introduction de « fw_version » et migration des vérifications de version (38c2cae), résout le ticket n° 293sérialisation : application du masque « Greiftasten » aux cycles de session v3.1 (7b93e35), résout le ticket n° 316sérialisation : afficher les rotations de config.mount sous euler.output (#268) (f6b54a2)sérialisation : afficher les rotations de Euler lors de la transformation dans « euler.output » (96c6cc9), clôture le ticket n° 283sérialisation : Zoom de l'espace de travail pour afficher le pivot via `set_transform` (#309) (c1d08fc), résout le ticket #280sérialisation : harmonisation du mode de déclenchement « config/body_orientation » (#265) (8781b8a), résout #268sérialisation : convertir les paramètres de transformation en options de sérialisation applicables à chaque session (#280) (03b2fd6)sérialisation : « config/mount » dans le champ d'application + répartition de « body_orientation » (#265) (5618839), résout le ticket #280sérialisation : faire passer les options de session par les sorties et garantir la conversion imbriquée (#279, #280) (59984ce), résout #265sérialisation : harmonisation du décodage des configurations WS et HTTP (#280) (6076917)sessions : ajout d'un mécanisme générique de blocage des mouvements avec balise lors du désengagement (c8d2a93), résout le ticket n° 304sessions : live_motion - Ajouter la mise à jour de la limitation de mouvement par tick (contrôlée) (d29013c), résout les tickets #308, #304 et #308sessions : ajouter un observateur de session au niveau du gestionnaire avec diffusion via la boucle principale (83e76ef), clôture le ticket n° 284sessions : ajout de « Mount-Reparenting » et « Workspace-Zoom » autour du pivot (294d6e8), clôture des tickets #265, 297, #272 et #304sessions : ajouter la variable de configuration « config.body_orientation » avec son propre espace de noms ; avertissement en cas d'entrée « values » obsolète (3f70047), résout le ticket n° 320sessions : ajout de la source « Vorschau » dans config/mount et du routage des déclencheurs (#265) (5d11dbf), résout le ticket #268sessions : enregistrer et charger le montage d'un périphérique dans la zone de montage (#265) (4cec178), résout le ticket #292sessions : généralisation de set_workspace_transform_around avec Pivot-Echo (0b242a2), résout le ticket n° 309sessions : mécanismes « Greiftasten-Maske » et « force_scale-Overlay » (836ef2f), clôture du ticket n° 316sessions : Annoter les graphiques de session Tracy avec le profil du client (72a8f34), clôture le ticket n° 258sessions : Mount-Scope-Routing et Storage-Virtuals (#265) (9a4e7f4), résout les problèmes post-#286 et #293sessions : session « force_scale-Ducking pro » (Aperçu) (bff66ad)Corrections de bogues {#bug-fixes}
ci : Fixation de la chaîne d'outils de publication pour restaurer les journaux des modifications (72c6773), résout le ticket n° 313Correction d'une erreur de compilation avec la nouvelle version de Glaze (e2c53d3)dépendances : mise à jour de Rust-Crate nix vers la version 0.31 (b3b9a84)appareils : sécurisation du protocole de configuration de sécurité au niveau du goulot d'étranglement d'émission (b8e8401), résout le ticket n° 295appareils : sécuriser les opérations d'écriture de la configuration de sécurité en fonction de la version du micrologiciel et de l'étalonnage (5ad5128), résout le ticket n° 295dispositifs : maintenir la connexion inverse3 active pendant la fenêtre de stabilisation après le réveil (4afed45)dispositifs : maintenir la connexion inverse3 active pendant la fenêtre de stabilisation après le réveil (79c2b66)appareils : [sécurisé] - Supprimer la notification d'accélération pour les poignées Verse filaires (ea54a1a), résout le ticket n° 314http : Vérification de l'étalonnage lors des opérations d'écriture liées à la sécurité au niveau de la session (89f9cd7), résout les problèmes #295 et #293http : Regrouper les rotations d'Euler selon les conventions de session (#288) (97cf203)inverse_ux : limiter le traitement par calibration_notifier à Minverse (418913f)Correction des cycles de vie pour éviter les plantages (e7b3785)modules::inverse-ux : toujours afficher « calibration-failed » lorsque le micrologiciel se bloque (3841d06)modules::inverse-ux : réappairage après le remplacement d'un appareil appairé (cf85707), clôture #278modules::sdf : regrouper les transformations sdf-Euler conformément aux conventions de session (#291) (9741ac6)modules::sdf : Alignement des formes SDF dans le système de coordonnées du client (c29e4f2), clôture le ticket n° 276protocole : suppression des conditions de concurrence dans les cycles de vie des temporisateurs qui provoquent le plantage ou le blocage du service (0cb019b), résout le ticket n° 303protocole : vider les tampons série lors de l'ouverture du port afin de détecter les appareils remplacés pendant le fonctionnement (b8724d9)protocole : Protection des callbacks du client du micrologiciel contre les conditions de concurrence lors de la destruction des appareils (3d795bb), résout le ticket n° 303protocole : réécriture de l'API d'orientation 0xE4-IMU avec une énumération typée et un format de transmission correct (8733ec0)Retour à la position initiale lors de l'activation et de la désactivation de la fonction « inverse3x » via le hub (f435454)service : la répartition adaptative est désactivée par défaut (9415638)service : concevoir l'arrêt du service de manière ordonnée, limitée et sans conditions de concurrence (ff888d7), résout le ticket n° 303sessions : *_centré*- Centrer les préréglages sur le point central effectivement accessible (ad6e726), ferme le ticket n° 321sessions : Supprimer le « Siggraph-Auto-Push » à la limite de l'espace de travail lors d'un changement de montage (2df1654)sessions : ignorer la vidange forcée à la fermeture de la session pour un périphérique encore contrôlé par une session active (e1f9ff7), ferme le ticket n° 324sessions : la fonction start() ne réinitialise plus les options serial_options négociées lors de la connexion (#290) (27e27d8)sessions : définir la vitesse de transformation de l'espace de travail sur zéro après l'appel de `set_transform` (133c3ad), clôture le ticket n° 280websocket : décoder les commandes conformément aux conventions de la session émettrice (#289) (1b24049), clôture #265Améliorations des performances {#performance-improvements}
core/log : haply_* - Sécuriser les macros de manière à ce que fmt::format soit ignoré lorsque la journalisation est désactivée (672a87a), résout le ticket n° 270modules::sdf : précalculer la SDF une seule fois lors de la création plutôt qu'à chaque tick (15350c5), clôture le ticket n° 277