feat(episode): TRAZA_la-historia-parity-result-ms-cara-de-l_S20260619.R4_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD

Skill: NONE | Type: troubleshooting
Summary: EPISODIO 4 — PostgreSQL: 📖 La historia — parity resultó más cara de lo que "B" i
This commit is contained in:
Ember 2026-06-20 03:01:59 +00:00
parent 40df6527f5
commit cedd394f45

View file

@ -0,0 +1,40 @@
---
episode_id: "a6f03787-3266-4599-bcdb-7182420c46ce"
puente_flat: "TRAZA_la-historia-parity-result-ms-cara-de-l_S20260619.R4_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD"
session_code: "S20260619.WIKI_MEMORIA_SCRUB_AVISO"
acto_dialogico: "informar"
actor_flujo: "multi_actor"
criticidad_aegis: "low"
skill_dominante: "NONE"
fase_proyecto: "operations"
tipo_semantico: "troubleshooting"
summary_one_line: "EPISODIO 4 — PostgreSQL: 📖 La historia — parity resultó más cara de lo que "B" implic"
source_type: "claude_code"
trust_boundary: "internal"
created_at: "2026-06-20T03:01:49.986770+00:00"
relectura_tagged: false
forgejo_commit_sha: "pending"
---
Verify-first me frenó antes de un error costoso. `neo4j_mentions_reprocess.py` solo re-procesa **aristas** `:MENTIONS` de nodos existentes — NO crea nodos `:Episode` faltantes. **No existe re-drive targeted seguro.** El único mecanismo es re-ingestar el `.md` fuente por crisol (inbox-driven), con efectos colaterales: cadena BLC (append) + re-disparo outbox + Neo4j solo escribible por crisol/cypher-shell. **"Parity exacta" resultó un re-ingest build con riesgo, no una cura rápida** — y eso cambia materialmente lo que aprobaste como "B".
Antes de un write load-bearing hard-to-reverse, te traslado el cuadro completo (no ejecuto a ciegas algo más riesgoso de lo que sonaba):
### 📖 La historia — parity resultó más cara de lo que "B" implicaba
**Reframe.** No es "marcar un par de filas". Es **re-ingestar 27 episodios** porque el contenido NO vive en PostgreSQL (es metadata-only) — hay que leer el `.md` fuente y re-correr crisol, tocando la cadena BLC y el outbox.
**De dónde viene.** Elegiste B → el FORENSE reveló: crisol es inbox-driven, contenido fuera de PostgreSQL, Neo4j solo escribible por crisol, y el único re-drive es re-ingest completo. Las idempotencias (sha-guard Qdrant, MERGE Neo4j, ON CONFLICT PostgreSQL) hacen los **stores** seguros, pero la **cadena BLC podría apilar entradas duplicadas** y el outbox re-escribiría Nextcloud/Forgejo.
**Consecuencias por camino:**
- 🔴 **Re-ingest completo (parity):** logra parity, pero riesgo BLC/outbox + es un build cuidadoso con dry-run sobre el pipeline crítico (lo que pediste no tocar a fatiga). Hard-to-reverse si la BLC se ensucia.
- 🟢 **Aceptar + monitor:** el drift es **benigno** — datos NO perdidos (PostgreSQL metadata + Nextcloud/Forgejo .md completos; Qdrant 0 basura). Impacto real: solo 9 episodios no recuperables por *semántica* (sí por exact/PostgreSQL). El reconciliador queda como monitor C2. Cero riesgo.
**Mi inclinación, razonada (cambié de postura con la evidencia):** **aceptar + monitor.** Forzar parity exacta re-ingestando 27 episodios arriesga la cadena BLC por un drift benigno, al final de una sesión larga — viola tu propia regla de prudencia ("no tocar el pipeline a fatiga"). El reconciliador YA dio la visibilidad que C2 buscaba. **Lo que cambiaría mi voto:** si parity 3-store exacta es un *invariante duro* que necesitas, lo hago — pero como sprint dedicado con dry-run, no ahora.
**La pregunta esencial —solo tú:** *¿la parity exacta de los 3 stores es un invariante requerido (justifica un re-ingest build con riesgo BLC), o "PostgreSQL canónico completo + Qdrant limpio + drift benigno ahora monitorizable" es suficiente?*
### 📍 PARA JOHN — R19
- **Hice:** FORENSE del mecanismo de cura → descubrí que parity = re-ingest build riesgoso (BLC/outbox), no hay re-drive targeted seguro. Te freno antes de escribir.
- **Mi consejo:** 🟢 **C** aceptar + dejar el reconciliador como monitor (prudente, drift benigno) · 🔴 **B'** si quieres parity como invariante → lo hago en sprint dedicado con dry-run (no a fatiga).
- **Elige:** 🟢 **C** aceptar+monitor · 🔴 **B'** re-ingest build dedicado (con dry-run, próximo turno fresco).