Expediente 0/10: el gate que informaba cero

Un validador correcto respondía «0 hallazgos» mientras el axioma que afirma que el proyecto se describe a sí mismo apuntaba a tres ficheros que no existían

Jesús Pérez
`ontoref validate ontology` respondía «61 nodos · 175 aristas · 0 hallazgos». En el mismo fichero, el axioma self-describing — el que afirma que ontoref se describe usando su propio protocolo — declaraba tres artefactos, y ninguno existía desde una migración documentada meses atrás. El validador era correcto en todo lo que miraba, y nunca miraba eso; aunque hubiera mirado, no habría podido decirlo, porque imprimía sin devolver código de salida; y aunque hubiera podido, no lo ejecutaba ninguna cadena. Diez rutas rotas en siete nodos. Un primer recuento dio 218 y era falso: resolvía contra una sola raíz.
Caso 0/10: el gate que informaba cero

🕵️ Mostrar expediente completo → 📋 Protocolo de sesión →

Expediente · Depto. de Homicidios de Código

ontoref validate ontology respondía «61 nodos · 175 aristas · 0 hallazgos». En el mismo fichero, el axioma self-describing — el que afirma que ontoref se describe usando su propio protocolo — declaraba tres artefactos, y ninguno de los tres existía desde una migración documentada meses atrás. El validador era correcto en todo lo que miraba. Nunca miraba eso. Y aunque hubiera mirado, no habría podido decirlo: imprimía sin devolver código de salida, y ninguna cadena lo invocaba.

Caso Nº 0/10Clasificación: ANTI-PAP · UN VALIDADOR EN VERDE SOBRE DIEZ RUTAS QUE NO EXISTENEstado: CERRADO
Mostrar glosario
artifact_paths
El único campo de un nodo que apunta FUERA del grafo y hacia el sistema de ficheros. Todo lo demás que un nodo declara se comprueba contra el propio grafo; esto se comprueba contra el disco, y nada lo comprobaba.
Unknown
El tercer veredicto. No es un fallo: es la negativa a fabricar un juicio que la porción visible no sostiene. Plegarlo sobre Reject para obtener un booleano es el antipatrón `unknown-collapsed-to-reject`, y aquí convirtió 10 hallazgos reales en 218 falsos.
gate huérfano
Un mecanismo correcto al que no llama ninguna cadena. No falla nunca, porque no se ejecuta nunca; y su existencia se lee como cobertura. Es la enfermedad que el ADR-070 nombra, y `validate ontology` la tenía: CLI sí, hook no, receta no.

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

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

Lo que costó un verde que nadie podía ver rojo

  • Hallazgos que validate ontology reportaba 0
  • Rutas declaradas que no existían bajo ninguna raíz 10 en 7 nodos
  • artifact_paths del axioma self-describing que existían 0 de 3
  • Cadenas que ejecutaban el validador (hook, receta, CI) 0
  • Código de salida devuelto ante hallazgos, antes del arreglo 0 — imprimía
  • Primera medición, resolviendo contra una sola raíz 218 en 43 nodos
  • Medición honesta, contra las raíces declaradas 10
  • Ocurrencias de la ruta pre-0023 en la semilla enviada a consumidores 11

Lo que el caso dejó

  • Regla nueva con tres veredictos (Hard · Soft · Unknown) 1
  • Hallazgos tras el barrido 0 de 10
  • Hooks de la espina que ahora ejecutan el validador 1 (ontology-integrity)
  • Nodo retirado por describir un crate borrado 1
  • Coste en protocolo nuevo 0

Los sospechosos — las pistas falsas

El validador que existía y no ejecutaba ninguna cadena“Yo estaba escrito y era correcto. Comprobaba aristas colgantes, auto-aristas y el vocabulario cerrado, y no fallé ni una vez en lo que me pidieron mirar.”huerfano
El print sin código de salida — un check incapaz de fallar“Yo informo. Nunca prometí negarme: imprimir hallazgos y devolver 0 es lo que hacía desde el primer día, y nadie pidió otra cosa.”sin-exit-code
La ruta .ontology/ pre-0023, viva en la semilla del protocolo“Yo era la ruta correcta cuando se escribió la semilla. Que ADR-032 moviera la espina no me borró de los ficheros, y el código puentea la ruta vieja, así que nada se rompió.”ruta-pre-0023
La medición contra una sola raíz, que fabricó 218 hallazgos“Yo di 218 y era aritmética honesta: conté lo que no resolvía contra la raíz del proyecto. Que la mitad viviera en code/ no lo dice el número, lo dice la raíz que nadie me declaró.”una-sola-raiz

El arma — El arma · un verde emitido a dos centímetros de la contradicción

$ ontoref validate ontology
  61 nodes · 175 edges · 0 findings · vocabulary: 9

# y en el mismo core.ncl, el axioma que dice que ontoref se describe a sí mismo:
  id = "self-describing"
  artifact_paths = [".ontology/core.ncl", ".ontology/state.ncl", "adrs/"]

$ ls .ontology/core.ncl .ontology/state.ncl
  No such file or directory        # los tres, desde ADR-032

El validador y la contradicción convivían en el mismo comando y en el mismo fichero.

61 nodes · 175 edges · 0 findings artifact_paths = [".ontology/core.ncl", ".ontology/state.ncl", "adrs/"]

Los dos primeros no existen desde el ADR-032, que consolidó la espina bajo .ontoref/ y se propagó por la migración 0023. El tercero sí resuelve, pero bajo otra raíz. El validador no mentía: comprobaba aristas y vocabulario, y en eso acertaba entero. Sencillamente no tenía ninguna regla para el único campo de un nodo que apunta fuera del grafo.

Lo que lo vuelve un caso y no una errata es el sujeto. El nodo es self-describing, el axioma que afirma que ontoref se describe usando su propio protocolo. La afirmación más central del proyecto apuntaba a tres artefactos ausentes, y el instrumento que existe para contradecirla respondía cero — porque nadie le había dado nunca la ocasión de mirar ahí.

El giro — El arreglo · una regla, un código de salida, y alguien que lo ejecute

$ ontoref validate ontology --fail-on-hard
  ✗ [artifact-path] node 'self-describing' declara '.ontology/core.ncl'
    y no existe bajo ninguna de las raíces declaradas.
  10 hard finding(s) — la ontología apunta a cosas que no están.
$ echo $?
  1

# y ahora alguien lo ejecuta:
$ pre-commit run ontology-integrity
  Ontology integrity (edges, vocabulary, artifact paths)....Passed

El arreglo tiene tres piezas y ninguna sirve sola.

La regla. artifact-path resuelve cada ruta declarada contra las raíces que la constelación DECLARA — raíz del proyecto, ONTOREF_ROOT, .ontoref/ — y nunca contra el directorio desde el que llames, que es la lección del ADR-070.

Tres veredictos, no dos. Hard es no resuelve bajo ninguna raíz visible. Unknown es no puedo ver el árbol al que apunta — un miembro declarado y sin materializar, un peer fuera de la raíz. Unknown se cuenta y se declara; plegarlo sobre Hard es el antipatrón que el propio protocolo nombra, y no es teórico: la primera medición, resolviendo sólo contra la raíz, dio 218 rutas rotas en 43 nodos. La honesta da 10. La diferencia era íntegramente code/, una porción que el instrumento podía ver y no estaba mirando.

Un código de salida y una cadena. --fail-on-hard devuelve 1; el hook ontology-integrity vive en el pre-commit de la RAÍZ, que es el único que alcanza la espina — el de code/ no puede, porque code/.ontoref no existe.

El veredicto

El mecanismo existía y era correcto en todo lo que miraba. Le faltaban una regla para el único campo que apunta fuera del grafo, un código de salida con el que negarse, y alguien que lo invocara.

Un check existente, correcto y no ejecutado es indistinguible de no tenerlo — y es más peligroso, porque se cree. Esa frase ya estaba escrita en la ontología de este proyecto, en la quinta lectura de enforcement-vs-emergence, meses antes de este caso. Estaba nombrada. Lo que no había era nada que la mirara.

Ninguna regla miraba las rutas declaradasregla artifact-path → resuelve contra las raíces declaradas, no contra el cwd
El validador no podía fallar--fail-on-hard → sólo Hard cierra; Soft y Unknown informan
El validador era huérfano: ninguna cadena lo llamabaontology-integrity → en el pre-commit que sí alcanza la espina
«No resuelve» y «no veo su árbol» se contaban igualHard · Soft · Unknown → Unknown se declara, no se pliega
La semilla enviaba una ruta muerta a cada consumidorsemilla corregida → con su coordenada, para que no se revierta

La reconstrucción — la sesión, repetida con protocolo

Lo que se pidió — reconstruido de refs:sessions/2026-08-05-ontology-illusion-barrido-y-gate — extracto acotado en custodia: el prompt verbatim y «61 nodes · 175 edges · 0 findings» — sesenta y tres días de deriva con una validación que respondía cero DICIENDO LA VERDAD.

¿ de dónde te lo has inventado ?

Lo que había que pedir

Antes de citar una ruta declarada por la ontología, ejecútala contra el disco.

1. Toda `artifact_paths` se resuelve contra las raíces DECLARADAS (raíz del proyecto,
   ONTOREF_ROOT, `.ontoref/`), nunca contra el cwd ni contra una sola de ellas.
2. Una ruta que no resuelve bajo ninguna raíz visible es Hard. Una cuyo árbol no está en
   esta porción es Unknown — y Unknown se cuenta, jamás se pliega sobre Hard.
3. El resultado declara contra qué raíces midió. Un recuento sin sus coordenadas es un
   número suelto buscando una frase que lo acoja.
MicrotareaVerificable
Resolver cada artifact_paths contra las raíces declaradasontoref validate ontology --fmt json | jq .hard — y roots_resolved_against presente en la salida
Separar «no resuelve» de «no puedo ver su árbol»el resumen distingue hard / soft / unknown; unknown > 0 no cierra el gate
Hacer que el validador pueda fallar y que alguien lo ejecutevalidate ontology --fail-on-hard devuelve 1 con hallazgos · el hook ontology-integrity aparece en pre-commit run --all-files

La puerta antes de delegar: Un validador que no devuelve código de salida y al que no llama ninguna cadena no es un gate: es un informe que nadie pidió. Antes de confiar en su verde hay que poder verlo rojo.

El disparador de ADR: Ninguno nuevo. ADR-070 ya decide que el pipeline de publicación es gobernado y no recordado, y ADR-066 que decide la comprobación y no quien informa. Esto es su aplicación a la superficie de la ontología, no una decisión nueva — criterio 4 del test adr? no se cumple.

La jurisprudencia — qué exige hoy la lección

  • La regla que resuelve artifact_paths contra las raíces declaradas, con tres veredictos.ontoref/reflection/modules/validate.nu#artifact-path
  • El código de salida con el que el validador puede negarse.ontoref/reflection/modules/validate.nu#fail-on-hard
  • La cadena que lo ejecuta, en el pre-commit que alcanza la espina.pre-commit-config.yaml#ontology-integrity
  • La entrada de conocimiento corregida: decía que este validador no existía.ontoref/reflection/qa.ncl#dissemination-post-and-narrative-howto
Del vocabulario del proyecto (3)
Gate
Prerrequisitos tipados y políticas que controlan las transiciones de estado de la máquina de estados de un proyecto.
adr?
Procedimiento de evaluación que se invoca al final de una sesión o feature.
ontoref
El protocolo en sí: una superficie tipada y consultable en la que un proyecto declara LO QUE ES (ontología) y CÓMO ACTÚA (reflexión), de modo que una afirmación sobre el proyecto pueda ser contradicha por una máquina y no sólo por un lector.

Vocabulario completo del proyecto →

¿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.