{
  "id": "terminal-ledger-incident",
  "name": "Incident Record",
  "theme": "terminal-ledger",
  "category": "Data & Reports",
  "description": "A postmortem laid out as a timeline with the detection gap and the mitigation gap measured on the page, not left for the reader to compute.",
  "layout": "A summary key-value block, then a timeline where the gap between rows is annotated with its own duration, so the two expensive silences are visible as labelled space.",
  "modules": [
    {
      "key": "summary",
      "name": "Incident summary",
      "html": "\n<header class=\"is\">\n  <div class=\"is-t\"><span class=\"sev\">SEV-2</span><h1>INC-0418 · QUEUE.INGEST CONSUMER STALL</h1></div>\n  <dl><div><dt>DURATION</dt><dd>2h 33m</dd></div><div><dt>DETECTED</dt><dd>Alert, 27m after onset</dd></div><div><dt>IMPACT</dt><dd>4.2M messages delayed, 0 lost</dd></div><div><dt>OWNER</dt><dd>platform-ingest</dd></div></dl>\n</header>"
    },
    {
      "key": "timeline",
      "name": "Timeline",
      "html": "\n<ol class=\"tl\">\n  <li><span class=\"tm\">09:14</span><div><b>ONSET</b><p>Partition 11 added by autoscaler. Consumer group begins rebalance.</p></div></li>\n  <li class=\"gap\"><span class=\"gp\">27m undetected</span></li>\n  <li><span class=\"tm\">09:41</span><div><b>DETECTED</b><p>Lag alert fires at 500K threshold. Page delivered to on-call.</p></div></li>\n  <li><span class=\"tm\">09:48</span><div><b>ACKNOWLEDGED</b><p>On-call acknowledges. Initial hypothesis: upstream producer spike. Incorrect.</p></div></li>\n  <li class=\"gap\"><span class=\"gp\">1h 46m mitigating the wrong thing</span></li>\n  <li><span class=\"tm\">11:34</span><div><b>DIAGNOSED</b><p>Member 7f2a identified as unresponsive; rebalance never completed.</p></div></li>\n  <li><span class=\"tm\">11:47</span><div><b>MITIGATED</b><p>Member evicted. Rebalance completes in 9s. Lag drains over 14m.</p></div></li>\n  <li><span class=\"tm\">12:01</span><div><b>RESOLVED</b><p>Lag below threshold. Monitoring for 45m before closing.</p></div></li>\n</ol>"
    },
    {
      "key": "actions",
      "name": "Follow-up actions",
      "html": "\n<section class=\"fa\"><h2>ACTIONS</h2>\n  <ul>\n    <li><span class=\"pr p1\">P1</span><span>Alert on rebalance duration, not only on lag — the lag alert fired 27m late by construction.</span><span class=\"own\">platform-ingest</span></li>\n    <li><span class=\"pr p1\">P1</span><span>Evict unresponsive group members automatically after 2 failed heartbeats.</span><span class=\"own\">platform-ingest</span></li>\n    <li><span class=\"pr p2\">P2</span><span>Runbook: rule out rebalance before investigating producer volume.</span><span class=\"own\">sre</span></li>\n    <li><span class=\"pr p3\">P3</span><span>Dashboard: put group membership on the ingest panel.</span><span class=\"own\">sre</span></li>\n  </ul>\n</section>"
    }
  ],
  "moduleCount": 3,
  "reorderable": true,
  "meta": {
    "id": "terminal-ledger-incident",
    "model": "Claude Opus 5",
    "author": "Claude Code",
    "createdAt": "2026-08-29T18:41:55+09:00",
    "updatedAt": "2026-08-29T18:41:55+09:00",
    "version": "1.0.0",
    "isNew": false
  },
  "link": "/api/v1/designs/terminal-ledger-incident.json",
  "structure": "A summary key-value block, then a timeline where the gap between rows is annotated with its own duration, so the two expensive silences are visible as labelled space.",
  "html": "<div class=\"dz dz-terminal-ledger-incident\" data-design=\"terminal-ledger-incident\" data-theme=\"terminal-ledger\">\n<section class=\"dz-mod\" data-mod=\"summary\" aria-label=\"Incident summary\">\n<header class=\"is\">\n  <div class=\"is-t\"><span class=\"sev\">SEV-2</span><h1>INC-0418 · QUEUE.INGEST CONSUMER STALL</h1></div>\n  <dl><div><dt>DURATION</dt><dd>2h 33m</dd></div><div><dt>DETECTED</dt><dd>Alert, 27m after onset</dd></div><div><dt>IMPACT</dt><dd>4.2M messages delayed, 0 lost</dd></div><div><dt>OWNER</dt><dd>platform-ingest</dd></div></dl>\n</header></section>\n<section class=\"dz-mod\" data-mod=\"timeline\" aria-label=\"Timeline\">\n<ol class=\"tl\">\n  <li><span class=\"tm\">09:14</span><div><b>ONSET</b><p>Partition 11 added by autoscaler. Consumer group begins rebalance.</p></div></li>\n  <li class=\"gap\"><span class=\"gp\">27m undetected</span></li>\n  <li><span class=\"tm\">09:41</span><div><b>DETECTED</b><p>Lag alert fires at 500K threshold. Page delivered to on-call.</p></div></li>\n  <li><span class=\"tm\">09:48</span><div><b>ACKNOWLEDGED</b><p>On-call acknowledges. Initial hypothesis: upstream producer spike. Incorrect.</p></div></li>\n  <li class=\"gap\"><span class=\"gp\">1h 46m mitigating the wrong thing</span></li>\n  <li><span class=\"tm\">11:34</span><div><b>DIAGNOSED</b><p>Member 7f2a identified as unresponsive; rebalance never completed.</p></div></li>\n  <li><span class=\"tm\">11:47</span><div><b>MITIGATED</b><p>Member evicted. Rebalance completes in 9s. Lag drains over 14m.</p></div></li>\n  <li><span class=\"tm\">12:01</span><div><b>RESOLVED</b><p>Lag below threshold. Monitoring for 45m before closing.</p></div></li>\n</ol></section>\n<section class=\"dz-mod\" data-mod=\"actions\" aria-label=\"Follow-up actions\">\n<section class=\"fa\"><h2>ACTIONS</h2>\n  <ul>\n    <li><span class=\"pr p1\">P1</span><span>Alert on rebalance duration, not only on lag — the lag alert fired 27m late by construction.</span><span class=\"own\">platform-ingest</span></li>\n    <li><span class=\"pr p1\">P1</span><span>Evict unresponsive group members automatically after 2 failed heartbeats.</span><span class=\"own\">platform-ingest</span></li>\n    <li><span class=\"pr p2\">P2</span><span>Runbook: rule out rebalance before investigating producer volume.</span><span class=\"own\">sre</span></li>\n    <li><span class=\"pr p3\">P3</span><span>Dashboard: put group membership on the ingest panel.</span><span class=\"own\">sre</span></li>\n  </ul>\n</section></section>\n</div>",
  "css": "\n.dz-terminal-ledger-incident { background: var(--background); color: var(--foreground); font-family: var(--pv-mono); font-size: 12.5px; padding: 0 0 20px; }\n.dz-terminal-ledger-incident .is { padding: 16px 18px 14px; border-bottom: var(--pv-bw) solid var(--foreground); }\n.dz-terminal-ledger-incident .is-t { display: flex; align-items: center; gap: 12px; }\n.dz-terminal-ledger-incident .sev { background: var(--destructive); color: var(--background); font-size: 11px; letter-spacing: .1em; padding: 3px 9px; }\n.dz-terminal-ledger-incident .is h1 { font-size: 15px; letter-spacing: .06em; margin: 0; font-weight: 700; }\n.dz-terminal-ledger-incident .is dl { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 14px; margin: 14px 0 0; }\n.dz-terminal-ledger-incident .is dt { font-size: 10.5px; letter-spacing: .12em; color: var(--muted-foreground); }\n.dz-terminal-ledger-incident .is dd { margin: 4px 0 0; font-size: 13px; }\n.dz-terminal-ledger-incident .tl { list-style: none; margin: 0; padding: 16px 18px 0; }\n.dz-terminal-ledger-incident .tl li { display: grid; grid-template-columns: 58px minmax(0, 1fr); gap: 14px; padding: 8px 0; }\n.dz-terminal-ledger-incident .tl .tm { color: var(--primary); }\n.dz-terminal-ledger-incident .tl b { font-size: 11px; letter-spacing: .12em; }\n.dz-terminal-ledger-incident .tl p { margin: 3px 0 0; color: var(--muted-foreground); line-height: 1.55; max-width: 70ch; }\n.dz-terminal-ledger-incident .tl .gap { display: block; padding: 0 0 0 72px; }\n.dz-terminal-ledger-incident .gp { display: inline-block; font-size: 11px; color: var(--destructive); border-left: 2px solid var(--destructive); padding: 8px 0 8px 12px; margin-left: -14px; }\n.dz-terminal-ledger-incident .fa { padding: 18px 18px 0; }\n.dz-terminal-ledger-incident .fa h2 { font-size: 11px; letter-spacing: .18em; margin: 0 0 8px; padding-bottom: 6px; border-bottom: var(--pv-bw) solid var(--foreground); }\n.dz-terminal-ledger-incident .fa ul { list-style: none; margin: 0; padding: 0; }\n.dz-terminal-ledger-incident .fa li { display: grid; grid-template-columns: 34px minmax(0, 1fr) 130px; gap: 14px; align-items: baseline; padding: 9px 0; border-bottom: var(--pv-bw) solid var(--border); line-height: 1.55; }\n.dz-terminal-ledger-incident .pr { font-size: 10.5px; letter-spacing: .06em; text-align: center; padding: 2px 0; }\n.dz-terminal-ledger-incident .p1 { background: var(--destructive); color: var(--background); }\n.dz-terminal-ledger-incident .p2 { background: var(--chart-4); color: var(--background); }\n.dz-terminal-ledger-incident .p3 { border: var(--pv-bw) solid var(--border); color: var(--muted-foreground); }\n.dz-terminal-ledger-incident .own { color: var(--muted-foreground); font-size: 11.5px; text-align: right; }\n@media (prefers-reduced-motion: reduce) { .dz-terminal-ledger-incident *, .dz-terminal-ledger-incident *::before, .dz-terminal-ledger-incident *::after { transition-duration: 1ms !important; animation-duration: 1ms !important; } }",
  "requiredTheme": "/api/v1/themes/terminal-ledger.json",
  "googleFontsHref": "https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600;700&display=swap"
}