feat(episode): TRAZA_qu-pas-en-una-frase_S20260618.R4_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD

Skill: FORJA | Type: troubleshooting
Summary: EPISODIO 4 — MNEMO Pipeline: Qué pasó, en una frase
This commit is contained in:
Ember 2026-06-18 16:51:29 +00:00
parent e96254f020
commit 83fd264299

View file

@ -0,0 +1,57 @@
---
episode_id: "85443496-76ae-4134-be50-0f7fc4f28ef3"
puente_flat: "TRAZA_qu-pas-en-una-frase_S20260618.R4_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: "FORJA"
fase_proyecto: "operations"
tipo_semantico: "troubleshooting"
summary_one_line: "EPISODIO 4 — MNEMO Pipeline: Qué pasó, en una frase"
source_type: "claude_code"
trust_boundary: "internal"
created_at: "2026-06-18T16:46:02.921592+00:00"
relectura_tagged: false
forgejo_commit_sha: "pending"
---
✅ **Worker forgejo ARREGLADO y verificado** — diagnóstico FORENSE + fix RELOJERO completos.
📄 Outputs del panel (D-DEBUG-L3): [CONSEJO](docs/CONSEJO_S20260618_ember_podemos_areglar_el_worker_forgejo.md) · [DECISION](docs/DECISION_S20260618_ember_podemos_areglar_el_worker_forgejo.md) — PROBATOR verdict **PASSES**.
## Qué pasó, en una frase
El proceso `outbox_dispatcher.py` arrancó el **Jun 12 19:24** con el password `plex` viejo en memoria; el password se rotó el **Jun 16** y el `.env` del worker se actualizó con el nuevo, **pero el proceso nunca se reinició** → siguió usando el viejo → `password authentication failed` durante ~2 días.
## FORENSE — cómo lo confirmé (no asumí)
| Evidencia | Resultado |
|---|---|
| `ps -o lstart` del proceso | `Fri Jun 12 19:24` (pre-rotación) |
| `.env` PG_DSN ¿autentica? | **`ENV_DSN_CONNECT: PASS`** (el .env ya tiene el password bueno) |
| dispatcher.log | 973MB de retry-loop con `authentication failed` |
| Hipótesis SCIENTIA | H1 stale-process ✅ · H2/H3/H4 falsadas |
## RELOJERO — fix mínimo + verificación triple
**Fix:** `outbox_service.sh restart` (= `systemctl --user restart ember-outbox`). Cero cambio de código, cero edición de secreto, reversible.
| Capa verificación | Resultado |
|---|---|
| A — proceso | nuevo PID 2192550, `Running`, unidad única |
| B — log post-restart | **32 commits `outbox.forgejo Committed → <hash>` en 3 min · 0 auth-fail** |
| C — backlog | `episode_outbox` pending 125 → partial 120 + processing 9 (drenando, ~10 min para completar los 125) |
La réplica a Forgejo (y de paso neo4j + nextcloud, que compartían el mismo proceso) **está viva y drenando el backlog de 19h**.
## Lección sistémica (para no repetirlo)
Un proceso long-running **no recoge un secreto rotado hasta reiniciarse**. Toda rotación de secreto debe incluir "restart de consumidores vivos" — este bug existió 2 días solo por esa omisión.
### 📍 PARA JOHN — R36
- **Hice:** FORENSE → root cause (proceso stale con password viejo, .env ya correcto) → RELOJERO fix (restart) → verificado (32 commits forgejo, 0 auth-fail, backlog drenando). CONSEJO + DECISION + PROBATOR PASSES entregados.
- **Falta:** Nada del fix. Residuales de higiene: rotar el `dispatcher.log` de 973MB; commitear los 3 docs nuevos a los remotos.
- **Mi consejo:** El worker está arreglado y la réplica drenando — puedes cerrar. Lo único que vale la pena rematar pronto es **truncar/rotar el log de 973MB** (riesgo de disco).
- **Para avanzar, elige:**
- 🟢 **A** *(recomendado)* — Cerrar: forgejo arreglado y verificado.
- 🟡 **B** — Rotar el `dispatcher.log` (973MB) + commitear los docs a los 3 remotos.
- ⚪ **C** — Otra cosa (limpiar scripts capa2_*, drenar los 54 LOOP_WRITE, etc.).
📌 PILA-PENDIENTES (R36): 🟡 `dispatcher.log` 973MB rotar · 🟡 commitear 3 docs (CONSEJO/DECISION/VERIFICACION) · 🟡 54 LOOP_WRITE local · ✅ worker forgejo arreglado+verificado