a3bb78e06b
Security Quality Gate / npm audit, Bandit, pip-audit, detect-secrets (pull_request) Failing after 16m35s
58 lines
3.0 KiB
Markdown
58 lines
3.0 KiB
Markdown
# 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. 下一片再把运行时读路径逐步切到快照表优先:模板起草、条款推荐、审查规则命中、法规变更影响扫描。
|