docs/multi-tenant/cloud-v2-pending-verification.md
状态:NOT APPROVED FOR SAAS ACTIVATION
更新日期:2026-07-29
本文是 Cloud v2 首期上线前的剩余验证清单。它只记录尚不能由当前代码审查、 单元测试、集成测试、合成容量探针或短时 Linux 容器实验替代的证据。这里的项目 不属于 2026-07-29 代码与本地测试资源审查的完成条件,也不会让该审查持续保持未完成; 它们只在准备最终 SaaS 激活时重新进入验收范围。
相关文档:
2855 passed, 33 skipped,Plugin SDK 全量
1328 passed,闭源适配器 40 passed,Space Go 全量测试通过;三仓格式、
静态检查和 git diff --check 已通过。1d65ed301a6afc52150a998043f73cd6032c8162。最终验证必须使用包含该提交的
Core、Plugin Runtime 和 Box Runtime 镜像,不能混用旧 SDK。pool_size + max_overflow 有绝对上限 100,
Cloud runtime 连接默认强制 60 秒 statement/idle-transaction timeout 和 5 秒
lock timeout;pool 使用量、超时累计数与目录 active/max 基数进入 /healthz。
Box Runtime 的 session、process、admission record、RPC 文件和 completed retention
配置也有不可被实例配置放大的绝对上限。pg_settings 读回
statement_timeout=60000ms、lock_timeout=5000ms 和
idle_in_transaction_session_timeout=60000ms;测试结束后引擎已显式 dispose。以上结果是进入生产候选验证的前提,不是 SaaS 上线批准。
以下项目不是“再跑一次测试”即可关闭。必须先完成实现,再执行对应验收。
| 编号 | 阻断项 | 完成实现后的最低验收证据 |
|---|---|---|
| B-01 | Cloud 插件缺少生产 egress policy | 证明插件只能访问允许的公网目标,不能访问 Core/Box/数据库、其他内部服务、loopback、link-local 或云 metadata endpoint |
| B-02 | Plugin installation 与 Box Workspace/Skill/root/tmp/home 缺少真实的 byte 和 inode 硬配额 provider | 在写入边界原子拒绝超额;并发写入、重启和配额耗尽后不能越界,也不能用目录扫描或事后清理冒充硬配额 |
| B-03 | 普通业务写入尚未具备贯穿 commit 的 generation-aware fence、同事务 business outbox,以及 generation cutover 后稳定的 durable-object 引用 | 在旧 generation 与新 generation 并发、事务提交竞态和重复投递下,旧 owner 不产生业务写入或外部副作用,outbox 可幂等恢复 |
任一 B 类项目未关闭时,不得把 24 小时 soak 的通过结果解释为可以上线。
必须在最终 Cloud Pod security context、容器 runtime 和 cgroup 拓扑中验证, 不能使用开发机或权限不同的一次性容器替代。
验证内容:
/proc。memory.swap.max=0 和 PID 上限。通过证据必须包含实际容器安全配置、cgroup 文件值、探针原始输出和失败注入结果。
在 B-02 的 quota provider 实现后,必须验证:
/readyz 返回非 2xx,Pod 不进入就绪流量。必须在最终 PostgreSQL endpoint、凭据和网络策略下验证:
BYPASSRLS、DDL、对象所有权、role membership 或额外 schema 权限。vector_id、猜测其他 Workspace ID、后台任务和
连接复用时,pgvector CRUD 均不能越权。生产候选验证前必须固定:
data/config.yaml 的非敏感摘要和所有环境变量覆写;CLOUD_V2_MAX_DIRECTORY_WORKSPACES 必须与 Core
cloud.directory.max_active_workspaces 和
cloud.directory.max_snapshot_workspaces 一致;Space 的 membership 上限必须与
Core cloud.directory.max_snapshot_memberships 一致;滚动更新、节点迁移、配置变化或任一镜像 digest 变化后,旧验证报告失效。
在真实 Space control plane、闭源 Cloud Adapter 和 Core 之间验证:
gate_waiters 未归零判为失败。mcp_projection_retirements 和
mcp_projection_reconcile_active 在冷却期归零。global sandbox,且新增 Workspace
不创建专属 Runtime、Pod、PVC、database、schema、role 或连接池。box.enabled=true,也不能 create/update/test/start stdio MCP;
旧记录和直接 API 调用同样失败关闭,且不创建 mcp-shared session。至少使用两个恶意测试 Workspace 验证:
现有 fake adapter/requester/Plugin handler 探针不能替代真实容量数据。必须使用 计划上线的平台 SDK、外部 HTTP/WebSocket 连接池、真实插件进程、真实 PostgreSQL/pgvector 和代表性 Workspace 配置分布,测量:
容量上限必须写入生产配置与告警,不能只保留在测试报告中。 代码中的默认值和绝对上限只是失控配置的最后防线,不等于生产容量结论。V-08 必须 根据最终镜像的真实曲线把 Space 与 Core 的匹配上限调到已验证容量以内;如果最终 批准值高于当前默认 1,000 active Workspace,必须重新执行目录启动、故障恢复和 24 小时门禁。
使用 标准 24 小时命令,并强制
--require-hard-limits。工作负载至少覆盖:
最后至少保留 30 分钟无测试流量冷却。任一健康失败、OOM/memory pressure、
PID limit、blocking executor rejection、超阈值 CPU throttling/event-loop lag、
目录 active_workspaces > max_active_workspaces、数据库 pool 使用量超过配置容量、
冷却尾段内存持续增长,或 Plugin restart gate_waiters、MCP 投影回收、
消息聚合 buffer/scope 等临时 gauge 不回落都判为失败。
标准 soak 工具已自动比较目录 active/最近批次与各自配置上限,并比较 PostgreSQL
checked_out 与配置 pool 容量;名为 core 的标准 endpoint 缺少任一容量指标、
current/max 只出现一半、数值非法或任一样本越界都会直接失败。
必须归档:
cloud-soak-samples.jsonl;cloud-soak-report.json;以下能力已明确暂缓,不能混入当前验证结果,也不能以“尚未验证”为理由临时发明方案:
这些事项需要后续单独决策。首期实现仍需保留稳定 UUID、generation fence、 幂等事件和无副本地址泄漏的协议边界。
每个 B/V 项只能通过以下方式关闭:
在 B-01 至 B-03 全部实现,且 V-01 至 V-09 均有当前生产候选版本的通过证据前,
Cloud v2 状态保持 NOT APPROVED FOR SAAS ACTIVATION。