{"schemaVersion":1,"id":"https://lucioduran.com/es/projects/agent-policy-state-machine","url":"https://lucioduran.com/es/projects/agent-policy-state-machine","title":"Agent Policy State Machine","description":"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.","language":"es","datePublished":"2026-11-10","dateModified":"2026-11-10","contentFormat":"text/markdown","content":"[Proyectos](<https://lucioduran.com/es/projects>) / Agent Policy State Machine\n\n# Agent Policy State Machine\n\nMá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.\n\nAutor: [Lucio Durán](<https://lucioduran.com/es>) · Python 3.14.7, Java 17.0.17 y TLC 2.19 · Licencia: [MIT](<https://github.com/lucioduran/agent-policy-state-machine/blob/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/LICENSE>)\n\nFicha publicada: 2026-11-10 · Ficha actualizada: 2026-11-10\n\n[Repositorio](<https://github.com/lucioduran/agent-policy-state-machine>) · [Metadatos de la medición con TLC](<https://raw.githubusercontent.com/lucioduran/agent-policy-state-machine/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/evidence/measurement.json>) · [Release v0.1.0](<https://github.com/lucioduran/agent-policy-state-machine/releases/tag/v0.1.0>)\n\n## Problema y utilidad para agentes\n\nUn 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.\n\nUn 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.\n\n## Arquitectura\n\n1. **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.\n2. **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.\n3. **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.\n\n- [Política y límites de confianza](<https://github.com/lucioduran/agent-policy-state-machine/blob/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/docs/design.md>)\n- [Modelo TLA+](<https://github.com/lucioduran/agent-policy-state-machine/blob/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/formal/Policy.tla>)\n\n## Qué demuestra\n\n- Exploración real con TLC, una transición de autorización deliberadamente defectuosa y su contraejemplo conservado.\n- Coincidencia en las 981 aristas exportadas y una prueba de regresión ejecutable que bloquea el efecto no autorizado.\n- Veintidós pruebas de ejecución y conformidad, incluidas concurrencia, conflictos, capacidades inválidas y recuperación de la compensación.\n\n## Resultados publicados\n\nLas comprobaciones locales registradas usaron un Intel Xeon W-3223, 48 GiB de RAM y macOS 26.7.1 el 9 de noviembre de 2026.\n\nTLC 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.\n\n### Comprobación del modelo finito\n\n| Medición | Resultado observado |\n| --- | --- |\n| Estados generados / distintos | 982 / 109 |\n| Profundidad de búsqueda / estados pendientes | 8 / 0 |\n| Código de salida del modelo defectuoso | 12 |\n| Tiempo transcurrido con TLC: modelo correcto / defectuoso | 1.085 / 1.085 s |\n\n### Conformidad del entorno de ejecución\n\n| Medición | Resultado observado |\n| --- | --- |\n| Aristas del grafo coincidentes | 981 / 981 |\n| Contraejemplo de ejecución no autorizada | Bloqueado |\n| Tiempo transcurrido en la reproducción | 0.138 s |\n\nEstas 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.\n\nLos 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.\n\nEl 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](<https://github.com/lucioduran/agent-policy-state-machine/blob/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/README.md>).\n\n## Reproducir\n\nUsá 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.\n\nDespué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.\n\n### Verificar la evidencia guardada\n\n```\ngit clone https://github.com/lucioduran/agent-policy-state-machine.git\ncd agent-policy-state-machine\ngit checkout bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70\nUV_CACHE_DIR=\"$PWD/.tools/uv-cache\" UV_PYTHON_INSTALL_DIR=\"$PWD/.tools/python\" uv venv --python 3.14.7 .venv\nPYTHONPATH=src .venv/bin/python scripts/replay.py\n```\n\n### Ejecutar las pruebas de regresión\n\n```\nUV_CACHE_DIR=\"$PWD/.tools/uv-cache\" UV_PYTHON_INSTALL_DIR=\"$PWD/.tools/python\" uv sync --frozen --python 3.14.7\n.venv/bin/pytest -q\n```\n\n## Alcance y límites\n\n- 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.\n- 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.\n- 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.\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.\n\n- [Artículo técnico relacionado](<https://lucioduran.com/es/blog/formal-verification-tla-plus-distributed-systems>)\n\n## Fuentes y revisión\n\nLa 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.\n\n- Revisión consultada: [` bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70 `](<https://github.com/lucioduran/agent-policy-state-machine/commit/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70>)\n- Revisión registrada por el experimento: [` 9a8273d57ecf691f5dc36207f2ce4877875f1dd4 `](<https://github.com/lucioduran/agent-policy-state-machine/commit/9a8273d57ecf691f5dc36207f2ce4877875f1dd4>)\n- Fecha del informe (UTC): 2026-11-09T20:18:39.861683+00:00\n- Release publicada: [v0.1.0](<https://github.com/lucioduran/agent-policy-state-machine/releases/tag/v0.1.0>) · 2026-11-09T20:24:33Z\n- [Metadatos de la medición con TLC](<https://raw.githubusercontent.com/lucioduran/agent-policy-state-machine/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/evidence/measurement.json>) SHA-256: ` c0989f1de2c3fd310475bdbad711764fe6e9748ed08176d53a5f47f65d64277e `\n\n- [README y reproducción](<https://github.com/lucioduran/agent-policy-state-machine/blob/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/README.md>)\n- [Metadatos de la medición con TLC](<https://raw.githubusercontent.com/lucioduran/agent-policy-state-machine/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/evidence/measurement.json>)\n- [Metadatos de la reproducción contra el entorno de ejecución](<https://raw.githubusercontent.com/lucioduran/agent-policy-state-machine/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/evidence/runtime-measurement.json>)\n- [Licencia MIT](<https://github.com/lucioduran/agent-policy-state-machine/blob/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/LICENSE>)\n- [Política y límites de confianza](<https://github.com/lucioduran/agent-policy-state-machine/blob/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/docs/design.md>)\n- [Modelo TLA+](<https://github.com/lucioduran/agent-policy-state-machine/blob/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/formal/Policy.tla>)\n- [Registro exitoso de TLC](<https://raw.githubusercontent.com/lucioduran/agent-policy-state-machine/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/evidence/correct.log>)\n- [Contraejemplo del modelo defectuoso](<https://raw.githubusercontent.com/lucioduran/agent-policy-state-machine/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/evidence/faulty.log>)\n- [Grafo exportado por TLC](<https://raw.githubusercontent.com/lucioduran/agent-policy-state-machine/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/evidence/states.dot>)\n- [Observaciones de las aristas ejecutadas](<https://raw.githubusercontent.com/lucioduran/agent-policy-state-machine/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/evidence/runtime-edges.jsonl>)\n- [Manifiesto de hashes de la evidencia](<https://raw.githubusercontent.com/lucioduran/agent-policy-state-machine/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/evidence/manifest.json>)","headings":[{"level":1,"text":"Agent Policy State Machine","url":"https://lucioduran.com/es/projects/agent-policy-state-machine#title"},{"level":2,"text":"Problema y utilidad para agentes","url":"https://lucioduran.com/es/projects/agent-policy-state-machine#problem"},{"level":2,"text":"Arquitectura","url":"https://lucioduran.com/es/projects/agent-policy-state-machine#architecture"},{"level":2,"text":"Qué demuestra","url":"https://lucioduran.com/es/projects/agent-policy-state-machine#demonstrates"},{"level":2,"text":"Resultados publicados","url":"https://lucioduran.com/es/projects/agent-policy-state-machine#results"},{"level":3,"text":"Comprobación del modelo finito","url":"https://lucioduran.com/es/projects/agent-policy-state-machine#results-tlc-safety"},{"level":3,"text":"Conformidad del entorno de ejecución","url":"https://lucioduran.com/es/projects/agent-policy-state-machine#results-runtime-replay"},{"level":2,"text":"Reproducir","url":"https://lucioduran.com/es/projects/agent-policy-state-machine#reproduce"},{"level":3,"text":"Verificar la evidencia guardada","url":"https://lucioduran.com/es/projects/agent-policy-state-machine#reproduce-replay"},{"level":3,"text":"Ejecutar las pruebas de regresión","url":"https://lucioduran.com/es/projects/agent-policy-state-machine#reproduce-checks"},{"level":2,"text":"Alcance y límites","url":"https://lucioduran.com/es/projects/agent-policy-state-machine#scope"},{"level":2,"text":"Fuentes y revisión","url":"https://lucioduran.com/es/projects/agent-policy-state-machine#sources"}],"sections":[{"heading":"Agent Policy State Machine","level":1,"url":"https://lucioduran.com/es/projects/agent-policy-state-machine","content":"[Proyectos](<https://lucioduran.com/es/projects>) / Agent Policy State Machine"},{"heading":"Agent Policy State Machine","level":1,"url":"https://lucioduran.com/es/projects/agent-policy-state-machine#title","content":"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.\n\nAutor: [Lucio Durán](<https://lucioduran.com/es>) · Python 3.14.7, Java 17.0.17 y TLC 2.19 · Licencia: [MIT](<https://github.com/lucioduran/agent-policy-state-machine/blob/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/LICENSE>)\n\nFicha publicada: 2026-11-10 · Ficha actualizada: 2026-11-10\n\n[Repositorio](<https://github.com/lucioduran/agent-policy-state-machine>) · [Metadatos de la medición con TLC](<https://raw.githubusercontent.com/lucioduran/agent-policy-state-machine/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/evidence/measurement.json>) · [Release v0.1.0](<https://github.com/lucioduran/agent-policy-state-machine/releases/tag/v0.1.0>)"},{"heading":"Problema y utilidad para agentes","level":2,"url":"https://lucioduran.com/es/projects/agent-policy-state-machine#problem","content":"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.\n\nUn 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."},{"heading":"Arquitectura","level":2,"url":"https://lucioduran.com/es/projects/agent-policy-state-machine#architecture","content":"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.\n2. **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.\n3. **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.\n\n- [Política y límites de confianza](<https://github.com/lucioduran/agent-policy-state-machine/blob/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/docs/design.md>)\n- [Modelo TLA+](<https://github.com/lucioduran/agent-policy-state-machine/blob/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/formal/Policy.tla>)"},{"heading":"Qué demuestra","level":2,"url":"https://lucioduran.com/es/projects/agent-policy-state-machine#demonstrates","content":"- Exploración real con TLC, una transición de autorización deliberadamente defectuosa y su contraejemplo conservado.\n- Coincidencia en las 981 aristas exportadas y una prueba de regresión ejecutable que bloquea el efecto no autorizado.\n- Veintidós pruebas de ejecución y conformidad, incluidas concurrencia, conflictos, capacidades inválidas y recuperación de la compensación."},{"heading":"Resultados publicados","level":2,"url":"https://lucioduran.com/es/projects/agent-policy-state-machine#results","content":"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.\n\nTLC 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."},{"heading":"Comprobación del modelo finito","level":3,"url":"https://lucioduran.com/es/projects/agent-policy-state-machine#results-tlc-safety","content":"| Medición | Resultado observado |\n| --- | --- |\n| Estados generados / distintos | 982 / 109 |\n| Profundidad de búsqueda / estados pendientes | 8 / 0 |\n| Código de salida del modelo defectuoso | 12 |\n| Tiempo transcurrido con TLC: modelo correcto / defectuoso | 1.085 / 1.085 s |"},{"heading":"Conformidad del entorno de ejecución","level":3,"url":"https://lucioduran.com/es/projects/agent-policy-state-machine#results-runtime-replay","content":"| Medición | Resultado observado |\n| --- | --- |\n| Aristas del grafo coincidentes | 981 / 981 |\n| Contraejemplo de ejecución no autorizada | Bloqueado |\n| Tiempo transcurrido en la reproducción | 0.138 s |\n\nEstas 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.\n\nLos 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.\n\nEl 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](<https://github.com/lucioduran/agent-policy-state-machine/blob/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/README.md>)."},{"heading":"Reproducir","level":2,"url":"https://lucioduran.com/es/projects/agent-policy-state-machine#reproduce","content":"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.\n\nDespué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."},{"heading":"Verificar la evidencia guardada","level":3,"url":"https://lucioduran.com/es/projects/agent-policy-state-machine#reproduce-replay","content":"```\ngit clone https://github.com/lucioduran/agent-policy-state-machine.git\ncd agent-policy-state-machine\ngit checkout bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70\nUV_CACHE_DIR=\"$PWD/.tools/uv-cache\" UV_PYTHON_INSTALL_DIR=\"$PWD/.tools/python\" uv venv --python 3.14.7 .venv\nPYTHONPATH=src .venv/bin/python scripts/replay.py\n```"},{"heading":"Ejecutar las pruebas de regresión","level":3,"url":"https://lucioduran.com/es/projects/agent-policy-state-machine#reproduce-checks","content":"```\nUV_CACHE_DIR=\"$PWD/.tools/uv-cache\" UV_PYTHON_INSTALL_DIR=\"$PWD/.tools/python\" uv sync --frozen --python 3.14.7\n.venv/bin/pytest -q\n```"},{"heading":"Alcance y límites","level":2,"url":"https://lucioduran.com/es/projects/agent-policy-state-machine#scope","content":"- 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.\n- 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.\n- 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.\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.\n\n- [Artículo técnico relacionado](<https://lucioduran.com/es/blog/formal-verification-tla-plus-distributed-systems>)"},{"heading":"Fuentes y revisión","level":2,"url":"https://lucioduran.com/es/projects/agent-policy-state-machine#sources","content":"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.\n\n- Revisión consultada: [` bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70 `](<https://github.com/lucioduran/agent-policy-state-machine/commit/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70>)\n- Revisión registrada por el experimento: [` 9a8273d57ecf691f5dc36207f2ce4877875f1dd4 `](<https://github.com/lucioduran/agent-policy-state-machine/commit/9a8273d57ecf691f5dc36207f2ce4877875f1dd4>)\n- Fecha del informe (UTC): 2026-11-09T20:18:39.861683+00:00\n- Release publicada: [v0.1.0](<https://github.com/lucioduran/agent-policy-state-machine/releases/tag/v0.1.0>) · 2026-11-09T20:24:33Z\n- [Metadatos de la medición con TLC](<https://raw.githubusercontent.com/lucioduran/agent-policy-state-machine/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/evidence/measurement.json>) SHA-256: ` c0989f1de2c3fd310475bdbad711764fe6e9748ed08176d53a5f47f65d64277e `\n\n- [README y reproducción](<https://github.com/lucioduran/agent-policy-state-machine/blob/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/README.md>)\n- [Metadatos de la medición con TLC](<https://raw.githubusercontent.com/lucioduran/agent-policy-state-machine/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/evidence/measurement.json>)\n- [Metadatos de la reproducción contra el entorno de ejecución](<https://raw.githubusercontent.com/lucioduran/agent-policy-state-machine/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/evidence/runtime-measurement.json>)\n- [Licencia MIT](<https://github.com/lucioduran/agent-policy-state-machine/blob/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/LICENSE>)\n- [Política y límites de confianza](<https://github.com/lucioduran/agent-policy-state-machine/blob/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/docs/design.md>)\n- [Modelo TLA+](<https://github.com/lucioduran/agent-policy-state-machine/blob/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/formal/Policy.tla>)\n- [Registro exitoso de TLC](<https://raw.githubusercontent.com/lucioduran/agent-policy-state-machine/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/evidence/correct.log>)\n- [Contraejemplo del modelo defectuoso](<https://raw.githubusercontent.com/lucioduran/agent-policy-state-machine/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/evidence/faulty.log>)\n- [Grafo exportado por TLC](<https://raw.githubusercontent.com/lucioduran/agent-policy-state-machine/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/evidence/states.dot>)\n- [Observaciones de las aristas ejecutadas](<https://raw.githubusercontent.com/lucioduran/agent-policy-state-machine/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/evidence/runtime-edges.jsonl>)\n- [Manifiesto de hashes de la evidencia](<https://raw.githubusercontent.com/lucioduran/agent-policy-state-machine/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/evidence/manifest.json>)"}],"links":[{"text":"Proyectos","url":"https://lucioduran.com/es/projects"},{"text":"Lucio Durán","url":"https://lucioduran.com/es"},{"text":"MIT","url":"https://github.com/lucioduran/agent-policy-state-machine/blob/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/LICENSE"},{"text":"Repositorio","url":"https://github.com/lucioduran/agent-policy-state-machine"},{"text":"Metadatos de la medición con TLC","url":"https://raw.githubusercontent.com/lucioduran/agent-policy-state-machine/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/evidence/measurement.json"},{"text":"Release v0.1.0","url":"https://github.com/lucioduran/agent-policy-state-machine/releases/tag/v0.1.0"},{"text":"Política y límites de confianza","url":"https://github.com/lucioduran/agent-policy-state-machine/blob/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/docs/design.md"},{"text":"Modelo TLA+","url":"https://github.com/lucioduran/agent-policy-state-machine/blob/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/formal/Policy.tla"},{"text":"README y reproducción","url":"https://github.com/lucioduran/agent-policy-state-machine/blob/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/README.md"},{"text":"Metadatos de la reproducción contra el entorno de ejecución","url":"https://raw.githubusercontent.com/lucioduran/agent-policy-state-machine/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/evidence/runtime-measurement.json"},{"text":"Artículo técnico relacionado","url":"https://lucioduran.com/es/blog/formal-verification-tla-plus-distributed-systems"},{"text":"bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70","url":"https://github.com/lucioduran/agent-policy-state-machine/commit/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70"},{"text":"9a8273d57ecf691f5dc36207f2ce4877875f1dd4","url":"https://github.com/lucioduran/agent-policy-state-machine/commit/9a8273d57ecf691f5dc36207f2ce4877875f1dd4"},{"text":"v0.1.0","url":"https://github.com/lucioduran/agent-policy-state-machine/releases/tag/v0.1.0"},{"text":"Licencia MIT","url":"https://github.com/lucioduran/agent-policy-state-machine/blob/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/LICENSE"},{"text":"Registro exitoso de TLC","url":"https://raw.githubusercontent.com/lucioduran/agent-policy-state-machine/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/evidence/correct.log"},{"text":"Contraejemplo del modelo defectuoso","url":"https://raw.githubusercontent.com/lucioduran/agent-policy-state-machine/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/evidence/faulty.log"},{"text":"Grafo exportado por TLC","url":"https://raw.githubusercontent.com/lucioduran/agent-policy-state-machine/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/evidence/states.dot"},{"text":"Observaciones de las aristas ejecutadas","url":"https://raw.githubusercontent.com/lucioduran/agent-policy-state-machine/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/evidence/runtime-edges.jsonl"},{"text":"Manifiesto de hashes de la evidencia","url":"https://raw.githubusercontent.com/lucioduran/agent-policy-state-machine/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/evidence/manifest.json"}],"structuredData":[{"@context":"https://schema.org","@graph":[{"@type":"Person","@id":"https://lucioduran.com/#person","name":"Lucio Durán","url":"https://lucioduran.com/"},{"@type":"WebSite","@id":"https://lucioduran.com/#website","url":"https://lucioduran.com/","name":"Lucio Durán","inLanguage":["en","es"],"publisher":{"@id":"https://lucioduran.com/#person"}},{"@type":"WebPage","@id":"https://lucioduran.com/es/projects/agent-policy-state-machine#page","url":"https://lucioduran.com/es/projects/agent-policy-state-machine","name":"Agent Policy State Machine","description":"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.","inLanguage":"es","author":{"@id":"https://lucioduran.com/#person"},"publisher":{"@id":"https://lucioduran.com/#person"},"isPartOf":{"@id":"https://lucioduran.com/#website"},"isAccessibleForFree":true,"mainEntity":{"@id":"https://lucioduran.com/projects/agent-policy-state-machine#software"},"datePublished":"2026-11-10","dateModified":"2026-11-10","breadcrumb":{"@id":"https://lucioduran.com/es/projects/agent-policy-state-machine#breadcrumb"}},{"@type":"SoftwareSourceCode","@id":"https://lucioduran.com/projects/agent-policy-state-machine#software","name":"Agent Policy State Machine","description":"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.","inLanguage":"es","url":"https://lucioduran.com/es/projects/agent-policy-state-machine","codeRepository":"https://github.com/lucioduran/agent-policy-state-machine","programmingLanguage":"Python","runtimePlatform":"Python 3.14.7, Java 17.0.17 y TLC 2.19","license":"https://github.com/lucioduran/agent-policy-state-machine/blob/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/LICENSE","version":"v0.1.0","identifier":{"@type":"PropertyValue","propertyID":"git-commit","value":"bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70"},"author":{"@type":"Person","@id":"https://lucioduran.com/#person","name":"Lucio Durán","url":"https://lucioduran.com"},"isAccessibleForFree":true,"citation":["https://github.com/lucioduran/agent-policy-state-machine/blob/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/README.md","https://raw.githubusercontent.com/lucioduran/agent-policy-state-machine/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/evidence/measurement.json","https://raw.githubusercontent.com/lucioduran/agent-policy-state-machine/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/evidence/runtime-measurement.json","https://github.com/lucioduran/agent-policy-state-machine/blob/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/docs/design.md","https://github.com/lucioduran/agent-policy-state-machine/blob/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/formal/Policy.tla","https://raw.githubusercontent.com/lucioduran/agent-policy-state-machine/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/evidence/correct.log","https://raw.githubusercontent.com/lucioduran/agent-policy-state-machine/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/evidence/faulty.log","https://raw.githubusercontent.com/lucioduran/agent-policy-state-machine/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/evidence/states.dot","https://raw.githubusercontent.com/lucioduran/agent-policy-state-machine/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/evidence/runtime-edges.jsonl","https://raw.githubusercontent.com/lucioduran/agent-policy-state-machine/bb96a1ace19ac0c7a90fb0e1059a2a58f6b06c70/evidence/manifest.json","https://github.com/lucioduran/agent-policy-state-machine/releases/tag/v0.1.0"],"publisher":{"@id":"https://lucioduran.com/#person"},"mainEntityOfPage":{"@id":"https://lucioduran.com/es/projects/agent-policy-state-machine#page"}},{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Proyectos","item":"https://lucioduran.com/es/projects"},{"@type":"ListItem","position":2,"name":"Agent Policy State Machine","item":"https://lucioduran.com/es/projects/agent-policy-state-machine"}],"@id":"https://lucioduran.com/es/projects/agent-policy-state-machine#breadcrumb"}]}],"contentHash":"193d6575bbc442d43ad8ddd6754862188971323f36123be0bd5efcb22627bccf","provenance":{"method":"Deterministic serialization of the server-rendered main element","source":"https://lucioduran.com/es/projects/agent-policy-state-machine","hashAlgorithm":"sha256","hashScope":"JSON document fields before contentHash and provenance","sourceHTMLBytes":54521,"contentBytes":10094}}
