-- +goose Up -- 消息工作流作用域:支持刷新后阶段授权与历史兼容 ALTER TABLE chat_messages ADD COLUMN IF NOT EXISTS workflow_instance_id BIGINT REFERENCES project_workflow_instances(id) ON DELETE SET NULL, ADD COLUMN IF NOT EXISTS stage_instance_id BIGINT REFERENCES project_stage_instances(id) ON DELETE SET NULL, ADD COLUMN IF NOT EXISTS stage_key TEXT, ADD COLUMN IF NOT EXISTS scope_kind TEXT NOT NULL DEFAULT 'legacy_unscoped'; CREATE INDEX IF NOT EXISTS idx_chat_messages_session_scope ON chat_messages (session_id, scope_kind) WHERE deleted_at IS NULL; CREATE INDEX IF NOT EXISTS idx_chat_messages_stage_key ON chat_messages (session_id, stage_key) WHERE deleted_at IS NULL AND stage_key IS NOT NULL; ALTER TABLE task_runs ADD COLUMN IF NOT EXISTS workflow_instance_id BIGINT REFERENCES project_workflow_instances(id) ON DELETE SET NULL, ADD COLUMN IF NOT EXISTS stage_instance_id BIGINT REFERENCES project_stage_instances(id) ON DELETE SET NULL, ADD COLUMN IF NOT EXISTS workflow_stage_key TEXT; -- +goose Down ALTER TABLE task_runs DROP COLUMN IF EXISTS workflow_stage_key, DROP COLUMN IF EXISTS stage_instance_id, DROP COLUMN IF EXISTS workflow_instance_id; DROP INDEX IF EXISTS idx_chat_messages_stage_key; DROP INDEX IF EXISTS idx_chat_messages_session_scope; ALTER TABLE chat_messages DROP COLUMN IF EXISTS scope_kind, DROP COLUMN IF EXISTS stage_key, DROP COLUMN IF EXISTS stage_instance_id, DROP COLUMN IF EXISTS workflow_instance_id;