feat(episode): TRAZA_qu-es-oparego_S20260518.R2_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD
Skill: NONE | Type: troubleshooting Summary: EPISODIO 2 — BLINDADAS: Qué es OPA/Rego
This commit is contained in:
parent
a9b0aa8ddd
commit
591b540795
1 changed files with 33 additions and 0 deletions
|
|
@ -0,0 +1,33 @@
|
|||
---
|
||||
episode_id: "3cf640cf-5990-48cc-9e75-2fba08758f6b"
|
||||
puente_flat: "TRAZA_qu-es-oparego_S20260518.R2_XX.ops.2.hot_inf.in.cc.es.000.MGQ_J.PMCFK_E.SGNFD"
|
||||
session_code: "S20260518.PIPELINE_FIXES"
|
||||
acto_dialogico: "informar"
|
||||
actor_flujo: "multi_actor"
|
||||
criticidad_aegis: "low"
|
||||
skill_dominante: "NONE"
|
||||
fase_proyecto: "operations"
|
||||
tipo_semantico: "troubleshooting"
|
||||
summary_one_line: "EPISODIO 2 — BLINDADAS: Qué es OPA/Rego"
|
||||
source_type: "claude_code"
|
||||
trust_boundary: "internal"
|
||||
created_at: "2026-05-19T00:08:14.808352+00:00"
|
||||
relectura_tagged: false
|
||||
forgejo_commit_sha: "pending"
|
||||
---
|
||||
|
||||
Con gusto, John. "Háblame más" — te lo explico en el chat, que es lo que pediste; si al final quieres que quede como nota persistente para un futuro D-ARCH, te lo ofrezco. Esto es conversación, sin tocar archivos.
|
||||
|
||||
## Qué es OPA/Rego
|
||||
|
||||
**OPA** (Open Policy Agent) es un *motor de políticas* — un programa cuyo único trabajo es responder una pregunta: *"dado este contexto, ¿se permite esta acción?"*. No ejecuta la acción; solo emite un veredicto `allow`/`deny`. **Rego** es el lenguaje en que se escriben esas políticas. OPA es un proyecto **CNCF graduated** (Cloud Native Computing Foundation — la misma fundación de Kubernetes; "graduated" es su nivel de madurez más alto), así que no es experimental: Kubernetes lo usa en producción a escala masiva para decidir qué se admite en un clúster.
|
||||
|
||||
La distinción que importa es **declarativo vs. imperativo**. Un hook de Python hoy es *imperativo*: una secuencia de pasos — "si el comando contiene `push --force`, entonces bloquea". Rego es *declarativo*: describes el **estado de las reglas** ("force-push a main está prohibido") y el motor deduce el veredicto. La regla deja de ser código que corre y pasa a ser **un dato que se evalúa**.
|
||||
|
||||
## El problema real que ataca en EMBER
|
||||
|
||||
Hoy, una política de EMBER — pongamos "Ember no hace `git push --force` a main", o "antes de un Write a un archivo D3 hay que verificar el lock" — vive **dentro** de un hook de Python. La *política* (la regla: qué se permite) está enredada con el *mecanismo* (el código que la chequea, la registra, emite el mensaje de error).
|
||||
|
||||
`★ Insight ─────────────────────────────────────`
|
||||
El patrón canónico aquí es **PDP/PEP**: *Policy Decision Point* (quién decide) vs. *Policy Enforcement Point* (quién hace cumplir). EMBER hoy los tiene fundidos en cada hook. OPA los separa: OPA es el PDP (decide), el hook queda solo como PEP (aplica el veredicto). Esa separación es exactamente la diferencia entre una *constitución* y un *policía*.
|
||||
`─────────────────────────────────────────────────`
|
||||
Loading…
Reference in a new issue