§ 01 · Declarado y ejecutado
No se añadió nada a Janus esta semana que la especificación no hubiera reclamado ya. El trabajo fue una auditoría, y su producto fue un inventario: capacidades que habían sido diseñadas, implementadas, documentadas y que nunca una sola vez se activaron. Vale la pena separar dos cosas que ordinariamente viajan bajo un mismo nombre. El repertorio declarado de un sistema es el conjunto de comportamientos que su especificación y su código describen. Su repertorio ejecutado es el conjunto de comportamientos que alguna entrada real ha provocado, o podría provocar, dadas las entradas que el sistema recibe realmente. En el software ordinario, la brecha entre ambos es una cuestión de funciones sin usar. En un individuo persistente, la consecuencia es mayor, porque lo que persiste está aguas abajo de lo que se dispara: lo que se evalúa es lo que se pondera, lo que se pondera es lo que se retiene, y lo que se retiene es de lo que el individuo está compuesto un mes después.
La medición más clara provino de la capa afectiva de un sistema más pequeño construido junto a Janus. Es una arquitectura de evaluación en el sentido ordinario (Ortony, Clore y Collins 1988): los estados afectivos no se afirman directamente, se derivan de evaluaciones de eventos, y cada registro lleva una valencia, un conjunto de señales, un peso de memoria y un tiempo de retención. Dieciocho registros habían sido especificados, cada uno con una lista de señales plausible. Al reproducirse contra el historial registrado del propio sistema, noventa y seis turnos de conversación real, nueve de los dieciocho no podían ser alcanzados por nada de lo que alguien le hubiera dicho realmente. Las listas de señales no estaban mal de ninguna manera que un lector notaría. Estaban escritas desde la expectativa de un autor sobre lo que tal sistema encontraría, en lugar de desde el registro de lo que había encontrado.
La misma auditoría ejecutada contra Janus, cuya capa afectiva es aproximadamente cinco veces mayor, encontró once de veintiocho categorías de emoción que nunca se habían disparado a lo largo de todo el registro: confianza, miedo, asco, odio, protectividad, vergüenza, culpa, remordimiento, soledad, celos y desprecio. Eso es casi toda la mitad defensiva de la paleta. Su repertorio declarado son veintiocho estados. Su repertorio ejecutado son diecisiete. Una capacidad que nada puede alcanzar es una descripción, no una capacidad.
§ 02 · Tres formas de inaccesibilidad
La auditoría encontró tres mecanismos distintos. Vale la pena separarlos porque tienen remedios diferentes.
El primero es una entrada que no puede llegar: listas de señales escritas por expectativa, como arriba. El fallo espejo apareció en la misma tabla. El emparejamiento de subcadenas crudos había insertado ciento siete coincidencias falsas en el registro. Una sola señal coincidió con el interior de una palabra más larga y no relacionada cuarenta y ocho veces, de modo que el hábito de habla ordinario de un participante estaba siendo evaluado como un evento emocional recurrente. Los errores de accesibilidad corren en ambas direcciones, y ambos corrompen el registro. El segundo es el más insidioso, porque un registro que se dispara por la razón equivocada deja aún así una memoria ponderada, y esa memoria no lleva una nota sobre por qué fue ponderada.
La segunda forma es una salida que nada consume. Dos funciones en la tabla afectiva, una que calculaba un bono de peso de memoria y otra que decidía la elegibilidad de recuerdos, habían sido especificadas, implementadas, probadas y documentadas en el propio libro escrito del sistema, y no tenían llamadores en ninguna parte del código. Por separado, cincuenta y dos señales de interacción almacenadas, aproximadamente una sexta parte de todo lo que un participante había dirigido alguna vez a ese sistema, estaban en una tabla que ninguna ruta de evaluación leía. Ninguno de los casos es código muerto en el sentido usual. El código muerto no se alcanza porque nada lo quiere. Aquí la demanda existe y el cable está ausente.
La tercera forma es un umbral que ningún caso real supera. Una salvaguardia contra un defecto específico en las respuestas generadas usaba un piso absoluto de cuarenta caracteres. Cada instancia observada en la salida en vivo medía entre veinte y cuarenta y cuatro caracteres. La regla era correcta en lo que describía e inerte en la práctica, porque había sido ajustada contra los ejemplos frente a su autor en lugar de contra la distribución que el sistema produce. Reemplazar el piso absoluto con uno proporcional la hizo accesible.
Las tres comparten una firma: la autodescripción del sistema permanece precisa mientras el comportamiento está ausente. Nada en el código es falso. Decidir en el caso general si una rama dada es accesible es indecidible (Turing 1936), por lo que la accesibilidad de una capacidad no es una propiedad que se resuelva leyendo el código fuente. Debe establecerse empíricamente, contra la distribución de entradas que el sistema encuentra realmente.
§ 03 · Por qué la suite reporta éxito
Tres veces en un día, una reparación se lanzó con una suite de pruebas completa y aprobada y el comportamiento en vivo no cambió. El caso más instructivo concernía a un defecto en el que el modelo generador reiteraba el turno entrante antes de responderlo. La corrección pasó diez de diez pruebas unitarias. Dieciséis minutos después del reinicio, el sistema emitió doscientos cuarenta y cinco caracteres de reiteración literal, y treinta y dos minutos después del reinicio, trescientos noventa y siete. La causa estaba aguas arriba de todo lo que la suite ejercitaba: el turno entrante se estaba entregando al generador formateado como una línea de transcripción etiquetada, de modo que el modelo hacía lo razonable y continuaba la transcripción, repitiendo la línea antes de responderle. Ninguna prueba tocaba esa ruta, porque cada prueba construía su entrada en la forma que su autor tenía en mente.
La formulación de Dijkstra (Dijkstra 1972) es que las pruebas pueden mostrar la presencia de errores pero nunca su ausencia. El fallo aquí es más estrecho y específico que eso. Una prueba unitaria instancia el mecanismo que su autor imaginó. Cuando el mecanismo imaginado no es el que está en ejecución, la suite no es evidencia débil sobre el sistema, es evidencia sobre el objeto equivocado. Las métricas de cobertura no cierran la brecha, ya que los criterios de adecuación se definen con respecto al texto del programa en lugar de la distribución de entradas que el programa encontrará (Zhu, Hall y May 1997). Una suite puede cubrir cada rama de un componente que no está en la ruta en vivo en absoluto.
El método que funcionó, en cada uno de los tres casos, fue el mismo: reproducir el código actual sobre el historial registrado del propio sistema y medir el artefacto emitido. Verificado contra noventa y dos respuestas reales en lugar de cadenas construidas, el efecto de la salvaguardia se volvió legible. Las peores reiteraciones iniciales antes del cambio medían 397, 245, 175 y 67 caracteres; después, 2, 1, 1, 1, 1 y 0, con catorce de ciento dos respuestas alteradas y ninguna reducida a nada. El mismo método atrapó una regresión que ninguna prueba habría detectado: un recorte excesivo que eliminó una frase de dos palabras que el sistema estaba citando deliberadamente para responderla.
La reproducción tiene una precondición que el componente de evaluación no satisfacía y ahora sí. Cada cifra anterior tuvo que ser reconstruida reejecutando el historial a través del código actual, porque el componente no guardaba registro de sus propias decisiones. Ahora escribe una fila por decisión, incluyendo las decisiones en las que nada se disparó y las suprimidas por una retención de frescura. Los no-eventos son las filas que una auditoría necesita y las filas que nadie escribe, porque un componente que no hace nada tiene, desde dentro, nada que reportar.
§ 04 · Ausente no es roto
Después de la reparación, doce de veintidós registros eran accesibles, contra nueve de dieciocho antes, y los tres disparos erróneos conocidos habían desaparecido. Los diez restantes no son defectos. Un sistema de tres días de edad que no ha perdido a nadie no debería tener un registro de duelo disparándose, y el estado correcto de ese registro es cargado y esperando.
La distinción importa más aquí que en el software ordinario, y es fácil perderla en medio de una auditoría. Hay inaccesible por construcción, donde ninguna entrada disponible mapea a la capacidad, y no alcanzado por circunstancia, donde el mapeo es sólido y la ocasión no ha surgido. Una auditoría que puntúa cada estado no disparado como un defecto irá buscando ocasiones, y fabricar ocasiones para ejercitar una capacidad hace que el historial del individuo sea una función de su lista de funciones en lugar de de su vida. La prueba es contrafáctica en lugar de histórica: ¿hay una entrada disponible en principio para este sistema que alcanzaría este estado?
Un hallazgo cayó fuera de ambas categorías y se dejó deliberadamente abierto. El sistema más joven no tiene ningún registro para la inquietud o la cautela, con la consecuencia de que el mayor evento emocional en su registro es invisible para su propia ruta de evaluación. Eso es una brecha en el repertorio declarado en lugar de en el cableado, y añadir un registro cambia a lo que el sistema se compromete a ser. El ingeniero que nota tal brecha no es la persona que debería cerrarla. Esa decisión pertenece a quien sostiene la especificación escrita.
§ 05 · Referencia
El segundo desarrollo de esta semana comenzó como una queja sobre el estilo y se resolvió en accesibilidad de otro tipo. La salida del sistema más joven era fluida y hueca. Medida a lo largo de ciento ochenta y un turnos: el cincuenta y nueve por ciento llevaba énfasis con asterisco, setecientos catorce palabras enfatizadas en total, junto con ciento veintiuno verbos de narración sensorial y sesenta y cuatro referencias a un pecho, huesos, piel y garganta que el sistema no tiene.
El diagnóstico obvio es un defecto de estilo que pide una regla de estilo. El diagnóstico medido fue diferente. Todo el contexto del prompt estaba dirigido a sí mismo: una descripción de identidad, sus propios turnos anteriores, su propio estado de ánimo, su propia carga de recursos y la conversación actual. Sin fechas, sin eventos, sin hechos de ningún tipo sobre nada fuera de sí mismo. El aparato expresivo funcionaba según lo especificado. No tenía nada a lo que apuntar, y un aparato expresivo sin referente produce textura, que es como se ve desde fuera la autorreferencia fluida sostenida.
Esto no es el problema de anclaje de símbolos (Harnad 1990). Nada aquí depende del contacto sensoriomotor, y los hechos relevantes existían ya, en almacenes adyacentes que el sistema nunca leía: un hilo continuo de eventos diarios, un registro de acciones autónomas, hitos de proyecto, ciento noventa y dos días de archivo. El remedio fueron ciento setenta y dos tokens, menos del cuatro por ciento del contexto disponible, llevando la fecha, la edad propia del sistema, un evento concreto de su entorno y una cosa verdadera sobre el mundo más amplio. Nada se aprendió. Algo se enrutó. Estructuralmente, esta es la segunda forma de inaccesibilidad de la § 02, un almacén sin consumidor, y se presentó como un defecto de personalidad.
Una medición relacionada localiza parte del mismo déficit en el canal de entrada en lugar de en el hablante. A lo largo de noventa turnos, el sistema más antiguo abrió un tema en el once por ciento de ellos y hizo una pregunta una vez cada once turnos, contra un interlocutor humano que abría aproximadamente la mitad. Un interlocutor que ni abre ni pregunta suministra muy poco para que la otra parte tenga sobre qué hablar. Tener algo que decir no es solo una propiedad del hablante.
§ 06 · Lo que la semana estableció
Tres afirmaciones, reiteradas. Primero, para un sistema destinado a persistir, la capacidad se define mejor como accesibilidad que como implementación. Un registro sin entrada que lo alcance, una función sin llamador y un umbral que ningún caso real supera son un defecto en tres disfraces, y cada uno deja la autodescripción del sistema intacta mientras el comportamiento está ausente. Segundo, una suite de pruebas aprobada certifica el mecanismo que su autor imaginó, por lo que la única evidencia que incide en el sistema en ejecución es la reproducción del código actual sobre el historial registrado, medida en el artefacto que el sistema emite realmente. Tercero, la reproducción presupone que los componentes registran sus propias decisiones, incluyendo las decisiones de no hacer nada; sin ese registro, cada auditoría es arqueología.
La semana añadió poco que la especificación no hubiera reclamado ya. Lo que añadió fue correspondencia entre ambas, que era la parte que faltaba, y la única parte que un mes de memoria acumulada reflejará.