feat(episode): TRAZA_drift-cross-store-reconciliado-y-te-co_S20260618.R2_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD

Skill: TESSERA | Type: reflection
Summary: EPISODIO 2 — MNEMO_PRE_DIGEST: 🅰️ Drift cross-store — reconciliado (y te corrijo
This commit is contained in:
Ember 2026-06-18 19:30:12 +00:00
parent d8fa7c8acf
commit bf419f895c

View file

@ -0,0 +1,50 @@
---
episode_id: "e2b9c850-b0a6-43c1-b316-5d0bc9a413e0"
puente_flat: "TRAZA_drift-cross-store-reconciliado-y-te-co_S20260618.R2_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD"
session_code: "S20260618.VERIFY_FIRST_PASSPORT_FIX"
acto_dialogico: "informar"
actor_flujo: "multi_actor"
criticidad_aegis: "low"
skill_dominante: "TESSERA"
fase_proyecto: "operations"
tipo_semantico: "reflection"
summary_one_line: "EPISODIO 2 — MNEMO_PRE_DIGEST: 🅰️ Drift cross-store — reconciliado (y te corrijo honestamen"
source_type: "claude_code"
trust_boundary: "internal"
created_at: "2026-06-18T19:30:00.908207+00:00"
relectura_tagged: false
forgejo_commit_sha: "pending"
---
Las tres cerradas, John — **todo ejecutado en vivo**. Reporte actualizado: 📄 **[docs/REPORTE_DESEMPENO_PIPELINE_MNEMO_S20260618.md](docs/REPORTE_DESEMPENO_PIPELINE_MNEMO_S20260618.md)** (§7).
## 🅰️ Drift cross-store — reconciliado (y te corrijo honestamente: era 🔴, es 🟡)
Localicé el drift por sesión y la evidencia lo **rebaja de crítico a menor**. Lo que parecía pérdida NO lo es:
- **Hubo un REINICIO_PERFECTO v2 el 2026-06-17 21:22** (lo recuperé de memoria, episodio `6473c93b`): wipe de los 3 stores a `episode=0` preservando lexicon. Los counts de hoy (151/148/160) son **re-acumulación limpia** desde ese reset — por eso bajaron de los 176/157 de ayer. **No es pérdida.**
- **El +12 de Neo4j se descompone:** 6 nodos huérfanos (`session_code=NULL`, pero con UUID válido — no son la basura `REAL_` vieja, esa se wipeó) + ~6 de exceso por sesión (nodos content-hash duplicados de re-pushes).
- **El join canónico es `puente_flat`, NO `episode_id`** (ADR_S20260514): PG usa UUIDv4, Qdrant/Neo4j content-hash v5 — el mismatch de counts es **cosmético**. La métrica real es joinability, no paridad.
- **Worker `outbox.forgejo` caído ~19h** (`password auth failed user "plex"`, deuda de la rotación S20260616) → 125 filas pending. El core escribe directo a los 3 stores → **sin pérdida**; solo la réplica Forgejo (1 de 6 capas) está estancada.
## 🅱️ Dead-letter HyDE — triage preciso (60 episodios, no 58)
| Categoría | N | Acción |
|---|---|---|
| ACK / standby / FP-notice | **31** | **Descartar** — el gate los retuvo bien (ruido, no memoria) |
| Substantivos (contenido real) | **29** | **Re-emitir** con ≥10 HyDE → re-ingesta |
El "92% bloqueado" NO es data valiosa perdida: **la mitad es ruido de standby** ("quedo a la espera", "no response needed") que correctamente NO debería entrar a memoria. Solo ~29 valen re-emisión. **Cero pérdida** (dead-letter intacta).
## 🅲 Gate de retrieval server-side — corrido EN VIVO ahora (`retrieval_gate.py` vía `docker exec ember-mcp`)
| Métrica | Valor | Umbral | Estado |
|---|---|---|---|
| HyDE recall@1 | 0.32 | — | cuello conocido |
| HyDE recall@10 | **0.735** | ≥0.70 | ✅ |
| clean lenient@1 | **0.928** | ≥0.85 | ✅ |
| **VERDICT** | **PASS** | | 🟢 |
Mi **mini-oráculo MCP independiente** dio Recall@1 = 0.33 — **coincide casi exacto** con el server-side 0.32 (cross-validación). El cuello es @1 (episodios casi-gemelos de troubleshooting compiten por el #1); de @5 hacia arriba sano. **El retrieval PASA su gate de calidad en producción.**
## 🎯 Veredicto final corregido: pipeline MNEMO **SANO (82/100)**