Files
ai-contract-platform/project-docs/V2-phase3-published-asset-snapshots-2026-07-02.md
T
yuqei a3bb78e06b
Security Quality Gate / npm audit, Bandit, pip-audit, detect-secrets (pull_request) Failing after 16m35s
release: freeze V2 release candidate
2026-07-12 15:32:24 +08:00

3.0 KiB
Raw Permalink Blame History

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 完整通过,确认本次快照表没有破坏合同主链路、模板生命周期、法律资产生命周期和审查相关路径。

后续建议

  1. 部署到 192.168.3.90 smoke,执行 Alembic 到 20260702_0026。
  2. 跑 /api/v1/runtime/schema-check,确认两个快照表和治理列都被识别。
  3. 做 smoke 抽样:发布模板、发布标准条款、发布审查规则,确认新表各自新增快照。
  4. 下一片再把运行时读路径逐步切到快照表优先:模板起草、条款推荐、审查规则命中、法规变更影响扫描。