import type { AdapterStatus, Item, Panel } from '../../src/lib/collector-types'
import { FACTORY_ADAPTER, FACTORY_RUNS_PANEL } from './factory-fixtures'

const NOW = Date.parse('2026-07-17T12:00:00.000Z')
const iso = (ms: number) => new Date(ms).toISOString()

export const RUN_ID = 'autonomy-p4-babysitter'

export const SCOREBOARD_PANEL: Panel = {
  id: 'scoreboard',
  ts: iso(NOW),
  data: {
    repos: [
      {
        repo: 'multideal',
        works: 8,
        total: 34,
        verdicts: { works: 8, broken: 9, missing: 5, unverified: 12 },
        title: 'multideal',
        summary: '8 WORKS / 9 BROKEN / 5 MISSING / 12 UNVERIFIED (34 criteria)',
        trend7d: 2,
        churn: false,
        commitsSinceLastWorksDelta: 3,
        criteria: [
          { id: 'AC-01', text: 'Homepage serves production traffic', verdict: 'works', evidence: 'prod 200 at multi.deal', section: 'Production infrastructure', reachedAt: '2026-06-14' },
          { id: 'AC-05', text: 'Collector federates all panels', verdict: 'works', evidence: 'GET /api/collector/state 200', section: 'Production infrastructure', reachedAt: '2026-06-20' },
          { id: 'AC-11', text: 'Checkout completes end to end', verdict: 'broken', evidence: '500 on /api/checkout under load', section: 'Customer money path', reachedAt: null },
          { id: 'AC-12', text: 'Refund webhook reconciles ledger', verdict: 'broken', evidence: 'ledger drift on partial refund', section: 'Customer money path', reachedAt: null },
          { id: 'AC-18', text: 'Live Stripe key configured in prod', verdict: 'missing', evidence: null, section: 'Customer money path', reachedAt: null },
          { id: 'AC-24', text: 'Vendor KYC gate enforced', verdict: 'missing', evidence: null, section: 'Vendor side', reachedAt: null },
          { id: 'AC-30', text: 'Nightly vendor payout batch', verdict: 'unverified', evidence: 'verify: run payout on staging', section: 'Vendor side', reachedAt: null },
          { id: 'AC-33', text: 'GDPR export endpoint', verdict: 'unverified', evidence: 'verify: request export as test user', section: 'Trust, legal, safety', reachedAt: null },
        ],
      },
      { repo: 'zync.is', works: 3, total: 31, trend7d: 0, churn: true, commitsSinceLastWorksDelta: 118 },
    ],
  },
}

export const LIMITS_PANEL: Panel = {
  id: 'limits',
  ts: iso(NOW),
  data: {
    stale: false,
    ageSeconds: 12,
    accounts: [
      {
        slug: 'claude:claude A',
        provider: 'claude',
        label: 'claude · claude A',
        percent: 78,
        status: 'warn',
        spend: { amount: 8.4, limit: null, currency: 'usd', display: '$8.40' },
        window: { primaryResetAt: null, secondaryResetAt: null },
        capEtaMinutes: 55,
      },
      {
        slug: 'codex:codex',
        provider: 'codex',
        label: 'codex · codex',
        percent: 41,
        status: 'ok',
        spend: { amount: 3, limit: null, currency: 'usd', display: '$3.00' },
        window: { primaryResetAt: null, secondaryResetAt: null },
        capEtaMinutes: null,
      },
    ],
  },
}

export const CI_PANEL: Panel = {
  id: 'ci',
  ts: iso(NOW),
  data: {
    repos: [
      {
        repo: 'alexcodeplace/multideal',
        degraded: [],
        queueComplete: true,
        historyComplete: true,
        refsComplete: true,
        trainRunsComplete: true,
        runnersComplete: true,
        prsComplete: true,
        trainsComplete: true,
        queueDepth: 2,
        runs: [
          {
            id: 4821,
            name: 'e2e',
            headBranch: 'main',
            status: 'completed',
            conclusion: 'failure',
            htmlUrl: 'https://github.com/alexcodeplace/multideal/actions/runs/4821',
            updatedAt: iso(NOW),
          },
        ],
        runners: [
          {
            id: 7,
            name: 'laptop-runner',
            status: 'online',
            busy: true,
            currentJob: 'Integration database lanes',
            currentRepo: 'alexcodeplace/multideal',
            currentKnown: true,
          },
        ],
        runnersBusy: 1,
        runnersTotal: 1,
        prQueueDepth: 2,
        oldestQueuedAgeH: 0.75,
        prs: [
          {
            repo: 'spoofed/child-repo',
            number: 79,
            title: 'Prevent duplicate payment capture',
            url: 'https://github.com/alexcodeplace/multideal/pull/79',
            branch: 'fix/payment-capture',
            headRefOid: 'oid-multideal-79-a',
            createdAt: iso(NOW - 90_000_000),
            ageH: 25,
            mergeable: 'CONFLICTING',
            staleVsMain: true,
            checksComplete: true,
            checks: [
              { name: 'Unit tests', bucket: 'fail' },
              { name: 'Typecheck', bucket: 'pass' },
            ],
            trainPr: 4901,
          },
          {
            repo: 'spoofed/child-repo',
            number: 74,
            title: 'Harden webhook replay guard',
            url: 'https://github.com/alexcodeplace/multideal/pull/74',
            branch: 'fix/webhook-replay',
            headRefOid: 'oid-multideal-74-a',
            createdAt: iso(NOW - 14_400_000),
            ageH: 4,
            mergeable: 'MERGEABLE',
            staleVsMain: false,
            checksComplete: true,
            checks: [{ name: 'Integration', bucket: 'pending' }],
            trainPr: null,
          },
        ],
        trains: [
          {
            repo: 'spoofed/child-repo',
            prNumber: 4901,
            prUrl: 'https://github.com/alexcodeplace/multideal/pull/4901',
            branch: 'integration/batch-train-12',
            createdAt: iso(NOW - 14_400_000),
            members: [79, 74],
            state: 'failed',
            stateGap: null,
            gateRun: {
              id: 9201,
              attempt: 1,
              status: 'completed',
              conclusion: 'failure',
              jobsComplete: true,
              jobs: [
                {
                  id: 41,
                  name: 'Integration database lanes',
                  status: 'completed',
                  conclusion: 'failure',
                  runnerId: 7,
                  runner: 'laptop-runner',
                  startedAt: iso(NOW - 900_000),
                  completedAt: iso(NOW - 600_000),
                  infraFlag: true,
                },
              ],
            },
            blockedBy: 'Integration database lanes — runner disconnected (infra)',
            infraFlag: true,
          },
          {
            repo: 'spoofed/child-repo',
            prNumber: 4902,
            prUrl: 'https://github.com/alexcodeplace/multideal/pull/4902',
            branch: 'integration/batch-train-13',
            createdAt: iso(NOW - 7_200_000),
            members: [82],
            state: 'gating',
            stateGap: null,
            gateRun: {
              id: 9202,
              attempt: 1,
              status: 'in_progress',
              conclusion: null,
              jobsComplete: false,
              jobs: [
                {
                  id: 42,
                  name: 'Gate',
                  status: 'in_progress',
                  conclusion: null,
                  runnerId: 7,
                  runner: 'laptop-runner',
                  startedAt: iso(NOW - 300_000),
                  completedAt: null,
                  infraFlag: null,
                },
              ],
            },
            blockedBy: 'Gate',
            infraFlag: null,
          },
        ],
        lag: {
          landsToday: 5,
          medianOpenToMergeH7d: 6.5,
          gates: [
            { runId: 9201, computeMin: 10, wallMin: 20 },
            { runId: 9199, computeMin: 12, wallMin: 18 },
          ],
          warmedAt: iso(NOW - 86_400_000),
        },
      },
      {
        repo: 'alexcodeplace/overdeck',
        degraded: [],
        queueComplete: true,
        historyComplete: true,
        trainRunsComplete: true,
        runnersComplete: true,
        refsComplete: true,
        prsComplete: true,
        trainsComplete: true,
        queueDepth: 1,
        runs: [],
        runners: [
          {
            id: 8,
            name: 'debian-runner',
            status: 'online',
            busy: false,
            currentJob: null,
            currentRepo: null,
            currentKnown: true,
          },
        ],
        runnersBusy: 0,
        runnersTotal: 1,
        prQueueDepth: 1,
        oldestQueuedAgeH: 0.1,
        prs: [
          {
            repo: 'wrong/overdeck-child',
            number: 79,
            title: 'Expose CI train state',
            url: 'https://github.com/alexcodeplace/overdeck/pull/79',
            branch: 'feat/ci-trains',
            headRefOid: 'oid-overdeck-79-a',
            createdAt: iso(NOW - 90_000_000),
            ageH: 25,
            mergeable: 'UNKNOWN',
            staleVsMain: null,
            checksComplete: false,
            checks: [{ name: 'Browser build', bucket: 'pass' }],
            trainPr: 5901,
          },
        ],
        trains: [
          {
            repo: 'wrong/overdeck-child',
            prNumber: 5901,
            prUrl: 'https://github.com/alexcodeplace/overdeck/pull/5901',
            branch: 'integration/batch-train-3',
            createdAt: iso(NOW - 3_600_000),
            members: [79],
            state: 'green',
            stateGap: null,
            gateRun: {
              id: 9301,
              attempt: 1,
              status: 'completed',
              conclusion: 'success',
              jobsComplete: true,
              jobs: [],
            },
            blockedBy: null,
            infraFlag: false,
          },
        ],
        lag: {
          landsToday: 2,
          medianOpenToMergeH7d: 4,
          gates: [{ runId: 9301, computeMin: 8, wallMin: 12 }],
          warmedAt: iso(NOW - 86_400_000),
        },
      },
    ],
    runners: [
      {
        id: 7,
        name: 'laptop-runner',
        status: 'online',
        busy: true,
        scope: 'alexcodeplace/multideal',
        currentJob: 'Integration database lanes',
        currentRepo: 'alexcodeplace/multideal',
        currentKnown: true,
      },
      {
        id: 8,
        name: 'debian-runner',
        status: 'online',
        busy: false,
        scope: 'alexcodeplace/overdeck',
        currentJob: null,
        currentRepo: null,
        currentKnown: true,
      },
    ],
    runnersComplete: true,
    oldestQueuedAgeH: 0.75,
  },
}

export const CI_ONLY_PANELS: Panel[] = [CI_PANEL]

export const PLANS_PANEL: Panel = {
  id: 'plans',
  ts: iso(NOW),
  data: {
    runs: [
      {
        runId: RUN_ID,
        seq: 28,
        title: 'autonomy-p4',
        status: 'running',
        state: 'active',
        owner: 'harness',
        currentTask: 't2',
        tasksTotal: 5,
        tasksCompleted: 2,
        pendingDecisions: 2,
        degradedReason: 'review gate failed twice',
        updatedAt: iso(NOW),
        repoRoot: '/home/user/Projects/overdeck',
        registry: { slug: 'autonomy-p4', created: '2026-07-18', projectName: 'overdeck' },
        abandoned: false,
        abandonedAt: null,
        waves: [
          {
            wave: 1,
            tasks: [
              { id: 't1', status: 'succeeded', state: 'committed', seat: 'coder', deps: [], attempt: 0, branch: '' },
            ],
          },
          {
            wave: 2,
            tasks: [
              { id: 't2', status: 'running', state: 'active', seat: 'coder', deps: ['t1'], attempt: 1, branch: 'plan/run-page-v2' },
            ],
          },
        ],
      },
      {
        runId: 'dep-provisioning',
        seq: 7,
        title: 'dep-provisioning',
        status: 'failed',
        state: 'halted',
        owner: 'harness',
        currentTask: null,
        tasksTotal: 3,
        tasksCompleted: 1,
        pendingDecisions: 0,
        degradedReason: 'pin drizzle 0.44 or bump?',
        updatedAt: iso(NOW),
        repoRoot: '/home/user/Projects/dep-provisioning',
        registry: { slug: 'dep-provisioning', created: '2026-07-17', projectName: 'overdeck' },
        abandoned: false,
        abandonedAt: null,
        waves: [],
      },
    ],
  },
}

export const FORENSICS_PANEL: Panel = {
  id: `forensics:${RUN_ID}`,
  ts: iso(NOW),
  data: {
    tiles: [
      { key: 'wallClockMs', label: 'wall clock', value: 108_720_000 },
      { key: 'runCount', label: 'process runs', value: 9 },
      { key: 'llmMs', label: 'time in LLM seats', value: 82_800_000 },
      { key: 'longestHangMs', label: 'longest hang', value: 13_080_000 },
      { key: 'interventionTypes', label: 'intervention types', value: 13 },
      { key: 'diskFullPercent', label: 'disk full', value: 90 },
    ],
    attribution: [
      { cat: 'llm-fixer', totalMs: 40_680_000 },
      { cat: 'llm-implement', totalMs: 27_360_000 },
      { cat: 'gate0', totalMs: 17_280_000 },
      { cat: 'llm-review', totalMs: 13_680_000 },
      { cat: 'idle-restart', totalMs: 7_200_000 },
    ],
    runs: [
      {
        index: 3,
        startTs: '2026-07-16T00:00:00.000Z',
        endTs: '2026-07-16T09:03:00.000Z',
        durationMs: 32_580_000,
        outcome: 'done',
        landed: 14,
        quarantined: 2,
        skipped: 1,
        gate0Fails: 2,
        fixerAttempts: 4,
      },
      {
        index: 4,
        startTs: '2026-07-16T09:03:00.000Z',
        endTs: '2026-07-16T13:30:36.000Z',
        durationMs: 16_056_000,
        outcome: 'crash',
        landed: 0,
        quarantined: 0,
        skipped: 0,
        gate0Fails: 1,
        fixerAttempts: 1,
      },
    ],
    segments: [
      { t0: Date.parse('2026-07-16T00:00:00.000Z'), durMs: 8_460_000, cat: 'llm-fixer', taskId: 't1' },
      { t0: Date.parse('2026-07-16T02:21:00.000Z'), durMs: 4_758_000, cat: 'gate0', taskId: 't1' },
      { t0: Date.parse('2026-07-16T03:40:00.000Z'), durMs: 11_074_000, cat: 'llm-implement', taskId: 't2' },
      { t0: Date.parse('2026-07-16T09:03:00.000Z'), durMs: 3_532_320, cat: 'gate0', taskId: 't3' },
      { t0: Date.parse('2026-07-16T09:59:00.000Z'), durMs: 10_282_320, cat: 'llm-fixer', taskId: 't3' },
    ],
  },
}

export const HOST_PANEL: Panel = {
  id: 'host:laptop',
  ts: iso(NOW),
  data: {
    cpuPsiSomePercent: 4.1,
    memRunwayEtaSeconds: 25_200,
    memRunwayPercent: 62,
    memPsiFullAvg10Percent: 0.2,
    buildSliceJobCount: 0,
    prochot: false,
    diskRootFreePercent: 41.2,
  },
}

export const HOST_DEBIAN1_PANEL: Panel = {
  id: 'host:debian1',
  ts: iso(NOW),
  data: {
    cpuPsiSomePercent: 2.4,
    memRunwayEtaSeconds: 86_400,
    memRunwayPercent: 48,
    memPsiFullAvg10Percent: 0.1,
    buildSliceJobCount: 2,
    prochot: false,
    diskRootFreePercent: 55.0,
  },
}

export const CLUSTER_PANEL: Panel = {
  id: 'cluster',
  ts: iso(NOW),
  data: {
    debian1: 'online',
    autoscaler: { state: 'pressure', idle: 0, pressure: 2 },
    buildslot: { running: 1, queued: 3, p95WaitSeconds: 300 },
  },
}

export const AGENTS_PANEL: Panel = {
  id: 'agents',
  ts: iso(NOW),
  data: {
    fleet: [
      { class: 'claude', count: 6, cpuPercent: 312, slices: ['app.slice'] },
      { class: 'cursor-agent', count: 1, cpuPercent: 94, slices: ['app.slice'] },
      { class: 'codex', count: 2, cpuPercent: 41, slices: ['app.slice'] },
    ],
    orphans: 1,
    totalLive: 8,
    events: [],
    culprits: [],
  },
}

export const BOTS_PANEL: Panel = {
  id: 'bots',
  ts: iso(NOW),
  data: {
    d1LatestAt: iso(NOW),
    mirrorLagHours: 0,
    bots: [
      {
        id: 'dealbot',
        name: 'dealbot',
        project: 'deals',
        runtimeStatus: 'running',
        status: 'live',
        statusDetail: 'running · live',
        messages24h: 412,
        errors: 0,
        cost: 1.9,
        messagesTotal: 412,
        costTotal: 1.9,
        lastActivityAt: iso(NOW),
        lastMessageAt: iso(NOW),
      },
      {
        id: 'supportbot',
        name: 'supportbot',
        project: 'support',
        runtimeStatus: 'running',
        status: 'live',
        statusDetail: 'running · live',
        messages24h: 96,
        errors: 1,
        cost: 0.7,
        messagesTotal: 96,
        costTotal: 0.7,
        lastActivityAt: iso(NOW),
        lastMessageAt: iso(NOW),
      },
      {
        id: 'alertbot',
        name: 'alertbot',
        project: 'alerts',
        runtimeStatus: 'running',
        status: 'slow',
        statusDetail: 'running · slow',
        messages24h: 230,
        errors: 4,
        cost: 0.3,
        messagesTotal: 230,
        costTotal: 0.3,
        lastActivityAt: iso(NOW),
        lastMessageAt: iso(NOW),
      },
      {
        id: 'zyncbot',
        name: 'zyncbot',
        project: 'zync',
        runtimeStatus: 'stopped',
        status: 'down',
        statusDetail: 'stopped',
        messages24h: 0,
        errors: 0,
        cost: null,
        messagesTotal: 0,
        costTotal: null,
        lastActivityAt: null,
        lastMessageAt: null,
      },
    ],
  },
}

export const GATES_PANEL: Panel = {
  id: 'gates',
  ts: iso(NOW),
  data: {
    preventOpen: 0,
    slopgateDebtTotal: 14,
    slopgateDebtTrend7d: -2,
    warnignorePending: 0,
    warnignoreAdds7d: 0,
    slopgateRepos: [
      { repo: 'multideal', debt: 8, trend7d: -1 },
      { repo: 'zync.is', debt: 6, trend7d: -1 },
    ],
    precisionRecords: [],
  },
}

export const ALL_PANELS: Panel[] = [
  SCOREBOARD_PANEL,
  LIMITS_PANEL,
  CI_PANEL,
  PLANS_PANEL,
  FORENSICS_PANEL,
  HOST_PANEL,
  HOST_DEBIAN1_PANEL,
  CLUSTER_PANEL,
  AGENTS_PANEL,
  BOTS_PANEL,
  GATES_PANEL,
  FACTORY_RUNS_PANEL,
]

export const ADAPTER_STATUSES: AdapterStatus[] = [
  { id: 'golive', interval: 300_000, lastAttempt: NOW, lastSuccess: NOW, lastPollDurationMs: 84, consecutiveErrors: 0, stale: false },
  { id: 'systray-ai', interval: 30_000, lastAttempt: NOW, lastSuccess: NOW, lastPollDurationMs: 32, consecutiveErrors: 0, stale: false },
  { id: 'ghci', interval: 60_000, lastAttempt: NOW, lastSuccess: NOW, lastPollDurationMs: 148, consecutiveErrors: 0, stale: false },
  { id: 'harness', interval: 5_000, lastAttempt: NOW, lastSuccess: NOW, lastPollDurationMs: 2600, consecutiveErrors: 0, stale: false },
  // stale on purpose: exercises the StaleBadge acceptance criterion on Hosts & Gates.
  { id: 'prometheus', interval: 30_000, lastAttempt: NOW, lastSuccess: NOW - 10 * 60_000, lastPollDurationMs: 52, consecutiveErrors: 0, stale: true },
  { id: 'cluster', interval: 30_000, lastAttempt: NOW, lastSuccess: NOW, lastPollDurationMs: 93, consecutiveErrors: 0, stale: false },
  { id: 'gates', interval: 300_000, lastAttempt: NOW, lastSuccess: NOW, lastPollDurationMs: 121, consecutiveErrors: 0, stale: false },
  { id: 'botmaster', interval: 30_000, lastAttempt: NOW, lastSuccess: NOW, lastPollDurationMs: 74, consecutiveErrors: 0, stale: false },
  FACTORY_ADAPTER,
]

export const RESOLVABLE_ITEM_ID = 'ghci:alexcodeplace/multideal:4821:1'

export const ALL_ITEMS: Item[] = [
  {
    id: 'decision-d-4',
    source: 'harness',
    severity: 'act',
    kind: 'decision',
    title: 'Choose whether to mutate production rows',
    detail: 'task t2',
    ts: iso(NOW),
    actions: [
      {
        verb: 'harness.decision.answer',
        args: { runId: RUN_ID, decisionId: 'd-4', choice: 'proceed' },
        label: 'proceed',
        recommended: true,
      },
      {
        verb: 'harness.decision.answer',
        args: { runId: RUN_ID, decisionId: 'd-4', choice: 'abort' },
        label: 'abort',
      },
    ],
    decision: {
      question: 'Choose whether to mutate production rows',
      options: [{ label: 'proceed', recommended: true }, { label: 'abort' }],
      freeText: false,
      context: 'task t2',
      waitingSince: iso(NOW),
    },
  },
  {
    id: RESOLVABLE_ITEM_ID,
    source: 'ghci',
    project: 'alexcodeplace/multideal',
    severity: 'act',
    kind: 'ci',
    title: 'e2e failed on main',
    detail: 'checkout spec — run #4821 attempt 1',
    ts: iso(NOW),
    actions: [{ verb: 'open', args: { url: 'https://github.com' }, label: 'Open run', recommended: true }],
  },
  {
    id: 'ghci:train:alexcodeplace/multideal:4901:infra-failed',
    source: 'ghci',
    project: 'alexcodeplace/multideal',
    reconciliationScope: 'train:alexcodeplace/multideal:infra-failed',
    severity: 'act',
    kind: 'ci',
    title: 'Train #4901 failed on infrastructure',
    detail: 'runner disconnected during gate',
    ts: iso(NOW - 10_000),
    actions: [{ verb: 'ci.rerunFailed', args: { repo: 'alexcodeplace/multideal', runId: '9201' }, label: 'Rerun failed jobs', recommended: true }],
  },
  {
    id: 'ghci:train:alexcodeplace/multideal:4902:cancel',
    source: 'ghci',
    project: 'alexcodeplace/multideal',
    severity: 'act',
    kind: 'ci',
    title: 'Cancel obsolete train gate',
    detail: 'fixture rejection path',
    ts: iso(NOW - 20_000),
    actions: [{ verb: 'ci.cancelRun', args: { repo: 'alexcodeplace/multideal', runId: '9999' }, label: 'Cancel run' }],
  },
  {
    id: 'ghci:train:alexcodeplace/multideal:4903:green-unmerged',
    source: 'ghci',
    project: 'alexcodeplace/multideal',
    reconciliationScope: 'train:alexcodeplace/multideal:green-unmerged',
    severity: 'act',
    kind: 'ci',
    title: 'Train #4903 is green but unmerged',
    detail: 'gate completed 14 minutes ago',
    ts: iso(NOW - 30_000),
    actions: [{ verb: 'open', args: { url: 'https://github.com/alexcodeplace/multideal/pull/4903' }, label: 'Open pull request', recommended: true }],
  },
  {
    id: 'ghci:train:alexcodeplace/multideal:4904:invalid-open',
    source: 'ghci',
    project: 'alexcodeplace/multideal',
    severity: 'act',
    kind: 'ci',
    title: 'Invalid train link fixture',
    detail: 'must stay on-page',
    ts: iso(NOW - 40_000),
    actions: [{ verb: 'open', args: { url: 'https://evil.example/pull/4904' }, label: 'Open invalid link' }],
  },
  {
    id: 'halt-dep-provisioning',
    source: 'harness',
    project: 'dep-provisioning',
    severity: 'act',
    kind: 'halt',
    title: 'dep-provisioning halted',
    detail: 'pin drizzle 0.44 or bump?',
    ts: iso(NOW - 60_000),
    actions: [],
  },
  {
    id: 'orphan-agent',
    source: 'agent-guard',
    severity: 'act',
    kind: 'alert',
    title: 'Orphan agent burning 94% CPU for 3h12m',
    detail: 'cursor-agent 88231 · ignores SIGTERM · agent-guard',
    ts: iso(NOW - 240_000),
    actions: [{ verb: 'reap', args: { pid: '88231' }, label: 'Reap', recommended: true }],
  },
  {
    id: 'limit:claude-a',
    source: 'systray-ai',
    severity: 'warn',
    kind: 'limit',
    title: 'claude A approaching limit',
    detail: 'percent=78% capEtaMinutes=55',
    ts: iso(NOW - 120_000),
    actions: [{ verb: 'rotate', args: {}, label: 'Rotate', recommended: true }],
  },
  {
    id: 'alert:info-note',
    source: 'prometheus',
    severity: 'info',
    kind: 'alert',
    title: 'informational note',
    detail: 'no action required',
    ts: iso(NOW - 180_000),
    actions: [],
  },
]
