BC/DR

Backup / Disaster-Recovery RTO/RPO declaration primitive for regulated workloads (HIPAA / DORA / ISO 22301:2019 / NIST SP 800-34). Operators declare their Recovery Time Objective (max acceptable downtime) and Recovery Point Objective (max acceptable data loss) per service; the framework captures the targets in a tamper-evident audit row and exposes them via list() / get() for dashboard / regulator-export use.

The framework cannot enforce end-to-end RTO/RPO — those depend on downstream backup cadence, replication topology, and restore testing the operator owns. What it does enforce is the shape of the declaration (typed targets, BCDR tier vocabulary, regulator citation list) so the auditor-facing record stays consistent across services.

b.budr.declare(opts) #

stable0.8.0hipaadorasoc2
{
  service:     string (1..128 chars, [A-Za-z0-9._:/-]),
  rtoMs:       number  (positive finite integer milliseconds),
  rpoMs:       number  (positive finite integer milliseconds),
  tier:        "platinum" | "gold" | "silver" | "bronze",
  criticality: "critical" | "high" | "medium" | "low",
  owner:       string  (team / role accountable for restore),
  reviewedAt:  number  (ms-since-epoch of last operator review),
  citations:   Array  (e.g. ["dora-art-11", "iso-22301:2019"]),
  audit:       boolean         (default true; set false to skip audit emit),
}

Register a service's Recovery Time Objective + Recovery Point Objective targets. Each call replaces the previous declaration for the same service and emits a budr.declared audit row carrying the typed targets, BCDR tier, criticality, owner, and regulator citations. Throws BudrError on bad opts (unknown tier, missing targets, citation list not an array).

var dec = b.budr.declare({
  service:     "payments-gateway",
  rtoMs:       60 * 60 * 1000,
  rpoMs:       5 * 60 * 1000,
  tier:        "platinum",
  criticality: "critical",
  owner:       "team-payments",
  citations:   ["dora-art-11", "iso-22301:2019"],
});
dec.tier;     // → "platinum"
dec.rtoMs;    // → 3600000

b.budr.get(service) #

stable0.8.0

Look up the registered declaration for service. Returns the frozen declaration object on hit, null on miss or non-string input. Cheap — purely an in-memory Map lookup.

b.budr.declare({
  service: "core-ledger", rtoMs: 1800000, rpoMs: 60000,
  tier: "platinum", criticality: "critical",
});
var dec = b.budr.get("core-ledger");
dec.rpoMs;                    // → 60000
b.budr.get("not-registered"); // → null

b.budr.list() #

stable0.8.0

Snapshot of every registered declaration in insertion order. Returns a fresh array — mutating it does not affect the registry. Use this to drive a dashboard table or to export the operator's BCDR posture for an auditor.

b.budr.declare({
  service: "payments-gateway", rtoMs: 3600000, rpoMs: 300000,
  tier: "platinum", criticality: "critical",
});
b.budr.declare({
  service: "reporting", rtoMs: 14400000, rpoMs: 3600000,
  tier: "silver", criticality: "medium",
});
var all = b.budr.list();
all.length;                   // → 2
all[0].service;               // → "payments-gateway"

Last updated 2026-08-08T16:39:49.652Z by seeder.