# Runtime Consistency Checklist (v2) Use this checklist when runtime/docs changes are made. ## Compose and Runtime - `docker-compose.yml` contains only v2 default runtime services: - `web`, `nginx`, `postgres` - optional `scheduler` profile service - `docker-compose.dev.yml` is mutable (source bind mounts allowed for dev only). - `docker-compose.release.yml` is settings-focused and keeps release runtime immutable. ## Image/Registry Strategy - `web` image: `registry.younerd.org/hoopscout/web:${APP_IMAGE_TAG:-latest}` - `nginx` image: `registry.younerd.org/hoopscout/nginx:${NGINX_IMAGE_TAG:-latest}` - optional scheduler image: `registry.younerd.org/hoopscout/scheduler:${APP_IMAGE_TAG:-latest}` ## Entrypoints - `entrypoint.sh`: - waits for PostgreSQL - creates snapshot directories - optionally runs `migrate` and `collectstatic` when booting gunicorn - `scripts/scheduler.sh`: - runs `run_daily_orchestration` loop - idle-sleeps when `SCHEDULER_ENABLED=0` ## Snapshot Lifecycle 1. Extractor writes snapshots to `incoming`. 2. `import_snapshots` validates + upserts into PostgreSQL. 3. Success => file moved to `archive`. 4. Failure => file moved to `failed`. ## Source Identity Rule Raw IDs are not global. Imported identities are namespaced by source: - `Competition`: `(source_name, source_uid)` - `Team`: `(source_name, source_uid)` - `Player`: `(source_name, source_uid)` ## Legacy Isolation - `LEGACY_PROVIDER_STACK_ENABLED=0` by default. - With default setting: - `apps.providers` is not installed - `/providers/` routes are not mounted - legacy provider settings are not required ## Verification Commands ```bash docker compose -f docker-compose.yml -f docker-compose.release.yml config ./scripts/verify_release_topology.sh docker compose -f docker-compose.yml -f docker-compose.dev.yml run --rm web sh -lc "export PYTHONUSERBASE=/tmp/pyuser && python -m pip install --user -r requirements/dev.txt && python -m pytest -q" ```