Files
X-Financial/document/development/2026-07-13/dev-logs/bugs/ai-application-submit-bypasses-transaction.md

2.0 KiB
Raw Permalink Blame History

修复记录

  • 15:33记录 bug 修复AI 新建费用申请直接提交绕过统一事务。
    • Git 提交检查:git fetch --all --prune 后未发现 upstream 新提交;本地 ahead 2 个既有提交,分别为 653eda05 feat(auth): add opaque bearer sessions(不透明 Bearer 会话与认证收口)和 661990b2 feat(expenses): add transactional expense case eventsExpense Case 与事务业务事件基础)。
    • 修改:user_agent_application.py 将 AI 新建并直接提交改为先创建草稿,再统一调用 ExpenseClaimService.submit_claim,删除入口内手写提交状态和平台风险评估;提交异常或未找到单据时主动回滚,避免外层工具日志提交失败草稿。
    • 修改:budget.py 的预算就绪检查改为复用当前 Session 连接执行 metadata 检查,避免 Engine 连接隐式提交已经 flush 的申请和预算数据;test_reimbursement_endpoints.pytest_user_agent_service.py 补齐成功提交、事件失败整体回滚、保存草稿无副作用和必填部门上下文回归。
    • 操作:所有后端验证均在 x-financial-local-linux 容器内执行,单条命令使用 timeout 60s;没有修改数据库结构,没有对持久化开发数据库执行迁移,也没有重启服务。
    • 验证AI 直接提交/失败回滚/保存草稿 3 项、申请提交主链路 5 项、预算与 Expense Case 13 项,共 21 项通过;相关 Python 文件 ruff --select F,I 通过。整份 test_reimbursement_endpoints.py 运行结果为 13 项通过、3 项未通过,失败分别位于既有附件风险等级断言、申请审批路由断言和中文测试请求头编码,不属于本次 AI 提交事务断言。
    • 影响AI 一键新建申请现在与编辑重提共用同一提交语义预算预占、提交校验、申请风险标记、Expense Case 事件和审批状态保持一致;业务事件写入失败时,申请、预算额度、预算流水、预算预占和 Case 关联不会残留部分成功数据。