Ships the production serving path (FastAPI upload/map UI + statistical
device-category identification) as a lean, reproducible container:
- Dockerfile: python:3.10-slim, non-root user, /health HEALTHCHECK, serves
uvicorn src.api.main_simple:app. Bakes in the joblib category model and the
static rtl_433 protocol table; excludes the 11 GB test corpora and the
benched Phase 3B CNN binaries. Built image is 417 MB.
- requirements-prod.txt: pins matched to the versions that actually train/serve
the model (scikit-learn 1.6.1 / numpy 2.2.6) so joblib.load() stays valid.
torch/onnx intentionally absent — the CNN is benched, not on the serving path.
- docker-compose.yml: single service, named volume seeds from baked data/ on
first run then persists captures_simple.json writes across restarts.
- .dockerignore: keeps data/, venv/, vendored firmware, docs out of the image.
Validated: image builds, container reports healthy, and the statistical
classifier loads + predicts inside the container.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>