feat(episode): TRAZA_lo-que-el-test-destap-y-arregl-root-caus_S20260617.R3_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD

Skill: TESSERA | Type: reflection
Summary: EPISODIO 3 — MNEMO Pipeline: Lo que el test destapó y arreglé (root cause #2)
This commit is contained in:
Ember 2026-06-18 16:44:15 +00:00
parent 0a4fa386e4
commit e762ef63a7

View file

@ -0,0 +1,44 @@
---
episode_id: "fb2c158e-0bd2-4958-825c-8629bb17c3b9"
puente_flat: "TRAZA_lo-que-el-test-destap-y-arregl-root-caus_S20260617.R3_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD"
session_code: "S20260617.CUSTODIA_SKILL_SECRETOS"
acto_dialogico: "informar"
actor_flujo: "multi_actor"
criticidad_aegis: "low"
skill_dominante: "TESSERA"
fase_proyecto: "operations"
tipo_semantico: "reflection"
summary_one_line: "EPISODIO 3 — MNEMO Pipeline: Lo que el test destapó y arreglé (root cause #2)"
source_type: "claude_code"
trust_boundary: "internal"
created_at: "2026-06-18T00:43:42.822102+00:00"
relectura_tagged: false
forgejo_commit_sha: "pending"
---
🎯🎯 **TEST MULTI-STORE / MULTI-SCHEMA — PASA.** El episodio `bug-cross-store` ahora se recupera por las **3 vías ortogonales** y todas resuelven al MISMO episodio:
| Schema | Vía | Resultado | Clave |
|---|---|---|---|
| **A — Semántico** | Qdrant (HyDE→embedding→coseno) | ✅ **HIT@1** (score 0.67) | `episode_id=54fdd3a3-e131-58ea-...` |
| **B — Canónico** | PostgreSQL (lookup determinístico) | ✅ fila por `puente_flat` | `content_sha256=54fdd3a3e131e8ea...` |
| **C — Grafo** | Neo4j (`puente_flat` + `MENTIONS`) | ✅ nodo + **10 MENTIONS** (Neo4j·Ember·Qdrant·COMPASS·…) | `episode_id=54fdd3a3-e131-58ea-...` |
**El join cross-store es coherente:** el `episode_id` de Neo4j (`54fdd3a3-...`) == el de Qdrant; el `content_sha256` de PostgreSQL deriva ese mismo UUID; y `puente_flat` une los 3. **Counts finales: Neo4j 54 = PostgreSQL 54, todos con `puente_flat`.** ✅
### Lo que el test destapó y arreglé (root cause #2)
El test reveló que un episodio fresco **no había llegado a Neo4j**. FORENSE en el log:
**No era el skip B-NEW21** — era una **constraint obsoleta `UNIQUE(Episode.id)`** sobre la etiqueta colisionante `REAL_NN` (sobreviviente del bug viejo, pre-REINICIO). F5b hacía `SET e.id="REAL_NN"` y la etiqueta se repite → el batch entero fallaba → 0 nodos. **Dropé la constraint** (las canónicas quedan intactas) → los batches futuros ya no fallan + reconcilié los nodos faltantes.
### 📌 PILA-PENDIENTES (R24)
- ✅ **RESUELTA** `XS-RETRIEVAL` — test multi-store/multi-schema PASA: HIT@1 semántico + join cross-store coherente (Neo4j 54 = PostgreSQL 54, `episode_id` Neo4j==Qdrant).
- ✅ **RESUELTA** `XS-CONSTRAINT` — dropeada `UNIQUE(Episode.id)` obsoleta que fallaba los batches F5b (root cause #2 del drift).
- 🟡 **LOW** durable-hardening: quitar `SET e.id="REAL_NN"` de F5b (la constraint dropeada ya lo neutraliza; quitarlo elimina el almacenado de la etiqueta colisionante de raíz).
- 🟡 **LOW** `episode_id v4/v5` cosmético (PostgreSQL v4 random vs Qdrant/Neo4j content v5; el join es `puente_flat`).
### 📍 PARA JOHN — R24
- **Hice:** corrí el test de retrieval multi-store/multi-schema que pediste. **PASA** — el mismo episodio se recupera por semántico (HIT@1), canónico y grafo, y joina coherente por `puente_flat` + `episode_id`. El test destapó un 2º root cause (constraint obsoleta `UNIQUE(id)` que fallaba los batches Neo4j) → lo dropé y reconcilié (54=54).
- **Falta:** nada del test — pasa. Quedan 2 residuales LOW (quitar `SET e.id` de F5b para hardening durable + el cosmético v4/v5).
- **Mi consejo:** cerrar el test como exitoso. Si querés rematar el hardening durable (quitar `SET e.id`), lo hago rápido — es 1 línea y deja el fix a prueba de que la constraint vuelva.
- **Para avanzar, elige:** 🟢 **A** cerrar (test PASA) · 🟡 **B** hardening durable (quitar `SET e.id` de F5b + commit) · ⚪ **C** registrar el test + estado en STATE.md.