Executed synthetic operations

Webhook queue operations rehearsal

These checks use generated records, disposable local databases and deliberate faults. A passing check means the stated expected outcome occurred, including expected rejection or rollback. It does not certify an internet-facing deployment or hardware power-loss behavior.

Results

CaseRequirementExpectedObservedResult
crash.reclaimClaim survives abrupt exit and a new worker replaces the expired owner{"exit": 86, "same_job": true, "new_token": true, "attempt": 2}{"exit": 86, "same_job": true, "new_token": true, "attempt": 2}PASS
crash.fenceOld worker completion rejected; replacement completion accepted[false, true][false, true]PASS
http.deliveryFour workers deliver all 80 accepted jobs{"delivered": 80}{"delivered": 80}PASS
http.deduplication120 requests cause exactly 80 receiver business effects{"requests": 120, "effects": 80}{"requests": 120, "effects": 80}PASS
http.attemptsAttempt history contains the expected first failures and successful retries{"retry": 40, "delivered": 80}{"retry": 40, "delivered": 80}PASS
api.authorizationMissing administrator token is rejected401401PASS
api.boundaryForeign Host and Origin requests are rejected[403, 403][403, 403]PASS
api.storageStorage failure returns retryable HTTP 503 without accepting an event503503PASS
restore.at-least-onceRestoring an older queue snapshot redelivers without duplicate receiver effect{"requests": 2, "effects": 1, "status": "delivered"}{"requests": 2, "effects": 1, "status": "delivered"}PASS
restore.identityRestored acceptance still recognizes the same event identitytruetruePASS
restore.corruptionCorrupt snapshot rejected before destination creationtruetruePASS
restore.no-overwriteExisting restore directory remains untouchedtruetruePASS
integrity.finalQueue integrity and foreign-key checks pass{"integrity": "ok", "foreign_key_errors": 0}{"integrity": "ok", "foreign_key_errors": 0}PASS
theory.retry-budgetDeclared four-attempt timeout/backoff calculation totals 15 seconds1515PASS
backup.scheduleFinite scheduler creates two checked snapshots and stops{"exit": 0, "snapshots": 2, "valid": 2}{"exit": 0, "snapshots": 2, "valid": 2}PASS

Measurements

{
  "http_workload": {
    "jobs": 80,
    "workers": 4,
    "http_attempts": 120,
    "elapsed_seconds": 0.4144,
    "delivered_jobs_per_second": 193.07,
    "qualification": "A finite local synthetic workload, not internet latency or sustained capacity."
  },
  "recovery": {
    "snapshot_bytes": 45056,
    "snapshot_seconds": 0.003724,
    "restore_seconds": 0.002835,
    "queue_backup_rpo_seconds": 300,
    "receiver_requirement": "Receiver deduplication records must outlive the longest queue replay or backup retention horizon."
  },
  "theoretical_outage_envelope": {
    "attempts": 4,
    "per_attempt_seconds": 2,
    "retry_delays_seconds": [
      1,
      2,
      4
    ],
    "elapsed_if_every_request_uses_timeout_seconds": 15,
    "excluded_from_bound": [
      "DNS resolver latency",
      "worker scheduling delay",
      "SQLite lock wait"
    ],
    "arrival_jobs_per_second": 2,
    "outage_seconds": 600,
    "generated_jobs": 1200,
    "conclusion": "A ten-minute outage exceeds this retry envelope. Jobs become dead letters and need deliberate replay; a queue does not guarantee automatic delivery after arbitrary outages."
  }
}

Method

Reproduce

python operations_rehearsal.py

See OPERATIONS.md for startup, snapshot, restore and capacity assumptions. The machine-readable record is completion.json.

Boundaries