-- Per-user tenancy: authenticate key/client id becomes an opaque tenant boundary. -- Existing rows remain in the legacy unscoped tenant (NULL) for single-tenant installs. alter table projects add column if not exists tenant_key text; alter table thoughts add column if not exists tenant_key text; alter table stored_files add column if not exists tenant_key text; alter table learnings add column if not exists tenant_key text; alter table plans add column if not exists tenant_key text; alter table chat_histories add column if not exists tenant_key text; -- Project names are now unique inside a tenant rather than globally. alter table projects drop constraint if exists ukey_projects_name; alter table projects drop constraint if exists projects_name_key; drop index if exists projects_name_key; create unique index if not exists projects_tenant_key_name_idx on projects (coalesce(tenant_key, ''), name); create index if not exists projects_tenant_key_idx on projects (tenant_key); create index if not exists thoughts_tenant_key_idx on thoughts (tenant_key); create index if not exists thoughts_tenant_key_project_id_idx on thoughts (tenant_key, project_id); create index if not exists stored_files_tenant_key_idx on stored_files (tenant_key); create index if not exists learnings_tenant_key_idx on learnings (tenant_key); create index if not exists plans_tenant_key_idx on plans (tenant_key); create index if not exists chat_histories_tenant_key_idx on chat_histories (tenant_key);