a3bb78e06b
Security Quality Gate / npm audit, Bandit, pip-audit, detect-secrets (pull_request) Failing after 16m35s
112 lines
7.2 KiB
Markdown
112 lines
7.2 KiB
Markdown
# AI 合同平台 V2 RC 核心回归报告
|
||
|
||
日期:2026-07-12
|
||
|
||
## 结论
|
||
|
||
本地与 `192.168.3.90` PostgreSQL smoke 的 RC 核心用户链路均已通过。Docker smoke、两个 schema-check、安全扫描、接口压测和发布质量门已使用同一候选版本复跑通过。
|
||
|
||
## 运行环境
|
||
|
||
| 服务 | 地址 | 结果 |
|
||
| --- | --- | --- |
|
||
| Contract Web | `http://localhost:3000` | 200 |
|
||
| Contract API | `http://127.0.0.1:8100` | 200 |
|
||
| AI Platform API | `http://127.0.0.1:8101` | 200 |
|
||
| Contract API 数据库 | `.runtime/contract-api.sqlite3` | 本地回归库 |
|
||
| AI Platform 数据库 | `.runtime/ai-platform.sqlite3` | 本地回归库 |
|
||
|
||
本地 schema-check 返回 `warning`,原因是本地使用 SQLite 且没有 Alembic/PostgreSQL 扩展。核心表、治理字段、展示缓存一致性检查均为 `ok`。远端准入仍要求 PostgreSQL smoke schema-check 为 `ok`。
|
||
|
||
## 用户主链路
|
||
|
||
Playwright 主回归创建全新合同 `contract-24cfa3181aad`,实际完成:
|
||
|
||
- 管理员登录。
|
||
- 从模板生成合同草稿。
|
||
- 下载有效 Word 文档,40,011 bytes。
|
||
- 发起异步审查并由 worker 消费,2 个风险项、4 条结构化引用。
|
||
- 下载有效审查 PDF,9,790 bytes。
|
||
- 上传、预览、单文件下载和两文件 ZIP 批量下载。
|
||
- 编辑合同正文和相对方。
|
||
- 提交审批、退回、重新提交、审批通过、归档。
|
||
- 生成签署证据和归档证据。
|
||
- 已归档筛选命中目标合同。
|
||
- 审计哈希链完整。
|
||
- 浏览器控制台 0 error。
|
||
|
||
Artifact:`output/playwright/core-regression/core-user-flow-summary.json`
|
||
|
||
## 资产回归
|
||
|
||
| 场景 | 结果 | Artifact |
|
||
| --- | --- | --- |
|
||
| 30 个模板全量生成 | 30/30 通过 | `output/playwright/template-draft-sweep/2026-07-12T04-11-40-868/template-draft-sweep-summary.json` |
|
||
| 模板编辑草稿、diff、发布前校验 | 通过并恢复原草稿 | `output/playwright/admin-asset-regression/admin-asset-flow-summary.json` |
|
||
| 标准条款编辑草稿、diff、发布前校验 | 通过并恢复原草稿 | 同上 |
|
||
| 审查规则编辑草稿、diff、发布前校验 | 通过并恢复原草稿 | 同上 |
|
||
| 模板发布、下线、回滚、恢复发布 | 通过,最终为已发布 | 本地 API 实测 |
|
||
| 条款发布、下线、回滚、恢复发布 | 通过,最终为已发布 | 本地 API 实测 |
|
||
| 规则发布、下线、回滚、恢复发布 | 通过,最终为已发布 | 本地 API 实测 |
|
||
| 法规变更影响扫描 | 页面提交通过,命中模板、条款、规则和合同 | `output/playwright/legal-change-impact-result.png` |
|
||
|
||
法律全文页在本地精选库正确显示 14 条版本数据。只有数据库实际存在 `v1-legal-20260616` 全量版本行时,才使用 789,853 条缓存总数和全量分页快路径。
|
||
|
||
## 管理与安全回归
|
||
|
||
- 身份、租户、邀请、邮箱验证、密码重置、SSO、租户隔离、权限和全局审计:25 项测试通过。
|
||
- `/templates`、`/admin/legal-assets`、`/admin/legal-fulltext`、`/admin/review-results`、`/admin/identity`、`/admin/audit`、`/admin/ai-traces`、`/health`:页面均返回 200,控制台无 error。
|
||
- 法律问答页面真实提交:HTTP 200,返回 113 字答案、3 条依据,控制台无 error。
|
||
|
||
## 本轮修复
|
||
|
||
1. 审查 worker 使用 `ReviewTask.tenant_id` 调用 AI Platform,修复知识库租户被硬编码为 `system` 导致引用为空。
|
||
2. 法律问答代理透传当前请求租户,不再硬编码 `system`。
|
||
3. 合同详情“管理履约证据”死按钮替换为可用的签署证据、归档证据和归档表单。
|
||
4. 实现 SQLAlchemy 文件批量下载并接入文件仓库多选、全选和 ZIP 下载。
|
||
5. 修复同一事务连续写审计事件时的哈希链顺序,确保事件时间严格单调递增。
|
||
6. 修复精选法律全文库误报全量总数却返回空页的问题,同时保留真实全量库快路径。
|
||
7. 修复模板占位符位于正文末尾时误删用户输入末尾标点的问题。
|
||
|
||
## 自动化结果
|
||
|
||
| 检查 | 结果 |
|
||
| --- | --- |
|
||
| Contract API 全量测试 | 150 passed |
|
||
| Contract Web TypeScript | 通过 |
|
||
| Contract Web production build | 通过,82 个静态页面完成生成 |
|
||
| 30 模板 sweep | 30 passed / 0 failed |
|
||
| 核心 Playwright 主回归 | 通过 |
|
||
| 管理资产无污染回归 | 通过 |
|
||
| `git diff --check` | 通过,仅有 CRLF 提示 |
|
||
|
||
## 准入状态
|
||
|
||
当前候选版本已完成 `192.168.3.90` smoke 部署与复跑。Contract API / AI Platform PostgreSQL schema-check、Docker smoke、核心用户主链路、安全扫描、接口性能和发布质量门均已通过;源码已在 `codex/v2-rc-20260712` 分支冻结,剩余工作转为生产发布审批与上线回滚演练确认。
|
||
|
||
## 远端 PostgreSQL Smoke 收口
|
||
|
||
远端地址通过 SSH 隧道执行自动化;服务实际部署地址保持不变:Web `:13000`、Contract API `:18100`、AI Platform API `:18101`。
|
||
|
||
| 检查 | 结果 | Artifact |
|
||
| --- | --- | --- |
|
||
| Docker smoke | 通过,8 个服务健康,AI golden gate 与 review worker smoke 通过 | `project-docs/qa-artifacts/v2-smoke-docker-deploy/2026-07-12T13-21-24` |
|
||
| Contract API schema-check | `ok`,Alembic `20260710_0030` | `project-docs/qa-artifacts/v2-release-quality-gate/2026-07-12T13-28-00/contract_api-schema-check.json` |
|
||
| AI Platform schema-check | `ok`,Alembic `20260703_0021`,60,007 条 64 维向量及索引通过 | `project-docs/qa-artifacts/v2-release-quality-gate/2026-07-12T13-28-00/ai_platform_api-schema-check.json` |
|
||
| 核心浏览器主链路 | 通过,风险 2、引用 4、控制台错误 0 | `output/playwright/core-regression-remote-2026-07-12-cache-final/core-user-flow-summary.json` |
|
||
| 30 模板全量起草 | 30/30 通过 | `output/playwright/template-draft-sweep/remote-2026-07-12-final/template-draft-sweep-summary.json` |
|
||
| 法律问答 | HTTP 200,答案 113 字、引用 2 条 | 远端 Contract API 实测 |
|
||
| 接口级压测 | 7/7 场景通过,错误率均为 0 | `project-docs/qa-artifacts/v2-interface-benchmark/2026-07-12T13-24-00` |
|
||
| 安全扫描 | npm 0、Bandit 0、pip-audit 0;冻结索引 821 个文件的源码 secret 新命中 0 | `project-docs/qa-artifacts/v2-security-scan/2026-07-12T13-08-00`、`project-docs/qa-artifacts/v2-source-secret-scan/2026-07-12T15-24-56` |
|
||
| 发布质量门 | 通过 | `project-docs/qa-artifacts/v2-release-quality-gate/2026-07-12T13-28-00` |
|
||
|
||
远端法律全文库首屏返回 5 条、总数 789,867;数据库版本计数为 `v1-legal-20260616=789853`、精选 `v1=14`。
|
||
|
||
本轮远端回归额外发现并修复:
|
||
|
||
1. `/workspace` 不再加载全租户约 12,000 份合同的全部审计、附件和正文关系,改为按角色查询近 100 条待办。Contract API 容器内存从约 754 MiB 降至约 115 MiB。
|
||
2. 8,000 条性能基线旧审计事件 `downloaded` 在读取时兼容为 `contract_downloaded`,不修改数据库原值和 hash-chain。
|
||
3. 多 worker 进程内缓存导致 PATCH 后偶发读旧值。当前 smoke 使用单 worker + 2 秒短读缓存,所有写请求前后清缓存;多 worker 配置会自动禁用该缓存。
|
||
|
||
最新接口 p95:合同列表 `145.31ms`、合同详情 `125.18ms`、审批待办 `158.43ms`、统一搜索 `63.53ms`、AI Trace `205.51ms`、知识文档搜索 `97.56ms`、知识 chunk 混合检索 `64.78ms`。
|