ember-memory-test/episodes/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.md
Ember e762ef63a7 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)
2026-06-18 16:44:15 +00:00

3.5 KiB

episode_id puente_flat session_code acto_dialogico actor_flujo criticidad_aegis skill_dominante fase_proyecto tipo_semantico summary_one_line source_type trust_boundary created_at relectura_tagged forgejo_commit_sha
fb2c158e-0bd2-4958-825c-8629bb17c3b9 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 S20260617.CUSTODIA_SKILL_SECRETOS informar multi_actor low TESSERA operations reflection EPISODIO 3 — MNEMO Pipeline: Lo que el test destapó y arreglé (root cause #2) claude_code internal 2026-06-18T00:43:42.822102+00:00 false 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.