feat(episode): EXPLORA_correccin-importante-me-equivoqu-en-dos_S20260808.R1_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD

Skill: NONE | Type: advisory
Summary: EPISODIO 1 — SENTINEL: Corrección importante: me equivoqué en dos cosas
This commit is contained in:
Ember 2026-08-09 20:58:42 +00:00
parent e5be0424db
commit 49197bb082

View file

@ -0,0 +1,47 @@
---
episode_id: "06742505-3051-4014-8441-a12aba4401c5"
puente_flat: "EXPLORA_correccin-importante-me-equivoqu-en-dos_S20260808.R1_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD"
session_code: "S20260808.AUDITOR_MEMORIA_LLM"
acto_dialogico: "informar"
actor_flujo: "multi_actor"
criticidad_aegis: "low"
skill_dominante: "NONE"
fase_proyecto: "operations"
tipo_semantico: "advisory"
summary_one_line: "EPISODIO 1 — SENTINEL: Corrección importante: me equivoqué en dos cosas"
source_type: "claude_code"
trust_boundary: "internal"
created_at: "2026-08-09T20:58:30.599471+00:00"
relectura_tagged: false
forgejo_commit_sha: "pending"
---
# Corrección importante: me equivoqué en dos cosas
Los dos agentes volvieron y ambos encontraron fallos reales. Uno de ellos es mío.
## 1. Mi parche abrió dos agujeros de seguridad
El auditor devolvió **BLOCKED**. Lo verifiqué yo mismo antes de aceptarlo, y tenía razón:
| Lo que rompí | Consecuencia |
|---|---|
| Anclar `SECRET_KEY` solo a `_`/`-` | `authToken`, `clientSecret`, `userPassword`, `service.api_key` dejaron de detectarse. **El detector viejo sí los cazaba** — regresión neta |
| `TOKEN_METRIC` con `search()` | `input_tokens_secret` con una API key real devolvía `[]`. La excepción "cerrada" no lo estaba |
Arreglé un falso positivo y creé **falsos negativos**, que en un control de seguridad es mucho peor. Ya está corregido de raíz (`normalize_key` + `is_token_metric` con lista cerrada por segmentos), verificado **25/25**, y respaldado en `8b7c56c2`.
La lección concreta: mi test original solo cubría los casos que se me ocurrieron. Ahora cubre 19 claves más y el bypass compuesto, así que la regresión no puede volver en silencio.
## 2. Te dije que sus muros eran reales. Era verdad a medias
El segundo agente construyó **9 sondas con control positivo 4/4** (prueba de que su arnés funciona) y **las 9 atravesaron el validador**:
- Un claim `supported` apoyado en una fuente con `retrieval_status: failed_404_never_retrieved`**pasa**. Es la regla nº1 del skill, y no tiene mecanismo
- Informe `conclusive` con los 15 gates no compensables en `fail`**pasa**. Los valores de esa columna nunca se leen
- Informe afirmando *"SOTA, 97.3% recall, p<0.001, recomendación universal"* sin nada en el ledger → **pasa**. La prosa del informe **no se parsea jamás**
- Revisión humana `approved` con `reviewer: n.a.` → **pasa**
Y el más incómodo: **`--refresh-hashes`, el comando documentado del propio README, re-sella una edición posterior al congelado sin dejar rastro** ni subir versión. El mecanismo más fuerte del paquete se neutraliza con su propia instrucción de uso.
La caracterización honesta es: **validador estructural fuerte, validador semántico ausente**. Lo que sí muerde — existencia de los 13 artefactos, enums, integridad referencial, exigencia de pasaje literal, recomputación real de SHA-256 — es genuinamente bueno. Lo que la doctrina llama *gate* en sentido epistémico lo autodeclara el autor y el código solo comprueba que la autodeclaración esté bien formada.