feat(episode): TRAZA_lo-que-qued_S20260808.R2_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD

Skill: NONE | Type: troubleshooting
Summary: EPISODIO 2 — ember_experience: Lo que quedó
This commit is contained in:
Ember 2026-08-12 02:55:56 +00:00
parent 488abacfc2
commit 1a174e5cc6

View file

@ -0,0 +1,26 @@
---
episode_id: "abe76d26-6029-45b6-aebd-344e5664f130"
puente_flat: "TRAZA_lo-que-qued_S20260808.R2_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD"
session_code: "S20260808.MEMORIA_SOTA_BRECHA"
acto_dialogico: "informar"
actor_flujo: "multi_actor"
criticidad_aegis: "low"
skill_dominante: "NONE"
fase_proyecto: "operations"
tipo_semantico: "troubleshooting"
summary_one_line: "EPISODIO 2 — ember_experience: Lo que quedó"
source_type: "claude_code"
trust_boundary: "internal"
created_at: "2026-08-12T02:55:55.542642+00:00"
relectura_tagged: false
forgejo_commit_sha: "pending"
---
Hecho y respaldado en los 3 remotos (`9fe9900b`). `★ Insight ─────────────────────────────────────`
El hallazgo más útil del turno no fue el corpus sucio sino **el test que lo protegía**. `test_includes_title_as_query` afirmaba `"Arquitectura MNEMO" in queries` — fijaba la **forma** (el título como elemento crudo) en vez del **requisito** (el título disponible como respaldo). Un test así no detecta el bug: lo **congela**, porque cualquiera que arregle el código ve rojo y asume que rompió algo. La señal para distinguirlos: un test que fija la forma se rompe cuando **mejoras** el código; uno que fija el requisito solo se rompe cuando lo **empeoras**. Su test hermano, dos líneas abajo, ya usaba la forma correcta (`any(... in q for q in queries)`) — la convención sana estaba ahí al lado. `─────────────────────────────────────────────────`
## Lo que quedó
**Preventivo** — el gate corre dentro del constructor del payload. Verificado con datos reales: entran 3 preguntas, sobrevive **solo la específica**, y el payload declara cuántas quitó en `hyde_mh3_filtered`. **Causa raíz** — encontrada persiguiendo un riesgo distinto. Monté un control anti-bucle (¿el generador vivo pasa su propio gate?) y dio **4/4 fallos**: `episode_classifier.py:472` anexaba el título crudo como si fuera pregunta, y con título vacío **inyectaba una cadena vacía en la memoria**. Tras el fix: 0/4. **Curativo** — 303 fichas, 691 preguntas retiradas, **ninguna perdida**: viven en `hyde_queries_rejected_mh3` con backup de 303 filas. Verificado midiendo el store, no creyéndole al script: 303→0 afectados, 0 rotos de conservación en muestra de 60, y **1610 puntos intactos**. ## Lo que tengo que decirte aunque no luzca bien
**No sube el recall hoy.** Las preguntas sembradas no están en el camino de lectura — el índice se construye sobre el texto, como demostró la doble medición.