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:
parent
7136f72fc5
commit
d7c6a9beda
1 changed files with 37 additions and 0 deletions
|
|
@ -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)
|
||||
Loading…
Reference in a new issue