1.4 KiB
1.4 KiB
Tenant namespace contract v1
Canonical tenant IDs come from the live m2-gpt tenants table. Marketplace contracts must not
invent alternate sentinels or display-name aliases.
Live table read on 2026-07-02:
| tenant_id | display_name | status |
|---|---|---|
erlengrund-m2o |
erlengrund-m2o | active |
gunnar-m2o |
gunnar-m2o | active |
m2 |
m2 Operator | active |
m2bd-m2o |
m2bd-m2o | active |
matrix |
matrix | active |
parlobyg-m2o |
parlobyg-m2o | active |
smoke7623 |
Smoke smoke7623 | active |
e2e-verify-0617 |
E2E Verify delete me | archived |
Marketplace-reserved scopes:
*inlisting.tenant_visibilitymeans public to all tenants.m2-coreis the shared commons scope for reusable, scrubbed marketplace evidence and shared Solutions. It replaces__fleet__for marketplace contracts.
Rules:
tenant_visibilityis an allowlist of*or canonical active tenant IDs.- Empty tenant filters fail closed.
- Readers must apply the S2 filter contract:
filters.tenant_visibility_any = ["*", "<caller_tenant>"], with client-side backstop that drops hits wherestatus != "published"or caller tenant is not visible. - Cross-tenant not-found and forbidden states are surfaced as
404to avoid existence leaks. m2-coreis allowed forsolution.tenant_scopeand evidence scope, but it is not a buyer tenant and is not a replacement fortenant_visibility: ["*"].