背景
control-plane M1 入口级交付(HashMatrixData/hashmatrix-control-plane#3 · WP3)需新增 GET /me/tenants,返回当前登录用户的租户 membership 列表。按契约治理铁律「先改契约、再改实现」,此接口须先落主仓契约,再由 control-plane 实现。
范围
- 在
contracts/openapi/control-plane-v1.yaml 增加路径 GET /v1/me/tenants:
operationId: listMyTenants
- 响应 数组(对齐 D1 单 User + 多 Membership;M1 实现先返回 1 个,但 schema/契约一律按数组,为多租户预留)。
- 数组元素至少含
tenantId / tenantKey / displayName / status(可复用现有 Tenant schema 子集或新建 MembershipView)。
- 安全:沿用现有
security(网关 OIDC + 已认证主体)。
- 同步
contracts/registry.yaml(加法兼容 → openapi/control-plane-v1 走 MINOR)。
约束
- 加法兼容、默认放行(见
contracts/CONVENTIONS.md)。
- 消费方 tolerant reader:webui(
apps/admin / console)。
- 对齐 D1(单 User + 多 Membership)/ D2(切换租户 = 重新换 token,
X-Tenant-Id 唯一)。
验收
由 control-plane Issue #3 拆分(split-task)联动产生;本仓为契约 SSOT,先行此 PR 后方可在 control-plane 落 /me/tenants 实现。
背景
control-plane M1 入口级交付(HashMatrixData/hashmatrix-control-plane#3 · WP3)需新增
GET /me/tenants,返回当前登录用户的租户 membership 列表。按契约治理铁律「先改契约、再改实现」,此接口须先落主仓契约,再由 control-plane 实现。范围
contracts/openapi/control-plane-v1.yaml增加路径GET /v1/me/tenants:operationId: listMyTenantstenantId/tenantKey/displayName/status(可复用现有 Tenant schema 子集或新建MembershipView)。security(网关 OIDC + 已认证主体)。contracts/registry.yaml(加法兼容 → openapi/control-plane-v1 走 MINOR)。约束
contracts/CONVENTIONS.md)。apps/admin/console)。X-Tenant-Id唯一)。验收
control-plane-v1.yaml含GET /v1/me/tenants,响应为数组。registry.yaml版本/索引同步。