{
  "docVersion": 1,
  "id": "template-progressive-delivery",
  "name": "Progressive delivery",
  "purpose": "A release path where failure is cheap: one-box bake, blue-green stacks, mirrored canary traffic with automated promotion/rollback, and feature flags separating deploy from release.",
  "nodes": {
    "users": {
      "type": "users",
      "label": "Users",
      "x": 20,
      "y": 90,
      "runtime": "unaware, ideally"
    },
    "gw": {
      "type": "gateway",
      "label": "Traffic manager",
      "x": 270,
      "y": 90,
      "runtime": "weighted routing",
      "color": "blue",
      "notes": "Owns the weights. Promotion and rollback are both just numbers changing here."
    },
    "ci": {
      "type": "ci",
      "label": "CI / CD",
      "x": 20,
      "y": 300,
      "runtime": "merge → build → wave 0"
    },
    "blue": {
      "type": "k8s",
      "label": "Blue — v41 (live)",
      "x": 560,
      "y": 90,
      "runtime": "95% of traffic",
      "color": "blue"
    },
    "green": {
      "type": "k8s",
      "label": "Green — v42 (canary)",
      "x": 560,
      "y": 300,
      "runtime": "5% + mirrored traffic",
      "color": "green",
      "patterns": [
        "canary"
      ]
    },
    "onebox": {
      "type": "server",
      "label": "One-box region",
      "x": 560,
      "y": 510,
      "runtime": "wave 0 · bakes 24h",
      "color": "amber",
      "notes": "The first and loneliest instance of v42. If it misbehaves, the blast radius is one box in one region."
    },
    "metrics": {
      "type": "apm",
      "label": "Canary analysis",
      "x": 810,
      "y": 300,
      "runtime": "auto promote / rollback",
      "color": "purple",
      "notes": "Compares green vs blue on latency, errors, saturation. A breach flips weights back automatically — no pager needed."
    },
    "flags": {
      "type": "flag",
      "label": "Feature flags",
      "x": 810,
      "y": 510,
      "runtime": "release ≠ deploy · kill switch",
      "color": "purple"
    }
  },
  "edges": {
    "e1": {
      "from": "users",
      "to": "gw",
      "fromSide": "right",
      "toSide": "left",
      "label": "requests",
      "animated": true
    },
    "e2": {
      "from": "gw",
      "to": "blue",
      "fromSide": "right",
      "toSide": "left",
      "label": "95%",
      "animated": true
    },
    "e3": {
      "from": "gw",
      "to": "green",
      "fromSide": "bottom",
      "toSide": "left",
      "label": "5% + mirror of blue",
      "animated": true,
      "color": "green"
    },
    "e4": {
      "from": "ci",
      "to": "onebox",
      "fromSide": "right",
      "toSide": "left",
      "label": "wave 0: deploy here first",
      "style": "dashed"
    },
    "e5": {
      "from": "ci",
      "to": "green",
      "fromSide": "right",
      "toSide": "left",
      "label": "wave 1 after bake",
      "style": "dashed"
    },
    "e6": {
      "from": "green",
      "to": "metrics",
      "fromSide": "right",
      "toSide": "left",
      "label": "golden signals"
    },
    "e7": {
      "from": "metrics",
      "to": "gw",
      "fromSide": "top",
      "toSide": "right",
      "label": "promote / rollback weights",
      "style": "dashed"
    },
    "e8": {
      "from": "flags",
      "to": "green",
      "fromSide": "left",
      "toSide": "bottom",
      "label": "features released independently",
      "style": "dashed"
    }
  },
  "boxes": {
    "b1": {
      "x": 530,
      "y": 30,
      "w": 560,
      "h": 440,
      "label": "the same build, earning trust in stages",
      "color": "green",
      "opacity": 0.04
    }
  },
  "texts": {
    "t1": {
      "x": 20,
      "y": 460,
      "text": "mirrored traffic is the cheat code: green processes\nreal production requests whose responses are thrown\naway — bugs surface before a single user is exposed.",
      "color": "green",
      "size": 12
    }
  },
  "meta": {
    "createdAt": "2026-07-13T09:00:00.000Z",
    "modifiedAt": "2026-07-13T09:00:00.000Z"
  }
}