Run it locally
jq, curl, openssl, and free localhost ports 3801-3803 and
3811-3813. Everything is isolated and throwaway: compose project
scale-drill, a separate docker-compose.scale.yml (never the operator
stack), generated secrets in a mktemp dir, tmpfs data volumes, and a
teardown (down -v, image removal, scratch cleanup) that runs on exit —
pass or fail. It never reads a committed .env.
What it proves, and how
Cross-replica assertions hit each replica’s own published port directly (no
load balancer in the loop), so “minted on A, verified on B” is deterministic.
The drill also hard-asserts the fixed behavior of real multi-replica bugs
it surfaced during development (a regression fails CI) — among them the
first-boot ordering rule it proved: a fresh database needs one
all/worker-role boot before api-only replicas can start (an api-only
replica crash-loops on pg-boss’s pg-boss is not installed check until a
worker installs the pg-boss schema once; the stack then self-heals).
What it deliberately does not cover
- s3 storage in prod (MinIO/S3/R2): the drill proves local storage does not span replicas, not that the s3 driver does. The s3 path is covered by unit tests; a MinIO leg can be added to this drill later.
- Managed-Postgres/PgBouncer behavior (see the pooling caveats in deployment-profiles.md).
- Rolling-deploy drain and expand-then-contract coexistence — separate proofs.