a3bb78e06b
Security Quality Gate / npm audit, Bandit, pip-audit, detect-secrets (pull_request) Failing after 16m35s
4.4 KiB
4.4 KiB
AI 合同平台 V2 Contract API Phase 2 收官审计
日期:2026-06-30
审计结论
Contract API 的 Phase 2 模块化拆分已经达到进入下一阶段前的收口标准:
contracts.py已退回兼容 facade,不再承载SqlAlchemyContractRepository类体。- 生产仓储类已外置到
sqlalchemy_contract_repository.py。 - 本地
src/tests已无from yuqei_contract_api.contracts import ...直接依赖。 contracts.py.__all__兼容清单完整,无重复、无缺失。- Contract API 包级编译、兼容导入检查和全量测试均通过。
Facade 审计
当前 contracts.py 状态:
__all__=261
unique=261
top_level_classes=[]
top_level_functions=[]
duplicates=[]
missing_count=0
说明:
contracts.py仍保留 DTO、repository、persistence helper、workflow helper 等历史公共导入面的 re-export。SqlAlchemyContractRepository仍可从yuqei_contract_api.contracts导入,用于外部兼容。- 新代码应优先从源模块导入,不应新增对
contracts.pyfacade 的内部依赖。
模块边界现状
生产仓储边界:
sqlalchemy_contract_repository.py:生产 SQLAlchemy 仓储公开类。sqlalchemy_repository_wiring.py:engine、session、persistence repository、search orchestration 组装。sqlalchemy_query_orchestration.py:合同列表、详情、工作台、统一搜索读路径。sqlalchemy_seed_orchestration.py:默认数据 bootstrap 编排。sqlalchemy_clause_repair_orchestration.py:审查风险项条款修复编排。sqlalchemy_*_orchestration.py:文件、审查任务、模板、法律资产、审批、support/system/backup/transition 等子域编排。persistence/*:数据访问边界。api/*:FastAPI route 边界。domain.py、repository_base.py、workflow_helpers.py等为共享领域/辅助层。
本地导入面检查:
rg "from yuqei_contract_api\\.contracts import|import yuqei_contract_api\\.contracts|yuqei_contract_api\\.contracts" src tests
=> no matches
兼容检查:
from yuqei_contract_api.sqlalchemy_contract_repository import SqlAlchemyContractRepository as Direct
from yuqei_contract_api.contracts import SqlAlchemyContractRepository as Facade
from yuqei_contract_api.repository_factory import build_contract_repository
assert Direct is Facade
assert isinstance(build_contract_repository("sqlite://", auto_create=True, seed_demo_data=False), Direct)
结果:通过。
测试覆盖清单
本次收官审计覆盖了以下测试组:
test_contract_workflow.py:工作台、合同列表/详情、创建/更新、模板资产、条款/规则资产、模板生命周期、审批流、文件上传/预览/下载、统一搜索、AI 审查 worker、条款修复、法规变更影响、下载事件、SQLAlchemy 持久化。test_health.py:health、runtime config check、runtime schema check。test_backup.py:备份创建、列表、校验、恢复 dry-run、缺失备份。test_monitoring.py:trace id、健康指标、延迟指标、错误日志。test_audit_integrity.py:审计 hash chain、合同创建审计、完整性校验。test_permissions.py:角色权限矩阵和权限 API。test_tenant_isolation.py:租户隔离、tenant context、默认租户 fallback。test_legal_qa_proxy.py:legal QA proxy。
验证命令:
python -m compileall -q yuqei-contract-platform/services/contract-api/src/yuqei_contract_api
python -m pytest yuqei-contract-platform/services/contract-api/tests -q
结果:
passed
Phase 3 前置判断
可以进入 Phase 3 schema 硬化前的条件:
- 不再向
contracts.py增加新业务逻辑。 - 新功能必须进入对应的
api/、persistence/、sqlalchemy_*_orchestration.py、domain.py或专属服务模块。 contracts.py仅作为外部兼容 facade 保留。- Phase 3 涉及数据库 schema 变更,必须先明确迁移目标库、迁移头、回滚策略和验证命令。
建议下一步:
- 开始 Phase 3 设计评审,不直接写迁移。
- 先输出 schema 硬化拆分清单:
contract_versionsapproval_instances / approval_steps / approval_actions- UI 展示字段迁出策略
- 风险项结构化
- tenant / created_by / updated_by / deleted_at 补齐
- 每组 schema 变更都配套 Alembic migration、空库到 head 验证、SQLite 单测兼容边界和 PostgreSQL smoke 验证。