CREATE TABLE IF NOT EXISTS task_runs ( id INTEGER PRIMARY KEY AUTOINCREMENT, task_id TEXT NOT NULL REFERENCES tasks(id) ON DELETE CASCADE, trigger_type TEXT NOT NULL CHECK (trigger_type IN ('schedule', 'manual', 'retry')), status TEXT NOT NULL CHECK (status IN ( 'queued', 'running', 'succeeded', 'failed', 'timed_out', 'cancelled', 'skipped' )), started_at TEXT, finished_at TEXT, duration_ms INTEGER, exit_code INTEGER, error_message TEXT, created_at TEXT NOT NULL ); CREATE INDEX IF NOT EXISTS idx_task_runs_task_created ON task_runs(task_id, created_at DESC); CREATE INDEX IF NOT EXISTS idx_task_runs_status ON task_runs(status);