# ADR: P3-WP10 混合交付与租户隔离底座 ## 决定 在外部 `multi_tenancy` 决策到位前,产品默认且唯一可启用模式是 `private_single_tenant`。`shared_control_plane` 和 `saas` 是版本化契约值,不是可自行开启的产品模式;它们必须由书面批准的交付模式、租户数量、隔离等级和容量剖面激活。 `TenantContext` 只能由服务器批准的默认私有租户或域名/路由映射产生。客户端 payload/query 不选择租户;后台任务和管理员行为必须携带与上下文相同的显式 scope。未知 route、未批准 delivery mode、scope 缺失和范围不相等均拒绝。 ## 数据边界 `20260817_501` 建立 tenant registry、可计量配额、预约、lifecycle/audit 事实和 hash-only 资源 manifest。tenant-scoped PostgreSQL 表强制 RLS,runtime 需在事务中设置 `dataops.tenant_id`;`dataops_app_runtime` 无任何 WP10 直写权限,只能执行 fixed-search-path 的 `SECURITY DEFINER` 闭合 schema 网关。`20260817_502` 将 freeze/recover/activate 的 DB clock、fence 与幂等 replay 放入单独 gateway。后续 role-init 也必须显式撤销/排除 `tenants` 与 `tenant_*` 直 DML。 图、对象存储、缓存和搜索的现有部署尚无可复核的原生 tenant ACL/partition 实现。它们当前使用受控 ASCII namespace + tenant/resource/version 前缀和 digest manifest;namespace escape、URL/path、Unicode 同形与跨 tenant reference 拒绝。这是工程适配契约,不是外部服务隔离验收。 ## 后果与未决项 - 私有化保持兼容:server approved default tenant 是唯一选择,客户端声明无效。 - keys/connectors/models/plugins/backup/audit export 只有 default-disabled、hash-only manifest;没有真实 provider、secret、插件仓库或恢复作业。 - 删除候选/恢复的完整审批、hold、retention、备份恢复演练,以及实际 Neo4j/MinIO/cache/search 隔离,仍需在批准的 SaaS/共享控制面剖面中实施和验收。 - 当前状态为 `ENGINEERING_BASELINE_COMPLETE_MULTI_TENANCY_ACTIVATION_BLOCKED`;不是 SaaS、企业 UAT 或生产完成。`multi_tenancy`、共享控制面/SaaS 决策、网络安全监测、外部存储、备份恢复和 UAT 继续为 `TBD_EXTERNAL` 或授权跳过范围。