/** * Scene metadata — the single source of truth for order, duration, and which * promoted capture each beat presents. Mirrors demo/storyboard.md; a beat here * with no storyboard row, or a capture not marked `perfect` in the manifest, is * a defect the preflight rejects. */ export const FPS = 30; export const WIDTH = 1920; export const HEIGHT = 1080; export type AudienceRung = 'need' | 'want' | 'dream'; export type Scene = | { kind: 'title'; id: string; seconds: number; rung: AudienceRung; heading: string; lines: string[]; footer?: string; } | { kind: 'proof'; id: string; seconds: number; rung: AudienceRung; capabilityId: string; captureId: string; heading: string; caption: string; } | { kind: 'recap'; id: string; seconds: number; rung: AudienceRung; heading: string; lines: string[]; footer?: string; }; export const scenes: Scene[] = [ { kind: 'title', id: 'B1-opening', seconds: 9, rung: 'need', heading: 'tidalDB deploy verification', lines: [ 'Three voters on orchard9-k3sf. One public endpoint. A runbook an operator can walk.', 'Every number that follows came from a command that ran against the live cluster.', ], footer: 'namespace tidaldb-cluster · image m12-admin-gate-20260823 · 32 checks green', }, { kind: 'proof', id: 'B2-convergence', seconds: 7, rung: 'need', capabilityId: 'CAP-002', captureId: 'CAP-002-convergence', heading: 'Every node agrees, and none is behind', caption: 'Each node asked for its own view. A pod can be Ready while its replication is stalled — that is what the reseed livelock exploited.', }, { kind: 'proof', id: 'B3-boundary-write', seconds: 8, rung: 'need', capabilityId: 'CAP-006', captureId: 'CAP-006-quorum-write', heading: 'The boundary holds, and the write commits', caption: 'Same path, three credentials. Then a write a majority of nodes acknowledged — the one claim a health endpoint cannot fake.', }, { kind: 'proof', id: 'B3a-feed-reorder', seconds: 8, rung: 'need', capabilityId: 'CAP-016', captureId: 'CAP-016-feed-reorder', heading: 'And the product it exists to be', caption: 'Everything before this proves the deployment answers. This is what it is for: one like, the same query again, and the item is first. No ETL between the write and the read — a local node on fixture data, so the claim is the mechanism, not the corpus.', }, { kind: 'proof', id: 'B4-isolation', seconds: 7, rung: 'need', capabilityId: 'CAP-008', captureId: 'CAP-008-network-isolation', heading: 'The refusal is the point', caption: 'A NetworkPolicy that blocks everything is an observability outage. One that blocks nothing is theatre. Both directions proven.', }, { kind: 'proof', id: 'B5-authority', seconds: 6, rung: 'want', capabilityId: 'CAP-014', captureId: 'CAP-014-authority', heading: 'An application key cannot remove a member', caption: '403, not 401 — the credential is valid, it simply has no operator authority.', }, { kind: 'proof', id: 'B6-dashboard', seconds: 8, rung: 'want', capabilityId: 'CAP-010', captureId: 'CAP-010-dashboard', heading: 'The board an operator opens at 3am', caption: 'Health, reseed state, corpus size, and per-node latency — scoped to the cluster, not to whatever else shares the metric name.', }, { kind: 'proof', id: 'B7-recovery', seconds: 6, rung: 'want', capabilityId: 'CAP-013', captureId: 'CAP-013-backup', heading: 'The recovery story is intact', caption: 'Selected by the schedule label the freshness alert actually watches — not merely the newest backup object.', }, { kind: 'proof', id: 'B8-blind-spot', seconds: 7, rung: 'want', capabilityId: 'CAP-012', captureId: 'CAP-012-tidalctl', heading: 'It refuses to invent a number', caption: 'Two healthy peers would otherwise read as 13.3 million events behind. NO REPORT is an honest "I do not know".', }, { kind: 'proof', id: 'B9a-inert', seconds: 7, rung: 'need', capabilityId: 'CAP-015', captureId: 'CAP-015-inert', heading: 'What this deployment does not yet do', caption: 'Two committed features are absent from the running image. The suite asserts that absence, so the day it changes it fails and says so.', }, { kind: 'proof', id: 'B9-drift-catch', seconds: 10, rung: 'dream', capabilityId: 'CAP-014', captureId: 'CAP-014-drift', heading: 'The harness corrected its own runbook', caption: 'The runbook said the credential split was "not active yet — requires an image roll". On its first run the harness read the live image and the live secret, and proved the gate was already enforcing. The document was wrong; the harness said so before anyone noticed.', }, { kind: 'recap', id: 'B10-recap', seconds: 7, rung: 'need', heading: 'Verified, including the gaps', lines: [ '32 checks green against the live deployment.', 'Two committed features are absent from the running image — and the suite asserts that absence deliberately.', 'The day it changes, the suite fails and says so.', ], footer: 'docs/runbooks/deploy-verification.md · npm run test:e2e', }, ]; export const durationInFrames = scenes.reduce( (total, scene) => total + Math.round(scene.seconds * FPS), 0, ); /** Frame offset of each scene, derived once so nothing drifts. */ export const timeline = scenes.reduce<{ scene: Scene; from: number; frames: number }[]>( (acc, scene) => { const from = acc.length === 0 ? 0 : acc[acc.length - 1].from + acc[acc.length - 1].frames; acc.push({ scene, from, frames: Math.round(scene.seconds * FPS) }); return acc; }, [], );