feat(episode): TRAZA_por-qu-casbin-va-en-una-hook-y-no-en-149_S20260519.R1_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD

Skill: NONE | Type: troubleshooting
Summary: EPISODIO 1 — BLINDADAS: Por qué Casbin va en una hook y no en 149 — explicación
This commit is contained in:
Ember 2026-05-19 14:08:21 +00:00
parent c271a42ff4
commit e6fc3c3eb4

View file

@ -0,0 +1,48 @@
---
episode_id: "72fb6ff4-f188-4dda-af82-cd41208c5956"
puente_flat: "TRAZA_por-qu-casbin-va-en-una-hook-y-no-en-149_S20260519.R1_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD"
session_code: "S20260519.COMMIT_MASIVO_PRESERVACION"
acto_dialogico: "informar"
actor_flujo: "multi_actor"
criticidad_aegis: "low"
skill_dominante: "NONE"
fase_proyecto: "operations"
tipo_semantico: "troubleshooting"
summary_one_line: "EPISODIO 1 — BLINDADAS: Por qué Casbin va en una hook y no en 149 — explicación de m"
source_type: "claude_code"
trust_boundary: "internal"
created_at: "2026-05-19T14:07:23.134944+00:00"
relectura_tagged: false
forgejo_commit_sha: "pending"
---
John, dos resultados antes de explicarte — y el primero exige honestidad inmediata:
**El skill PLASTILINA no se pudo cargar.** Invoqué el `Skill` tool y devolvió `Unknown skill: anthropic-skills:plastilina`. PLASTILINA está en el catálogo EMBER (skill #48) pero **no** está en el registro de skills cargables de este entorno Claude Code. No te voy a fingir que lo usé. Te explico honrando su *espíritu* — pedagógico, tangible, con la paleta cromática como escala didáctica — sin su andamiaje formal. Si quieres la versión con sus módulos, dime y busco `skills/plastilina/CLAUDE.md` como archivo.
**El `Grep` ancló el dato clave:** de las ~149 hooks, **22 archivos** contienen `permissionDecision` (≈20 hooks reales + 2 de test). Ese campo es la firma de una hook que decide *allow/deny*. Guarda ese número: **~20**, no 149.
# Por qué Casbin va en una hook y no en 149 — explicación de maestro
## 1. Qué es Casbin, en plastilina
Casbin es un **motor de políticas**. Su único oficio: recibe un input y responde **"permitido" o "denegado"** consultando un reglamento escrito (`policies/`).
> 🧱 **Analogía tangible:** Casbin es un **guardia de puerta con un reglamento**. Un guardia solo sirve donde **hay una puerta que controlar**. No pones un guardia frente a la fotocopiadora, ni frente al reloj de pared, ni frente al archivador. Solo en las **puertas**.
La pregunta correcta no es *"¿cuántas hooks?"* — es *"¿cuántas hooks son puertas?"*.
## 2. Las 149 hooks NO son todas puertas — la taxonomía
Una hook es un programita que se dispara ante un evento (antes de un Bash, después de un Write, al arrancar sesión…). Pero hacen **trabajos distintos**. Uso la paleta como gradiente de *"qué tanto encaja Casbin"*:
| Color | Tipo de hook | Qué hace | ¿Casbin? |
|---|---|---|---|
| 🔴 Rojo | **Compuerta rica en reglas** | decide allow/deny con *muchos* patrones | **SÍ — encaja fuerte** |
| 🟠 Naranja | **Compuerta simple** | decide allow/deny con 1-3 reglas | Sí, ganancia media |
| 🟡 Amarillo | **Compuerta trivial** | decide con *una* condición (`if`) | Casbin sería *overkill* |
| 🟢 Verde | **Computación / inyección** | calcula algo e inyecta contexto (self-awareness, alquimia, panel-analítico) | **NO — no decide allow/deny** |
| 🔵 Azul | **Registro / telemetría** | loguea, cuenta, agrega (activity-logger, compass-telemetry) | NO |
| 🟣 Violeta | **Efecto secundario** | regenera mapas, sincroniza servidor, recuerda (bitacora-auto, server-sync, correos) | **NO — totalmente irrelevante** |