3.5.3 (06/08/2026) {#353-2026-08-06}
Améliorations internes {#internal-improvements}
core/log : ajout du format de mise en forme différée pour les macros de type « haply_* » (cf7dbfc), clôture du ticket n° 271core : ajout des primitives « pivot » et « compose/inverse » (01080f6), clôture du ticket n° 283appareils : mise en cache de l'orientation du corps 0xE4 et routage du mode de déclenchement (#265) (4864700)périphériques : compensation côté serveur du système de coordonnées du capteur IMU 0xE4 (#286) (e6d877c), clôture du ticket tapi-prototype-firmware#87appareils : actualisation de body_orientation lors de l'étalonnage d'inkwell (#268) (89b190b), clôture des tickets #286 #286 #286appareils : distinction entre l'orientation du corps en temps réel (0x0C) et de référence (0xE4) (#286 #315) (638487a), clôture des tickets #268 #266 #268http : uniformisation des réponses de non-prise en charge du protocole sur le code 422 (e0e7638), clôture des tickets #293, #293 et #295http : patch permettant de prendre en charge Euler pour la migration de l'affichage « transform » et des entrées SDF (#279, #280, #291) (bb29404)http : Réinitialisation du montage de l'appareil lors de l'exécution de « Delete scope=device » (#265) (f6bf26b), clôture le ticket #286modules::navigation : ajout d'un mode « clutch » au verrouillage de mouvement (contrôlé par un interrupteur, désactivé par défaut) (4b69eed), clôture des tickets #308 #308 #283 #308modules::navigation : saisie des boutons avec « prevent_default » ; « clutch force_scale » ; navigation par appui long sur la bulle (fb216aa), ferme les tickets n° 317, 318, 316, 317 et 318modules::navigation : définition d'une limite supérieure pour max_motion/force_scale dans clutch (a946088), clôture du ticket n° 316modules::navigation : fonctionnalité « kill switch » des miroirs ; les deux sont activés par défaut (b6ee0c0), clôture du ticket n° 318modules::navigation : application d'un patch de configuration à chaque entrée de la liste inputs[] ; bubble émet status.engaged (ba2058f), clôture le ticket n° 318protocole : fractionnement du fichier « capability », ajout d'un contrôle d'atténuation et augmentation de la valeur « base » (30d7d5d), clôture du ticket n° 293protocole : tableau des capacités + émetteur de réponses « non pris en charge » unifié (289382e), clôture des tickets n° 293 et n° 295protocole : contrôle d'accès à « home_return » et « pen_attached » via un tableau (8a05d20), clôture du ticket n° 293protocole : introduction de fw_version et migration de la vérification de version (38c2cae), clôture du ticket n° 293sérialisation : application du masque des boutons de poignée dans le canal de session v3.1 (7b93e35), clôture du ticket n° 316sérialisation : rotation de la sortie euler sous euler.output pour config.mount (#268) (f6b54a2)sérialisation : rotation de la sortie euler sous euler.output pour la transformation (96c6cc9), clôture du ticket n° 283sérialisation : activation de la fonction « zoom-about-pivot » dans set_transform (#309) (c1d08fc), clôture du ticket #280sérialisation : aplatissement du paramètre `trigger_mode` de `config/body_orientation` (#265) (8781b8a), clôture le ticket #268sérialisation : élévation du paramètre « transform » au rang de « serial_options » pour chaque session (#280) (03b2fd6)sérialisation : séparation de config/mount en scope et body_orientation (#265) (5618839), clôture du ticket #280sérialisation : application des options de session à la sortie et contrôle des opérations « reshape » imbriquées (#279, #280) (59984ce), clôture le ticket #265sérialisation : harmonisation de la décodification configure entre WS et HTTP (#280) (6076917)sessions : ajout d'un mécanisme générique de verrouillage des mouvements avec désactivation de « bake » (c8d2a93), clôture du ticket n° 304sessions : ajout d'un verrou de mouvement « live_motion » progressant tick par tick (contrôlé par un commutateur) (d29013c), clôture des tickets #308, #304 et #308sessions : ajout d'un observateur de session de niveau « manager » et transmission via la boucle principale (83e76ef), clôture du ticket n° 284sessions : ajout des fonctionnalités « reparent » et « workspace zoom-about-pivot » (294d6e8), clôture des tickets #265, 297, #272 et #304sessions : ajout d'une portée d'événement « config.body_orientation » dans un espace de noms ; affichage d'un avertissement concernant les anciennes entrées « values » (3f70047), clôture du ticket n° 320sessions : ajout d'une source de prévisualisation « config/mount » et d'un routage par déclencheur (#265) (5d11dbf), clôture du ticket #268sessions : stockage et chargement des montages de périphériques dans l'espace « mount » (#265) (4cec178), clôture du ticket #292sessions : généralisation de `set_workspace_transform_around` et ajout d'un affichage du pivot (0b242a2), clôture du ticket n° 309sessions : ajout d'un masque pour les boutons de la poignée et d'un mécanisme de superposition avec `force_scale` (836ef2f), clôture du ticket n° 316sessions : ajout d'une balise « profile » du client au graphique de session de Tracy (72a8f34), clôture du ticket n° 258sessions : montage du scope, routage et stockage des éléments virtuels (#265) (9a4e7f4), clôture les tickets #286 et #293sessions : application de l'atténuation force_scale par session (aperçu) (bff66ad)Corrections de bogues {#bug-fixes}
ci : Chaîne d'outils de publication fixe pour rétablir la génération du journal des mises à jour (72c6773), clôture le ticket n° 313Correction d'un problème de compilation dans la nouvelle version de `glaze` (e2c53d3)dépendances : mise à jour du crate Rust « nix » vers la version 0.31 (b3b9a84)dispositifs : contrôle d'accès au protocole safety-config au niveau de l'entrée (b8e8401), clôture le ticket n° 295appareils : protection de l'écriture dans « safety-config » en fonction de la version du micrologiciel et de l'état d'étalonnage (5ad5128), clôture du ticket n° 295dispositifs : maintenir la liaison de communication inverse3 active pendant la fenêtre de stabilisation au réveil (4afed45)dispositifs : maintenir la liaison de communication inverse3 active pendant la fenêtre de stabilisation au réveil (79c2b66)appareils : désactivation des notifications de niveau de batterie [secure] sur les Verse Grips filaires (ea54a1a), clôture du ticket n° 314http : vérification de la conformité des écritures « safety » dans la portée de session (89f9cd7), résout les tickets #295 et #293http : normalisation des rotations d'Euler selon la convention de session (#288) (97cf203)inverse_ux : limiter le traitement de calibration_notifier à Minverse (418913f)Nettoyage du cycle de vie pour éviter les plantages (e7b3785)modules::inverse-ux : afficher systématiquement le message « calibration-failed » en cas de blocage du micrologiciel (3841d06)modules::inverse-ux : réappairage après le remplacement d'un appareil déjà appairé (cf85707), clôture #278modules::sdf : normalisation de la transformation euler de sdf selon la convention de session (#291) (9741ac6)modules::sdf : orientation correcte des formes SDF dans le système de coordonnées du client (c29e4f2), clôture du ticket n° 276protocole : résolution d'un conflit de cycle de vie des temporisateurs entraînant le plantage ou le blocage du service (0cb019b), clôture du ticket n° 303protocole : actualisation de la mémoire tampon série lors de l'ouverture du port, afin de détecter les périphériques connectés à chaud (b8724d9)protocole : ajout d'une protection pour les rappels du client du micrologiciel afin d'empêcher les conflits de destruction des périphériques (3d795bb), clôture le ticket n° 303protocole : réécriture de l'API d'orientation IMU 0xE4 à l'aide d'énumérations typées et d'un format de transmission correct (8733ec0)Retour à l'écran d'accueil lorsque inverse3x est activé/désactivé via le hub bia (f435454)service : la distribution adaptative est désactivée par défaut (9415638)service : garantit que le processus de fermeture du service est ordonné, borné et sans concurrence (ff888d7), clôture le ticket n° 303sessions : Va *_centré* Réglage par défaut du centrage sur le point central effectivement accessible (ad6e726), clôture du ticket n° 321sessions : suppression de la diffusion automatique des limites de l'espace de travail Siggraph lors d'un changement de montage (2df1654)sessions : pour les appareils encore pilotés par des sessions actives, ignorer la vidange forcée lors de la fermeture de la session (e1f9ff7), clôture le ticket n° 324sessions : arrêt de la fonction start() et suppression des options serial_options négociées lors de l'établissement de la connexion (#290) (27e27d8)sessions : remise à zéro de la vitesse de transformation de l'espace de travail après l'appel à `set_transform` (133c3ad), clôture du ticket n° 280websocket : décodage des commandes selon les conventions de la session de l'expéditeur (#289) (1b24049), clôture le ticket #265Améliorations des performances {#performance-improvements}
core/log : contrôle d'accès à la macro haply_* ; lorsqu'elle est désactivée, fmt::format est ignoré (672a87a), clôture le ticket n° 270modules::sdf : Cuisson unique du SDF lors de sa création, au lieu d'une cuisson à chaque tick (15350c5), clôture le ticket n° 277