{
  "docVersion": 1,
  "id": "blog-hinted-handoff-0001",
  "name": "Hinted handoff — writes survive a dead replica",
  "purpose": "A quorum write with one replica down: the coordinator stores a hint on a healthy node and replays it when the dead replica returns.",
  "nodes": {
    "client": {
      "type": "user",
      "label": "Client",
      "x": 20,
      "y": 220
    },
    "coord": {
      "type": "server",
      "label": "Coordinator",
      "x": 270,
      "y": 220,
      "runtime": "any node can coordinate"
    },
    "ra": {
      "type": "database",
      "label": "Replica A",
      "x": 590,
      "y": 20,
      "color": "green",
      "runtime": "ack ✓"
    },
    "rb": {
      "type": "database",
      "label": "Replica B",
      "x": 590,
      "y": 180,
      "color": "green",
      "runtime": "ack ✓"
    },
    "rc": {
      "type": "database",
      "label": "Replica C",
      "x": 590,
      "y": 340,
      "color": "red",
      "style": "dashed",
      "runtime": "DOWN"
    },
    "hint": {
      "type": "storage",
      "label": "Node D — hint store",
      "x": 590,
      "y": 500,
      "w": 190,
      "color": "amber",
      "runtime": "hint: (C, write)"
    }
  },
  "edges": {
    "e1": {
      "from": "client",
      "to": "coord",
      "fromSide": "right",
      "toSide": "left",
      "label": "write k=v · W=2"
    },
    "e2": {
      "from": "coord",
      "to": "ra",
      "fromSide": "right",
      "toSide": "left",
      "label": "replicate"
    },
    "e3": {
      "from": "coord",
      "to": "rb",
      "fromSide": "right",
      "toSide": "left",
      "label": "replicate"
    },
    "e4": {
      "from": "coord",
      "to": "rc",
      "fromSide": "right",
      "toSide": "left",
      "label": "replicate ✗",
      "style": "dashed"
    },
    "e5": {
      "from": "coord",
      "to": "hint",
      "fromSide": "bottom",
      "toSide": "left",
      "label": "store hint for C",
      "style": "dashed",
      "color": "amber"
    },
    "e6": {
      "from": "hint",
      "to": "rc",
      "fromSide": "top",
      "toSide": "bottom",
      "label": "replay when C returns",
      "style": "dashed",
      "color": "amber"
    }
  },
  "boxes": {
    "b1": {
      "x": 550,
      "y": -30,
      "w": 300,
      "h": 680,
      "label": "replica set for key k · RF=3",
      "color": "blue",
      "opacity": 0.04
    }
  },
  "texts": {
    "t1": {
      "x": 20,
      "y": 400,
      "text": "quorum W=2 is met by A+B — the client\ngets success even though C is dead.\n\nhints are a durability patch, not a\nreplica: reads still need R+W > RF\nto see the newest value.",
      "color": "amber",
      "size": 12
    }
  },
  "meta": {
    "createdAt": "2026-07-12T09:00:00.000Z",
    "modifiedAt": "2026-07-12T09:00:00.000Z"
  }
}