3.5.3 (2026-08-06)
Améliorations internes
core/log: ajout de la forme de macro haply_* à formatage différé (cf7dbfc), closes #271core: ajout de primitives de pivot et de composition/inversion de transformation (01080f6), closes #283devices: mise en cache de l'orientation du corps 0xE4 et routage de trigger_mode (#265) (4864700)devices: compensation côté service du repère du capteur IMU 0xE4 (#286) (e6d877c), closes tapi-prototype-firmware#87devices: actualisation de body_orientation lors de l'étalonnage de l'inkwell (#268) (89b190b), closes #286 #286 #286devices: séparation de l'orientation du corps en direct (0x0C) et de référence (0xE4) (#286 #315) (638487a), closes #268 #266 #268http: alignement des réponses de protocole non pris en charge sur 422 (e0e7638), closes #293 #293 #295http: migration des échos de transformation et des entrées sdf vers des modifications compatibles euler (#279, #280, #291) (bb29404)http: réinitialisation du montage de l'appareil sur Delete scope=device (#265) (f6bf26b), closes #286modules::navigation: ajout du mode embrayage sur le verrou de mouvement (conditionnel, désactivé par défaut) (4b69eed), closes #308 #308 #283 #308modules::navigation: entrées de boutons avec prevent_default; force_scale de l'embrayage; navigation par maintien pour la bulle (fb216aa), closes #317 #318 #316 #317 #318modules::navigation: plafonds max_motion/force_scale de l'embrayage (a946088), closes #316modules::navigation: commutateurs de désactivation des fonctionnalités en miroir, tous deux activés par défaut (b6ee0c0), closes #318modules::navigation: modifications de paramètres par entrée sur inputs[]; la bulle émet status.engaged (ba2058f), closes #318protocol: découpage du fichier de capacités, porte d'amortissement, remontée de la base (30d7d5d), closes #293protocol: table de capacités + émetteur unique de non-prise-en-charge (289382e), closes #293 #295protocol: conditionnement de home_return + pen_attached via la table (8a05d20), closes #293protocol: introduction de fw_version et migration des vérifications de version (38c2cae), closes #293serialization: application du masque de bouton de préhension dans les passes de session v3.1 (7b93e35), closes #316serialization: émission d'euler sur les rotations de config.mount sous euler.output (#268) (f6b54a2)serialization: émission d'euler sur les rotations de transform sous euler.output (96c6cc9), closes #283serialization: exposition du zoom autour du pivot de l'espace de travail sur set_transform (#309) (c1d08fc), closes #280serialization: aplatissement de trigger_mode pour config/body_orientation (#265) (8781b8a), closes #268serialization: promotion des réglages de transformation dans serial_options par session (#280) (03b2fd6)serialization: séparation de config/mount en portée + body_orientation (#265) (5618839), closes #280serialization: acheminement des options de session à travers les sorties et conditionnement du remodelage imbriqué (#279, #280) (59984ce), closes #265serialization: unification du décodage de configure pour ws et http (#280) (6076917)sessions: ajout d'un mécanisme générique de verrou de mouvement avec pré-calcul au désengagement (c8d2a93), closes #304sessions: ajout de live_motion, avancement du verrou de mouvement à chaque tick (conditionnel) (d29013c), closes #308 #304 #308sessions: ajout d'observateurs de session au niveau du gestionnaire avec livraison dans la boucle principale (83e76ef), closes #284sessions: ajout de la réaffectation de montage et du zoom de l'espace de travail autour du pivot (294d6e8), closes #265 297/#272 #304sessions: ajout d'une portée d'événements config.body_orientation à espace de noms; avertissement pour l'entrée 'values' héritée (3f70047), closes #320sessions: ajout de la source d'aperçu config/mount et du routage des déclencheurs (#265) (5d11dbf), closes #268sessions: stockage/chargement du montage de l'appareil dans l'espace de montage (#265) (4cec178), closes #292sessions: généralisation de set_workspace_transform_around avec écho du pivot (0b242a2), closes #309sessions: masque du bouton de préhension + mécanismes de superposition force_scale (836ef2f), closes #316sessions: étiquetage des graphiques de session Tracy avec le profil client (72a8f34), closes #258sessions: routage de la portée de montage + virtuels de stockage (#265) (9a4e7f4), closes post-#286 #293sessions: atténuation de force_scale par session (aperçu) (bff66ad)Corrections de bogues
ci: épinglage de la chaîne d'outils de publication pour rétablir les journaux des modifications (72c6773), closes #313correctif de compilation avec la nouvelle version de glaze (e2c53d3)deps: mise à jour du crate rust nix vers 0.31 (b3b9a84)devices: conditionnement du protocole de configuration de sécurité au point d'étranglement de l'envoi (b8e8401), closes #295devices: protection des écritures de configuration de sécurité selon la version du micrologiciel et l'étalonnage (5ad5128), closes #295devices: maintien de la connexion filaire de l'inverse3 pendant la fenêtre de stabilisation du réveil (4afed45)devices: maintien de la connexion filaire de l'inverse3 pendant la fenêtre de stabilisation du réveil (79c2b66)devices: suppression de la notification de batterie [secure] sur les poignées verse filaires (ea54a1a), closes #314http: vérification de l'étalonnage pour les écritures de sécurité à portée de session (89f9cd7), closes #295 #293http: intégration des rotations euler aux conventions de session (#288) (97cf203)inverse_ux: restriction du traitement de calibration_notifier à Minverse (418913f)nettoyage de la durée de vie pour éviter les plantages (e7b3785)modules::inverse-ux: émission systématique de calibration-failed lorsque le micrologiciel bloque (3841d06)modules::inverse-ux: nouvel appairage après le remplacement d'un appareil apparié (cf85707), closes #278modules::sdf: intégration de la transformation euler sdf aux conventions de session (#291) (9741ac6)modules::sdf: orientation des formes SDF dans le repère de coordonnées du client (c29e4f2), closes #276protocol: élimination des conditions de concurrence sur la durée de vie des minuteries qui font planter ou bloquer le service (0cb019b), closes #303protocol: vidage des tampons série à l'ouverture du port pour reconnaître les appareils remplacés à chaud (b8724d9)protocol: protection des rappels client du micrologiciel contre les conditions de concurrence lors de la destruction d'appareils (3d795bb), closes #303protocol: réécriture de l'API d'orientation IMU 0xE4 avec énumération typée et format de transmission correct (8733ec0)retour à la position d'accueil pour l'activation et la désactivation de l'inverse3x via le hub bia (f435454)service: répartition adaptative désactivée par défaut (9415638)service: arrêt du service ordonné, borné et sans conditions de concurrence (ff888d7), closes #303sessions: centrage des préréglages *_centered sur le centre réellement atteignable (ad6e726), closes #321sessions: abandon de l'auto-push de la limite d'espace de travail siggraph lors d'un changement de montage (2df1654)sessions: ignorer le vidage forcé de la session en fermeture pour un appareil encore piloté par une session active (e1f9ff7), closes #324sessions: empêcher start() d'effacer les serial_options négociés à la connexion (#290) (27e27d8)sessions: remise à zéro de la vitesse de transformation de l'espace de travail après set_transform (133c3ad), closes #280websocket: décodage des commandes selon les conventions de la session émettrice (#289) (1b24049), closes #265Améliorations de performance
core/log: conditionnement des macros haply_* pour que fmt::format soit ignoré lorsqu'elles sont désactivées (672a87a), closes #270modules::sdf: pré-calcul du SDF une seule fois à la création plutôt qu'à chaque tick (15350c5), closes #277