Expediente 404-PAP-bis: la recaída

Historia clínica de un gemelo: el mismo patógeno, otro órgano — y por qué esta vez el colapso duró minutos, no una tarde

Jesús Pérez
Creíamos estar de alta. Al instante, /nosotros dio 404: el mismo match hardcoded, ahora en las páginas estáticas. Del logro a la miseria en un instante. Pero esta vez el diagnóstico llegó en minutos — porque el primer caso ya era historia clínica. Esa es la diferencia que ontoref compra.
Expediente 404-PAP-bis: la recaída

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

Historia clínica · Servicio de Patología del Código

Creíamos estar de alta. El hub /expedientes en verde, el caso cerrado, la gloria. Y entonces /nosotros dio 404. Al instante. Del logro a la miseria sin transición — un espejismo, una montaña rusa que solo baja.

Historia Nº 404-PAP-bisDiagnóstico: ANTI-PAP · recaídaEstado: ALTA
Motivo de consulta. Paciente que, creyéndose curado, sufre recaída súbita del mismo cuadro. Refiere del susto‑sorpresa al pánico y a la incertidumbre en un instante; el ánimo cae del triunfo a la depresión sin escalón intermedio. Verbaliza: "después de esto voy a necesitar una visita a la clínica". Y aquí está.
Mostrar cuadro
PAP
Project's Architecture Principles — las reglas y patrones que sostienen la arquitectura del proyecto: la fuente única de la verdad que todo el código debe respetar.
anti-PAP
Código escrito en contra de esas reglas: un stub que re-lista a mano lo que routes.ncl ya declara, duplicando y contradiciendo la fuente de la verdad.

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

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

Caso 404-PAP · sin historia

  • Diagnóstico ~88 min
  • Builds 8
  • Pistas falsas 8

Caso bis · con historia clínica

  • Diagnóstico ~15 min
  • Builds 1
  • Pistas falsas 0
  • Factor de aceleración vs. el primer caso ~30×
  • Tamaño del arreglo final 1 <i>línea</i>

Mismo bug. ~30× más rápido. No porque el segundo fuera más fácil — era idéntico — sino porque el primero se declaró. Eso es ontoref trabajando en tiempo real: el dao te sostiene en la recaída, el modo te da el paso, y el howto previo convierte “otra tarde perdida” en “quince minutos y un antibiótico conocido”.

Diagnóstico diferencial — lo que se descartó

El binario / la caché“¿Otra vez yo? Los marcadores ya no bastan.”reincidente conocido
La ruta /nosotros declarada“Consto en routes.ncl. Constante normal.”constante normal
El FTL & el componente horneado“Presente y correcto. Analítica negativa.”analítica negativa
pages_htmx::dispatch“Sí… el match que elige la página estática era el foco.”el patógeno

Etiología — la causa — Etiología gemela · un match hardcoded en las páginas estáticas

match path {
    "/services" | "/servicios" => Some(static_page::render(env, "services", lang)),
    // … cada página a mano … menos /nosotros …
    _ => None,   // ← /nosotros caía aquí → 404
}

El Expediente 404-PAP mató un match hardcoded en render_content_or_grid (páginas de contenido). El gemelo vivía intacto en el órgano de al lado — las páginas estáticas, pages_htmx::dispatch:

Ruta declarada, FTL presente, componente horneado — y aun así 404. El mismo anti‑PAP: un match que duplica lo que routes.ncl ya sabe.

Tratamiento — PAP-compliant · una línea, sin ramas nuevas

_ => resolve_static_page(env, path, lang),
// lee del registry: cualquier ruta cuyo componente
// acabe en "Page" → static_page(page_id kebab). Cero arms nuevos.

Pronóstico

Lo revelador no es que recayera. Es cuánto duró. El primer caso, sin historia previa, costó una tarde. El gemelo, idéntico, costó minutos — porque el primero ya estaba declarado como historia clínica (content-kind-howto): fui directo al órgano, reconocí el patógeno, apliqué el mismo antibiótico.

El primer caso, ya declarado como historiacontent-kind-howto → consulta directa
Reconocer el patógeno sin re-interrogarmismo antibiótico → registry
Cerrar la recaída también registradastatic-page-howto → el 3º durará segundos

La profilaxis — qué exige hoy la lección

  • El incidente se convierte en historia declarada — es lo que hizo la recaída ~30× más cortamode:generate-expediente/register_proof

Deuda declarada: La recaída tenía causa, y no era la memoria: el primer arreglo nunca había vuelto a la plantilla, así que no era recaída sino reinfección desde la fuente. Ya volvió — el backport está en las dos plantillas y la lista a mano está prohibida por una restricción tipada. Lo que queda es lo de siempre: nada la ejecuta. El justfile de rustelo no llama a ningún validador, así que la puerta que impediría la próxima reinfección existe y está callada. La saldaría una receta just en su cadena. El expediente 8/0 cuenta por qué el arreglo tardó meses en volver a casa.

El patógeno tiene familia: cualquier match hardcoded que sombree el registry. La vacuna es la misma para todos — leer de la fuente única. El caso se cierra registrado (static-page-howto) para que el tercer gemelo, si aparece, dure segundos.

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.