One gym cannot see another, even if we write a bug
Every table carries the gym it belongs to, and Postgres row-level security enforces it — policies forced on, with the application connecting as a non-superuser role that cannot bypass one. A forgotten WHERE clause in application code returns nothing rather than somebody else’s members. That is the difference between isolation as a rule and isolation as a habit.
Held to a cross-tenant test matrix that runs against real Postgres on every commit, not a mock.
