diff --git a/apps/coder/src/schema.sql b/apps/coder/src/schema.sql index 9052d7c..78752da 100644 --- a/apps/coder/src/schema.sql +++ b/apps/coder/src/schema.sql @@ -78,15 +78,27 @@ ALTER TABLE tasks ADD COLUMN IF NOT EXISTS feature_values JSONB; -- v2.6: one shared worktree per session (all agents/panes in the session operate in it). CREATE TABLE IF NOT EXISTS session_worktrees ( - session_id UUID PRIMARY KEY REFERENCES sessions(id), + session_id UUID PRIMARY KEY REFERENCES sessions(id) ON DELETE CASCADE, worktree_path TEXT NOT NULL, base_commit TEXT, created_at TIMESTAMPTZ NOT NULL DEFAULT clock_timestamp() ); +-- Migrate existing FK to CASCADE (idempotent: drops the old constraint if present). +DO $$ BEGIN + IF EXISTS ( + SELECT 1 FROM pg_constraint + WHERE conname = 'session_worktrees_session_id_fkey' + AND confdeltype <> 'c' + ) THEN + ALTER TABLE session_worktrees DROP CONSTRAINT session_worktrees_session_id_fkey; + ALTER TABLE session_worktrees ADD CONSTRAINT session_worktrees_session_id_fkey + FOREIGN KEY (session_id) REFERENCES sessions(id) ON DELETE CASCADE; + END IF; +END $$; -- v2.6: one backend session per (session, agent); resumed on switch-back. CREATE TABLE IF NOT EXISTS agent_sessions ( - session_id UUID NOT NULL REFERENCES sessions(id), + session_id UUID NOT NULL REFERENCES sessions(id) ON DELETE CASCADE, agent TEXT NOT NULL, backend TEXT NOT NULL, agent_session_id TEXT, @@ -99,6 +111,19 @@ CREATE TABLE IF NOT EXISTS agent_sessions ( CONSTRAINT agent_sessions_status_chk CHECK (status IN ('idle', 'active', 'crashed', 'closed')) ); +-- Migrate existing agent_sessions FK to CASCADE. +DO $$ BEGIN + IF EXISTS ( + SELECT 1 FROM pg_constraint + WHERE conname = 'agent_sessions_session_id_fkey' + AND confdeltype <> 'c' + ) THEN + ALTER TABLE agent_sessions DROP CONSTRAINT agent_sessions_session_id_fkey; + ALTER TABLE agent_sessions ADD CONSTRAINT agent_sessions_session_id_fkey + FOREIGN KEY (session_id) REFERENCES sessions(id) ON DELETE CASCADE; + END IF; +END $$; + -- v2.6: config fingerprint for stale-session detection (auto-recover on model change). ALTER TABLE agent_sessions ADD COLUMN IF NOT EXISTS config_hash TEXT;