Workspace Modules Rollout Runbook
Section titled “Workspace Modules Rollout Runbook”This runbook covers rollout, verification, and rollback for workspace module gating:
- module keys:
people,publications,works,projects,activity,users,import - tables:
module_catalog,workspace_modules - migration:
migrations/drizzle/0017_workspace_modules.sql
Rollout Steps
Section titled “Rollout Steps”- Deploy app code with module-aware sidebar and route guards.
- Apply DB migration
0017_workspace_modules.sql. - Run static rollout verification:
pnpm --filter @apps/dashboard verify:workspace-modules
- Validate in UI:
- open admin users page
- assign/unassign workspace modules
- verify sidebar and direct-route behavior for disabled modules
SQL Verification
Section titled “SQL Verification”Run these checks against DB_0:
SELECT key, name, is_paid, is_active, sort_orderFROM module_catalogORDER BY sort_order, key;SELECT entity_id, COUNT(*) AS module_countFROM workspace_modulesGROUP BY entity_idORDER BY entity_id;SELECT entity_id, module_keyFROM workspace_modulesORDER BY entity_id, module_key;Expected:
module_cataloghas the 7 canonical module keys.- existing non-admin workspaces are backfilled with all 7 modules.
Rollback
Section titled “Rollback”If module rollout must be reverted quickly:
- Revert app deployment to pre-module-gating build.
- Optionally remove module tables if needed:
DROP TABLE IF EXISTS workspace_modules;DROP TABLE IF EXISTS module_catalog;- Re-deploy pre-module build.
Note: table drop is destructive. Prefer app rollback first, then schema rollback only when required.
Operational Notes
Section titled “Operational Notes”- superadmins bypass module route guard checks.
- sidebar fallback defaults to canonical module keys when module query data is not yet loaded.
- module enforcement is server-side via route guard (
requireWorkspaceModule), not only UI hiding.