diff --git a/migrations/022_add_done_status.sql b/migrations/022_add_done_status.sql new file mode 100644 index 0000000..165e645 --- /dev/null +++ b/migrations/022_add_done_status.sql @@ -0,0 +1,42 @@ +-- Add "done" status and auto-close workflow +-- +-- Migration: 022_add_done_status +-- Purpose: Add "done" status for verification period before auto-closing +-- Related: CF-454 +-- +-- Status lifecycle with done: +-- - pending: Created, awaiting approval or dependencies +-- - open: Approved and ready to start +-- - in_progress: Currently being worked on +-- - testing: Implementation complete, being tested +-- - blocked: Stuck waiting for something +-- - done: Implementation complete, in 7-day verification period +-- - completed: Verified stable, auto-closed after 7 days +-- +-- Verification period: +-- - Tasks marked "done" wait 7 days before auto-closing to "completed" +-- - If related issues detected during period, task stays "done" (no auto-close) +-- - Prevents premature closure and catches regressions +-- +-- Auto-close workflow: +-- 1. Task marked as "done" → auto_close_at = now() + 7 days +-- 2. Cron job checks daily for tasks past auto_close_at +-- 3. Semantic search detects related issues created since task marked "done" +-- 4. If no related issues → auto-close to "completed" +-- 5. If related issues found → notify, keep as "done" + +-- Drop existing constraint +ALTER TABLE tasks DROP CONSTRAINT IF EXISTS tasks_status_check; + +-- Add new constraint with done status +ALTER TABLE tasks ADD CONSTRAINT tasks_status_check + CHECK (status IN ('pending', 'open', 'in_progress', 'testing', 'blocked', 'done', 'completed')); + +-- Add auto_close_at column for tracking when to auto-close +ALTER TABLE tasks ADD COLUMN IF NOT EXISTS auto_close_at TIMESTAMP WITH TIME ZONE; + +-- Create index for efficient cron job queries +CREATE INDEX IF NOT EXISTS idx_tasks_auto_close ON tasks(auto_close_at) WHERE auto_close_at IS NOT NULL; + +-- Add comment for documentation +COMMENT ON COLUMN tasks.auto_close_at IS 'Timestamp when task should auto-close from done to completed (7 days after marked done)';