-- mergefix: squashed from 1500_mergefix.sql, 1501_mergefix_requeue.sql, 1502_mergefix_drop_ai_usage.sql. CREATE TABLE repo_mergefix_settings ( repo_id TEXT PRIMARY KEY REFERENCES repos(id) ON DELETE CASCADE, queue_enabled INTEGER NOT NULL DEFAULT 0, allow_private INTEGER NOT NULL DEFAULT 0, min_confidence REAL NOT NULL DEFAULT 0.8, min_margin REAL NOT NULL DEFAULT 0.3, updated_at INTEGER NOT NULL ); CREATE TABLE account_ai_keys ( account_id TEXT PRIMARY KEY REFERENCES accounts(id) ON DELETE CASCADE, provider TEXT NOT NULL, model TEXT NOT NULL, key_ciphertext TEXT NOT NULL, key_iv TEXT NOT NULL, updated_by TEXT, updated_at INTEGER NOT NULL ); CREATE TABLE mergefix_runs ( id TEXT PRIMARY KEY, pull_issue_id TEXT NOT NULL REFERENCES issues(id) ON DELETE CASCADE, repo_id TEXT NOT NULL REFERENCES repos(id) ON DELETE CASCADE, account_id TEXT NOT NULL, actor_id TEXT NOT NULL, trigger TEXT NOT NULL CHECK (trigger IN ('button', 'queue')), status TEXT NOT NULL CHECK (status IN ('queued', 'running', 'applying', 'applied', 'suggested', 'failed')), head_sha TEXT NOT NULL, base_sha TEXT, commit_sha TEXT, calls INTEGER NOT NULL DEFAULT 0, result_json TEXT, error TEXT, created_at INTEGER NOT NULL, updated_at INTEGER NOT NULL, queue_method TEXT CHECK (queue_method IN ('merge', 'squash')), requeue_status TEXT CHECK (requeue_status IN ('waiting', 'enqueued', 'gave_up')), requeue_attempts INTEGER NOT NULL DEFAULT 0, requeue_error TEXT ); CREATE INDEX mergefix_runs_pull ON mergefix_runs (pull_issue_id, created_at DESC); CREATE UNIQUE INDEX mergefix_runs_one_active ON mergefix_runs (pull_issue_id) WHERE status IN ('queued', 'running', 'applying');