a3bb78e06b
Security Quality Gate / npm audit, Bandit, pip-audit, detect-secrets (pull_request) Failing after 16m35s
3.0 KiB
3.0 KiB
AI 合同平台 V2 Phase 3 Slice 3.6:模板/法律资产发布快照关系
日期:2026-07-02
背景
模板、标准条款、审查规则此前的发布态内容主要保存在 lifecycle event 的 metadata.draft_snapshot 中。这个做法适合审计历史,但不适合作为长期运行时读模型:模板起草、条款推荐、审查规则命中、法规变更影响扫描都需要稳定、可索引、可回滚的“已发布快照”。
本片设计结论
- lifecycle event 继续作为审计事实,不删除、不替代。
- 新增独立发布快照表,作为后续运行时读路径的权威候选。
- 第一片只做表结构、ORM、写入链路和 schema-check,不一次性切换所有推荐/扫描读路径。
publish和rollback会生成发布快照;offline只记录状态事件,不新增快照。- rollback 事件会补充目标
draft_snapshot,避免只靠历史事件倒推时拿错版本。
新增表
-
template_published_snapshots- 记录模板已发布正文、变量 schema、关联条款 ID、关联规则 ID。
published_event_id唯一关联template_lifecycle_events.id。- 按
tenant_id/template_id/published_at建索引,支撑最新发布版本查询。
-
legal_asset_published_snapshots- 记录标准条款/审查规则的发布 payload。
published_event_id唯一关联legal_asset_lifecycle_events.id。- 按
tenant_id/asset_type/asset_id/published_at建索引。
实现范围
- Alembic 迁移:
20260702_0026_add_published_asset_snapshots.py - ORM 模型:
TemplatePublishedSnapshotModel、LegalAssetPublishedSnapshotModel - DTO:
ContractTemplatePublishedSnapshot、LegalAssetPublishedSnapshot - Persistence:新增插入、列表、最新快照读取方法
- Lifecycle orchestration:在 publish/rollback 时随 lifecycle event 同事务写入快照
- Schema check:新增核心表检查和治理列检查
- 测试:覆盖模板发布/下线/回滚、默认回滚、模板编辑发布、规则发布/下线的快照行为
验证结果
本地已通过:
python -m py_compile <changed files>
python -m pytest yuqei-contract-platform\services\contract-api\tests\test_health.py -q
python -m pytest yuqei-contract-platform\services\contract-api\tests\test_structured_review_results.py -q
python -m pytest yuqei-contract-platform\services\contract-api\tests\test_contract_workflow.py -q
其中 test_contract_workflow.py 完整通过,确认本次快照表没有破坏合同主链路、模板生命周期、法律资产生命周期和审查相关路径。
后续建议
- 部署到 192.168.3.90 smoke,执行 Alembic 到
20260702_0026。 - 跑
/api/v1/runtime/schema-check,确认两个快照表和治理列都被识别。 - 做 smoke 抽样:发布模板、发布标准条款、发布审查规则,确认新表各自新增快照。
- 下一片再把运行时读路径逐步切到快照表优先:模板起草、条款推荐、审查规则命中、法规变更影响扫描。