ALTER TABLE generation_tasks ADD COLUMN IF NOT EXISTS task_snapshot JSONB NOT NULL DEFAULT '{}'::jsonb; CREATE TABLE IF NOT EXISTS task_dispatch_outbox ( task_id UUID PRIMARY KEY REFERENCES generation_tasks(id) ON DELETE CASCADE, status TEXT NOT NULL DEFAULT 'pending' CHECK (status IN ('pending', 'leased', 'sent', 'failed')), available_at TIMESTAMPTZ NOT NULL DEFAULT now(), attempts INTEGER NOT NULL DEFAULT 0, lease_owner TEXT, lease_expires_at TIMESTAMPTZ, last_error TEXT, dispatched_at TIMESTAMPTZ, created_at TIMESTAMPTZ NOT NULL DEFAULT now() ); CREATE INDEX IF NOT EXISTS task_dispatch_outbox_poll_idx ON task_dispatch_outbox(status, available_at);