Separated in the database, not just the app
- Row-level security on every tableEach request runs as a restricted database role scoped to one workspace. A query cannot return another workspace's rows.
- Checked on every changeA migration check fails any new workspace table without row-level security, and an isolation test suite runs in CI.
- Search and AI follow the same wallsSearch, answers, and agents filter by workspace and by your project access before anything is ranked.
- Namespaced everywhereCaches, job queues, live update channels, and file storage are all keyed by workspace.
{
"type": "task.dates_shifted",
"tenant_id": "ten_northwind",
"actor": {
"type": "agent",
"id": "agent_risk",
"approved_by": "usr_maya"
},
"payload": {
"task_ids": ["t_pay", "t_app", "t_mob"],
"delta_days": 4
},
"evidence": ["msg_2231"],
"created_at": "2026-10-24T10:32:00Z"
}