OpsMemory tenancy is claim-bound (breaking for any caller that relied on naming its own tenant). Every /api/v1/opsmemory/* endpoint now isolates on the authenticated stellaops:tenant claim (OpsMemoryTenantResolver); the route group carries .RequireTenant(). The tenantId query parameter and RecordDecisionRequest.TenantId body field became optional conflict checks: a value that disagrees with the claim is rejected with 400 / error_code: tenant_conflict, and a request carrying no tenant claim is rejected with 400 / error_code: tenant_missing. Previously the caller-supplied tenantId was passed to PostgresOpsMemoryStore as the sole isolation key. Sprint SPRINT_20260712_001 (TEN-1); contract in architecture.md §15.