diff --git a/migrations/002_task_delegations.sql b/migrations/002_task_delegations.sql new file mode 100644 index 0000000..404fb65 --- /dev/null +++ b/migrations/002_task_delegations.sql @@ -0,0 +1,42 @@ +-- Migration 002: Task-Delegation Integration +-- Session 374: Unified task management with code delegation + +-- Task delegation tracking table +CREATE TABLE IF NOT EXISTS task_delegations ( + id SERIAL PRIMARY KEY, + task_id TEXT NOT NULL REFERENCES tasks(id) ON DELETE CASCADE, + delegation_id TEXT NOT NULL UNIQUE, + backend TEXT NOT NULL, + quality_score INTEGER, + learnings_injected TEXT, -- Comma-separated learning IDs + status TEXT DEFAULT 'pending' CHECK (status IN ('pending', 'success', 'failed', 'partial')), + started_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), + completed_at TIMESTAMP WITH TIME ZONE, + input_tokens INTEGER DEFAULT 0, + output_tokens INTEGER DEFAULT 0, + cost_usd NUMERIC(10,6) DEFAULT 0, + context_hash TEXT, -- MD5 of task file for dedup + error_message TEXT +); + +CREATE INDEX IF NOT EXISTS idx_task_delegations_task ON task_delegations(task_id); +CREATE INDEX IF NOT EXISTS idx_task_delegations_status ON task_delegations(status); +CREATE INDEX IF NOT EXISTS idx_task_delegations_backend ON task_delegations(backend); +CREATE INDEX IF NOT EXISTS idx_task_delegations_started ON task_delegations(started_at); + +-- Per-task learning effectiveness tracking +CREATE TABLE IF NOT EXISTS task_learning_effectiveness ( + id SERIAL PRIMARY KEY, + task_id TEXT NOT NULL REFERENCES tasks(id) ON DELETE CASCADE, + learning_id INTEGER NOT NULL, + outcome TEXT NOT NULL CHECK (outcome IN ('success', 'failed')), + recorded_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() +); + +CREATE INDEX IF NOT EXISTS idx_task_learning_task ON task_learning_effectiveness(task_id); +CREATE INDEX IF NOT EXISTS idx_task_learning_learning ON task_learning_effectiveness(learning_id); +CREATE INDEX IF NOT EXISTS idx_task_learning_outcome ON task_learning_effectiveness(outcome); + +-- Migration tracking +INSERT INTO schema_migrations (version, applied_at) VALUES ('002_task_delegations', NOW()) +ON CONFLICT DO NOTHING;