v3.5.1
La version 3.5.1 est une version de stabilisation et de qualité. Thèmes principaux : appairage automatique pour les configurations 1↔1 de Inverse3 + poignée, état de mouvement GET /devices/{id} à jour sans session WebSocket ouverte, fin du crissement lors du basculement entre les modes force et position, et un ordonnanceur de tick de service auto-ajustable sous charge soutenue.
Faits saillants
- Appairage automatique pour les installations 1↔1 de Inverse3 + poignée. Lorsqu'un Inverse3 et une poignée sont prêts, le SDK enregistre automatiquement un appairage ; les déverrouillages déclenchés par
pen_attachedet par l'étalonnage Minverse ne sont plus mal acheminés dans les configurations à plusieurs appareils. - Instantanés
GET /devices/{id}à jour sans session ouverte. Inverse3 / Inverse3x / Minverse avec micrologiciel v7.5+ ont désormais leur état de mouvement interrogé à 20 Hz, peu importe l'activité de WebSocket. Le micrologiciel antérieur à la v7.5 ignore cette interrogation et n'émet qu'un seul avertissement. - Le basculement Force/Position ne crisse plus. Le passage de
set_cursor_force↔set_cursor_positionutilise un créneau exclusif : seule la dernière valeur par appareil est conservée entre deux ticks. La solution de contournement de 200 ms pour les intervalles d'inactivité de HARP est devenue obsolète. - Ordonnanceur de tick auto-ajustable. La boucle principale adapte sa cadence d'envoi sous charge, de sorte qu'un tick lent ne puisse pas faire croître indéfiniment la file de commandes.
- Réponses en flux 1 pour 1 sous charge. Les réponses en flux par message WS sont plafonnées à une par milliseconde et par session ; le tampon précédent est rejoué lorsque le plafond refuse l'envoi, de sorte que les boucles de simulation ne se bloquent jamais sur
recv().
Améliorations internes
Appareils
- Registre d'appairage Inverse3 ↔ VerseGrip par appareil.
GET|POST|DELETE /devices/{sel}/paired_withest une correspondance 1:1 par appareil.POSTévince les conflits des deux côtés ;DELETEefface l'entrée sélectionnée ; le sélecteur doit correspondre à un seul identifiant. - Interrogation de l'état de mouvement à 20 Hz sur micrologiciel v7.5+.
GET /devices/{id}retourne des valeurs fraîches decursor_position,cursor_velocity,angular_position,angular_velocitytoutes les 50 ms ; transparent pour les sessions actives. - Débit contrôlé pour
set_extension_datasans fil de VerseGrip. Pipeline « abandon des plus anciens / répétition à l'inactivité » vidé à chaque tick du service — un envoi excessif ne sature plus la liaison radio, un envoi insuffisant ne laisse plus de valeur périmée.
Sessions
- Nouveau chemin rapide de réception WS pour les lots de contrôle seul (force/position) qui contourne le pipeline tenant compte de la configuration ;
configure/set_profile/ les commandes personnalisées passent toujours par le correctif de condition de concurrence.
Observabilité
- La fréquence des journaux de détection dépend du port et tient compte de la récurrence. Chaque port sur liste noire est contrôlé indépendamment ; la ligne récurrente
"...blacklisted: skipping"affiche désormais(×N)pour les ticks mis sous silence entre deux déclenchements. - La détection sans fil VerseGrip n'inonde plus le journal lorsqu'un appareil autre que WVG est sondé.
Corrections
POST /device.config.presetavecdefaultsouarm_frontréinitialise désormais le montage de l'appareil au préréglage d'usine (auparavant, sans effet et sans erreur).basisest conservé afin que les bases configurées dans l'application survivent aux changements de préréglage de montage.force_render_full_statene renvoie plus d'instantané sans blocconfiglorsque la configuration correspondante arrive dans le même message WS ; le chemin de configuration se vide de façon synchrone avant l'instantané.force_render_full_stateinter-sessions renvoie l'instantané complet de la cible. A et B voient désormais une charge utile complète (auparavant, A ne recevait que le flux continu).- Les commandes inter-sessions dont le
target_session_idest inconnu ne bloquent plus la boucle requête-réponse. Le demandeur reçoit son propre instantané ainsi qu'un événementsession-command-dropped(cross-session-unknown-target). - Les déverrouillages d'étalonnage multi-appareils Minverse ne sont plus mal acheminés. L'étalonnage de Minverse A ne déverrouille plus Minverse B ; même correction pour la diffusion du cap de réussite inkwell.
- Le sélecteur d'appareil HTTP accepte
#1234et1234comme identifiant d'appareil ; les classes de sélecteur (inverse3,verse_grip) fonctionnent aussi avec l'index ; les messages 404 conservent l'expression de sélecteur d'origine. - L'indicateur
readysans fil de VerseGrip dépend désormais de la poignée de main initiale d'informations sur l'appareil — auparavant, il pouvait basculer avant que l'appareil ne se soit entièrement signalé lors de certains rattachements. - Les modifications à l'exécution des paramètres reposant sur une porte de cadencement par clé prennent désormais effet au prochain déclenchement (auparavant, la valeur était figée au premier emplace ; seules les nouvelles sessions prenaient la modification en compte).
Changements potentiellement incompatibles
- Chaînes 404 de HTTP unifiées dans
basis,preset,mount,transform,force_gate:"{type} device #{id} not found"→"no device matches selector '{expr}'". Les 404 de session sont traitées de la même façon. - Motif glob
devices/inverse*/...→devices/*inverse/...pour le gain d'échelle de force, le gain de la porte de force, le délai d'expiration du contrôle etsafeties/expose_in_snapshot. Les fichiers de paramètres de la version 3.5.0 qui utilisent l'ancienne forme littérale échoueront à se lier. - Paramètres : les variables globales de sérialisation ont été déplacées vers
session/serialization/*(explicit_fields,force_complete_transforms,preview/*). Les anciens cheminsserialization/*sont toujours résolus par des alias dépréciés ; ils seront supprimés en 4.0. - Comportement : les clients qui utilisent la réponse WS par message comme poignée de main de synchronisation de tick ne reçoivent au plus qu'une réponse par ms et par session sous trafic soutenu. Les instantanés complets lors d'un changement de configuration ne sont pas affectés.
Fonctionnalités dépréciées
Aucune dans la version 3.5.1. Le commutateur principal de l'aperçu sert de mécanisme de dépréciation pour le futur pipeline de passage du mode silencieux au mode avertissement de la version 3.6 ; la première série de dépréciations est prévue pour la version 3.5.2.