Une mémoire qui ne se répète pas
Une mémoire qui retient tout ce que tu dis finit par retenir plusieurs fois la même chose, parce que tu ne le dis jamais deux fois avec les mêmes mots. XNeuronal était conçu pour reconnaître un souvenir déjà présent et le renforcer au lieu de le recréer. Le 22 mai, on a découvert que ce mécanisme ne s'était jamais déclenché. La journée a réparé la reconnaissance, ajouté un second critère pour les reformulations, et donné deux gestes pour nettoyer à la main : une feuille de nettoyage qui nettoie, et une sélection multiple dans la liste de la mémoire.
Trois fois la même sœur
Camille utilise l'application depuis un mois. Un soir de mars : « Ma sœur Inès habite à Nantes. » Fiche créée. Deux semaines plus tard, en préparant un week-end : « Je vais chez ma sœur à Nantes samedi. » Rappel posé, et une fiche de plus sur Inès. Puis, un matin, en parlant d'autre chose : « Inès, c'est ma sœur, elle travaille dans un labo. » Nouvelle fiche.
Trois phrases, une personne, un fait. Dans la mémoire, trois souvenirs distincts, chacun avec sa date, sa propre formulation et, pour le troisième, un détail que les deux autres n'ont pas. Quand Camille demande « qu'est-ce que tu sais sur Inès ? », la réponse est juste, mais elle a un air de bégaiement : la même chose dite trois fois, avec de petites variations. Et dans la liste de sa mémoire, trois lignes qui se ressemblent, sans qu'on sache laquelle est la bonne.
Ce n'est pas un défaut de compréhension. L'application a bien compris chaque phrase. C'est un défaut de reconnaissance : elle n'a pas vu que la troisième phrase parlait de la même chose que la première.
Ce que la mémoire aurait dû faire
Ce cas était prévu. Depuis le début, chaque souvenir porte une empreinte : une longue suite de nombres qui résume le sens de la phrase, pas ses mots. Deux phrases qui disent la même chose avec des mots différents ont des empreintes proches, et la proximité se mesure par un score entre 0 et 1.
Le mécanisme est simple sur le papier. Quand un souvenir nouveau arrive, on calcule son empreinte, on la compare à celles des souvenirs déjà en mémoire, et si l'un d'eux est assez proche, on ne crée rien : on renforce le souvenir existant. Son compteur de mentions monte, sa date de dernière évocation est rafraîchie, et c'est ce compteur qui, plus tard, décide de ce qui remonte en premier quand la mémoire est feuilletée par étages. Un fait répété trois fois devrait être un fait fort, pas trois faits faibles.
La veille, le 21 mai, l'assistant avait passé sa propre mémoire en revue, à la demande de la personne qui l'utilise, sur le compte qui sert aux essais. Son rapport était sans appel : des groupes de fiches qui redisaient la même identité, un voyage raconté sous une dizaine d'angles, et une contradiction jamais tranchée sur la destination de ce voyage. La base confirmait, en pire : aucun souvenir, sur ce compte, n'avait jamais été renforcé. Pas un seul, depuis la première phrase. Le mécanisme n'était pas mal réglé. Il ne s'était jamais déclenché.
Le bug qui ne faisait aucun bruit
Trois causes, empilées, et aucune ne produisait d'erreur.
La première tenait à la façon dont l'empreinte revient de la base. Elle y est stockée comme une suite de 1 536 nombres. Mais la couche qui la renvoie au serveur la livre sous forme de texte : la liste des nombres écrite entre crochets, avec des virgules. Le code qui comparait les empreintes commençait par une vérification de bon sens, « les deux empreintes ont-elles la même longueur ? ». Et il comparait la longueur du texte, une trentaine de milliers de caractères, à 1 536. Jamais égal. Chaque candidat était écarté avant même la comparaison, en silence, comme s'il n'existait pas. Deux phrases strictement identiques, au mot près, coexistaient en mémoire pour cette seule raison.
La deuxième cause n'aurait été visible qu'une fois la première levée. Le seuil au-dessus duquel deux souvenirs sont considérés comme le même était fixé à 0,85. C'est un bon seuil pour une phrase recopiée ou presque. C'est un mauvais seuil pour une reformulation naturelle. Mesuré sur de vrais souvenirs, « ma sœur s'appelle Inès » et « Inès est la sœur de Camille » obtiennent un score d'environ 0,72. Même contenu, autre tournure, rejet net. Or personne ne dit deux fois la même chose de la même façon.
La troisième cause était une absence. Il arrive que le calcul de l'empreinte échoue : un service distant qui tousse, une réponse qui n'arrive pas. Le code prévoyait ce cas et enregistrait le souvenir quand même, sans empreinte, mais sans laisser la moindre trace dans les journaux. Une partie des souvenirs n'avait donc aucune chance d'être reconnue un jour, et personne ne pouvait le savoir.
Rien ne plantait. L'application répondait, les fiches se créaient, la mémoire grossissait, simplement trop vite et de la mauvaise manière, et il a fallu que l'assistant lui-même s'en étonne pour qu'on aille regarder.
Deux étages pour reconnaître un souvenir
La réparation de la première cause tient en quelques lignes : avant toute comparaison, l'empreinte est relue et convertie en nombres, qu'elle arrive sous forme de liste ou sous forme de texte. Le même correctif a été appliqué à la recherche par le sens, celle qui répond à « qu'est-ce que tu sais sur Inès ? » et qui souffrait du même défaut sans que ça se voie : elle cherchait parmi zéro candidat et se rabattait sur d'autres critères.
La deuxième cause demandait un choix. Baisser le seuil à 0,70 pour tout le monde aurait attrapé les reformulations, mais aussi des faux jumeaux : deux faits différents qui partagent un vocabulaire, une personne qui a deux amies du même prénom. Garder 0,85 laissait les doublons proliférer. La réponse a été de ne plus dépendre d'un seul chiffre.
Au-dessus de 0,85, le souvenir est reconnu directement : c'est une paraphrase serrée ou une quasi-copie. Entre 0,70 et 0,85, il n'est reconnu qu'à deux conditions : les deux souvenirs sont du même type, et ils partagent au moins une personne ou un thème. Ces personnes et ces thèmes ne sont pas devinés au moment de la comparaison : ils sont posés sur chaque souvenir dès sa création, par le modèle qui a lu la phrase. Deux Inès sans rapport ne partageront pas de thème. Deux formulations de la même Inès partageront au moins son nom.
Chaque renforcement laisse maintenant une trace : par quel étage le souvenir a été reconnu, et avec quel score. Les deux seuils sont des paris raisonnables, pas des vérités mesurées, et la seule façon de les ajuster est de relire, après quelques semaines, ce que le mécanisme a réellement fusionné. Quant à la troisième cause, l'échec du calcul d'empreinte est désormais écrit dans les journaux : le souvenir est toujours enregistré, mais on sait qu'il est né sans empreinte.
Ce qu'on a fait des doublons déjà là
Réparer le mécanisme n'efface pas ce qu'il a laissé passer. Les doublons existants restaient en mémoire, et le code réparé ne les toucherait jamais : il ne compare qu'un souvenir nouveau à l'existant, pas l'existant à lui-même.
Sur le compte des essais, le ménage a été fait à la main, et la façon de le faire dit quelque chose du produit. Aucun souvenir n'a été supprimé. Les doublons ont été mis en sourdine : un statut qui les retire de tout ce que l'assistant lit et de tout ce qu'il affiche, mais qui laisse la ligne en place. Pour chaque groupe, une fiche a été gardée comme référence, la plus complète, et les autres ont été tues. Le geste est réversible d'un mot.
La contradiction, elle, a été traitée autrement. Deux fiches se disputaient la destination d'un voyage. L'une était fausse, l'autre vraie, et la personne concernée a tranché. La fausse n'a pas été effacée : elle est passée au statut « erronée », avec un lien vers celle qui la corrige. C'est le même principe qu'une correction dictée en conversation : l'ancien souvenir reste, marqué comme dépassé, relié au nouveau. On peut toujours répondre à « pourquoi tu croyais que c'était Porto ? ».
Un ménage fait par un développeur dans la base n'est pas une solution : il manquait des gestes, dans l'application, pour que chacun fasse la même chose sur sa propre mémoire.
La feuille de nettoyage qui ne nettoyait rien
Il existait déjà un endroit pour ça, dans les réglages : une feuille intitulée « Nettoyer le passé ». On y cochait des catégories, rendez-vous, rappels, tâches, mémos, on choisissait entre archiver et supprimer, et l'application balayait ce qui était derrière soi. C'est ce qu'elle était censée faire. Ce 22 mai, en l'essayant sérieusement, elle a répondu « rien à nettoyer » à peu près à chaque fois.
Elle avait trois raisons de se tromper. La liste qu'elle balayait venait de l'agenda, qui ne montre que les éléments actifs ou faits ; tout ce qui avait déjà été archivé une première fois lui était invisible, et une deuxième passe en mode « supprimer » ne trouvait plus rien. Un filtre de prudence, côté téléphone, écartait tout élément dont la fin n'était pas encore passée ; or un rendez-vous d'une journée entière se termine à 23 h 59, et une tâche faite le matin restait « à venir » jusqu'au soir. Enfin, les souvenirs mis en sourdine, ceux que l'assistant avait déjà accepté d'oublier sur demande, n'appartenaient à aucune des familles que la feuille savait voir. On pouvait dire « oublie ce rappel » et ne jamais pouvoir l'effacer vraiment.
La journée a repris la feuille de fond en comble. Le balayage voit maintenant tous les états terminaux, archivés et sourdine compris, et il juge « passé » ce que l'agenda juge passé : résolu, ou fenêtre fermée. Le mode « archiver » a disparu. C'était une trappe : rien dans l'application ne permettait de voir ce qui avait été archivé, ni de le faire revenir. Il ne reste qu'un chemin, explicite, précédé d'une confirmation en rouge qui dit ce qu'elle fait : c'est définitif.
Et parce qu'un ménage ne concerne pas toujours le passé, la feuille a gagné une question : jusqu'où ? Soit uniquement ce qui est passé ou résolu, le comportement d'origine, enfin fonctionnel. Soit tout ce qui appartient aux catégories cochées, dates et états confondus, y compris les rendez-vous à venir et les mémos sans date. C'est l'option radicale, pour « efface toutes mes recettes », et elle porte son propre avertissement. Le balayage se fait désormais en une seule opération côté serveur, plutôt qu'en une file de petites suppressions. La feuille s'appelle « Nettoyer la mémoire » : « le passé » ne disait plus la vérité.
Choisir à la main : un appui long, des cases, deux boutons
La feuille de nettoyage travaille par catégories. Camille, elle, veut retirer deux des trois fiches sur Inès, et rien d'autre. Pour ça, il fallait un geste dans la liste de la mémoire, celle qui montre chaque souvenir sur une ligne.
Depuis le 22 mai, un appui long sur une ligne fait basculer la liste en mode sélection. Une case apparaît devant chaque souvenir, l'en-tête indique combien sont cochés et propose de tout prendre ou de sortir, et une barre en bas de l'écran offre deux actions. Toucher une ligne coche ou décoche, sans ouvrir la fiche, tant qu'on n'est pas sorti du mode.
Les deux actions ne sont pas jumelles. « Silencer » fait ce que le ménage à la main avait fait sur le compte des essais : le souvenir sort de la lecture et de l'affichage, mais la ligne existe encore, et elle peut revenir. « Oublier définitivement », en rouge, efface pour de bon, après la même confirmation que la feuille de nettoyage. La règle générale de l'application est de ne rien détruire ; ce bouton est l'exception assumée, quand c'est la personne elle-même qui le demande, en connaissance de cause.
Camille coche deux lignes, appuie sur « Silencer », et sa mémoire ne connaît plus qu'une Inès. La prochaine fois qu'elle en parlera, la réconciliation se fera toute seule.
Ce qui ne rentre pas dans la mémoire reste à portée de main
Une mémoire qui ne se répète pas, c'est aussi une mémoire qui sait ce qu'elle ne doit pas retenir. Une météo, l'horaire d'une pharmacie de garde, l'état du trafic : ces réponses s'affichent sans devenir des souvenirs, dans une page qui se referme et ne laisse rien derrière elle. C'était le choix de la veille, avec un petit problème pratique : une fois la page refermée, il fallait reposer la question pour la revoir.
Depuis le 21 mai, l'assistant donne un titre à chacune de ces pages, deux ou trois mots reconnaissables d'un coup d'œil, « Météo Nantes », « Pharmacie de garde », et ce titre reste sous sa réponse, dans la conversation, sous la forme d'une petite pastille cyan. La toucher rouvre la page telle qu'elle était, depuis la mémoire du téléphone, sans rien demander au serveur et sans créer de fiche. La pastille vit le temps de la conversation ; quand la conversation repart de zéro, elle disparaît avec elle. Le lendemain, le même geste a été étendu aux pages de planning, de tâches et de mémos, des vues assemblées à la volée qui n'ont pas de fiche derrière elles non plus, et chaque ligne de ces pages s'ouvre désormais d'un toucher.
C'est la contrepartie du choix de ne pas tout garder : ce qui n'est pas un souvenir n'encombre pas la mémoire, mais il ne s'évapore pas à la seconde où on le quitte.
Ce qui reste ouvert
Les deux seuils, 0,85 et 0,70, attendent leurs premières semaines de traces avant d'être ajustés. S'ils fusionnent trop, on durcira ; s'ils laissent passer des doublons, on desserrera.
Les doublons nés avant le 22 mai, sur les comptes autres que celui des essais, sont toujours là. Le mécanisme réparé ne les rattrape pas ; il empêche seulement qu'il s'en crée de nouveaux. Un passage périodique qui repérerait les paires trop proches parmi l'existant et les fusionnerait sans qu'on ait à le demander est la suite logique. Il n'est pas écrit. En attendant, la sélection multiple fait le travail, ligne par ligne, et c'est précisément pour ça qu'elle est arrivée le même jour.
Enfin, les actions groupées de la liste passent encore par une demande par souvenir. Sur dix lignes, ça ne se voit pas ; sur deux cents, le serveur devra apprendre à les traiter d'un bloc, comme la feuille de nettoyage le fait déjà.
Pour Camille, le bilan tient en une phrase. Elle peut parler d'Inès autant de fois qu'elle veut, avec les mots qui lui viennent, et sa mémoire n'en gardera qu'une, de plus en plus sûre d'elle. Et le jour où elle veut faire le tri elle-même, ça prend un appui long et deux touches.
