ALTER TABLE pieces ADD COLUMN output_title TEXT NOT NULL DEFAULT ''; ALTER TABLE piece_usages ADD COLUMN output_title_snapshot TEXT NOT NULL DEFAULT ''; CREATE TABLE piece_templates ( id TEXT PRIMARY KEY, name TEXT NOT NULL UNIQUE, description TEXT NOT NULL DEFAULT '', snapshot_json TEXT NOT NULL CHECK (json_valid(snapshot_json)), revision INTEGER NOT NULL DEFAULT 1 CHECK (revision >= 1), created_at_utc TEXT NOT NULL, updated_at_utc TEXT NOT NULL ); INSERT INTO piece_templates ( id, name, description, snapshot_json, revision, created_at_utc, updated_at_utc ) VALUES ( 'talk', 'Gespräch', 'Leitfragen, Recherche und eine klare Überleitung.', '{"title":"Unbenanntes Gespräch","formatId":"format-talk","moderationNotes":"## Leitfragen\n\n- ","categoryIds":["cat-jc"]}', 1, '2026-10-23T00:00:00.000Z', '2026-10-23T00:00:00.000Z' ), ( 'find', 'Reaction / Fundstück', 'Quelle, Einordnung und präsentierbare Kernaussage.', '{"title":"Neues Fundstück","formatId":"format-find","presentationText":"## Kernaussage\n\n","categoryIds":["cat-reaction"]}', 1, '2026-10-23T00:00:00.000Z', '2026-10-23T00:00:00.000Z' ), ( 'interaction', 'Interaktion', 'Quiz, Publikumsfrage oder kleines Spiel.', '{"title":"Neue Interaktion","formatId":"format-quiz","moderationNotes":"## Ablauf\n\n1. ","categoryIds":["cat-game"]}', 1, '2026-10-23T00:00:00.000Z', '2026-10-23T00:00:00.000Z' ); CREATE TABLE planning_commands ( show_id TEXT NOT NULL REFERENCES shows(id) ON DELETE CASCADE, command_id TEXT NOT NULL, piece_id TEXT NOT NULL REFERENCES pieces(id) ON DELETE CASCADE, usage_id TEXT NOT NULL REFERENCES piece_usages(id) ON DELETE CASCADE, result_revision INTEGER NOT NULL CHECK (result_revision >= 1), created_at_utc TEXT NOT NULL, PRIMARY KEY (show_id, command_id) ); CREATE TABLE presentation_channels ( id TEXT PRIMARY KEY, name TEXT NOT NULL, access_key TEXT NOT NULL, key_hash TEXT NOT NULL UNIQUE, show_id TEXT REFERENCES shows(id) ON DELETE SET NULL, revision INTEGER NOT NULL DEFAULT 0 CHECK (revision >= 0), created_at_utc TEXT NOT NULL, updated_at_utc TEXT NOT NULL ); UPDATE presentation_access_tokens SET revoked_at_utc = COALESCE(revoked_at_utc, '2026-10-23T00:00:00.000Z');