feat(episode): DEPURA_nota-de-cierre-automtico-al-terminar-el_S20260726.R2_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD

Skill: TESSERA | Type: troubleshooting
Summary: EPISODIO 2 — MCP: Nota de cierre automático: al terminar el turno,...
This commit is contained in:
Ember 2026-07-27 00:13:20 +00:00
parent 90a399f579
commit ad5ff21a51

View file

@ -0,0 +1,53 @@
---
episode_id: "58e6e660-eeb7-4ba6-a0a8-1dc781d5d263"
puente_flat: "DEPURA_nota-de-cierre-automtico-al-terminar-el_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: "TESSERA"
fase_proyecto: "operations"
tipo_semantico: "troubleshooting"
summary_one_line: "EPISODIO 2 — MCP: Nota de cierre automático: al terminar el turno,..."
source_type: "claude_code"
trust_boundary: "internal"
created_at: "2026-07-27T00:13:09.911596+00:00"
relectura_tagged: false
forgejo_commit_sha: "pending"
---
Nota de cierre automático: al terminar el turno, el hook regeneró [REPORTE_EFECTIVIDAD_HOOKS.md](docs/REPORTE_EFECTIVIDAD_HOOKS.md) (11 veredictos sobre 10 hooks). Es un evento del sistema, no requiere acción mía.
**No hay nada más que yo pueda avanzar sin tu criterio.** El ciclo 6 quedó entregado y anclado; lo que sigue son tres decisiones tuyas:
1. 🔴 **DC-6** — vence **mañana**; el dossier está completo (fixture verificada contra el canon vivo + contador honesto).
2. ❓ **Política de remediación A/B** para los 406 tests que no pueden fallar — mi recomendación sigue siendo **A** (hacer `check()` asertivo y aceptar el rojo masivo, porque ese rojo es la verdad que llevaba meses oculta).
3. ❓ **C5-09** — requiere tu GO porque reinicia el MCP y te cuesta las 3 tmux.
Quedo esperando.
Todo registrado: commit `2c30c210`, push 3/3.
## Lo que pasó, y por qué me detuve
Ejecuté tu GO en orden. **P0** dio PROCEDER (152 de 258, 58%). **P1** congeló la lista con su huella. Y **P2 —el canario— falló**, que es exactamente para lo que existe.
Lancé el worker canónico 60 segundos sobre los 8 huérfanos, **sin crear un solo evento**. Los 8 respondieron lo mismo: `HTTP 400`. Si hubiera encolado primero los 152, tendría 152 fallos y una cola envenenada. El canario costó ocho intentos sobre episodios que ya estaban rotos.
Y al tirar de ese hilo apareció algo bastante más grande que el hueco.
## 🔴 El hallazgo real
El 12 de junio rotaste la master key de LiteLLM. El worker de Qdrant la tiene **hardcodeada como valor por defecto**, y el entorno no define la variable que la sustituiría. Desde ese día el worker pide embeddings con una credencial muerta y recibe 400. El 19 de junio alguien lo sacó del despachador —presumiblemente porque ensuciaba— y ahí sigue, cinco semanas después.
**El sistema perdió su redundancia el 19 de junio.** Mientras el otro camino funcionó, no se notó. Cuando ese también falló, del 2 al 11 de julio, no había red: **152 episodios cayeron al vacío.**
Y el barrido de la clase es lo que me preocupa de verdad: **ocho componentes vivos tienen claves muertas hardcodeadas**. Entre ellos `puente_health_check.py` —un chequeo de salud— y `fides_report.py` —el que calcula la confianza de tu memoria—. Son instrumentos que podrían llevar semanas dando veredictos sin poder hablar con lo que dicen medir.
★ Insight ─────────────────────────────────────
Volviendo a tu metáfora: esto no fue un fallo del cerebro reptil. Fue **más sutil y más peligroso** — el reptil siguió respirando con un pulmón mientras el otro estaba colapsado, y ningún sensor lo reportó porque *el sensor también estaba desconectado*. Es la razón exacta por la que insistes en que la prudencia sea mecánica: un sistema que se auto-percibe mal es más peligroso que uno que no se auto-percibe, porque **produce confianza injustificada**.
─────────────────────────────────────────────────
## La decisión que te traigo