El lenguaje con el que los dueños escriben reglas de negocio en su propio vocabulario, los Operantes ejecutan decisiones determinísticas sin variabilidad ni costo de tokens, y los auditores verifican accountability criptográfica. :contentReference[oaicite:0]{index=0}
Operante: porque opera. No asiste. No recomienda. Ejecuta reglas firmadas, deja trazabilidad, y sabe cuándo frenar. :contentReference[oaicite:1]{index=1}
Determinístico: misma entrada, misma regla, misma decisión, siempre. El dueño firma la política, el Operante ejecuta la regla, la evidence queda registrada. Sin interpretación, sin variabilidad, sin sorpresas. :contentReference[oaicite:2]{index=2}
grammar → parser → compiler → evaluator → guardrail → signer → versioning
| Componente | Función | Sin esto, qué falla |
|---|---|---|
| grammar | Define qué es válido: 3_dias, $15000, exists(factura: ...) |
El parser no sabe qué aceptar |
| parser | Lee .pol y construye AST |
Texto no se convierte en árbol ejecutable |
| compiler | Optimiza AST: ordena prioridades, pre-calcula paths | Evaluación lenta, redundante |
| evaluator | Recorre árbol compilado contra datos reales | No hay decisión |
| guardrail | Valida datos antes de evaluar, decisión antes de ejecutar | Garbage in, garbage out firmado |
| signer | Firma cada decisión con Ed25519 | No hay accountability criptográfica |
| versioning | Versiona políticas y claves, permite rollback | No sabés qué regla aplicó ni cuándo |
| Quién | Qué Firma | Por Qué |
|---|---|---|
| Dueño | La política .pol |
"Esta regla es mía, la vi, la aprobé" |
| Operante | Cada decisión individual | "Ejecuté exactamente esta regla contra estos datos" |
| Supervisor | Cada excepción aprobada | "Autoricé esta salida de la norma" |
Si una firma falla, todo frena.
Tamper-evident: modificás un byte, la verificación falla.
Input real (WhatsApp/mail/CSV) ↓ Operante limpia y estructura ↓ LLM propone acción ("marco como pagado") ↓ OPDSL evalúa: ¿está permitido? ¿quién aprueba? ↓ Guardrail valida datos ↓ Executor actúa: ERP, notificación, ticket ↓ Audit trail firmado
El LLM propone con inteligencia. OPDSL valida con reglas duras.
Juntos: inteligencia controlada.
ANTES:
Factura fac_4821, Rizobacter, $15.000, estado: pending
Input:
Transferencia trf_20260502_001, $15.000, referencia "Pago factura 4821"
Proceso:
- Operante limpia CSV del banco
- Guardrail valida: monto numérico ✓, fecha ISO ✓, facturas no vacías ✓
- Evaluator:
exists(factura: factura.monto == 15000.0)→ match exacto - Decision:
ALLOW,rule_id: match-exacto - Executor: marca factura como
paid, crea registro de pago - Signer: firma decisión con Ed25519
DESPUÉS:
Factura fac_4821, estado: paid, pago_id: pay_xxx, audit_id: xxx, firma: ✓
Tiempo total:
0.018 ms evaluación + 5 ms escritura = 5.018 ms
| Input Corrupto | Guardrail Detecta | Acción |
|---|---|---|
| monto: "QUINCE MIL" | Tipo: no numérico | INVALID, frena |
| fecha: "02/05/2026" | Fecha: no ISO | INVALID, frena |
| monto: -500 | Rango: negativo | INVALID, frena |
| facturas: [] | Lista: vacía | INVALID, frena |
Garbage never reaches the engine.
| Modo | Latencia | Throughput |
|---|---|---|
| Evaluación pura | 14.9–30.7 µs | 34,000–67,000/seg |
| + SHA-256 audit | 39.2–58.2 µs | 17,000–25,000/seg |
| + Ed25519 + JSONL | 235–351 µs | 2,800–4,200/seg |
| Hora | Decisión | Alternativa Rechazada | Razón |
|---|---|---|---|
| 18:35 | Track A, Policy Engine | Computer Use, Memoria bi-temporal | Más focalizado, más defendible |
| 18:45 | DSL genérico de negocio | Solo agro | Motor reusable |
| 19:00 | Grammar PEG propio | policy.yaml | Validación en parse time |
| 19:15 | Evaluador offline | LLM evalúa reglas | Determinístico, rápido, barato |
| 20:04 | Input Guardrail | Sin validación | Garbage never reaches engine |
| 20:15 | Executor con mock ERP | Solo decisión | Ejecuta, no asiste |
| 20:30 | Ed25519 firmas | SHA-256 | Auditoría fuerte |
| 20:45 | Scope: 5 políticas | PolicyForge | Foco en 8h |
| Falta | Por qué no está | Cuándo se agrega |
|---|---|---|
| ERP real (Subio, Tango, AFIP) | Frágil, debug costoso | Integración futura |
| LLM en loop | Fuera de gobernanza | Módulo adicional |
| Dashboard visual | No necesario en demo | v2 |
| 10+ verticales | Scope limitado | Escalado |
| Fault injection avanzado | Scope acotado | Hardening |
"No construimos el Operante completo. Construimos la pieza de gobernanza que lo hace confiable.
Resolvimos el cerebro que dice: 'podés', 'no podés', 'pedí permiso'.
Sin esto, ejecuta a ciegas. Con esto, ejecuta con contrato."
| Métrica | Valor |
|---|---|
| Tests | 34/34 |
| Evaluación | 14.9–30.7 µs |
| Throughput | 34k–67k/s |
| Firmas | Ed25519 |
| Demo | 3 casos + 4 fallas |
| Código | Python, liviano |