Architecture
One Python package (aarcv), one container image, one data directory. The pipeline is CPU-only and deterministic for a given configuration.
The pipeline#
- Ingest (
aarcv/ingest): demux STANAG 4609, decode KLV, settle the marking, strip geolocation, align metadata to frames. - Presence and platform gate (
aarcv/perception): analytics run only in windows where a receiver is present; the platform is classified against the allow-list and anything else is refused and purged. - Pose: a 3D template silhouette is fitted to each analysis frame (10 Hz by default) to recover 6-DoF pose; the boom is fitted from the image or taken from telemetry.
- Track: per-frame fits are smoothed into a track with velocity and per-sample uncertainty.
- Assess (
aarcv/analytics): phases, events, category scores, the moment-by-moment score, pilot inputs and control surfaces. - Render and secure (
aarcv/security,aarcv/debrief): sanitized and debrief videos, charts and the report; screening, marking, release and custody.
The web app#
FastAPI with server-rendered pages and a REST API (aarcv/web). One background worker processes uploads in order. Accounts use HTTP Basic with PBKDF2-SHA256 password hashes. Sorties, reviews and operations data live in SQLite; products live on disk under the data directory, one folder per sortie with its custody.json.
Data directory#
data/app/
aarcv.db sorties, reviews, users, operations
audit.jsonl hash-chained audit log (+ signed checkpoints)
keys/custody_ed25519.pem custody signing key (0600)
sorties/S-XXXXXXXX/
assessment.json the result (see the assessment schema)
sanitized.mp4 release video
debrief.mp4 annotated video
report.html self-contained report
screening.json per-frame screen results
custody.json signed custody manifest
Configuration and models#
Everything that changes an assessment (perception parameters, gates, sanitizer settings, rubric) is part of a versioned system configuration. Promoting a model version writes a new configuration version, and every sortie records the release tag it was processed with. See configuration.
Deployment shapes#
- Demo:
docker compose up demo. - Hardened:
Dockerfile.hardened, read-only root filesystem, non-root user, behind a TLS proxy on an internal-only network. - Air-gapped:
deploy/airgapbuilds a signed bundle and installer.
Was this page helpful?