# Boardroom Map reviewer sandbox This directory is the build context for the **reviewer image**, which runs on the DGX Spark — it is *not* packed into the `.s9pk`. The orchestrator rsyncs this folder to the head Spark and runs `build.sh` there (the Sparks are aarch64), or you can build it by hand. - `grader_agent.py` — a one-shot, read-only agent. It reads the documents mounted at `/docs`, runs one local model (through the on-Spark proxy) under its persona (`/persona/PERSONA.md`) and the shared rubric (`/RUBRIC.md`), and writes a single report to `/out`. With `BM_ROLE=synthesizer` it instead reads the panel's reports from `/reports` and writes `CONSOLIDATED_REPORT.md`. - `reviewer.Dockerfile` — lean pure-Python image (stdlib only). - `build.sh` — `IMAGE=boardroom-grader:latest bash build.sh`. ## How it is launched (by the orchestrator) Hardened and, in air-gapped mode, network-isolated: ``` docker run -d --name bm-grader- \ --network boardroom-net \ # --internal in air-gapped mode --user 1000:1000 --security-opt no-new-privileges --cap-drop ALL \ --read-only --tmpfs /tmp --tmpfs /home/rev --pids-limit 256 --memory 6g --cpus 4 \ -e BM_MODEL= -e BM_LLM_BASE=http://boardroom-proxy:4000/v1 ... \ -v /docs:/docs:ro -v /out:/out \ -v /personas/.md:/persona/PERSONA.md:ro -v /RUBRIC.md:/RUBRIC.md:ro \ boardroom-grader:latest ``` The container can reach **only** the model proxy in air-gapped mode; it holds no credentials beyond a dummy proxy key and cannot touch the host or the documents' originals.