Trust Operations Incident Runbook
This runbook covers production-smoke, Redis coordination, evidence signing,
webhook/email retry, SLO burn rate, and dead-letter alerts for the hosted Witnora control plane.
It is an operator procedure, not evidence that an incident is resolved.
Alert Matrix
| Alert |
Warning |
Critical |
| Scheduled smoke |
No sample in 7 days, or latest pass is older than 36 hours |
Latest sample failed, or latest pass is older than 72 hours |
| Redis coordination |
None |
Redis is not ready or controls are not shared across instances |
| Signing key |
Active key is 90-179 days old |
No active key, or active key is at least 180 days old |
| Webhook delivery |
One or more jobs are retrying |
One or more jobs are in the dead-letter queue |
| Email delivery |
One or more jobs are retrying |
One or more jobs are in the dead-letter queue |
| SLO burn rate |
6h/24h sustained burn exceeds 6x/3x with minimum samples |
1h/6h fast burn exceeds 14.4x/6x with minimum samples |
| Production incident |
Recovered after two consecutive passes; human resolution pending |
Open or investigating |
Incident State Machine
open: the first failed production smoke created the incident. Repeated
failures increment the same incident instead of creating duplicates.
investigating: an owner/admin acknowledged the incident and recorded a
rationale.
recovered: two consecutive production smokes passed. The transition ledger
contains the passing streak and workflow evidence.
resolved: an owner/admin reviewed recovery evidence and recorded a final
rationale. Only then may GitHub reconciliation close the issue.
A single passing run never recovers or closes an incident. A new failure after
recovered returns the incident to open and resets the passing streak.
Initial Triage
- Open the deduplicated GitHub issue and the linked workflow run.
- Download the sanitized
agentcert-production-smoke-* artifact.
- Confirm the failure time, commit SHA, failed check, and current Render deploy.
- Open Dashboard -> Operational overview and compare the latest smoke,
Redis, signing-key, retry-rate, latency, and DLQ states.
- Do not rotate keys, delete evidence, or redrive DLQ jobs until the failed
subsystem is identified.
Redis Critical
- Check Render Key Value availability and the control-plane
REDIS_URL.
- Confirm
/health reports backend=redis, state=ready, and shared=true.
- If Redis was restarted, verify the application reconnects before rerunning
smoke. A memory fallback is degraded and is not production acceptance.
- Rerun Production trust smoke manually. Record the new workflow URL in
the incident.
Signing Critical Or Warning
- Confirm
WITNORA_EVIDENCE_SIGNING_PRIVATE_KEY and
WITNORA_EVIDENCE_SIGNING_KEY_ID are present in Render without exposing
their values.
- For rotation, create a new Ed25519 key and a never-reused key ID, deploy it,
and confirm the prior public key becomes
retired, not deleted.
- Download newly uploaded evidence and verify its attestation against
/v1/signing-keys/{keyId}.
- Verify evidence signed by the retired key still validates before closing.
Smoke Failure Or Staleness
- Identify the first failed check in the sanitized result: health,
idempotency, evidence roundtrip, signature chain, webhook delivery, or
operations status.
- Inspect the corresponding control-plane logs without copying credentials
into the issue.
- Fix or roll back the responsible deploy, then dispatch the smoke workflow.
- Require two consecutive passing runs. Confirm the Dashboard shows
recovered, both workflow references, and a passing streak of 2/2.
- Review the recovery evidence and record an explicit resolution rationale.
Webhook Retry Or DLQ
- Inspect the last response status and error in Integrations -> Trust operations.
- Confirm the receiver is HTTPS, validates Witnora signatures, and
deduplicates
X-Witnora-Event-Id.
- Fix receiver availability or validation before selecting Retry.
- Redrive one job first. Confirm delivery latency and retry rate recover before
redriving additional jobs.
Email Retry Or DLQ
- Confirm the recipient is verified and has not been disabled.
- Inspect the provider error and attempt count under Integrations -> Trust operations.
- Check Resend status and the configured sender domain without exposing the API key.
- Fix provider or recipient configuration before selecting Retry email.
- Confirm the delivery ledger records a successful new attempt and the DLQ count clears.
SLO Burn-Rate Alert
- Confirm which paired windows fired: 1h/6h fast burn or 6h/24h sustained burn.
- Inspect the samples in both windows; do not treat one failed smoke as a burn-rate incident.
- Identify the common failed check and correlate it with deploys, Redis, signing, and delivery health.
- Require two consecutive healthy burn-rate evaluations before recovery.
- Resolve the burn-rate incident separately from any individual production-smoke incident.
Closure Evidence
Resolve the Witnora incident only when it includes the failed workflow, the
fix or rollback commit, two consecutive passing workflow URLs, current
Dashboard status, and any DLQ redrive result. The next smoke reconciliation
closes the GitHub issue. Keep sanitized workflow artifacts for their configured
30-day retention. Do not attach private evidence payloads or secrets.