Files
ai-contract-platform/project-docs/V2-final-production-readiness-audit-2026-08-11.md
T
yuqei c24f7a4f1e
Build and Test Quality Gate / Contract Web typecheck and build (pull_request) Successful in 2m58s
Build and Test Quality Gate / Python tests and Contract API migration (pull_request) Failing after 15m25s
Security Quality Gate / npm audit, Bandit, pip-audit, detect-secrets (pull_request) Successful in 5m14s
fix: align release benchmark with abuse limits
2026-08-11 17:36:33 +08:00

79 lines
6.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AI 合同平台 V2 最终生产就绪审计
日期:2026-08-11
## 结论
当前候选版本中可由代码和自动化完成的功能、回归、安全扫描与共享预发布技术验证已通过,最终差异审查未留下已知代码级 P0/P1。本轮修复了 Contract 调用 AI Platform 时固定使用 SDK 30 秒超时的问题,并在真实动态 Provider 上完成了合同审查闭环;同时关闭了生产 Web API 前缀丢失问题。
正式生产仍为 **No-Go**。未启动 production compose,未修改 DNS,未切换生产流量。阻断原因是具名法务、生产基础设施、双节点现场演练和 support access 外部安全集成尚无真实验收证据;这些证据不得由 AI、mock、模板或共享预发布结果代替。
## 本轮技术闭环
1. Contract API 新增 `CONTRACT_API_AI_PLATFORM_TIMEOUT_SECONDS`,范围为 `1..600` 秒,默认 30 秒;review worker、手工 run-once 和 Legal QA 代理均显式传递到 SDK。
2. 共享预发布 Provider 请求预算为 180 秒,Contract 调用预算为 240 秒,避免同期限竞态。
3. production preflight 强制 Contract timeout 至少比 Provider timeout 多 5 秒,并拒绝缺失、非数字、非有限值、越界和倒置预算。
4. Nginx 为同步 `/contract/api/v1/legal/qa` 设置独立 660 秒上限,覆盖 Contract 允许的 600 秒最大值;其他 Contract 路由仍保持 120 秒。
5. Compose 的 migrate、Contract API 和 review worker 三个服务均映射 timeout;共享预发布部署脚本显式写入 Contract 240 秒和 Provider 180 秒,避免重部署恢复默认 30 秒。
6. 生产 Web 使用 `/contract`、`/ai` 边缘前缀时,Contract 与 AI 请求均保留 base path。统一出口还会规范化 33 个旧 AI 代理路由生成的无前缀 URL;角色判断和 Contract 公共健康检查使用移除边缘前缀后的逻辑 API 路径,避免修复路由时引入权限回归。
7. release gate 的实时 benchmark 默认调整为每场景 15 次、并发 3、预热 2;包含探测请求后仍低于 enforce 模式最严格的每用户 20 次/分钟读取门槛,不关闭或绕过反滥用。独立性能压测仍保留显式大负载能力。
8. 身份执行器、support access API 和破坏性身份写接口继续关闭。共享预发布 OpenAPI 中包含 `execute`、`support-access` 或 `support_access` 的路由数为 0。
## 自动化验证
| 范围 | 结果 |
| --- | --- |
| Contract API 全量 | `286 passed, 3 skipped`;跳过项仅为需显式 PostgreSQL URL 的并发专项 |
| AI Platform API、AI worker、Python SDK | `162 passed` |
| Infra production release tools | `63 passed` |
| 本轮 timeout 定向回归 | `28 passed` |
| Contract Web 单元测试 | `17 passed`,其中既有入口/会话/工作空间 12 项,生产 API base path、幂等规范化和逻辑权限路径 5 项 |
| Contract Web typecheck | 通过 |
| Next.js production build | 通过,生成 101 个页面/路由 |
| npm audit | 0 vulnerabilities |
| pip-audit | 0 known vulnerabilities |
| Bandit | 0 findings,0 errors |
| tracked source secret scan | 45 个已复核假阳性,0 个新发现 |
| `git diff --check` | 通过 |
另有 3 个真实 PostgreSQL 并发专项已在本轮之前使用 `192.168.3.90:5432/yuqei_contract` 的随机隔离 schema 完成 `3/3`,并已清理测试 schema。
## 共享预发布证据
- 宿主机:`192.168.3.90`
- AI Provider:`ccswitch / gpt-5.6-sol`
- Provider 调用:enabled
- Provider fallback:false
- Provider timeout:180 秒
- Contract timeout:240 秒;API 与 review worker 容器均实际读取为 `240.0`
- Contract API 镜像:`sha256:5072971b7bdda62036791cc5836faece78b5a8615a98fd98ad5e9b4999e3f51a`
- Contract review worker 镜像:`sha256:35a76a9f6dd5dd44f6545d029cd0e621ea909251c7aabccd6e4cd860a37f11be`
- Contract Web 镜像:`sha256:ed6b931d7a104e042da21c5516728cd193190b3cee11e74e41d98a9f517fba4f`;已定向部署生产 base-path 修复,容器 healthy,`/health` 与 `/login` 均为 HTTP 200,容器内回归 `5/5`
- 真实审查:合同 `contract-096914efc203`、任务 `review-e8100aa210d4`,约 93 秒后状态为 `succeeded`,并持久化 AI audit run id
- post-deploy release gate:`pass`;Contract 与 AI schema-check 均为 `ok`,实时 benchmark 以 15 次/场景、并发 3、预热 2 完成 7/7,错误率均为 0,p95 均低于门槛
- 8 个共享预发布服务全部 healthy
- 根盘:92% 使用,约 17 GiB 可用;未自动清理镜像、卷或业务数据
远端 Contract 变更前备份位于 `/opt/apps/ai-contract-platform-v2-smoke/.runtime/pre-contract-timeout-20260811-1650/`;Web base-path 定向部署前备份位于 `/opt/apps/ai-contract-platform-v2-smoke/backups/pre-web-base-path-effbefc.tgz`。最新 release gate 证据位于 `project-docs/qa-artifacts/v2-release-quality-gate/2026-08-11T17-34-10/`;此前 timeout 专项证据位于忽略目录 `.runtime/postdeploy-release-gate-timeout-fix-20260811/`。证据不包含服务密钥。
## 正式生产阻断项
1. 具名法务尚未对 10 张知识卡和 18 条真实 Provider 结果签署精确技术包,因此没有真实 `acceptance_run_id`、receipt v2 或 promotion bundle。
2. 四份公开政策及合同生成、条款推荐黄金资产仍缺具名法务正式版本、生效时间和审批记录。
3. support access 尚未接入真实 IdP/MFA、会话绑定、跨节点撤销、真实资源读取、告警消费和具名隐私/法务批准;当前必须保持 deny-only。
4. 尚无正式 `/etc/yuqei/production.env`、production secrets、不可变镜像清单和非模板 production preflight 证据。
5. 正式 TLS 证书、DNS、异地备份挂载、恢复演练和阿里云前端切流证据不存在。
6. 尚未部署至少两个独立生产节点,无法执行真实 canary、撤销 SLA、kill switch 和完整回滚演练。
7. 生产容量与回滚空间仍需运维确认;共享服务器根盘处于 92% 高水位。
## 固定上线顺序
1. 具名法务签署精确技术包和共享 evidence。
2. 在共享预发布执行 `finalize`,生成并验证真实 `acceptance_run_id`、receipt v2 和 promotion bundle。
3. 建立 production env/secrets、TLS、异地备份和不可变镜像,运行非模板 preflight、备份恢复及容量门禁。
4. 部署至少两个生产节点,不切流。
5. 执行只读 canary、跨节点撤销 SLA、kill switch 和回滚演练。
6. 由法务、安全、隐私和运维具名批准后,另行授权 DNS/流量切换。
上述阻断项全部关闭前,禁止启动 production compose,也禁止把共享预发布重命名或宣称为生产。