Orchestra resolves the acting tenant from services tagged orchestra.tenant_resolver, and falls back to the default tenant when none of them answers. Two resolvers exist, both in optional submodules: DomainTenantResolver in orchestra_domain and ConsumerTenantResolver in orchestra_server_api. With neither installed there are no resolvers at all, so every request resolves to the default tenant. That is deliberate, and it is what makes a single-tenant site behave as though tenancy were absent.
Tenants are config entities. A second one is added on the Tenants list, or arrives with a config import, and nothing then points out that it cannot be reached: no request can act in it, so nothing can be created there, and the listings and access checks are scoped to the tenant in effect, so nothing already in it can be viewed. The site looks multi-tenant and is not.
Proposed: a runtime requirement warning. OrchestraRequirements already carries the runtime_requirements hook, so this is one more check beside the ones there: when more than one tenant exists and no service is tagged orchestra.tenant_resolver, say that the extra tenants cannot be reached, name the two submodules that provide a resolver, and point at the Tenants list for the tenants that are not wanted.
A warning rather than an error, and rather than a tenant switch: the isolation is the intended model, and a switch that let an administrator act inside another tenant would reopen the cross-tenant editing the access handler deliberately refuses.
AI-Generated: Yes (Claude Code was used to help draft this issue summary and to write the change and its tests. I reviewed both; each new test was confirmed to fail against the code without the change and to pass with it.)
Issue fork orchestra-3621006
Show commands
Start within a Git clone of the project using the version control instructions.
Or, if you do not have SSH keys set up on git.drupalcode.org:
Comments
Comment #3
mably commentedComment #4
mably commentedComment #5
mably commentedComment #7
mably commented