Files
X-Financial/document/development/2026-07-18/dev-logs/bugs/rule-markdown-runtime-atomic-save.md

15 lines
1.9 KiB
Markdown
Raw Normal View History

# 规则正文与运行时配置分步保存产生孤儿版本
日期2026-07-18
文档路径document/development/2026-07-18/dev-logs/bugs/rule-markdown-runtime-atomic-save.md
## 修复记录
- 16:20记录 bug 修复:普通 Markdown 规则先创建版本、再更新运行时 JSON第二个请求失败时会留下不可重试的孤儿版本和版本号冲突。
- Git 提交检查:`git fetch --all --prune` 成功upstream `origin/main` 无新提交;本地 ahead 19 条,最新为 `07241b46 fix(docker): manage local postgres in default compose``787bc3a4 feat(platform): close AI expense value loop``242d68c3 feat(approval): add task workflow and waiver decisions`,另有 16 条。
- 原因:前端将一个业务动作拆成创建 `AgentAssetVersion` 和 PATCH 资产配置两个独立事务,任一网络、审计或持久化异常都可能只完成前半段。
- 修改:新增 `POST /agent-assets/{id}/rule-markdown` 单一接口和专用规则保存 mixin在一个 SQLAlchemy 事务中创建版本、更新 current/working 指针、白名单合并运行时配置并写审计Markdown 内嵌 `expense-rule` JSON 必须与运行配置一致;表格规则和 JSON 风险规则继续走各自专用接口。
- 修改:前端保存 Markdown 和运行时 JSON 均改为一次原子请求;新增服务和路由按职责拆分,主服务文件 703 行、主路由文件 773 行,均低于项目硬上限。
- 验证:成功落库、审计失败、响应构建失败、提交失败与审计记录回滚测试通过;管理模块后端联合回归 `176 passed`,前端全量回归 `824/824`,迁移回归 `66 passed, 1 skipped`Vite 生产构建、Ruff、Compose 配置解析及 `git diff --check` 均通过。
- 影响:规则编辑保存现在具备事务一致性,失败后不会留下半成品版本,也不会因为孤儿版本阻塞下一次保存。