a3bb78e06b
Security Quality Gate / npm audit, Bandit, pip-audit, detect-secrets (pull_request) Failing after 16m35s
143 lines
6.9 KiB
Markdown
143 lines
6.9 KiB
Markdown
# AI 合同平台 V2 收口交付清单
|
||
|
||
日期:2026-06-26
|
||
本机核验时间:2026-06-26 17:23:32 +08:00
|
||
远端 Docker smoke 核验时间:2026-06-27 00:31:46 +08:00
|
||
|
||
## 结论
|
||
|
||
V2 的核心产品开发和 Phase 7 核心安全功能已经可以按“功能完成”处理。当前未完成项主要是发布前运维验收和生产化治理,不是新的业务功能开发。
|
||
|
||
当前本机已完成复核:
|
||
|
||
| 项目 | 状态 | 结果 |
|
||
| --- | --- | --- |
|
||
| Python 单元测试 | 通过 | `107 passed in 32.08s` |
|
||
| 前端 typecheck | 通过 | `npm run web:typecheck` 通过 |
|
||
| 前端生产构建 | 通过 | `npm run web:build` 通过 |
|
||
| npm 依赖审计 | 通过 | `found 0 vulnerabilities` |
|
||
| Bandit 代码扫描 | 通过 | 高/中/低危均为 0,`skipped_tests=0` |
|
||
| Python 依赖审计 | 通过 | `.venv-project` 依赖 39 个,漏洞 0 |
|
||
| Docker 本机验证 | 未通过环境检查 | 当前机器没有 `docker` 命令 |
|
||
| 远端 Docker smoke | 通过 | `project-docs/qa-artifacts/v2-smoke-docker-deploy/2026-06-27T00-14-39` |
|
||
|
||
## 本轮修正
|
||
|
||
Python 测试曾因旧测试仍导入已移除的 pgvector 动态 SQL helper 而失败。已改为断言当前固定 SQL 常量:
|
||
|
||
- `PGVECTOR_CANDIDATE_SQL_64`
|
||
- `PGVECTOR_CANDIDATE_SQL_64_FILTERED`
|
||
- `PGVECTOR_CANDIDATE_SQL_GENERIC`
|
||
- `PGVECTOR_CANDIDATE_SQL_GENERIC_FILTERED`
|
||
|
||
这样保持 Bandit 清零后的实现方向:不恢复动态 SQL helper,只保护固定查询模板的 64 维 HNSW 路径和通用维度回退路径。
|
||
|
||
## 已完成范围
|
||
|
||
| 范围 | 状态 | 交付物 |
|
||
| --- | --- | --- |
|
||
| 合同工作台、列表、详情、文件、审批、通知、义务、归档导出 | 已完成 | V2 功能文档和测试覆盖 |
|
||
| AI 中台、模型配置、Prompt、知识库、RAG explain、质量改进闭环 | 已完成 | V2 AI 系列文档和测试覆盖 |
|
||
| Phase 7 租户隔离 | 已完成 | `project-docs/V2-tenant-isolation-2026-06-26.md` |
|
||
| Phase 7 审计完整性 | 已完成 | `project-docs/V2-audit-integrity-2026-06-26.md` |
|
||
| Phase 7 数据备份 | 已完成 | `project-docs/V2-backup-restore-2026-06-26.md` |
|
||
| Phase 7 错误监控 | 已完成 | `project-docs/V2-error-monitoring-2026-06-26.md` |
|
||
| Phase 7 权限矩阵 | 已完成 | `project-docs/V2-permission-matrix-2026-06-26.md` |
|
||
| 性能数据库基线 | 已完成 | `project-docs/V2-performance-baseline-2026-06-26.md` |
|
||
| 安全扫描收口 | 已完成 | `project-docs/V2-security-scan-2026-06-26.md`、`bandit-project.json`、`pip-audit-project.json` |
|
||
| 部署 runbook | 已整理 | `project-docs/V2-deploy-runbook-2026-06-26.md` |
|
||
| 远端 Docker smoke | 已完成 | Web/API/AI/DB/worker/AI golden gate 全部通过 |
|
||
| 准生产接口级压测 | 已完成,性能门禁未全通过 | `project-docs/V2-interface-performance-baseline-2026-06-27.md` |
|
||
|
||
## 仍需完成
|
||
|
||
### P0 发布前必须验收
|
||
|
||
1. 目标 Docker 环境烟测
|
||
|
||
已在 `192.168.3.90` 的独立 smoke 环境完成:
|
||
|
||
- 产物:`project-docs/qa-artifacts/v2-smoke-docker-deploy/2026-06-27T00-14-39`
|
||
- Web:`http://192.168.3.90:13000`
|
||
- Contract API:`http://192.168.3.90:18100`
|
||
- AI Platform API:`http://192.168.3.90:18101`
|
||
- MinIO Console:`http://192.168.3.90:19001`
|
||
|
||
验收结果:
|
||
- Web、Contract API、AI Platform API 健康检查全部返回正常。
|
||
- AI golden sample asset gate 通过:`90` samples、`6/6` suites、`16/16` checks。
|
||
- PostgreSQL 中 `yuqei_contract`、`yuqei_ai`、`yuqei_ops` 均存在。
|
||
- 合同审查 worker smoke 创建审查任务并处理成功,审查结果写回 `ai_audit_run_id`,风险项包含条款推荐。
|
||
- 远端 smoke 容器最终状态均为 healthy。
|
||
|
||
2. 准生产/生产数据量压测
|
||
|
||
已在 `192.168.3.90` 远端 smoke 环境完成准生产数据量接口级压测:
|
||
|
||
- 产物:`project-docs/V2-interface-performance-baseline-2026-06-27.md`
|
||
- 明细:`project-docs/qa-artifacts/v2-interface-benchmark/2026-06-27T00-51-47`
|
||
- 数据量:`contracts=12007`、`review_tasks=16003`、`ai_run_audits=50008`、`knowledge_documents=10002`、`knowledge_chunks=60002`
|
||
- 稳定性:7 个场景、420 次正式请求全部 `200`,总错误率 `0%`
|
||
- 性能结论:合同详情和知识库 chunk 混合检索达标;合同列表、审批待办、统一搜索、AI Trace、知识库文档检索未达标
|
||
|
||
验收标准:
|
||
- 覆盖合同列表、合同详情、审批待办、统一搜索、AI Trace、知识库检索:已完成。
|
||
- 输出 p50/p95/p99、RPS、错误率、数据量和流量模型:已完成。
|
||
- 对照 `project-docs/V2-performance-baseline-2026-06-26.md` 给出是否达标结论:已完成,结论为“稳定性通过、生产上线性能门禁未全通过”。
|
||
|
||
后续阻塞生产性能门禁的 P0 优化:
|
||
- `knowledge-documents/search` 已切到数据库侧过滤,并在复核中达到目标 p95。
|
||
- `audit/ai-runs` 列表已瘦身为摘要接口,并在复核中达到目标 p95。
|
||
- 修复本轮排除的 `workspace?role=approver` 和 AI 质量看板 500,再纳入下一轮压测。
|
||
- 当前还需要继续盯合同列表与合同详情的 p95,属于主流程性能优化,不再是 AI Trace / 知识库文档检索的问题。
|
||
|
||
### P1 生产化治理
|
||
|
||
1. CI 质量门
|
||
|
||
将以下命令纳入 CI:
|
||
|
||
```powershell
|
||
python -m pytest
|
||
npm run web:typecheck
|
||
npm run web:build
|
||
npm audit --omit=dev --audit-level=high
|
||
.\.venv-audit\Scripts\bandit.exe -r yuqei-contract-platform\services\contract-api\src yuqei-ai-platform\services\ai-platform-api\src yuqei-ai-platform\services\worker\src yuqei-ai-sdk-python\src -f json -o bandit-project.json
|
||
.\.venv-audit\Scripts\pip-audit.exe --path .venv-project\Lib\site-packages -f json -o pip-audit-project.json --progress-spinner off
|
||
```
|
||
|
||
验收标准:CI 中高危安全问题为 0,测试/typecheck/build 必须通过。
|
||
|
||
2. 数据库生产治理
|
||
|
||
需要补齐:
|
||
- DB 级 RLS 或等效租户隔离。
|
||
- 独立数据库账号与最小权限。
|
||
- 真实备份/恢复演练。
|
||
- DB 级审计 append-only 约束。
|
||
- 慢查询监控与阈值告警。
|
||
|
||
验收标准:每一项都有配置、演练记录或监控截图/日志归档。
|
||
|
||
3. 生产密钥和环境变量管理
|
||
|
||
当前文档里的真实口令样例已经替换为占位符。上线前仍需在目标环境完成 secret 注入和权限校验。
|
||
|
||
验收标准:
|
||
- `.env.production.example` 只保留占位符。
|
||
- 真实密钥只存在于目标 secret 管理或宿主机安全配置中。
|
||
- 发布归档不包含真实口令、token、私钥。
|
||
|
||
### P2 可后置增强
|
||
|
||
1. 接入真实 embedding/provider 与质量评估集。
|
||
2. 扩展大体量 DOCX/PDF/OCR 解析压测。
|
||
3. 补全 provider token、成本、错误率的生产审计看板。
|
||
4. 把 RAG explain 质量指标沉淀成固定回归集。
|
||
|
||
## 下一步执行顺序
|
||
|
||
1. 用准生产数据量补接口级压测报告。
|
||
2. 把 CI 质量门接起来,确保后续不再靠手工复跑。
|
||
3. 进入 P1 数据库治理和生产密钥治理。
|