Once pasos ejecutan la operación. Solo algunos de esos pasos quedan escritos en la auditoría.
Imagina que le pides al mismo sistema que ejecute una acción siete veces, y cada vez la petición se detiene en un punto distinto: argumentos inválidos, permiso denegado, un límite de uso agotado, una confirmación que nunca llega. Cada camino deja un rastro distinto — y no todos dejan el mismo rastro. Eso es lo que vas a recorrer acá, ya con su nombre técnico: el plan de invocación real de ToolRegistry::call(), paso por paso, incluidas las reglas que hoy no pueden dispararse.
Radiografía del runtime
El recorrido de once pasos es una buena entrada. La implementación real agrega límites que importan para seguridad, costos, confirmación e intercepción.
Selecciona una ruta
La cobertura de auditoría cambia según el punto de retorno.
| Salida | Callback | Evidencia de auditoría |
|---|---|---|
| Tool inexistente | No | sin log explícito |
| Args inválidos | No | validation failure |
| Policy denied | No | auth failure |
| Plan / confirmación | No | sin log explícito |
| Cache short-circuit | No | tool.executed |
| Veto puro | No | hueco conocido |
| Callback / throw | Sí | executed / failed |
| Paso | Rol | Presencia | Fuente |
|---|---|---|---|
| Resolver | Guardia | Activo | búsqueda en el registry |
| Validar | Guardia | Activo | el tool declara inputSchema |
| Acotar | Transformación | Omitido | el tool no declara clamps |
| Autorizar | Guardia | Activo | canal 'web': require_auth=true, allow_all=false; tool sin scopes declarados; DB rules: skipped (no provider) |
| Rate limit | Guardia | Omitido | wiring del host: rateLimiter ausente; costo mutating?5:1 (mutating=false → costo 1) |
| Modo plan | Bifurcación | Condicional | dispara si ctx.mode es 'plan'; valor actual: execute |
| Confirmar | Bifurcación | Dormido | ni tool.requiresConfirmation ni la política del canal exigen confirmación para este tool |
| Emitir executing | Gancho | Omitido | wiring del host: dispatcher ausente (ancla + cache/veto) |
| Ejecutar | Ejecución | Activo | callback; se inyecta _ctx |
| Contener excepción | Límite | Activo | envuelve execute; \Throwable → INTERNAL_ERROR |
| Auditar | Resultado | Activo | audita: validate-fail, authz-fail, rate-limit, cache-hit, execute-éxito, execute-fallo; NO audita: resolve-miss, plan-mode, confirm, veto |
- Dormido — la regla existe pero no puede dispararse
- Omitido — el subsistema no está conectado
La garantía se lee por rama
“Todo se audita” no describe hoy todas las salidas tempranas. Este artifact hace visibles tanto las garantías implementadas como los huecos.
Evidencia y alcance
getmilpa-tool-runtime/src/ToolRegistry.php:348-570 · redacción en ToolAuditLogger.php:45-57,204-232.