- Record the alert start time, release image tags,
/health/ready, and/metricsoutput. - Stop rollout automation; preserve both named volumes and create an authority backup.
- Change one control at a time, then recheck readiness, error rate, queue depth, and a synthetic job.
Check docker compose ps and authority JSON logs. If readiness reports repository unavailable,
verify the data-volume mount and restore only from a verified backup. If the process fails startup
validation, restore the previous environment and image tags.
Group forgex_http_requests_total by bounded route and status. Correlate the first increase with
the release and repository logs. Roll back the image pair when the error follows a deployment.
Compare the duration histogram with queue saturation and host CPU/memory. Keep admission limits in place. Scale replicas only when storage semantics preserve one durable owner for every job.
Confirm worker progress and queued/running gauges. Keep owner/tenant limits enabled. For a healthy
worker, lower submission rate or add tested capacity; for a stalled worker, restart once and verify
the recovery counter plus durable job events.
Inspect the job's stable error code, attempts, and events without editing its JSON. Deterministic input failures require a corrected upload. For transient exhaustion, preserve the record and logs, fix the dependency, then use the bounded retry endpoint once.
Segment failures by error code and release. Compare with the capacity gate fixture. Freeze rollout when failures are systemic; do not raise retry budgets to hide deterministic failures.
- Generate a new random secret of at least 32 bytes; keep the current value as
GCODE_AUTHORITY_INTERNAL_SECRET_PREVIOUSand deploy the authority with the new current value. - Deploy the Node gateway with the new current value. During overlap, both secrets authenticate at the authority while only the new secret is sent by the gateway.
- Verify
/health/readyreports rotation overlap and run a synthetic synchronous plus asynchronous request with the gateway. - Clear the previous secret, redeploy the authority, and confirm the old secret now receives 401. Never keep more than two secrets or leave the overlap active after the change window.
Run npm run dotnet:recovery-drill; archive persistence-recovery-gate.fxbackup, its SHA-256, and
recovery-drill.json. In an incident, restore only to an empty target volume, validate the backup
first, start one authority replica, then verify record count, tenant isolation, and a read-only job.
- Preserve volumes and a verified authority backup.
- Set
FORGEX_NODE_IMAGEandFORGEX_API_IMAGEto the previously verified immutable tags. - Run
docker compose --env-file deploy/.env -f deploy/docker-compose.yml config --quiet, thendocker compose --env-file deploy/.env -f deploy/docker-compose.yml up -d --no-build. - Verify
/healthz,/react/, authority readiness, metrics, and one synthetic job. If contract compatibility is uncertain, setGCODE_ASYNC_JOBS_ENABLED=0before replacing the authority. - Record image tags, commands, outputs, exit statuses, and the decision to resume or stay rolled back.