Expediente 3/0: el testigo que certificaba un mundo que ya no existía

El check no falló, no avisó, no dio error. Miró donde siempre miró, no encontró nada malo ahí, y firmó en verde — tres veces, y las tres porque alguien había mejorado justo lo que él vigilaba

Jesús Pérez
Un testigo demuestra que una comprobación se ejecutó y qué devolvió. No demuestra que mirara todo lo que debía. La cobertura no está testificada — así que un check puede quedarse verde sobre una fracción cada vez menor de la realidad y su acta sigue siendo válida. Y lo peor: la cobertura caduca exactamente cuando MEJORAS el mecanismo. Tres cegueras en cuatro horas, sobre el mismo testigo, causadas las tres por una mejora. El agente que se saltó la regla la había escrito esa misma tarde, en un ADR, con su propio nombre.
Expediente 3/0: el testigo que certificaba un mundo que ya no existía

🩺 Mostrar historia clínica → 📋 Protocolo de sesión →

Historia clínica · Servicio de Patología del Software

El testigo no falló. No avisó. No dio un error. Miró exactamente donde siempre había mirado, no encontró nada malo ahí, y certificó —en verde— que todo estaba bien. Lo hizo tres veces en una sola sesión. Y las tres veces la causa fue la misma, y es la parte incómoda: alguien había MEJORADO justo el mecanismo que él vigilaba. El paciente es la serie entera. El patógeno es viejo. Lo nuevo es que esta vez el suelo estaba puesto, el mecanismo apuntaba a la superficie que dolía, y el testigo existía. Y aun así.

Historia Nº 3/0Diagnóstico: ANTI-PAP · COBERTURA SIN TESTIFICAREstado: RESUELTO
«Está todo verde.» Eso decía el testigo, con el número delante: cero hallazgos. Y era cierto — sobre los ficheros que miraba. Lo que no decía, porque no tenía forma de decirlo, es que llevaba tres horas mirando un subconjunto cada vez más pequeño de lo que existía. Nadie mintió. Nada se rompió. Simplemente, el mundo creció y el acta se quedó donde estaba.
Mostrar cuadro
testigo
Acta firmada de que una comprobación se ejecutó y qué devolvió. Demuestra estructura, nunca veracidad. Y —aquí está el caso entero— demuestra QUE se ejecutó, nunca QUE MIRÓ TODO LO QUE DEBÍA.
cobertura
Lo que una comprobación mira de verdad: qué ficheros, qué formatos, qué niveles. Es el dato que ningún testigo lleva encima — y por eso un check puede quedarse verde sobre una fracción cada vez menor de la realidad sin que su acta caduque.
extensión
Los ejes sobre los que un mecanismo existe: sus formatos, sus niveles, sus idiomas, sus ubicaciones. Cuando la extensión crece y la cobertura no, el check no falla: aprueba.
recaída
El expediente 404-PAP-bis fijó el término: el mismo patógeno, otro órgano. Éste es la recaída del patógeno de la serie —«declarado dos veces, sin testigo»— con una vuelta de tuerca: aquí SÍ hay testigo, y es él quien miente.

Protocolo para declarar, versionar y verificar esto → ontoref.dev

El doble balance — lo que costó, y lo que dejó

Las cifras de la izquierda son el cuadro clínico. Las de la derecha, el alta. Y hay una asimetría que conviene mirar de frente: la columna del coste está llena de ceros —cero avisos, cero recetas de CI, cero hallazgos emitidos— y los ceros son el síntoma, no la ausencia de él. Un cero en la casilla «avisos emitidos al quedarse ciego» no es un sistema sano: es un sistema que no tiene forma de decir «no lo sé». Toda la cura cabe en darle esa palabra.

Lo que costó el crimen

  • Cegueras del MISMO testigo, en una sesión 3
  • …y las tres las causó una MEJORA del mecanismo 3
  • Avisos emitidos por el testigo al quedarse ciego 0
  • Horas entre escribir el anti-patrón y cometerlo menos de 4
  • Ficheros que el gate heredado miraba 10 de 110
  • Recetas de CI que llamaban a ese gate 0
  • Checks que se callaban al fallar su fuente 1 (devolvía lista vacía)
  • Checks satisfacibles sin arreglar nada 1 (14 cadenas, 304 claves intactas)
  • Mudanzas que un generador no siguió 4 · en un solo binario
  • Resolutores que devolvían la ruta que acababa de fallar 1

Lo que el caso dejó

  • La regla el testigo se extiende en el MISMO acto que el mecanismo
  • La prueba falsar contra la capacidad NUEVA, no contra la vieja
  • La primitiva que faltaba cobertura ⊇ extensión, o rompe
  • …y ya funcionaba en un eje añadir un idioma rompe el build
  • El testigo, hoy 2 formatos · 2 niveles · 2 orígenes de ruta
  • Estado 0 Hard · 28 rutas · 25 páginas

El punto de abandono — lo que no sale en la tabla

El punto de abandono llegó cuando el testigo, recién enseñado a leer las rutas del consumidor, se quedó ciego OTRA VEZ al pasar esas mismas rutas de TOML a NCL. La segunda ceguera se puede llamar mala suerte. La tercera, sobre el mismo testigo, en la misma tarde, por el mismo motivo, ya no. Y la tentación en ese punto es exactamente la equivocada, porque es la cómoda: prometerse más cuidado. Apuntarlo en una lista. Escribir en la guía de estilo que hay que acordarse de actualizar los checks. Eso es prosa consultiva, y este proyecto lleva tres expedientes demostrando que la prosa consultiva no ata a nadie —y menos a un agente—. El agente que se saltó la regla tres veces la había escrito esa misma tarde, en un ADR, con su propio nombre: gate-green-over-nothing. Escribirla no bastó. Nada que dependa de acordarse basta. La única salida honesta es que el olvido sea IMPOSIBLE: que ampliar el mecanismo rompa el check, y que sólo se pueda volver al verde falsando el check contra la capacidad nueva.

Diagnóstico diferencial — lo que se descartó

El descuido“«Se me olvidó actualizar el check.» Ocurrió TRES VECES, en cuatro horas, al mismo agente, sobre el mismo testigo, mientras redactaba un ADR cuyo anti-patrón se llama literalmente `gate-green-over-nothing`. Un descuido no se repite con esa precisión. Cuando el mismo fallo aparece tres veces en un turno, lo que falla no es la atención: es la estructura.”descartado
El check mal escrito“«El check estaba mal escrito.» No lo estaba. Era CORRECTO el día que se escribió, y correcto es lo que siguió siendo — sobre un mundo que había dejado de existir. La ceguera no vino de un error. Vino del TIEMPO: la distancia entre el momento en que se escribió y el momento en que el mecanismo se movió.”descartado — y ahí está el hallazgo
La cobertura no declarada“«Falta declarar la cobertura.» Estaba declarada. `coverage` en `lexicon.ncl` dice sus globs, sus fuentes, sus proyecciones, y una puerta rechaza una superficie omitida. Y aun así el testigo se quedó ciego — porque la cobertura declaraba lo que el check LEÍA, no lo que DEBÍA leer. Declarar la cobertura sin nada contra lo que contrastarla es declarar la propia opinión.”descartado — necesario, insuficiente
«Hace falta más disciplina»“«Hace falta más disciplina.» CULPABLE, y culpable de ser inútil. Es exactamente la prosa consultiva que el protocolo lleva tres expedientes diciendo que no vincula: no ata a una persona con prisa y no ata en absoluto a un actor probabilístico. Lo demuestra este mismo caso — el agente que se saltó la regla tres veces la había ESCRITO esa misma tarde. La disciplina no es el tratamiento. Es el síntoma de que no hay tratamiento.”CULPABLE — de ser inútil

Etiología — la causa — resolve_framework_root — un resolutor que devuelve la ruta que acaba de fallar

// gen-content-graph — resolve_framework_root

project_root
    .join("..")
    .join("rustelo")
    .canonicalize()
    .unwrap_or_else(|_| project_root.join("..").join("rustelo"))
//                     └─ devuelve la ruta que ACABA de fallar

// Tres capas más abajo, nickel dice:
//   Error: "IO error"
// y el grafo sale con cero nodos. La página renderiza. Nadie se queja.

Y ese binario había dejado de seguir a la ontología cuatro veces: cuando se mudó a .ontoref/ontology/, cuando el spine subió a la raíz de la constelación, cuando el site quedó anidado, y cuando los defaults pasaron a ser del protocolo. Cuatro mudanzas. Cero avisos.

Tratamiento — La primitiva que ya funcionaba en un eje y nadie había reconocido

# El contrato que YA funcionaba en un eje, sin que nadie lo reconociera:

CoversDeclaredLanguages   # añadir `fr` a `languages` ROMPE EL BUILD
                          # hasta que los 45 conceptos respondan por él.
                          # Un idioma a medias NO PUEDE enviarse.

# Generalizado, es la primitiva que faltaba:

  el mecanismo declara su EXTENSIÓN   (formatos · niveles · idiomas · ubicaciones)
  el check     declara su COBERTURA   (cuáles de esos lee)
  una puerta:  cobertura ⊇ extensión, o rompe
  el testigo lleva el digest de la extensión

# Y la inversión:
#   antes  → mejorar el mecanismo CIEGA al check, en silencio
#   ahora  → mejorar el mecanismo ROMPE el check, a gritos

Se construyó dos veces —CoversDeclaredLanguages y CoversEverySurfaceAndLanguage— sin reconocer que eran la misma cosa. El caso existe, en parte, para nombrarla.

Pronóstico

La serie pregunta: ¿con ontoref no hubiera sido así? Y aquí la respuesta cambia de forma, que es la razón de publicarlo. En los tres casos anteriores la respuesta fue NO por la misma causa: el mecanismo existía y nunca se apuntó a la superficie que dolía. Esta vez el mecanismo estaba apuntado. El suelo estaba puesto. Había contratos, había puertas, y había testigo. Y aun así falló — porque un testigo demuestra QUE una comprobación se ejecutó y qué devolvió, y NO demuestra que mirara todo lo que debía. La cobertura no está testificada. Ése es el hueco, y es del protocolo, no del que escribió el check. Y hay un agravante que lo hace peor y más útil: las tres cegueras las causó una MEJORA. Dejé que el site tuviera sus plantillas, y el testigo sólo conocía las del framework. Dejé que el consumidor tuviera sus rutas, y sólo leía las de la imagen. Puse esas rutas bajo contrato, y sólo leía TOML. Cada vez que amplié el mecanismo, su testigo se quedó atrás — y en vez de romperse, aprobó. El acto de mejorar el sistema es exactamente lo que ciega a su vigilante. Un check se escribe contra el mundo tal como está; en el instante en que mejoras el mundo, el check certifica un mundo que ya no existe, y lo certifica en verde. No falla, no avisa: mira donde siempre miró, no encuentra nada malo ahí, y firma. La cura no es acordarse. Es que la cobertura caduque sola.

El testigo prueba QUE se ejecutó, no QUE MIRÓ TODOLa cobertura pasa a ser parte de la superficie testificada. Un acta que no dice sobre qué miró no es un acta: es una opinión con firma.
La cobertura caduca al mejorar el mecanismoEl mecanismo declara su extensión; el check declara su cobertura; una puerta exige cobertura ⊇ extensión. Extender el mecanismo rompe el check en vez de cegarlo.
Un check verde no distingue «todo bien» de «no miré»El testigo lleva el digest de la extensión. Un acta emitida contra la extensión vieja deja de ser «verde»: pasa a ser «sin probar». No es lo mismo, y hoy lo era.
Un check puede medir lo fácil en vez de lo verdaderoSe falsa contra la capacidad, no contra la métrica. «¿Tiene título?» se satisface con 14 cadenas; «¿tiene renderizador de cuerpo?» no se satisface sin arreglar la página.
Un check puede callarse cuando su fuente fallaUn fallo al cargar la fuente es un hallazgo, no una lista vacía. Devolver cero hallazgos porque no pudiste mirar es la peor forma del verde.
Un resolutor puede devolver una respuesta equivocada en vez de ningunaDevuelve un error con los candidatos que probó. Una ruta que no existe, devuelta como si existiera, viaja tres capas antes de aflorar como una pantalla vacía.

La profilaxis — qué exige hoy la lección

  • La cobertura caduca al mejorar el mecanismo: cobertura ⊇ extensión, o el build paraadr:072/coverage-superset-of-extent
  • Un check puede —y debe— decir «no miré» en vez de firmar en verdeadr:072/a-check-can-say-i-did-not-look
  • El caso negativo por eje, visto rechazar, queda en el árboltest:.ontoref/reflection/tests/test_expediente_coverage.nu
  • En la cadenagate:just expedientes-check

Alta y profilaxis

La medición inicial de este caso se hizo con un script de usar y tirar, y ese script todavía da un falso positivo que la puerta que lo sustituyó ya no da. Es la mejor forma de decir el alta: la diferencia entre medir una vez y declarar para siempre es que lo declarado puede caducar — y por tanto puede AVISAR de que ha caducado. Un número medido a mano es verdad el día que lo mides. Un contrato es verdad hasta que deja de serlo, y ese día te lo dice.

Glosario

¿Te ha resultado útil? Valóralo
¿Tienes algo que aportar? Cuéntame qué opinas, qué sugieres, o si seguimos explorando este tema.
· lecturas

Usamos cookies para que este sitio funcione, entender el uso del servicio y apoyar acciones de marketing. Política de cookies para más información.