feat(episode): TRAZA_entonces-qu-s-est-mal-aqu-no-la-asimetra_S20260618.R5_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD
Skill: TESSERA | Type: troubleshooting Summary: EPISODIO 5 — MNEMO Pipeline: Entonces, ¿qué SÍ está mal aquí? (no la asimetría)
This commit is contained in:
parent
ea2cac5425
commit
307a15192f
1 changed files with 31 additions and 0 deletions
|
|
@ -0,0 +1,31 @@
|
|||
---
|
||||
episode_id: "7b330c22-a0f8-4f64-9fd4-fffca5bc95d1"
|
||||
puente_flat: "TRAZA_entonces-qu-s-est-mal-aqu-no-la-asimetra_S20260618.R5_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: "TESSERA"
|
||||
fase_proyecto: "operations"
|
||||
tipo_semantico: "troubleshooting"
|
||||
summary_one_line: "EPISODIO 5 — MNEMO Pipeline: Entonces, ¿qué SÍ está mal aquí? (no la asimetría)"
|
||||
source_type: "claude_code"
|
||||
trust_boundary: "internal"
|
||||
created_at: "2026-06-18T21:55:49.090050+00:00"
|
||||
relectura_tagged: false
|
||||
forgejo_commit_sha: "pending"
|
||||
---
|
||||
|
||||
1. **El rate-limit mata el batch.** Forgejo permite **1 push cada 5 s**. crisol ingiere en lotes de hasta 50 episodios. Inline, eso son **50 × 5 s = 250 s** de pushes git bloqueando cada corrida — el retrieval esperaría minutos por una réplica que nadie lee.
|
||||
2. **Un fallo remoto frenaría la ingesta.** Si Forgejo o Nextcloud está caído (red, auth, disco), una escritura inline **fallaría o colgaría toda la ingesta** → el retrieval dejaría de acumular memoria por culpa de un respaldo. Justo lo que NO quieres.
|
||||
3. **El insight profundo:** si quisieras hacerlo inline *sin* bloquear, tendrías que escribir Forgejo/Nextcloud "fire-and-forget" — pero entonces, si fallan, **pierdes el episodio** (no hay reintento). Para no perderlo necesitas persistir el pendiente + reintentar… que es **exactamente lo que la tabla `episode_outbox` + el dispatcher YA hacen** (entrega *at-least-once* con retry). O sea: "hacerlo igual inline" o **bloquea el núcleo**, o **te obliga a reconstruir el outbox dentro de crisol**. El patrón no es arbitrario — es la forma mínima correcta de hacer efectos-secundarios asíncronos confiables.
|
||||
|
||||
## Entonces, ¿qué SÍ está mal aquí? (no la asimetría)
|
||||
|
||||
La asimetría es **diseño correcto**. Lo que está mal es otra cosa:
|
||||
- 🔴 **El dispatcher muere en silencio** (sin alarma de liveness) → 6 días sin que nadie lo note. Ese es el defecto operativo real.
|
||||
- 🟡 **Doble-write redundante:** el dispatcher también tiene workers de Qdrant+Neo4j (los 4), así que esos 2 se escriben **dos veces** (crisol inline + worker). Eso SÍ es deuda — el outbox original fanout-a-4, luego crisol ganó las 3 inline, y nadie quitó Qdrant+Neo4j del dispatcher. Probable fuente de los "gemelos" de Neo4j.
|
||||
|
||||
**Implicación para tu decisión de antes:** por esto la opción correcta es **A (revivir + monitorear el dispatcher)**, no B (meter todo inline). Meter Forgejo+Nextcloud inline sería un **paso atrás** — reintroduce el acoplamiento que el patrón outbox existe justo para evitar. Lo único que vale revisar de B es **podar el doble-write** (que el dispatcher maneje SOLO Forgejo+Nextcloud, ya que Qdrant+Neo4j los cubre crisol).
|
||||
|
||||
—
|
||||
Loading…
Reference in a new issue