ember-memory-test/episodes/TRAZA_las-dos-vas-de-ingestin_S20260726.R1_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD.md
Ember e20cae591f feat(episode): TRAZA_las-dos-vas-de-ingestin_S20260726.R1_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD
Skill: TESSERA | Type: troubleshooting
Summary: EPISODIO 1 — MNEMO_PRE_DIGEST: Las dos vías de ingestión
2026-07-27 02:23:27 +00:00

3.2 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
3c557da8-cd74-4224-bbd1-9b741eec7149 TRAZA_las-dos-vas-de-ingestin_S20260726.R1_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD S20260726.ARCO_CICLO4_AUTOMEJORA informar multi_actor low TESSERA operations troubleshooting EPISODIO 1 — MNEMO_PRE_DIGEST: Las dos vías de ingestión claude_code internal 2026-07-27T02:23:11.496726+00:00 false pending

Percibiste exactamente bien, John. Hay dos vías, y entender la diferencia es la clave de todo el diagnóstico de hoy.

Las dos vías de ingestión

Vía A — el camino directo (crisol_run.py) Un cron horario lee los archivos del inbox, genera el embedding y escribe directamente en Qdrant (MemoryWriter(stores=("qdrant",))). Es simple y rápida: como alguien que copia el dato a mano en cada libreta. Es la que ha estado sosteniendo la memoria todo este tiempo.

Vía B — el libro de salidas (episode_outbox → dispatcher → workers) PostgreSQL es el canon: cuando nace un episodio, se anota un evento en una tabla de salidas (episode_outbox). Unos trabajadores independientes toman esos eventos y proyectan el episodio a cada destino: uno a Qdrant, otro a Neo4j, otro a Nextcloud, otro a Forgejo. Si uno falla, el evento queda pendiente y se reintenta.

Ese patrón tiene nombre en la industria: transactional outbox. Es el estándar para mantener varios almacenes consistentes sin perder nada, porque el registro de "esto hay que propagarlo" vive en la misma base de datos que el dato.

Por qué importa la diferencia

Vía A (directa) Vía B (outbox)
Complejidad baja alta
Si falla se pierde en silencio queda pendiente y reintenta
Actualiza episode_sync_status ❌ no ✅ sí
Estado hasta hoy viva muerta desde el 19 de junio

Ahí está la explicación completa del hueco de julio: la vía B es la red de seguridad de la vía A. Al morir la B en junio, el sistema quedó caminando sobre la cuerda floja sin red. Cuando la vía A tropezó del 2 al 11 de julio, no había nada debajo: 152 episodios cayeron al vacío.

Y explica también el 1099 pending que acabas de ver en el arranque: ese contador solo lo actualiza la vía B, así que lleva desde junio congelado — la mayoría de esos episodios sí están en Qdrant, puestos ahí por la vía A.

★ Insight ───────────────────────────────────── La prueba de que la vía B revivió es casi poética. Consulté cuál fue el primer episodio que cruzó el canal reparado, y este es su identificador:

TRAZA_cac-y-correg-un-falso-negativo-en-mi_S20260726.R1 — hace 0,9 minutos

Es mi propio episodio de este turno: el que narra que cacé el falso negativo en mi detector. El primer recuerdo que atravesó la vía reparada es el recuerdo de la reparación. ─────────────────────────────────────────────────