Caso vivo · Especificación Ejecutable de Intención
EIS-029 — Aplicar la puerta de la metodología por release: pasar el Sentinel y calcular el Health Score (≥98 bloqueante), sin constantes a mano
EIS-029 — Health Score vivo (evolución del caso vivo)
1. Contexto técnico
El Health Score (HPS) que muestra el caso vivo (/construccion, bloque «Evidencias») se
compone con una fórmula real (Σ valor·peso sobre 5 vectores del libro, cap. 3 pp. 99-100),
pero los valor de cada vector están escritos a mano en src/pages/construccion/index.astro
desde el Sprint 4. No se recalculan por EIS ni por build: la web sigue mostrando el snapshot de
entonces. El Sentinel (la CI auditoria.yml) sí se ejecuta por PR y es la puerta real.
Esta EIS hace el HPS vivo dentro de lo que el modelo estático permite, con honestidad sobre sus límites (la página se construye antes de que corran axe/Lighthouse/aceptación, y el build de Cloudflare no tiene los resultados de la CI).
2. Restricciones de arquitectura
- Vectores medibles en build → se calculan en cada
npm run builddesde señales reales:- Seguridad:
npm audit --omit=dev(0 CVEs críticas → 100; degradación proporcional). - Fidelidad a la intención: derivada de la trazabilidad real (EIS implementadas / total).
- Cobertura: nº de suites
tests/eis-*.acceptance.mjsfrente a EIS con render verificable (proxy declarado, como hasta ahora).
- Seguridad:
- Vectores NO medibles en build (no hay navegador en el build): Rendimiento y
Accesibilidad (axe) se leen de un fichero comprometido
src/data/calidad.json, que actualizan los scriptsscripts/lighthouse-local.mjsytests/a11y-axe.mjsal verificar (escriben su resultado + fecha). Cada valor se muestra con su fecha de medición. - Cero constantes a mano en el render: los
valorsalen de datos (build ocalidad.json). El generador degrada con gracia (conserva el último valor) si una señal no está disponible (p. ej.npm auditsin red), nunca rompe el build. - Honestidad (ADN P8): cada vector etiqueta su origen — «medido en este build» o «última
medición:
» — y se mantiene la nota de que mantenibilidad/cobertura son proxies. - Sin librerías nuevas; tokens de marca intactos; AA; presupuestos ADN §7; coste 0 €.
3. Criterios de aceptación (Test-Driven Intent)
criterios:
- id: C1
given: "el bloque «Evidencias» de /construccion"
when: "se construye el sitio"
then: "el Health Score y sus 5 vectores se renderizan desde datos (build + src/data/calidad.json), sin ningún valor numérico escrito a mano en el .astro"
- id: C2
given: "una señal medible en build (p. ej. CVEs críticas de npm audit)"
when: "cambia entre dos builds"
then: "el vector correspondiente y el Health Score cambian en consecuencia, sin tocar el HTML"
- id: C3
given: "los vectores de rendimiento y accesibilidad"
when: "se muestran"
then: "indican su fecha de última medición y su origen (calidad.json), distinguiéndose de los medidos en build"
- id: C4
given: "una señal no disponible en el entorno (p. ej. npm audit sin red en clon superficial)"
when: "se genera"
then: "el generador conserva el último valor conocido y el build no falla (degradación con gracia)"
- id: C5
given: "el Health Score computado de un release"
when: "resulta < 98"
then: "la verificación FALLA y NO se despliega («no hay despliegue por debajo de 98», metodología): el HPS es una puerta bloqueante, no solo un número informativo"
- id: C6
given: "cada release a producción"
when: "se prepara el cierre de su EIS"
then: "se ejecuta el Sentinel (CVEs críticas=0, secretos=0, SBOM, axe, Lighthouse) y se registra el HPS calculado con su fecha en el manifiesto/WORM, como evidencia de haber pasado la metodología"
4. Definition of Done
- Script de puerta (p. ej.
scripts/sentinel-hps.mjs) que pasa el Sentinel (CVEs críticas, secretos, SBOM, axe, Lighthouse), calcula el HPS y sale con error si < 98; cableado a la verificación y reejecutable a 0 €. - Health Score y 5 vectores dirigidos por datos; 0 valores a mano en
construccion/index.astro. src/data/calidad.jsoncomprometido;lighthouse-local/axelo actualizan con valor + fecha.- Generador calcula los vectores de build y degrada con gracia; etiqueta origen/fecha por vector.
- HPS calculado registrado por release (manifiesto/WORM) como evidencia de pasar la metodología.
- Tests
tests/eis-029.acceptance.mjs+ gate completo en verde; manifiesto + PROGRESS + MANIFEST-IMPL + WORM. Coste 0 €.