YAML Metadata Warning:empty or missing yaml metadata in repo card
Check out the documentation for more information.
DTAP os-filesystem β all-in-one eval image (Slurm handoff)
A single self-contained image that runs the whole DTAP eval inside one container, with no
docker daemon and no root (DTAP_NO_DOCKER): the os-filesystem world-state service runs as a
local process, the judge runs locally, and the eval talks to both over 127.0.0.1. Meant for
clusters (Enroot/Pyxis or Apptainer) that have no docker daemon β you submit one Slurm job, it
runs the container, and it writes results to a shared folder.
Validated end-to-end (benign and malicious tasks): one container runs a whole split
sequentially and, per task, writes the full trace set, not just the final verdict:
judge_result.json, trajectory_*.json, traces/*.jsonl, task.log.
Files
dtap-osfs-smoke.image.tar.gzβ the prebuilt image (~474 MB, secrets scrubbed).run_on_slurm.sbatchβ the Slurm job you submit (Enroot or Apptainer).env.templateβ copy tomy.envand fill in your victim/judge credentials.incontainer_smoke.shβ the in-container wrapper (how the env/API is set up + eval launched); already baked into the image, included here for reference.tests/smoke_osfs_benign2.jsonlβ 2 benign tasks (quick "does it run").tests/smoke_osfs_malicious2.jsonlβ 2 malicious tasks (exercises the attack/defense path; judge reportsattack_success).
End-to-end, step by step
Everything below lives on shared scratch the compute nodes can see, e.g. /scratch/$USER/handoff/.
1) Get the image onto the cluster (one time).
gunzip -c dtap-osfs-smoke.image.tar.gz | docker load # if you have docker somewhere; then push to your registry
# Apptainer (no docker needed): build a .sif from the archive
gunzip dtap-osfs-smoke.image.tar.gz
apptainer build /scratch/$USER/handoff/dtap-osfs-smoke.sif docker-archive://dtap-osfs-smoke.image.tar
# Enroot: enroot import docker://<your-registry>/dtap-osfs-smoke:latest ; enroot create --name dtap-osfs-smoke <img>.sqsh
2) Fill in credentials.
cp env.template /scratch/$USER/handoff/my.env
# edit my.env: pick a victim (OpenRouter / your own OpenAI-compatible endpoint / Bedrock) + judge.
3) Submit the job. Edit the paths at the top of run_on_slurm.sbatch first (image, my.env, OUTDIR).
# benign test (baked split, no mount):
sbatch run_on_slurm.sbatch smoke_osfs_benign2 dtap_def_v0
# malicious test (mount the split file):
SPLITFILE=/scratch/$USER/handoff/tests/smoke_osfs_malicious2.jsonl \
sbatch run_on_slurm.sbatch smoke_osfs_malicious2 dtap_def_v0
4) Collect results. Everything lands under OUTDIR/_test_<split>/<defense>/, one folder per
task with judge_result.json + trajectory_*.json + traces/*.jsonl + task.log. Send us that
OUTDIR (or its .tar.gz). The job log ends with SMOKE PASS if every task produced a judge
result.
Change things at run time β NO rebuild
run_on_slurm.sbatch already mounts these; the knobs:
| Change | How |
|---|---|
| Defense | sbatch run_on_slurm.sbatch <split> <DEFENSE_NAME> + (for a custom one) mount it into .../dt_defenses/<name> |
| Split / task set | pass a SPLITFILE=/path/<name>.jsonl and use <name> as the split arg |
| Victim / judge API | edit my.env (DTAP_MODEL, OPENAI_API_BASE, keys, JUDGE_MODEL) |
| Harness code | mount your dtap-src over /harness/dtap_ossystem/benchmarks/dtap-src |
| Results dir | OUTDIR=/path |
Notes
- The image ships with
REPLACE_MEfor real keys β it will only run once you providemy.env. - Give a split N tasks β the container runs them sequentially and emits N full trace sets.
- In-container parallelism is off (one shared world-state service): keep
MAXP=1and get throughput by submitting more jobs (each an independent container), not by raising MAXP. DTAP_NO_DOCKERis an off-by-default harness switch baked into the image; normal docker runs elsewhere are unaffected.