Una memoria que no se repite
Una memoria que retiene todo lo que dices acaba reteniendo varias veces lo mismo, porque nunca lo dices dos veces con las mismas palabras. XNeuronal estaba diseñado para reconocer un recuerdo ya presente y reforzarlo en lugar de crearlo de nuevo. El 22 de mayo descubrimos que ese mecanismo nunca se había activado. La jornada reparó el reconocimiento, añadió un segundo criterio para las reformulaciones y aportó dos gestos para limpiar a mano: una hoja de limpieza que limpia de verdad, y una selección múltiple en la lista de la memoria.
Tres veces el mismo hermano
Marta usa la aplicación desde hace un mes. Una tarde de marzo: «Mi hermano Pablo vive en Valencia». Ficha creada. Dos semanas después, preparando un fin de semana: «El sábado voy a casa de mi hermano en Valencia». Recordatorio puesto, y una ficha más sobre Pablo. Luego, una mañana, hablando de otra cosa: «Pablo, que es mi hermano, trabaja en un laboratorio». Nueva ficha.
Tres frases, una persona, un hecho. En la memoria, tres recuerdos distintos, cada uno con su fecha, su propia formulación y, en el tercero, un detalle que los otros dos no tienen. Cuando Marta pregunta «¿qué sabes de Pablo?», la respuesta es correcta, pero suena a tartamudeo: lo mismo dicho tres veces, con pequeñas variaciones. Y en la lista de su memoria, tres líneas que se parecen, sin saber cuál es la buena.
No es un fallo de comprensión. La aplicación entendió bien cada frase. Es un fallo de reconocimiento: no vio que la tercera frase hablaba de lo mismo que la primera.
Lo que la memoria debería haber hecho
Este caso estaba previsto. Desde el principio, cada recuerdo lleva una huella: una larga secuencia de números que resume el sentido de la frase, no sus palabras. Dos frases que dicen lo mismo con palabras distintas tienen huellas cercanas, y la cercanía se mide con una puntuación entre 0 y 1.
El mecanismo es sencillo sobre el papel. Cuando llega un recuerdo nuevo, se calcula su huella, se compara con las de los recuerdos ya guardados y, si alguno está lo bastante cerca, no se crea nada: se refuerza el recuerdo existente. Su contador de menciones sube, su fecha de última evocación se actualiza, y es ese contador el que, más tarde, decide qué aparece primero cuando la memoria se lee por capas. Un hecho repetido tres veces debería ser un hecho fuerte, no tres hechos débiles.
La víspera, el 21 de mayo, el asistente había repasado su propia memoria a petición de la persona que lo usa, en la cuenta que sirve para las pruebas. Su informe no dejaba lugar a dudas: grupos de fichas que repetían la misma identidad, un viaje contado desde una docena de ángulos y una contradicción nunca zanjada sobre el destino de ese viaje. La base lo confirmaba, y peor: ningún recuerdo de esa cuenta había sido reforzado jamás. Ni uno solo, desde la primera frase. El mecanismo no estaba mal ajustado. Nunca se había activado.
El fallo que no hacía ruido
Tres causas, apiladas, y ninguna producía un error.
La primera estaba en la forma en que la huella vuelve de la base. Allí se guarda como una secuencia de 1536 números. Pero la capa que la devuelve al servidor la entrega como texto: la lista de números escrita entre corchetes, con comas. El código que comparaba las huellas empezaba con una comprobación de sentido común: «¿tienen las dos huellas la misma longitud?». Y comparaba la longitud del texto, unos treinta mil caracteres, con 1536. Nunca igual. Cada candidato quedaba descartado antes incluso de la comparación, en silencio, como si no existiera. Dos frases estrictamente idénticas, palabra por palabra, coexistían en la memoria solo por eso.
La segunda causa solo habría sido visible una vez levantada la primera. El umbral por encima del cual dos recuerdos se consideran el mismo estaba fijado en 0,85. Es un buen umbral para una frase copiada casi al pie de la letra. Es un mal umbral para una reformulación natural. Medido sobre recuerdos reales, «mi hermano se llama Pablo» y «Pablo es el hermano de Marta» obtienen una puntuación de alrededor de 0,72. Mismo contenido, otro giro, rechazo rotundo. Y nadie dice lo mismo dos veces de la misma manera.
La tercera causa era una ausencia. A veces el cálculo de la huella falla: un servicio remoto que tose, una respuesta que no llega. El código preveía ese caso y guardaba el recuerdo de todos modos, sin huella, pero sin dejar el menor rastro en los registros. Una parte de los recuerdos no tenía, por tanto, ninguna posibilidad de ser reconocida algún día, y nadie podía saberlo.
Nada se caía. La aplicación respondía, las fichas se creaban, la memoria crecía, solo que demasiado deprisa y de mala manera, y hizo falta que el propio asistente se extrañara para que alguien fuera a mirar.
Dos niveles para reconocer un recuerdo
La reparación de la primera causa cabe en unas pocas líneas: antes de cualquier comparación, la huella se relee y se convierte en números, llegue como lista o como texto. La misma corrección se aplicó a la búsqueda por sentido, la que responde a «¿qué sabes de Pablo?» y que sufría el mismo defecto sin que se notara: buscaba entre cero candidatos y recurría a otros criterios.
La segunda causa exigía una decisión. Bajar el umbral a 0,70 para todo el mundo habría atrapado las reformulaciones, pero también falsos gemelos: dos hechos distintos que comparten vocabulario, una persona con dos amigas del mismo nombre. Mantener 0,85 dejaba proliferar los duplicados. La respuesta fue dejar de depender de una sola cifra.
Por encima de 0,85, el recuerdo se reconoce directamente: es una paráfrasis ajustada o una casi copia. Entre 0,70 y 0,85, solo se reconoce con dos condiciones: los dos recuerdos son del mismo tipo y comparten al menos una persona o un tema. Esas personas y esos temas no se adivinan en el momento de comparar: se asignan a cada recuerdo desde su creación, por el modelo que leyó la frase. Dos Pablos sin relación no compartirán ningún tema. Dos formulaciones del mismo Pablo compartirán al menos su nombre.
Cada refuerzo deja ahora un rastro: por qué nivel se reconoció el recuerdo y con qué puntuación. Los dos umbrales son apuestas razonables, no verdades medidas, y la única forma de ajustarlos es releer, al cabo de unas semanas, lo que el mecanismo ha fusionado realmente. En cuanto a la tercera causa, el fallo del cálculo de la huella queda ahora escrito en los registros: el recuerdo se sigue guardando, pero se sabe que nació sin huella.
Qué se hizo con los duplicados que ya estaban
Reparar el mecanismo no borra lo que dejó pasar. Los duplicados existentes seguían en la memoria, y el código reparado nunca los tocaría: solo compara un recuerdo nuevo con lo existente, no lo existente consigo mismo.
En la cuenta de pruebas, la limpieza se hizo a mano, y la forma de hacerla dice algo del producto. No se borró ningún recuerdo. Los duplicados se silenciaron: un estado que los retira de todo lo que el asistente lee y de todo lo que muestra, pero que deja la línea en su sitio. En cada grupo se conservó una ficha como referencia, la más completa, y las demás se acallaron. El gesto se revierte con una palabra.
La contradicción se trató de otra manera. Dos fichas se disputaban el destino de un viaje. Una era falsa, la otra verdadera, y la persona afectada zanjó la cuestión. La falsa no se borró: pasó al estado «errónea», con un enlace hacia la que la corrige. Es el mismo principio que una corrección dicha en conversación: el recuerdo antiguo se queda, marcado como superado, ligado al nuevo. Siempre se puede responder a «¿por qué creías que era Sevilla?».
Una limpieza hecha por un desarrollador en la base no es una solución: lo que faltaba eran gestos, en la aplicación, para que cada cual hiciera lo mismo con su propia memoria.
La hoja de limpieza que no limpiaba nada
Ya existía un lugar para eso, en los ajustes: una hoja titulada «Limpiar el pasado». Se marcaban categorías, citas, recordatorios, tareas, notas, se elegía entre archivar y borrar, y la aplicación barría lo que quedaba atrás. Eso es lo que se suponía que hacía. Aquel 22 de mayo, al probarla en serio, respondió «nada que limpiar» casi todas las veces.
Tenía tres motivos para equivocarse. La lista que barría venía de la agenda, que solo muestra los elementos activos o hechos; todo lo que ya se había archivado una primera vez le resultaba invisible, y una segunda pasada en modo «borrar» ya no encontraba nada. Un filtro de prudencia, en el lado del teléfono, apartaba cualquier elemento cuyo final aún no hubiera pasado; pero una cita de todo el día termina a las 23:59, y una tarea hecha por la mañana seguía «pendiente» hasta la noche. Por último, los recuerdos silenciados, los que el asistente ya había aceptado olvidar a petición, no pertenecían a ninguna de las familias que la hoja sabía ver. Se podía decir «olvida ese recordatorio» y no poder borrarlo nunca de verdad.
La jornada rehízo la hoja de arriba abajo. El barrido ve ahora todos los estados terminales, archivados y silenciados incluidos, y considera «pasado» lo que la agenda considera pasado: resuelto, o ventana cerrada. El modo «archivar» ha desaparecido. Era una trampilla: nada en la aplicación permitía ver lo que se había archivado, ni recuperarlo. Solo queda un camino, explícito, precedido de una confirmación en rojo que dice lo que hace: es definitivo.
Y como una limpieza no siempre concierne al pasado, la hoja ganó una pregunta: ¿hasta dónde? O bien solo lo pasado o resuelto, el comportamiento original, por fin funcional. O bien todo lo que pertenece a las categorías marcadas, sin importar fecha ni estado, citas futuras y notas sin fecha incluidas. Es la opción radical, para «borra todas mis recetas», y lleva su propia advertencia. El barrido se hace ahora en una sola operación en el servidor, en lugar de una cola de pequeñas eliminaciones. La hoja se llama «Limpiar la memoria»: «el pasado» ya no decía la verdad.
Elegir a mano: una pulsación larga, casillas, dos botones
La hoja de limpieza trabaja por categorías. Marta, en cambio, quiere quitar dos de las tres fichas sobre Pablo, y nada más. Para eso hacía falta un gesto en la lista de la memoria, la que muestra cada recuerdo en una línea.
Desde el 22 de mayo, una pulsación larga sobre una línea pone la lista en modo selección. Aparece una casilla delante de cada recuerdo, la cabecera indica cuántos están marcados y propone cogerlos todos o salir, y una barra en la parte baja de la pantalla ofrece dos acciones. Tocar una línea la marca o la desmarca, sin abrir la ficha, mientras no se haya salido del modo.
Las dos acciones no son gemelas. «Silenciar» hace lo que la limpieza a mano había hecho en la cuenta de pruebas: el recuerdo sale de la lectura y de la visualización, pero la línea sigue existiendo, y puede volver. «Olvidar definitivamente», en rojo, borra para siempre, tras la misma confirmación que la hoja de limpieza. La regla general de la aplicación es no destruir nada; este botón es la excepción asumida, cuando es la propia persona quien lo pide, sabiendo lo que hace.
Marta marca dos líneas, pulsa «Silenciar», y su memoria ya solo conoce a un Pablo. La próxima vez que hable de él, la reconciliación se hará sola.
Lo que no entra en la memoria queda al alcance de la mano
Una memoria que no se repite es también una memoria que sabe lo que no debe retener. El tiempo que va a hacer, el horario de una farmacia de guardia, el estado del tráfico: esas respuestas se muestran sin convertirse en recuerdos, en una página que se cierra y no deja nada detrás. Fue la decisión de la víspera, con un pequeño problema práctico: una vez cerrada la página, había que repetir la pregunta para volver a verla.
Desde el 21 de mayo, el asistente da un título a cada una de esas páginas, dos o tres palabras reconocibles de un vistazo, «Tiempo en Valencia», «Farmacia de guardia», y ese título se queda bajo su respuesta, en la conversación, en forma de una pequeña pastilla cian. Tocarla reabre la página tal como estaba, desde la memoria del teléfono, sin pedir nada al servidor y sin crear ninguna ficha. La pastilla vive lo que dura la conversación; cuando la conversación vuelve a empezar de cero, desaparece con ella. Al día siguiente, el mismo gesto se extendió a las páginas de planificación, tareas y notas, vistas montadas al vuelo que tampoco tienen ficha detrás, y cada línea de esas páginas se abre ahora con un toque.
Es la contrapartida de la decisión de no guardarlo todo: lo que no es un recuerdo no estorba en la memoria, pero tampoco se evapora en el segundo en que lo dejas.
Lo que queda abierto
Los dos umbrales, 0,85 y 0,70, esperan sus primeras semanas de rastros antes de ajustarse. Si fusionan demasiado, se endurecerán; si dejan pasar duplicados, se aflojarán.
Los duplicados nacidos antes del 22 de mayo, en cuentas distintas de la de pruebas, siguen ahí. El mecanismo reparado no los alcanza; solo impide que se creen otros nuevos. Una pasada periódica que detectara los pares demasiado cercanos entre lo existente y los fusionara sin que nadie lo pidiera es la continuación lógica. No está escrita. Mientras tanto, la selección múltiple hace el trabajo, línea a línea, y precisamente por eso llegó el mismo día.
Por último, las acciones agrupadas de la lista pasan todavía por una petición por recuerdo. Con diez líneas no se nota; con doscientas, el servidor tendrá que aprender a tratarlas en bloque, como ya hace la hoja de limpieza.
Para Marta, el balance cabe en una frase. Puede hablar de Pablo tantas veces como quiera, con las palabras que le salgan, y su memoria guardará solo uno, cada vez más seguro de sí mismo. Y el día que quiera hacer la criba ella misma, bastan una pulsación larga y dos toques.
