/** * SMI-2277: Quarantine Approvals Schema * * Database schema for persisting multi-approval state. Replaces the * in-memory Map that was lost on service restart. * * Note on type mappings: * - `reviewer_id` is TEXT here (SQLite) but UUID in the Supabase migration. * In production, values are always UUIDs from auth providers. Tests may * use human-readable strings like 'user-456' for clarity. * - `is_complete` is INTEGER 0/1 here (SQLite has no native boolean) but * BOOLEAN in the PostgreSQL migration. Queries in ApprovalRepository use * integer literals (0/1) which are SQLite-specific. * - `created_at` uses `datetime('now') || 'Z'` to produce UTC ISO-8601 * strings (e.g. '2026-02-13 12:00:00Z') so Date parsing is unambiguous. * * @module @skillsmith/core/db/quarantine-approvals-schema */ import type { Database as DatabaseType } from './database-interface.js'; /** * SQL statement to create the quarantine_approvals table */ export declare const QUARANTINE_APPROVALS_SCHEMA_SQL = "\n-- SMI-2277: Quarantine multi-approval persistence\nCREATE TABLE IF NOT EXISTS quarantine_approvals (\n id TEXT PRIMARY KEY,\n skill_id TEXT NOT NULL,\n reviewer_id TEXT NOT NULL,\n reviewer_email TEXT NOT NULL,\n decision TEXT NOT NULL CHECK(decision IN ('approved', 'rejected')),\n reason TEXT,\n created_at TEXT NOT NULL DEFAULT (datetime('now') || 'Z'),\n completed_at TEXT,\n required_approvals INTEGER NOT NULL DEFAULT 2,\n is_complete INTEGER NOT NULL DEFAULT 0\n);\n\n-- Index for efficient lookup by skill_id (most common query path)\nCREATE INDEX IF NOT EXISTS idx_quarantine_approvals_skill_id\n ON quarantine_approvals(skill_id);\n\n-- Enforce one pending review per reviewer per skill (defense-in-depth)\nCREATE UNIQUE INDEX IF NOT EXISTS idx_quarantine_approvals_reviewer_unique\n ON quarantine_approvals(skill_id, reviewer_id)\n WHERE is_complete = 0;\n\n-- Efficient count of pending approvals (used by isComplete check)\nCREATE INDEX IF NOT EXISTS idx_quarantine_approvals_pending\n ON quarantine_approvals(skill_id, decision)\n WHERE is_complete = 0;\n"; /** * Initialize the quarantine_approvals schema in the database * * @param db - Database connection */ export declare function initializeQuarantineApprovalsSchema(db: DatabaseType): void; /** * Check if the quarantine_approvals table exists * * @param db - Database connection * @returns True if quarantine_approvals table exists */ export declare function hasQuarantineApprovalsTable(db: DatabaseType): boolean; //# sourceMappingURL=quarantine-approvals-schema.d.ts.map