feat(episode): TRAZA_plan-de-revive-3-fases_S20260712.R1_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD

Skill: NONE | Type: troubleshooting
Summary: EPISODIO 1 — MNEMO_PRE_DIGEST: Plan de revive (3 fases)
This commit is contained in:
Ember 2026-07-12 21:42:12 +00:00
parent d69133b808
commit 8ce5b83ef4

View file

@ -0,0 +1,43 @@
---
episode_id: "861b42fb-3132-4461-91e4-bb3ace6aeaf2"
puente_flat: "TRAZA_plan-de-revive-3-fases_S20260712.R1_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD"
session_code: "S20260712.PIPELINE_PG_HYDE_FIX"
acto_dialogico: "informar"
actor_flujo: "multi_actor"
criticidad_aegis: "low"
skill_dominante: "NONE"
fase_proyecto: "operations"
tipo_semantico: "troubleshooting"
summary_one_line: "EPISODIO 1 — MNEMO_PRE_DIGEST: Plan de revive (3 fases)"
source_type: "claude_code"
trust_boundary: "internal"
created_at: "2026-07-12T21:42:00.058657+00:00"
relectura_tagged: false
forgejo_commit_sha: "pending"
---
**Causa raíz cerrada** — y es un patrón que ya conoces de hoy. El código de proyección episodio→Neo4j **sí está vivo** en `crisol_run.py` F5 (líneas 977-1031), pero:
**El diagnóstico:** el nodo Episode se **llavea por `qdrant_id`**, y hay un guard (B-NEW21) que **SALTA la escritura a Neo4j si `qdrant_id` viene vacío**. Los backups `crisol_run.py.bak.neo4jfix_20260617` y `.xsfix_20260618` coinciden **exactamente** con la última fecha del grafo. Desde entonces, los episodios llegan a PG+Qdrant pero caen en el `Neo4j SKIP` → grafo congelado. Es el **mismo patrón** del PG congelado de hoy: *el pipeline se auto-reporta sano mientras una rama está muerta en silencio*.
**Por qué las entidades sí están frescas pero los episodios no:** son **dos write-paths independientes** — el `pg_lexicon_to_neo4j_sync.py` (cron cada 6h, 14.803 ok / 0 err) mantiene vivos Alias/Entity; la proyección de episodios (F5 en crisol) está rota. Uno sano, otro muerto.
## Plan de revive (3 fases)
| Fase | Qué | Estado |
|---|---|---|
| **0 · Diagnóstico** | Causa raíz localizada al guard `qdrant_id` de F5 | ✅ **hoy** |
| **1 · Write-path (frescura)** | (a) step-through de por qué `qdrant_id` queda vacío → fix del guard/asignación · (b) backfill ~197 episodios PG→Neo4j · (c) verificar proyección fresca en el próximo ingest | ⏳ **tu go** (escribe producción) |
| **2 · Read-path (peso)** | Dar señal al canal grafo en la fusión (features multi-hop) + re-tunear recall vs baseline 0.60/0.85 | ⏳ medido, tras Fase 1 |
- **Hice:** diagnostiqué la causa raíz del grafo fósil **sin mutar producción** (solo lectura). No es "falta el job" — es un **guard `qdrant_id` en crisol F5 que salta la escritura a Neo4j desde el 18-19 jun**, mismo patrón "sano-pero-roto" del PG de hoy. Y localicé el código exacto (`crisol_run.py:977-1031`).
- **Falta:** ejecutar la **Fase 1** — pero es **cirugía de pipeline en producción** (editar `crisol_run.py` + escribir 197 nodos a Neo4j). No la meto en la cola de este turno ya gigante.
- **Mi consejo:** Fase 1 como **sprint FORENSE dedicado con contexto fresco** — es exactamente el dominio del subagente `mnemo-keeper`. Elige cómo:
- 🟢 **A** *(recomendado)* — sprint nuevo/fresco para Fase 1 (yo o `mnemo-keeper`), con tu go explícito para las escrituras a producción.
- 🟡 **B** — sigo **ahora**, con cuidado: primero el step-through de `qdrant_id` (read-only) y te traigo el fix exacto de `crisol_run.py` **antes** de tocar producción.
- ⚪ **C** — cierras hoy; dejamos Fase 1 anclada en la PILA + hago el commit triple-remoto del eje B.
- **Recordatorio honesto:** el eje B (self-awareness ve los stores) sí quedó **hecho y verificado** este turno — eso ya no se pierde. La próxima vez que corra `reality_check`, el grafo congelado grita DRIFT solo.
⛽ 🟢 GREEN ~780K | Fase 0 revive ✅ · Fase 1 esperando tu go
Dime cómo arrancamos la Fase 1 (🟢 A sprint fresco/`mnemo-keeper` · 🟡 B sigo ahora con el step-through read-only · ⚪ C cierras + commit del eje B), John. 🔥