M1 补充项(follow-up)· 父 epic #3「入口级交付」已完成,本项为入口级之外的结构性对齐。
背景
WP3/#7 已对齐路由键名(tenantKey→tenantId,请求/响应双侧)与 status 小写(@JsonValue)。但 TenantView/注册体与契约 control-plane-v1 仍存结构性漂移,需与 webui 消费方协同后按「先改契约」对齐(已登记于本仓 CLAUDE.md known-drift)。
待对齐项(impl → 契约 openapi/control-plane-v1)
- 嵌套结构:契约
Tenant 嵌套 organization{orgId,orgAlias} / dataPlane{namespace,dbSchema,dorisCatalog,helmRelease};impl 为扁平 keycloakOrgId/namespace/dbSchema。
- quota 字段名:impl
maxDataBytes/maxJobs vs 契约 maxStorageGi/maxConcurrentJobs(+compute)。
- impl 专有字段:
id/deliveryMode/adminEmail/statusReason 不在契约 Tenant。
- 注册体:impl
deliveryMode/quota vs 契约 requestedQuota(且无 deliveryMode)。
- 另两条 known-drift:审批端点形态(impl
/approve+/reject vs 契约单 POST /{id}/approval,action: approve|reject);/api 前缀约定未写进契约/网关(推定网关 strip /api,需补一条约定)。
铁律 / 范围
- 先改契约(主仓
HashMatrixData/hashmatrix contracts/openapi/control-plane-v1)→ 再改实现;消费方一律 tolerant reader。
- 跨仓:control-plane(impl)+ 主仓 contracts + webui(consumer,需协同)。本 issue 为 control-plane 侧追踪锚点,契约/ webui 侧各自建对应 issue、文本回链。
验收
背景
WP3/#7 已对齐路由键名(
tenantKey→tenantId,请求/响应双侧)与 status 小写(@JsonValue)。但TenantView/注册体与契约control-plane-v1仍存结构性漂移,需与 webui 消费方协同后按「先改契约」对齐(已登记于本仓CLAUDE.mdknown-drift)。待对齐项(impl → 契约
openapi/control-plane-v1)Tenant嵌套organization{orgId,orgAlias}/dataPlane{namespace,dbSchema,dorisCatalog,helmRelease};impl 为扁平keycloakOrgId/namespace/dbSchema。maxDataBytes/maxJobsvs 契约maxStorageGi/maxConcurrentJobs(+compute)。id/deliveryMode/adminEmail/statusReason不在契约Tenant。deliveryMode/quotavs 契约requestedQuota(且无deliveryMode)。/approve+/rejectvs 契约单POST /{id}/approval,action: approve|reject);/api前缀约定未写进契约/网关(推定网关 strip/api,需补一条约定)。铁律 / 范围
HashMatrixData/hashmatrixcontracts/openapi/control-plane-v1)→ 再改实现;消费方一律 tolerant reader。验收
TenantView/RegisterTenantRequest结构与契约Tenant/注册体一致(嵌套 + quota 字段名 + 专有字段处置)。/api前缀两条 known-drift 有结论并落档;CLAUDE.mdknown-drift 清账。