The usual way multi-tenant software leaks is a missing WHERE tenant_id in one query nobody reviewed carefully. Tantivo does not rely on that clause being present. Sessions carry the tenant — and for portal users the client — as database claims, and row-level security policies check them on every read and every write.
The client portal runs under a different database role from your operator app. That role is default-deny: it holds grants only on the specific tables the portal needs, and on some of those only on named columns. A table nobody granted is unreachable because it was never granted.
Adding a table to the portal takes three deliberate steps — a grant, an isolation policy, and a regression test that attempts cross-client access and asserts it fails. Every tenant-scoped table ships with its policy and its test in the same change.