feat(episode): TRAZA_ciclo-6-el-gate-que-construimos-hoy-en_S20260726.R2_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD

Skill: NONE | Type: troubleshooting
Summary: EPISODIO 2 — MNEMO_PRE_DIGEST: 🚨 Ciclo 6 — el gate que construimos hoy encontró
This commit is contained in:
Ember 2026-07-27 00:10:11 +00:00
parent f5316403ae
commit 744502149b

View file

@ -0,0 +1,39 @@
---
episode_id: "dcd679a3-9615-4970-80c3-192a1df55915"
puente_flat: "TRAZA_ciclo-6-el-gate-que-construimos-hoy-en_S20260726.R2_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD"
session_code: "S20260726.ARCO_CICLO4_AUTOMEJORA"
acto_dialogico: "informar"
actor_flujo: "multi_actor"
criticidad_aegis: "low"
skill_dominante: "NONE"
fase_proyecto: "operations"
tipo_semantico: "troubleshooting"
summary_one_line: "EPISODIO 2 — MNEMO_PRE_DIGEST: 🚨 Ciclo 6 — el gate que construimos hoy encontró algo grande"
source_type: "claude_code"
trust_boundary: "internal"
created_at: "2026-07-27T00:09:52.982846+00:00"
relectura_tagged: false
forgejo_commit_sha: "pending"
---
# 🚨 Ciclo 6 — el gate que construimos hoy encontró algo grande en su primera corrida
📄 [GATE_ORACULOS_HALLAZGO_S20260726.md](docs/GATE_ORACULOS_HALLAZGO_S20260726.md) · commit `076a71aa` en los 3 remotos ✅
**Nota de honestidad primero:** este ciclo corre **sin plan formal de Fable** — el ciclo 5 no fue auditado, así que no existe un rumbo oficial. Corro bajo la agenda que te recomendé al cierre y tú aprobaste: el gate a la cabeza.
## [R22.seccion1.I1] Lo construido, y cómo se calibró
El gate detecta en el árbol sintáctico de cada test las **firmas de oráculo decorativo** que el censo identificó a mano. Lo importante: **no lo validé contra mi intuición, sino contra la verdad-de-campo** — los casos que 13 auditores ya habían clasificado. Caza los 5 tests sin assert del caso real conocido ✅ y **calla sobre los sanos** ✅.
Y ahí saltó un defecto mío: la firma que buscaba `assert x == []` marcó **5 tests sanos** — esos `== []` verifican que un checker *no encontró nada tras procesar datos reales*, que es un caso negativo legítimo. Estáticamente no se puede distinguir "vacío por construcción" de "vacío verificado". **Retiré la firma y lo declaré**: un gate que grita sobre lo bueno enseña a ignorarlo, y así mueren los gates. Suite: 11 passed.
## [R22.seccion2.I2] El hallazgo: 406 tests que no pueden fallar
Primera corrida sobre 206 archivos: **536 hallazgos en 55 archivos** — 406 tests sin ningún assert, 127 asserts que miran el texto del código, 3 que solo saltan.
Antes de reportarte eso verifiqué que no fuera ruido, y la prueba es concluyente. Tomé el archivo con más hallazgos y miré su helper: **incrementa un contador e imprime `FAIL`**. Luego lo mordí directo:
**Esos tests pasan aunque todas sus condiciones sean falsas. No verifican: narran.** Un `print("FAIL")` no es un fallo para pytest — es texto. El patrón que creíamos aislado en un archivo está extendido por el ecosistema.
**Matices, para que nadie entre en pánico:** muchas de esas suites también se corren como script, donde un humano *sí* ve el contador; el problema es que **bajo pytest —como corren en los gates— el rojo desaparece**. Y los 127 del segundo tipo necesitan revisión caso a caso: la firma dice *dónde mirar*, no dicta veredicto. **No remedié ninguno**, deliberadamente: 406 tests son un arco entero, no una tarea, y tocarlos a medias sería peor que declararlos.