Skip to main content

Business Continuity Plan (A.5.29, A.5.30)

Document ID: bcp-policy
Version: 1.0
Effective from: 2025-01-01
Owner: Founder / CEO
Review cycle: Quarterly (drill) + Annual (policy)


Business continuity objectives

ObjectiveTarget
Recovery Time Objective (RTO)≤ 60 minutes for production services
Recovery Point Objective (RPO)≤ 24 hours for customer data (D1 backup cadence)
Evidence continuityAutomated collectors resume on next cron trigger (≤ 24 hours)

Threat scenarios

ScenarioLikelihoodImpactMitigation
Cloudflare regional outageLowHighMulti-region Cloudflare Workers + R2 geo-replication
D1 database corruptionVery lowCriticalWeekly D1 backup export + quarterly restore test
Signing key lossVery lowCriticalKey recovery procedure + V2 overlap slot
GitHub outage (CI/CD blocked)LowMediumDeployments via Wrangler CLI from local; Cloudflare handles runtime
Founder incapacitationLowCriticalKey escrow procedure (sealed envelope)

Recovery procedures

Production service recovery

  1. Confirm outage via Cloudflare status page and tail-consumer-coverage alerts
  2. If regional: Cloudflare automatically routes to healthy regions (no action required)
  3. If account-level: Contact Cloudflare support with account ID and evidence of ownership

Database (D1) recovery

  1. Retrieve latest backup from sigmashake-d1-backups R2 bucket
  2. Create new D1 database: wrangler d1 create sigmashake-compliance-recovery
  3. Restore: wrangler d1 execute --local < backup.sql
  4. Update wrangler.toml binding + deploy

Evidence collection recovery

  1. Identify stale collectors via cron-health or self-evaluation
  2. Trigger manual run: POST /compliance/admin/cron/trigger
  3. Verify evidence resumes via /api/v1/soa.json?framework=iso27001

Signing key recovery

  1. Generate new Ed25519 key pair
  2. Set COMPLIANCE_SIGNING_KEY via wrangler secret put
  3. Register new key in signing_keys table
  4. Previous key retained as retiring (historical evidence still verifiable)

Testing

Quarterly BCP drill performed by bcp-test collector:

  • Verifies Merkle chain is unbroken for the period
  • Checks for stuck error evidence runs
  • Records drill outcome in bcp_tests table

Evidence

CollectorCadenceControl
bcp-testQuarterlyA1.2, A1.3, A.5.29, A.5.30
d1-backup-exportWeeklyA.8.13
d1-backup-verifyDailyA.8.13, A.8.14
dr-runbook-currencyQuarterlyA.5.30, A.8.14