Production checklist

Actionable readiness checklist before accepting production traffic. Aligns with production signoff themes and security rules. Mark each item verified in your change ticket.

Authentication and secrets

#CheckVerification
P1ARCFLOW_SERVER_API_KEY set, ≥ 32 hex charsopenssl rand -hex 32; not default dev-secret
P2ARCFLOW_ADMIN_API_KEY set, distinct from server keySeparate env var in secret store
P3No API keys in git, Docker images, or frontend bundlesSecret scan CI; inspect built static assets
P4LLM keys in environment onlyNo hardcoded provider keys in workflow JSON
P5ARCFLOW_WEBHOOK_SECRET set if external callbacks usedExternal POST succeeds with valid HMAC only

Database and migrations

#CheckVerification
P6ARCFLOW_POSTGRESQL_URL points to managed or backed-up PostgresConnection from server pod
P7Migrations applied through 000007arcflow migrate validate
P8/ready returns 200 with "status":"ready"Not migrations_pending or postgres_unavailable
P9Connection pool sized for replica count(replicas × ARCFLOW_PG_MAX_CONNECTIONS) < max_connections
P10Postgres backups scheduledRestore drill documented

Container and process security

#CheckVerification
P11Server container runs as non-root (arcflow uid 1000)docker inspect User field
P12Relay container runs as non-rootSame pattern
P13ARCFLOW_DEBUG unset or falseNo /v1/debug/* in prod
P14Request body limit understood (1 MiB)Large ingest chunked

Network and TLS

#CheckVerification
P15HTTPS termination at load balancer or ingressNo plain HTTP from Internet clients
P16Postgres TLS enabled for managed DBsslmode=require in URL where supported
P17Qdrant not exposed publiclyInternal network or auth fronting
P18ARCFLOW_CORS_ORIGINS restrictedNo wildcard * in production
P19Browser traffic uses Relay, not direct server keyStatic SDK mode: "relay"

Static product (if applicable)

#CheckVerification
P20Sites have HTTPS allowed_originsRelay rejects wrong Origin
P21allow_inline: false on production sitesNo browser workflow override
P22Site tokens rotated on scheduleProcedure in Token rotation (ArcFlow repository)
P23Real embedding provider configuredNot stub for knowledge ingest
P24Chat workflow published to registryPOST.../workflows/chat/publish success

Observability and compliance

#CheckVerification
P25trace data policy audit on sample traceNo prompt/completion text in GET.../trace
P26Application logs do not duplicate trace with richer contentLog review
P27OTel configured if required by policyARCFLOW_OTEL_ENABLED + collector (OpenTelemetry export (alpha))
P28External callback integrators reach server over HTTPSNetwork path test

Operational smoke

Run after deploy:

bash
curl -sf http://localhost:8080/health
curl -sf http://localhost:8080/ready

# Runtime smoke (adjust workflow body)
curl -sf -X POST http://localhost:8080/v1/runs \
 -H "Authorization: Bearer $ARCFLOW_SERVER_API_KEY" \
 -H "Content-Type: application/json" \
 -d @examples/minimal-run.json

bash scripts/load-test-runs.sh # optional capacity check
bash scripts/static-smoke.sh # static product end-to-end

Deferred items (do not mark as shipped)

IDItem
Operator dashboard UIOperator dashboard UI (private ArcFlow-Dashboard repo)
Server SSE streamingServer SSE /v1/runs/{id}/events
OpenTelemetry metrics exportStable OTel metrics
CLI validate commandFull arcflow validate against schema

Sign-off

RoleConfirms
PlatformP1-P19, P25-P28
OperatorP20-P24 (static product)
ComplianceP5, P25-P26