
Arnés de reproducción, parches y herramientas de análisis para auditar un benchmark de ciberdefensa basado en aprendizaje: captura trazas de agentes, ejecuta ablaciones de agentes rojos y recalcula cada figura del artículo a partir de los datos publicados.
Este repositorio es el arnés, los parches, las herramientas de análisis y el registro que respaldan el artículo What a CAGE 4 Score Measures: An Audit of a Learned Cyber-Defense Benchmark, Its Reference Defenders, and the Tables Built on Them (James M. Rice y asesores, Rochester Institute of Technology, 2026). El identificador de arXiv se añade aquí en el primer commit tras su publicación. La etiqueta arxiv-v1 es el estado a partir del cual se calculó cada número del artículo publicado.
Las trazas y los checkpoints a partir de los cuales se calculan los números del artículo están depositados por separado, en https://doi.org/10.5281/zenodo.23681828, en cuatro archivos.
| Archivo | Contenido | Descomprimir en | sha256 |
|---|---|---|---|
traces_arms_arxiv-v1.tar.zst | los registros de pasos de cada brazo de evaluación de la auditoría principal, los 123 que enumera el Apéndice B del artículo y los brazos de diagnóstico que nombra ARMS.md, un directorio por brazo, un archivo JSON-lines por episodio | data/traces/ | db2c3d17684180e5d4ca7fb9a7f1f739b5414e62da0e8c4b9b792cd31568f456 |
traces_pilot_arxiv-v1.tar.zst | los registros de pasos del piloto de comprobación de ocupación y su continuación (brazos denominados kbf_*) | data/traces/ | ece72ca24d17bf688144b2d0276ae9f0209aa8a50f95ecdd0aab9a6f8a9c0fc0 |
checkpoints_pilot_arxiv-v1.tar.zst | los checkpoints conservados y el estado de reanudación de las ejecuciones de entrenamiento del piloto y de la continuación | repos/cage-4-submission/checkpoints/ | dc2c8219e12a0c2931263be0003c8858039931b04b019e1bfa60c0ba6856c07e |
checkpoints_continuation_arxiv-v1.tar.zst | los checkpoints de las ejecuciones de continuación de Wrecker de la Sección 5 | repos/cage-4-submission/checkpoints/ | en SHA256SUMS |
run_logs_arxiv-v1.tar.zst | los registros de entrenamiento y evaluación de las ejecuciones del piloto y de la continuación de ambas máquinas, con pilot_runs.log, que registra el host, el número de hilos, el número de workers, el digest del código y la imagen de cada ejecución | data/ | en SHA256SUMS |
SHA256SUMS en el depósito enumera los cuatro. Verifique un archivo con sha256sum -c SHA256SUMS antes de descomprimirlo.
| Ruta | Qué es |
|---|---|
bin/run | ejecuta un comando en una de las dos imágenes con este directorio montado en /work, pasando los interruptores KEEP_* y HMARL_*. Espera el clon en ~/cage. |
build/ | los dos Dockerfiles (Dockerfile.keep, Dockerfile.marl) y los parches aplicados a los repositorios upstream antes de construir las imágenes |
scripts/capture.py | ejecuta la política publicada de KEEP sobre semillas de entorno emparejadas y escribe el registro de pasos con las observaciones sin procesar de los agentes y el estado real del simulador |
scripts/capture_hmarl.py | lo mismo para H-MARL Expert, a través de la ruta de evaluación de los autores (--compat) o a través del arnés supervisor |
scripts/oracle.py, scripts/oracle_rules.py | el arnés supervisor sobre KEEP, las reglas O1 a O15 y los defensores de reglas, con los interruptores de entrega (--wait-busy, --queue, --min-gap) |
red_agents/ | los adversarios que el artículo ejecuta más allá del FiniteStateRedAgent estándar. Wrecker y sus escaleras Pn y Qn son propios del artículo (Sección 2), y bin/run copia cada archivo de aquí al directorio SimpleAgents de la imagen al lanzarse |
tools_*.py | las herramientas de análisis. tools_paired.py (diferencia emparejada, intervalo bootstrap, victorias, prueba de signos), tools_charge.py y tools_busy_charge.py (la carga de Restore y el resto), tools_dropped.py (ejecutado contra intervenciones aseveradas), tools_cont.py, tools_ceiling.py, tools_fraction_ci.py, tools_latch_sum.py, tools_drawspread.py, tools_lagcorr.py, tools_busy_restores.py, tools_pilot_decisions.py y el resto. Cada una imprime lo que calcula a partir de un directorio de trazas bajo data/traces/ |
tools_patch_*.py | la pila de parches sobre el código publicado. tools_patch_keep_busy.py, tools_patch_keep_seedmode.py y tools_patch_keep_readall.py, en ese orden, dan al entrenador de KEEP los interruptores de la Sección 6. tools_patch_hmarl_busy.py da al wrapper de H-MARL el interruptor HMARL_BUSY=none. tools_patch_oracle_truth.py añade --log-truth al arnés. Cada uno es idempotente y se niega a ejecutarse sobre código que no reconoce |
run_keep_pilot.sh, eval_keep_pilot.sh, pilot_status.sh, test_keep_*.sh | el piloto y la continuación de la Sección 6, su evaluación y sus pruebas |
run_busy_reds.sh | la política publicada de KEEP con su comprobación de ocupado activada y desactivada en el adversario estándar y otros nueve (Sección 6.1) |
queue_*.sh, read_*.sh, run_*.sh, rerun_F.sh, gate_O15.sh, pilot_O15.sh, svy_O15.sh | los lanzadores y lectores de la campaña. Cada brazo del artículo fue lanzado por uno de estos, por lo que son el registro de la invocación exacta de cada brazo |
ARMS.md | cada brazo, por nombre, con su comando, su media y el archivo que la contiene |
RESULTS.md | el registro fechado del trabajo, del más reciente al más antiguo |
papers/ | la copia del artefacto de la capa de análisis del artículo, sin el texto del artículo. papers/paper1/ledger.csv es el libro mayor, una fila por cada número impreso en el artículo, con el comando que lo recalcula. papers/paper1/fig/ contiene los scripts de figuras y tablas. papers/paper1/check_identities.py comprueba las identidades aritméticas que toda compilación debe satisfacer. Los scripts recompute_*.py y means.py en papers/ son los cálculos de criterio, varianza y proporción que invoca el libro mayor |
Todo lo que está bajo data/ y repos/ es ignorado por git. Las trazas van bajo data/traces/, los repositorios upstream y los checkpoints bajo repos/.
El Apéndice A del artículo nombra tres niveles. Necesitan cada vez más del entorno.
Clona, descomprime los dos archivos de trazas en data/traces/ y ejecuta el recálculo desde la raíz del repositorio. Ejecuta cada comando distinto del libro mayor desde este directorio y comprueba que el valor almacenado de cada fila aparece en la salida de ese comando.
git clone https://github.com/jrice-ai/cage ~/cage && cd ~/cage && git checkout arxiv-v1
mkdir -p data/traces && tar -I zstd -xf traces_arms_arxiv-v1.tar.zst -C data/traces && tar -I zstd -xf traces_pilot_arxiv-v1.tar.zst -C data/traces
./recompute.sh
python3 papers/paper1/check_identities.py papers/paper1/ledger.csv
Los comandos del ledger nombran la capa de análisis por su ruta en la máquina de los autores, ~/papers, por lo que recompute.sh ejecuta la comprobación con HOME apuntando a un directorio temporal que enlaza papers/ allí. No se escribe nada fuera del repositorio. En un portátil, el recómputo completo tarda decenas de minutos, la mayor parte en los brazos piloto. Diez filas, los hiperparámetros leídos de los checkpoints publicados (claves keep* y trident*, que se ejecutan mediante bin/run), necesitan la imagen de nivel 2 y se reportan como no encontradas sin ella. check_identities.py reporta las identidades aritméticas (el coste es igual al cargo más el resto para cada split, los intervalos de cuatro extracciones y cuatro semillas frente a sus medias y desviaciones estándar, el resto cero del par H-MARL con la máscara desactivada). Los scripts de figuras y tablas bajo papers/paper1/fig/ regeneran las figuras y tablas del artículo a partir de las mismas trazas con CAGE=~/cage python3 papers/paper1/fig/fig_curves.py y de igual modo para fig_drop.py, fig_noise.py, make_tables.py, make_busyreds.py y make_arms.py.