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
This commit is contained in:
parent
6d6460082d
commit
e20cae591f
1 changed files with 50 additions and 0 deletions
|
|
@ -0,0 +1,50 @@
|
||||||
|
---
|
||||||
|
episode_id: "3c557da8-cd74-4224-bbd1-9b741eec7149"
|
||||||
|
puente_flat: "TRAZA_las-dos-vas-de-ingestin_S20260726.R1_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 1 — MNEMO_PRE_DIGEST: Las dos vías de ingestión"
|
||||||
|
source_type: "claude_code"
|
||||||
|
trust_boundary: "internal"
|
||||||
|
created_at: "2026-07-27T02:23:11.496726+00:00"
|
||||||
|
relectura_tagged: false
|
||||||
|
forgejo_commit_sha: "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.
|
||||||
|
─────────────────────────────────────────────────
|
||||||
Loading…
Reference in a new issue