3.5.3 (06/08/2026) {#353-2026-08-06}
Améliorations internes {#internal-improvements}
core/log : ajout du format de macro « haply_* » pour le formatage différé (cf7dbfc), clôture du ticket n° 271core : ajout des primitives de transformation « pivot » et « compose/inverse » (01080f6), clôture du ticket n° 283Mise en cache de l'orientation du corps des périphériques 0xE4 et routage du `trigger_mode` (#265) (4864700)périphériques : correction côté serveur de la trame du capteur IMU 0xE4 (#286) (e6d877c), clôture de tapi-prototype-firmware#87appareils : mise à jour de `body_orientation` lors de l'étalonnage d'Inkwell (#268) (89b190b), clôture des tickets #286 #286 #286Périphériques : séparation de l'orientation du corps entre « en direct » (0x0C) et « référence » (0xE4) (#286 #315) (638487a), clôture des tickets #268 #266 #268http : uniformisation des réponses aux protocoles non pris en charge sur le code 422 (e0e7638), clôture des tickets #293, #293 et #295Migration de l'écho de « http: transform » et de l'entrée sdf vers un correctif compatible avec Euler (#279, #280, #291) (bb29404)http : Réinitialisation du montage du périphérique lors de l'exécution de « scope=device » (#265) (f6bf26b), clôture le ticket #286modules::navigation : ajout du mode « clutch » sur Motion Lock (avec porte, désactivé par défaut) (4b69eed), clôture les tickets #308 #308 #283 #308modules::navigation : saisie via un bouton avec « prevent_default », « force_scale » de clutch, navigation par appui long de bubble (fb216aa), clôture des tickets n° 317, 318, 316, 317 et 318modules::navigation : limites maximales de max_motion / force_scale pour « clutch » (a946088), clôture du ticket n° 316modules::navigation : « kill switch » pour les fonctionnalités en miroir (les deux sont activés par défaut) (b6ee0c0), clôture le ticket n° 318modules::navigation : correctif de configuration par entrée pour inputs[], sortie de status.engaged via bubble (ba2058f), clôture du ticket n° 318protocole : fonctionnalité de fractionnement de fichiers, porte d'atténuation, levage de la base (30d7d5d), clôture du ticket n° 293protocole : table des capacités et émetteur unique pour le traitement des cas non pris en charge (289382e), clôture des tickets n° 293 et 295protocole : gestion des événements « home_return » et « pen_attached » via la table (8a05d20), clôture du ticket n° 293protocole : ajout 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 prise en main au traitement des sessions de la version 3.1 (7b93e35), clôture du ticket n° 316sérialisation : sortie d'Euler via la rotation de `config.mount` sous `euler.output` (#268) (f6b54a2)sérialisation : sortie Euler via la rotation de « transform » sous « euler.output » (96c6cc9), clôture du ticket n° 283sérialisation : exposition de la propriété « zoom-about-pivot » de l'espace de travail via `set_transform` (#309) (c1d08fc), clôture du ticket #280sérialisation : mise à plat du paramètre `trigger_mode` de `config/body_orientation` (#265) (8781b8a), clôture le ticket #268sérialisation : promotion des paramètres de réglage de « transform » vers « serial_options » par session (#280) (03b2fd6)sérialisation : division de « config/mount » en « scope » et « body_orientation » (#265) (5618839), clôture du ticket #280sérialisation : transfert des options de session vers la sortie et filtrage des `reshape` imbriqués (#279, #280) (59984ce), clôture le ticket #265sérialisation : harmonisation des processus de décodage configure pour WS et HTTP (#280) (6076917)sessions : ajout d'un mécanisme de verrouillage de mouvement polyvalent doté d'un traitement de « bake » lors du désengagement (c8d2a93), clôture du ticket n° 304sessions : ajout d'un traitement permettant de faire progresser le verrouillage de mouvement à chaque tick dans `live_motion` (avec porte) (d29013c), clôture des tickets #308, #304 et #308sessions : ajout d'un observateur de session au niveau du gestionnaire prenant en charge la diffusion dans la boucle principale (83e76ef), clôture du ticket n° 284sessions : ajout des options « reparent » pour les montages et « zoom-about-pivot » pour l'espace de travail (294d6e8), clôture des tickets #265, 297, #272 et #304sessions : ajout d'une portée d'événement « config.body_orientation » avec espace de noms et affichage d'un avertissement concernant l'ancienne syntaxe « values » (3f70047), clôture du ticket n° 320sessions : ajout d'une source « config/mount » et d'un routage de déclencheurs pour l'aperçu (#265) (5d11dbf), clôture le ticket #268sessions : enregistrement et chargement du montage des périphériques dans « mount space » (#265) (4cec178), clôture du ticket #292sessions : généralisation de la fonction `set_workspace_transform_around` pour prendre en charge l'écho « pivot » (0b242a2), clôture du ticket n° 309sessions : fonctionnement du masque des boutons de prise en main et de la superposition « force_scale » (836ef2f), clôture du ticket n° 316sessions : Étiquetage du graphique de session de Tracy dans le profil client (72a8f34), clôture du ticket n° 258sessions : routage du Mount Scope et environnements de stockage virtuels (#265) (9a4e7f4), clôture après les tickets #286 et #293sessions : atténuation « force_scale » par session (aperçu) (bff66ad)Corrections de bogues {#bug-fixes}
ci : fixation de la chaîne d'outils de publication pour la restauration du journal des modifications (72c6773), clôture du ticket n° 313Correction de la compilation avec le nouveau Glaze (e2c53d3)Dépendances : mise à jour du crate Rust « nix » vers la version 0.31 (b3b9a84)dispositifs : mise en place du protocole safety-config à un seul point du processus d'envoi (b8e8401), clôture du ticket n° 295appareils : protection contre l'écriture dans safety-config en fonction de la version du micrologiciel et de l'étalonnage (5ad5128), clôture du ticket n° 295Périphériques : maintenir la connexion par câble de « inverse3 » même pendant la période de stabilisation du réveil (4afed45)Périphériques : maintien de la connexion physique d'inverse3 pendant la période de stabilisation du réveil (79c2b66)appareils : utilisation de la poignée « Verse » filaire pour limiter les notifications de batterie [secure] (ea54a1a), clôture du ticket n° 314http : Vérification de l'étalonnage lors de l'écriture de la valeur « safety » par session (89f9cd7), clôture des tickets #295 et #293http : Intégration de la rotation d'Euler dans le cadre des règles de session (#288) (97cf203)inverse_ux : limitation du traitement de `calibration_notifier` à Minverse (418913f)Nettoyage de la durée de vie pour éviter les plantages (e7b3785)modules::inverse-ux : affiche systématiquement le message « calibration-failed » même si le firmware bloque l'opération (3841d06)modules::inverse-ux : réappairage après le remplacement d'un appareil déjà appairé (cf85707), clôture le ticket n° 278modules::sdf : intégration de la transformation « euler » de sdf conformément aux conventions de session (#291) (9741ac6)modules::sdf : Alignement de l'orientation des formes SDF sur le système de coordonnées du client (c29e4f2), clôture du ticket n° 276protocole : résolution d'un conflit de durée de vie des temporisateurs provoquant des plantages ou des blocages du service (0cb019b), clôture du ticket n° 303protocole : vidage du tampon série à l'ouverture du port et détection des périphériques remplacés à chaud (b8724d9)protocole : protection des rappels du client du micrologiciel contre les conflits lors de la suppression d'un périphérique (3d795bb), clôture du ticket n° 303protocole : réécriture de l'API d'orientation IMU 0xE4 avec une énumération typée et un format de transmission correct (8733ec0)Retour à l'écran d'accueil via le hub BIA lors de l'activation ou de la désactivation d'inverse3x (f435454)service : désactivation par défaut de la répartition adaptative (9415638)service : modification du processus de fermeture du service pour qu'il se déroule de manière ordonnée, dans un délai maximal et sans conflit (ff888d7), clôture du ticket n° 303sessions : *_centré* Aligner le centre du préréglage sur le centre réellement accessible (ad6e726), clôture le ticket n° 321sessions : suppression de la mise à jour automatique des limites de l'espace de travail SIGGRAPH lors d'un changement de montage (2df1654)sessions : ignorer la fonction « force drain » des sessions en cours de fermeture pour les périphériques encore utilisés par une session active (e1f9ff7), clôture le ticket n° 324sessions : correction pour que la fonction start() ne supprime pas les options serial_options négociées lors de la connexion (#290) (27e27d8)sessions : réinitialisation à 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 conformément aux règles de la session d'origine (#289) (1b24049), clôture le ticket #265Amélioration des performances {#performance-improvements}
core/log : lorsque cette option est désactivée, la macro ` haply_*` est ignorée afin que `fmt::format` soit omis (672a87a), clôture le ticket n° 270modules::sdf : Cuisson du SDF une seule fois lors de la création, et non à chaque tick (15350c5), clôture du ticket n° 277