feat(episode): TRAZA_qu-es-la-comunicacin-entre-instancias-l_S20260831.R1_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD

Skill: NONE | Type: troubleshooting
Summary: EPISODIO 1 — John: 🐝 Qué ES "la comunicación entre instancias" (la anatomía)
This commit is contained in:
Ember 2026-09-12 21:54:44 +00:00
parent 6c690a2d12
commit c0f8a3afe4

View file

@ -0,0 +1,58 @@
---
episode_id: "aeb5025e-baf2-4350-8232-e5fa903e2dd6"
puente_flat: "TRAZA_qu-es-la-comunicacin-entre-instancias-l_S20260831.R1_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD"
session_code: "S20260831.SIDB92171056337"
acto_dialogico: "informar"
actor_flujo: "multi_actor"
criticidad_aegis: "low"
skill_dominante: "NONE"
fase_proyecto: "operations"
tipo_semantico: "troubleshooting"
summary_one_line: "EPISODIO 1 — John: 🐝 Qué ES "la comunicación entre instancias" (la anatomía)"
source_type: "claude_code"
trust_boundary: "internal"
created_at: "2026-09-12T21:54:43.944978+00:00"
relectura_tagged: false
forgejo_commit_sha: "pending"
---
Medido en vivo, ahora mismo:
Con eso aterrizado, te explico todo, John.
—
## 🐝 Qué ES "la comunicación entre instancias" (la anatomía)
Imagina varias abejas (instancias de Claude Code) trabajando en la misma colmena (el repo) a la vez. Para no chocar ni pisarse, se hablan por **cinco canales** — cuatro caseros + uno nativo. Los cuatro caseros son **redundantes a propósito** (si uno falla, los otros cubren), que es justo lo que pediste:
| Canal | Qué es (plastilina) | Mecanismo real |
|---|---|---|
| **1. Presencia** | El cartel "estoy aquí trabajando en X" | `ACTIVO.md` por categoría (`declare_presence`) |
| **2. Reclamos** | "Esta tarea es mía, no la toques" | `TASK_BOARD.md.claimed.json` |
| **3. Cerrojo** | Candado físico en los archivos críticos | `coordination_db.py` (SQLite: `leader_lease` + `file_locks`), cerrojo PF-22 |
| **4. Correo** | Cartas entre abejas | `correo_protocol.py` → carpetas `correos-entre-instancias/` |
| **5. Nativo** (el nuevo) | El panal ve quién respira de verdad | `ListAgents`/`notify_when_idle` del arnés + **transcripts frescos** como fuente de vida |
El **latido** (heartbeat) es lo que mantiene vivo el cerrojo: cada instancia dice "sigo viva" y así el candado sabe si su dueño murió (para liberarlo).
—
## 🔧 Qué se HIZO (la misión panal — 8 arreglos, todos en git)
Cuando empezó este chat, varios de esos canales estaban **rotos en silencio**. Los destapé y arreglé uno por uno:
1. **Sensor de coordinación** (`coord_metrics.py`, T-01) — un termómetro read-only que mide las 4 cifras que viste arriba. Antes no había forma de *medir* la salud de la comunicación; ahora sí.
2. **Latido revivido** (T-05, `stop-enricher.py`) — **llevaba 86 días muerto** por un error (`os` sin importar). Sin latido, el cerrojo no sabía quién vivía. Revivido con una línea.
3. **Parser de presencia arreglado** (T-04) — buscaba el texto exacto `[ACTIVO]` pero las abejas se anuncian como `[ACTIVO_S<fecha>]`; **no veía a nadie**. Ahora ve por prefijo → pasó de 0 a 8 fantasmas detectados (los 8 de hoy).
4. **Relojes en UTC** (T-06) — comparaciones de fecha que mezclaban hora local con UTC, corregidas.
5. **Canal honesto** (T-07) — cuando un envío entre abejas falla (red SSH caída), ahora lo **registra** en vez de fingir éxito o romperse.
6. **Comparativa nativa** (T-02) — medí que las herramientas nativas ven **6-7 instancias** mientras el `leader_lease` casero ve 1-2 (brecha 7×). Prueba dura de que lo nativo es mejor sensor de vida.
7. **Dashboard + arranque con liveness nativa** (T-03, `b8534d84`) — cada arranque ahora imprime `👁️ LIVENESS NATIVA: N vivas vs M vistas → gap`. **La ceguera dejó de estar oculta.**
8. **Piloto sin polling** (T-09) — confirmé que `notify_when_idle` (aviso nativo "ya terminé") funciona sin preguntar en bucle.
Decisión de arquitectura clave: **NO se borró el `leader_lease`** aunque lo nativo sea mejor sensor — porque el cerrojo PF-22 lo necesita para proteger los archivos. "Adoptar nativo" fue *añadir* la vista nativa + reparar el latido, no demoler lo casero.
—
## 📊 Cómo está HOY (lectura honesta del sensor)