index|idx_runs_root_status|runs|CREATE INDEX idx_runs_root_status ON runs(root_id, status)
table|runs|runs|CREATE TABLE runs ( id BLOB PRIMARY KEY NOT NULL, root_id BLOB NOT NULL REFERENCES work_items(id) ON DELETE CASCADE, scope_id BLOB, label TEXT CHECK (label IS NULL OR length(label) <= 64), title TEXT CHECK (title IS NULL OR length(title) <= 200), status TEXT NOT NULL CHECK (status IN ('open', 'paused', 'closed')), pause_reason TEXT CHECK (pause_reason IS NULL OR pause_reason IN ('budget', 'attempts', 'manual')), pause_decision_id BLOB, terminal_reason TEXT CHECK (terminal_reason IS NULL OR terminal_reason IN ('completed', 'cancelled', 'failed', 'abandoned', 'budget_exhausted')), opened_by TEXT, opened_by_kind TEXT, opened_at TEXT NOT NULL CHECK (length(opened_at) = 23), closed_by TEXT, closed_at TEXT CHECK (closed_at IS NULL OR length(closed_at) = 23), coordinator_seen_at TEXT CHECK (coordinator_seen_at IS NULL OR length(coordinator_seen_at) = 23), stall_after_s INTEGER NOT NULL CHECK (stall_after_s > 0), budget TEXT, reported_tokens INTEGER NOT NULL DEFAULT 0, reported_cost_micro INTEGER NOT NULL DEFAULT 0, observed_tokens INTEGER NOT NULL DEFAULT 0, hints TEXT, marks TEXT, version INTEGER NOT NULL DEFAULT 1 )
