## 验收口径

部署 closeout 至少包含：

- 镜像升级验收：
  - 只验证镜像、容器健康、依赖连通性和公开入口健康；
  - 不执行 `codex-pool plan`、`codex-pool sync` 或 `codex-pool validate`；
  - 保持账号池和手工配置原样，防止升级覆盖手动配置。
- 镜像升级的真实模型请求证据：
  - 只复用既有消费配置做无写入 smoke；
  - 缺少既有消费配置时记录为未执行；
  - 不得通过恢复 key、同步账号或对齐 group 补齐验收条件。

- `sub2api status`：Deployment/StatefulSet/Service/Secret/NetworkPolicy 可见，运行镜像与 YAML 一致，`NetworkPolicy/allow-all` 符合 `podSelector: {}`、Ingress/Egress 全放行。
- `sub2api validate`：app、PostgreSQL、Redis、service proxy、`NetworkPolicy/allow-all` 和临时跨 Pod PostgreSQL/Redis 连通性检查通过。
- 账号池验收：
  - 仅在用户明确要求账号池运维或配置对齐时执行 `codex-pool validate`；
  - 统一 key 的 `GET /v1/models` 必须成功；
  - 使用 `localCodex.responsesSmokeModel` 跑一次小的 `POST /v1/responses` smoke；
  - owner balance、owner concurrency、capacity、WebSocket v2、临时不可调度规则和 sentinel runtime 必须与 YAML 对齐；
  - `validation.gatewayResponsesRecent` 汇总最近 6 小时普通 `/responses` 和 `/v1/responses` 的错误证据；
  - `validation.gatewayCompactRecent` 单独汇总 `/responses/compact` 证据；
  - 当前 Responses smoke 成功但 recent 字段 degraded 时，先区分历史窗口残留和新的 request id 失败；
  - 长期判定见 `docs/reference/platform-infra.md`。
- 若 `publicExposure.enabled=true`，确认 YAML 声明的 public path 可用。FRP target 检查 FRP path；PK01 local target 检查 PK01 Caddy managed block 和 loopback upstream。未带 key 的 public `/v1/models` 401 只能证明网关可达，不能证明账号池可调度。
- 多 target 公开入口验收：
  - 分别验证每个 target 的 root、`/health` 和未带 key `/v1/models` 401；
  - 只有用户明确要求账号池运维或配置对齐时，才执行各自的 `codex-pool validate --target <id>`；
  - 一个域名可用不能替代另一个域名的验收。
- 若目标声明了 `egressProxy.enabled=true`，确认 proxy Deployment/Service ready，Sub2API 和 sentinel env 与 YAML 对齐，并通过 YAML 声明的 health URL 完成代理出站探针。

如果要证明真实模型请求可用，使用最小 `/v1/responses` 或等价 Codex smoke。不要把 group-level `/v1/models` 成功解释成每个上游 account 都健康。

公网 `/v1/responses` smoke 应尽量复用 `codex-pool validate` 的非流式请求形态：带统一 key、`stream:false`、`store:false`、小 `max_output_tokens`、短输入、`X-Request-ID` 和 `OpenAI-Client-Request-ID`，并用同一 request id 跑 `codex-pool trace --target <id> --request-id <id>` 取证。PK01 host-Docker target 当前可能因 trace adapter 依赖 `kubectl` 而无法追踪；这时把 trace 失败记录为工具缺口，验收以 `status --target PK01`、`validate --target PK01`、public `/health`、public `/v1/models` 200 和 public `/v1/responses` 200 为准。不要用没有超时的临时脚本或省略 request id 的公网 POST 作为最终证据；`/v1/models` 200 只能证明 key 和模型列表入口可用，不能替代 Responses smoke。
