-- 022_surfaces.sql -- Surface registry for dynamic surface lifecycle (v0.25.0) -- Core surfaces are seeded at startup. Extension surfaces are uploaded via admin. CREATE TABLE IF NOT EXISTS surface_registry ( id TEXT PRIMARY KEY, title TEXT NOT NULL, manifest JSONB NOT NULL DEFAULT '{}', enabled BOOLEAN NOT NULL DEFAULT true, source TEXT NOT NULL DEFAULT 'core', installed_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW() ); COMMENT ON TABLE surface_registry IS 'Registry of all surfaces (core + extension). Controls enable/disable and stores manifest metadata.'; COMMENT ON COLUMN surface_registry.source IS 'core = built-in, extension = uploaded via admin'; COMMENT ON COLUMN surface_registry.enabled IS 'Admin toggle — disabled surfaces redirect to / and hide from nav';