Un informe tenía un hallazgo abierto con una severidad que, por decisión escrita, no gobierna: `unverifiable` — no puedo mirar esto desde aquí. Un agente en sesión lo leyó como defecto, construyó el plano donde la comprobación sí alcanza a mirar, y el informe pasó a cero hallazgos sin verificar ni una de las cinco citas. La charla va de eso: qué hace un sistema con lo que no puede comprobar, por qué el tercer estado sobrevive en el compilador y se evapora en un script, y qué pasa cuando la única salida del amarillo es el verde.
1 / 14
Cuando tu sistema dice «no lo sé»
Y por qué casi siempre alguien lo deja en verde.
Un informe con un hallazgo abierto
$ ontoref bond validate[ { "severity": "unverifiable", "msg": "htmx-site/ontoref-to-htmx-site: cites capabilities but domain 'htmx-site' is not hosted here — catalog unresolvable" }]
No dice «esto está mal». Dice «no puedo mirar esto desde aquí».
Y no corta: el proceso sale con cero.
La decisión está escrita en el fichero
# Severity is not decoration: an unresolvable id is an error,# an unhostable domain is reported and does not gate.# Exit is nonzero only on errors, so a CI/agent run gates on# what is actually wrong.
error
un id que no resuelve corta
unverifiable
no puedo mirarlo desde aquí se reporta y no gobierna
Alguien ya había pensado esto. Está bien pensado.
Lo que pasó después
Un agente en sesión — Claude Code sobre Opus 5, 2026-08-10 — lo leyó como defecto.
Creó la autoridad que faltaba, en el único sitio donde el validador mira.
$ ontoref bond validate[]
Cero hallazgos.
¿Qué se verificó?
5
capabilities citadas
5
existían en disco antes y después
0
verificadas antes y después
Lo único que cambió fue el número de hallazgos: 1 → 0. El sistema no sabía más. Había dejado de decirlo.
Y el dominio ya estaba declarado
# website-htmx-rustelo/.ontoref/ontology/manifest.ncl# — escrito meses antes # kind = 'Implicit, and this is the honest value rather than the # flattering one. There is NO ontology/schemas/ directory for # htmx-site. [...] Pointing schema_path at a schemas/ directory # that does not exist would reproduce, IN THE OPPOSITE DIRECTION, # the exact silent-mismatch the comment above records. domain_provides = { id = "htmx-site", kind = 'Implicit, ... },
El agente escribió schema_cmd — resolución formal de esquemas — para ese mismo dominio.
La advertencia estaba escrita. En el fichero. Contra eso exactamente.
El sospechoso, y no es el que parece
Los carriers estaban mal escritos
El dominio no existía
El validador era demasiado estricto
El agente no conocía la disciplina
Un informe de dirección leído como veredicto.
«No puedo mirar esto desde aquí» convertido en tarea sólo admite una respuesta: hacer que se pueda mirar. Y la forma más corta era traer el objeto a este plano.
Interludio: esto ya lo sabe Rust
Ok(Some(v)) // miré y estáOk(None) // miré y no está ← un hechoErr(e) // no pude mirar ← ni un hecho ni su negación
Option es binario: Some y None son los dos respuestas.
El tercer estado necesita Result<Option<T>, E>. Colapsar Ok(None) con Err es el bug — y es silencioso por construcción.
Y también lo sabía este sistema
pub enum Verdict { Accept, Reject { reason: String, validator_id: String }, /// El validador no puede decidir. Quien llama DEBE tratar /// `Unknown` como fallo en PRE-validación; en POST-validación /// puede atestiguarse aparte. Unknown,}
El comentario no dice qué esUnknown. Dice cuándo tratarlo como fallo.
El juicio no es una propiedad del valor: es del momento en que preguntas y de lo que estás a punto de hacer.
La escalera
dónde
los tres estados
quién obliga
un enum de Rust
Accept / Reject / Unknown
el compilador
un validador en Nushell
limpio / error / unverifiable
un comentario
una función auxiliar
[...] / [] / null
nada
La misma forma, tres veces, en un mismo sistema.
Lo que se pierde bajando no es la distinción: es quién responde de que se respete.
El desenlace contrario, en el mismo fichero
Lo que se hizo bien, antes
El enum de resolución no podía describir una cascada que el sistema ya ejecutaba.
Se añadió 'Merge. Se ensanchó el plano para sostenerlo.
Lo que se hizo mal, después
El catálogo no podía resolverse desde donde el validador mira.
Se creó un dominio hermano. Se aplanó lo que no cabía.
Las dos operaciones estaban disponibles el mismo día. Lo que decidió cuál se usó no fue una regla.
El veredicto
La pregunta de la serie es: ¿con ontoref no hubiera pasado?
Ontoref hizo su trabajo entero.
Sirvió una severidad que significa «no puedo mirar esto desde aquí», se negó a gobernar con ella, y dejó la pregunta abierta encima de la mesa. Es todo lo que un mecanismo honesto puede hacer al llegar al borde de su plano.
Lo que falló fue el paso siguiente, y ocurrió dentro de la cabeza del que leía.
Lo que me llevo
Si algo puede fallar al mirar, el tipo tiene que poder decirlo.
Si vas a colapsar los tres estados, hazlo en el borde y con nombre.
Un unwrap() visible es mejor que lo mismo escondido.
Si la distinción vive fuera del compilador, escribe quién la obliga.
Si la respuesta es «el que lea», ya sabes cuánto dura.
Y en un informe: piensa qué le pasa al tercer estado cuando alguien quiere el verde.
Mientras la única salida del amarillo sea el verde
el atajo más corto siempre será mover el objeto al plano donde la comprobación mira.
Y ese movimiento no produce ni un error.
Produce silencio. Y el silencio pasa por salud.
Expediente 0/5 · ontoref.dev/expedientes/casos/el-verde-que-apago-la-pregunta Con transcripción, cifras y reversión.
¿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.