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

58 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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:新增核心表检查和治理列检查
- 测试:覆盖模板发布/下线/回滚、默认回滚、模板编辑发布、规则发布/下线的快照行为
## 验证结果
本地已通过:
```powershell
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. 下一片再把运行时读路径逐步切到快照表优先:模板起草、条款推荐、审查规则命中、法规变更影响扫描。