fabro/lib/foundation/fabro-db/migrations/2026071104_runs.sql
2026-07-23 17:59:34 -04:00

56 lines
1.9 KiB
SQL

CREATE TABLE runs (
id TEXT PRIMARY KEY NOT NULL,
source_last_seq INTEGER NOT NULL,
created_at_ms INTEGER NOT NULL,
started_at_ms INTEGER,
last_event_at_ms INTEGER NOT NULL,
completed_at_ms INTEGER,
status TEXT NOT NULL,
archived_at_ms INTEGER,
parent_id TEXT,
title TEXT NOT NULL,
workflow_slug TEXT,
workflow_name TEXT,
repository_name TEXT,
automation_id TEXT,
diff_files_changed INTEGER NOT NULL DEFAULT 0,
diff_additions INTEGER NOT NULL DEFAULT 0,
diff_deletions INTEGER NOT NULL DEFAULT 0,
input_tokens INTEGER NOT NULL DEFAULT 0,
output_tokens INTEGER NOT NULL DEFAULT 0,
reasoning_tokens INTEGER NOT NULL DEFAULT 0,
cache_read_tokens INTEGER NOT NULL DEFAULT 0,
cache_write_tokens INTEGER NOT NULL DEFAULT 0,
total_usd_micros INTEGER,
summary_json TEXT NOT NULL,
CHECK (source_last_seq >= 1),
CHECK (status IN (
'submitted',
'pending',
'runnable',
'starting',
'running',
'blocked',
'paused',
'removing',
'succeeded',
'failed',
'dead'
)),
CHECK (diff_files_changed >= 0),
CHECK (diff_additions >= 0),
CHECK (diff_deletions >= 0),
CHECK (input_tokens >= 0),
CHECK (output_tokens >= 0),
CHECK (reasoning_tokens >= 0),
CHECK (cache_read_tokens >= 0),
CHECK (cache_write_tokens >= 0),
CHECK (total_usd_micros IS NULL OR total_usd_micros >= 0),
CHECK (json_valid(summary_json))
);
CREATE INDEX runs_by_created_at ON runs(created_at_ms DESC, id DESC);
CREATE INDEX runs_by_updated_at ON runs(last_event_at_ms DESC, id DESC);
CREATE INDEX runs_by_status ON runs(archived_at_ms, status, last_event_at_ms DESC, id DESC);
CREATE INDEX runs_by_parent ON runs(parent_id, created_at_ms DESC, id DESC);
CREATE INDEX runs_by_automation ON runs(automation_id, created_at_ms DESC, id DESC);