# X_TENANT_LEAK

## Means

another tenant's row reached a call's output or effect

## Typical cause

the exercise pass called a primitive as tenant B with A's own input (A's ids bound in, where it takes any), before A's own call or after it, and a canary seeded into A's rows, or an id of A's that B was not handed, came back in its output or an effect (a mail, an outbound body, an enqueued job's input) — by an id B chose, or by a statement no tenant predicate scopes. The finding names the path

## Fix

`x exercise <name> --json` — then read the row behind the named path through the repository scoped to `ctx.actor`, never by the input id alone, nor by an unscoped statement

[Testing](/error-codes#testing)
