feat(episode): TRAZA_la-arquitectura-real-hay-dos-mecanismos_S20260618.R3_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD

Skill: NONE | Type: design
Summary: EPISODIO 3 — MNEMO Pipeline: La arquitectura real: hay DOS mecanismos de escritu
This commit is contained in:
Ember 2026-06-18 19:58:45 +00:00
parent 7136f72fc5
commit d7c6a9beda

View file

@ -0,0 +1,37 @@
---
episode_id: "0d2747fb-6967-4701-88e7-8c2bd068bc27"
puente_flat: "TRAZA_la-arquitectura-real-hay-dos-mecanismos_S20260618.R3_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: "NONE"
fase_proyecto: "operations"
tipo_semantico: "design"
summary_one_line: "EPISODIO 3 — MNEMO Pipeline: La arquitectura real: hay DOS mecanismos de escritura, de ed"
source_type: "claude_code"
trust_boundary: "internal"
created_at: "2026-06-18T19:58:30.497604+00:00"
relectura_tagged: false
forgejo_commit_sha: "pending"
---
Tienes razón, John — y lo confirmé en el código vivo, no de palabra. Tu intuición dio justo en el clavo. Aquí está la evidencia.
## La arquitectura real: hay DOS mecanismos de escritura, de edades distintas
**La prueba (código vivo `ember-ecosystem/crisol/crisol_run.py`):**
- Línea 203: `ep["store_status"] = {"qdrant": "PENDING", "pg": "PENDING", "neo4j": "PENDING"}` — crisol rastrea **exactamente 3 stores**. **No hay una sola escritura a Forgejo ni Nextcloud en crisol.**
- F3 escribe Qdrant, F5 escribe PostgreSQL (`INSERT INTO episode`) + Neo4j (cypher MERGE). Punto. Eso es todo lo que crisol toca directo.
**La prueba (dispatcher `outbox_dispatcher.py`):**
- Líneas 59-62: `WORKERS = {qdrant, neo4j, nextcloud, forgejo}` — **4 workers**, con sus archivos `forgejo_worker.py` + `nextcloud_worker.py` (fechados **13-abr**).
- `outbox_worker_base.py:287`: *"Not all stores done yet — set 'partial'"* → la fila queda `partial` hasta que **los 4** destinos estén hechos. Como el dispatcher está muerto, Nextcloud+Forgejo nunca se completan → 154 filas atascadas en `partial`.
## La respuesta directa a tu pregunta: SÍ, así es la cosa
**crisol (el núcleo que pasa el gate) escribe SOLO a Qdrant + PostgreSQL + Neo4j. Forgejo + Nextcloud cuelgan EXCLUSIVAMENTE del dispatcher** — y el dispatcher está muerto desde el 12-jun. Tu lectura es correcta.
**Matiz sobre "pipeline viejo":** no es un repo separado — viven en el mismo árbol `crisol/`. Lo que es "viejo" es el **mecanismo**: el outbox+dispatcher es el **diseño original de abril** (trigger → outbox → 4 workers replican a todo). Después crisol ganó **escrituras directas inline** para los 3 stores del núcleo (para que el retrieval no espere al dispatcher). Esa evolución hizo el retrieval robusto, pero dejó **2 stores doble-servidos** (Qdrant+Neo4j, que sobreviven por la vía inline) y **2 stores servidos por una sola vía** (Nextcloud+Forgejo, que dependen del dispatcher original). Cuando el dispatcher murió, el retrieval ni se enteró → por eso pasó **6 días desapercibido**. Es un clásico *split-brain de escritura*: la pata que puede morir en silencio es justo la que no rompe nada visible.
## 📖 Prólogo — la decisión que esto abre (es tuya, John)