Proyectos / Agent Policy State Machine

Agent Policy State Machine

Máquina de estados de autorización ejecutable, con comprobaciones de seguridad en un modelo TLA+ finito, compensación y reproducción del grafo real de TLC.

Autor: · Python 3.14.7, Java 17.0.17 y TLC 2.19 · Licencia: MIT

Ficha publicada: · Ficha actualizada:

Repositorio · Metadatos de la medición con TLC · Release v0.1.0

Problema y utilidad para agentes

Un agente puede planificar una acción sin tener permiso para ejecutarla. Los reintentos, los resultados tardíos y los fallos de compensación también necesitan una política explícita antes de producir efectos.

Un entorno de ejecución serializado aplica la aprobación y la contabilidad de efectos para una operación sintética, mientras un modelo formal separado expone las transiciones inválidas.

Arquitectura

  1. Restringir la operación. Una capacidad opaca de aprobación habilita un único efecto unitario en memoria. Los identificadores de eventos aceptados se deduplican dentro de la misma sección crítica.
  2. Explorar el modelo finito. TLC comprueba tipos, autorización, contabilidad, reversión y estabilidad de los estados terminales en nueve símbolos de eventos y nueve fases.
  3. Comparar el modelo y la ejecución. Un analizador del grafo reproduce un camino representativo hacia cada nodo y cada arista saliente, y compara el resultado con el estado exportado por el modelo.

Qué demuestra

  • Exploración real con TLC, una transición de autorización deliberadamente defectuosa y su contraejemplo conservado.
  • Coincidencia en las 981 aristas exportadas y una prueba de regresión ejecutable que bloquea el efecto no autorizado.
  • Veintidós pruebas de ejecución y conformidad, incluidas concurrencia, conflictos, capacidades inválidas y recuperación de la compensación.

Resultados publicados

Las comprobaciones locales registradas usaron un Intel Xeon W-3223, 48 GiB de RAM y macOS 26.7.1 el 9 de noviembre de 2026.

TLC se ejecutó con un trabajador, un procesador activo y un máximo de 512 MiB de memoria dinámica. Exploró todo el grafo finito correcto sin un límite de profundidad. La configuración defectuosa permitió ejecutar antes de aprobar y se detuvo al detectar una violación de autorización.

Comprobación del modelo finito

README y reproducción ·
MediciónResultado observado
Estados generados / distintos982 / 109
Profundidad de búsqueda / estados pendientes8 / 0
Código de salida del modelo defectuoso12
Tiempo transcurrido con TLC: modelo correcto / defectuoso1.085 / 1.085 s

Conformidad del entorno de ejecución

Metadatos de la reproducción contra el entorno de ejecución ·
MediciónResultado observado
Aristas del grafo coincidentes981 / 981
Contraejemplo de ejecución no autorizadaBloqueado
Tiempo transcurrido en la reproducción0.138 s

Estas observaciones demuestran propiedades de seguridad dentro de la abstracción finita y coincidencia de aristas desde historiales representativos. No prueban el refinamiento para todos los historiales de ejecución, propiedades de progreso ni corrección sin límites.

Los tiempos incluyen el inicio de la JVM o de Python y son observaciones individuales. No se midieron el máximo de memoria residente, la energía, el costo ni la variabilidad del rendimiento.

El repositorio conserva por separado el error inicial de sintaxis y el fallo del analizador del grafo, sin contarlos como comprobaciones exitosas. README y reproducción.

Reproducir

Usá uv 0.8.23 y Python 3.14.7. El comando de preparación crea un entorno dentro del repositorio; uv debe poder encontrar el intérprete indicado. Instalá primero esa versión de Python si no está disponible en el catálogo de descargas de uv. La preparación inicial y las dependencias de pruebas pueden necesitar acceso a Internet. La reproducción solo usa la biblioteca estándar. Las pruebas de regresión usan el archivo de dependencias congelado de uv. Java y el JAR de TLC, descargado por separado, solo son necesarios para una nueva comprobación del modelo.

Después de preparar el entorno, el comando de reproducción funciona sin conexión. El comando de reproducción verifica hashes y reproduce la evidencia guardada sin Java ni una nueva exploración del modelo. El segundo bloque ejecuta las pruebas pequeñas de regresión. Para nuevas mediciones de TLC, seguí el README y usá benchmark_lock.py en el equipo original o una ejecución exclusiva en otro equipo.

Verificar la evidencia guardada

git clone https://github.com/lucioduran/agent-policy-state-machine.git
cd agent-policy-state-machine
git checkout bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70
UV_CACHE_DIR="$PWD/.tools/uv-cache" UV_PYTHON_INSTALL_DIR="$PWD/.tools/python" uv venv --python 3.14.7 .venv
PYTHONPATH=src .venv/bin/python scripts/replay.py

Ejecutar las pruebas de regresión

UV_CACHE_DIR="$PWD/.tools/uv-cache" UV_PYTHON_INSTALL_DIR="$PWD/.tools/python" uv sync --frozen --python 3.14.7
.venv/bin/pytest -q

Alcance y límites

  • El modelo cubre una operación y un identificador fijo por símbolo de evento. Los conflictos con identificadores nuevos y los hilos reales se prueban fuera de la abstracción formal.
  • El efecto y su compensación son cambios sintéticos en un registro en memoria. No hay recuperación tras fallos, adaptadores para herramientas externas, registro durable ni garantía distribuida de ejecución única.
  • El código de la aplicación debe ser confiable y mantener privada la capacidad de aprobación. La interfaz de línea de comandos proporciona su propia capacidad y es una demostración, no un servicio de autenticación.
  • La compensación puede quedar sin resolver. No se garantiza equidad ni progreso, y la consistencia de los hashes guardados no constituye una certificación independiente de las mediciones.

Fuentes y revisión

La comprobación del modelo usó el commit 9a8273d57ecf691f5dc36207f2ce4877875f1dd4 y comenzó en la fecha del informe indicada abajo. La reproducción contra el entorno de ejecución usó el commit 30aa48bfe943dc84b8ae2cdf8fde74e138046f13 a las 2026-11-09T20:20:14.821954+00:00. La release final agrega pruebas y documentación; su manifiesto vincula los archivos medidos del modelo y del entorno de ejecución con la revisión publicada.