-- Roadmap status enum gains a fourth value `considering` for items that are -- under discussion but not yet committed to. Same migration also renames -- the existing `beta` value to `in_beta` so the canonical names line up -- with the v4 spec (no second display label layer needed). -- -- SQLite can't widen a CHECK constraint in place, so this is a full table -- rebuild. roadmap_attributions has an ON DELETE CASCADE FK to -- roadmap_items(id), so foreign keys are toggled off around the rebuild to -- preserve attribution rows across the DROP/RENAME. PRAGMA foreign_keys = OFF; CREATE TABLE roadmap_items_new ( id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT NOT NULL, description TEXT NOT NULL DEFAULT '', status TEXT NOT NULL DEFAULT 'exploring' CHECK(status IN ('shipping','in_beta','exploring','considering')), target TEXT, display_order INTEGER NOT NULL DEFAULT 0, shipped_at TEXT, created_at TEXT NOT NULL DEFAULT (datetime('now')), updated_at TEXT NOT NULL DEFAULT (datetime('now')) ); INSERT INTO roadmap_items_new (id, title, description, status, target, display_order, shipped_at, created_at, updated_at) SELECT id, title, description, CASE status WHEN 'beta' THEN 'in_beta' ELSE status END, target, display_order, shipped_at, created_at, updated_at FROM roadmap_items; DROP TABLE roadmap_items; ALTER TABLE roadmap_items_new RENAME TO roadmap_items; CREATE INDEX idx_roadmap_status ON roadmap_items(status, display_order); CREATE INDEX idx_roadmap_shipped ON roadmap_items(shipped_at); PRAGMA foreign_keys = ON;