Introduce a `tenants` registry table and a `tenant_id` column on every
tenant-scoped table, with composite `(tenant_id, id)` primary keys, composite
foreign keys (natural-key chains plus a `tenant_id` -> tenants FK), and
`HASH(tenant_id)` partitioning (N=128) so many tenants can share one database
with per-tenant isolation. `workspaces.name` uniqueness becomes
`UNIQUE(tenant_id, name)` and indexes lead with `tenant_id`.
Service tables (queue, active_queue_sessions) carry a plain `tenant_id` for
attribution and stay unpartitioned; their FKs to the now-partitioned parents
are dropped.
Adds the bootstrap migration that creates the partitioned shared schema from
the declarative models (written, not run).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>