3.5.1 (2026-05-28)
Améliorations internes
core/gates: backoff_time_gate + compteur de hits supprimés (cc989c0), ferme #244core/gates: streak_gate + variantes à clé (748f419), ferme #244devices: ajouter un indicateur de charge au wireless verse grip (6482bd6)devices: interroger l'état de mouvement de l'inverse3 à 20 Hz (bfc160d)devices: utiliser la sérialisation v3.1 pour le journal de débogage de l'instantané ready (0c59c26)http: permettre le GET sur route exacte pour les paramètres avancés et dépréciés (2b5f037)http: conditionner la visibilité de GET /settings par indicateur (4f013d8), ferme #251modules::inverse-ux: exposer paired_with.auto derrière le gate preview_mode (1f7f0e1), ferme #230serialization: ajouter l'indicateur global preview_mode pour les champs de préversion (422e822), ferme #230serialization: ajouter une représentation d'Euler aux quaternions v3.1 (c32dd6b), ferme #239serialization: constructeur explicite quaternion + opérateur d'affectation du core (677ed6f)sessions: autoriser une limitation de débit des réponses en flux sous la milliseconde (9a42719)sessions: enrichissement de /sessions v3.1 derrière le gate preview (6c1c8f2)settings: promouvoir misc/deprecated comme paramètre avancé (b3528d7)tutorials: prototype de vérification de trame pour la réponse en flux (6b57c39)Corrections de bogues
command_processor: empêcher le basculement de mode lors de l'échange Force/Position (d754ef1), ferme #232command_processor: séparer la vidange ponctuelle en ligne du contrôle maintenu par ZOH (5960498), ferme #117core::gates: le time-gate à clé respecte la dernière période pour chaque hit (c73b86a)detection: consolider le journal de première injection de extra_ports (57e21d7)detection: journalisation par port conditionnée via keyed_gate (04b8d54), ferme #243devices: ne marquer le wireless verse grip prêt qu'après les informations du handle (dfd7d5d)devices: limiter le débit de set_extension_data au wireless verse_grip (011d5a0)http: le sélecteur d'appareil accepte "#1234" et "1234" comme ID d'appareil (1452c10)http: supprimer le champ de contexte inutilisé qui bloquait le build release macOS (-Wunused-private-field) (5345989)modules::inverse-ux: appairage automatique lorsque 1 Inverse3 + 1 grip sont connectés (41b3024), ferme #227 #227modules::inverse-ux: abandonner les appairages automatiques lorsque la topologie dépasse 1↔1 (e4fb80c)modules::inverse-ux: respecter la substitution force_attached lors de la calibration Minverse (e24bf84), ferme #224modules::inverse-ux: attached de paired_with toujours [secure] pour le Minverse et au premier POST (cafb574)modules::inverse-ux: registre d'appairage par appareil Inverse3 ↔ VerseGrip (ac63d2a), ferme #224modules::inverse-ux: les routes POST et DELETE paired_with retournent l'état attached calculé (a751208)Empêcher les avertissements répétés lorsque le service tente de détecter un appareil non-WVG comme WVG (17ad373)protocol::inverse3: gérer les charges utiles de notification 0xBA de longueur variable (61f7b1f)service: appliquer les classes du sélecteur d'appareil en parallèle de index (2d6422a)service: conserver l'expression du sélecteur d'appareil dans les messages 404 (d2c4626)sessions: apply_preset réinitialise le montage sur defaults / arm_front (a333da8), ferme #240sessions: revenir à la cible locale lorsque l'ID inter-session est inconnu (14367ed), ferme #239sessions: réponse à instantané complet sur force_render_full_state inter-session (8afc646)sessions: respecter execute:[secure] sur session.configure.serialization (3458af0)sessions: garder le montage de l'appareil effacé lors de l'application des préréglages defaults / arm_front (698008b), ferme #252 #253sessions: réinitialiser le montage à l'identité pour les préréglages defaults / arm_front (a0a2b29), ferme #240sessions: rétablir la réponse WS sur l'instantané en flux limité (787a656), ferme #248sessions: maîtriser le chemin critique de réception WS sous charge de simulation soutenue (e4e55d0)Améliorations de performance
command_processor: chemin rapide de réception WS pour les lots de contrôle seulement (92bb4e8), ferme #241engine: faire converger le taux de répartition adaptatif avec un amortissement AIMD (b8fc1c8), ferme #249main_loop: borner la file asio avec un plafond de ticks en vol (8d77823)serialization: mettre en cache les options de préversion dans une struct statique (8698636), ferme #241sessions: réduire la contention sur session::_mutex dans les chemins critiques (bf117c8), ferme #241 #242sessions: ajouter le marqueur Tracy ZoneScoped aux appels d'appareil de session (7404990)