Files
邹进 b7a7430cc3
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 12m8s
feat: 审计动作按落库策略分级写入,系统过程动作改写应用日志
- 审计注册表为可由系统任务、定时任务发起的动作声明落库策略(always/on_success/outcome/log_only/none),未声明按 log_only
- 人工、开放接口、个人客户、外部系统发起的动作始终写审计表
- log_only 写所在服务 app.log(logger=audit),不含快照
- 对接日志不再补写 integration.attempt_started,无上游审计时 audit_event_id 为空
- 新增 audit.persist_overrides 按动作覆盖策略
- 审计覆盖扫描要求机器动作必须声明策略
- 新增 OpenSpec 提案 refactor-audit-log-persistence 与技术方案文档

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-05 18:27:24 +09:00

2.4 KiB
Raw Blame History

ADDED Requirements

Requirement: 退款资产后处理尝试记录

系统 SHALL 在每次执行退款资产后处理时写一条尝试记录,只新增,不修改、不删除。

  • 记录内容:退款单、处理步骤(套餐失效、接续激活、停机评估或停机)、资产类型与资产 ID、ICCID、尝试序号、触发方式(Outbox 投递、补偿扫描、人工重试)、结果、错误码、错误信息(截断)、关联的停复机记录、耗时、记录时间。
  • 尝试记录 SHALL 按月分区。
  • 尝试记录写入失败 MUST 只记录告警,不影响后处理结果。

Scenario: 一次尝试失败

  • WHEN 退款资产后处理在套餐失效步骤失败
  • THEN 系统写一条尝试记录,步骤为套餐失效,结果为失败,并带错误码与错误信息

Scenario: 一次尝试成功

  • WHEN 退款资产后处理全部步骤成功
  • THEN 系统写一条结果为成功的尝试记录

Requirement: 退款资产后处理重试上限

系统 SHALL 在退款单上维护资产后处理的当前状态、已尝试次数、最后错误与下次重试时间。

  • 后处理失败时,系统 SHALL 按指数退避计算下次重试时间,间隔最长 1 小时。
  • 已尝试次数达到 10 次仍未成功时,系统 MUST 把状态置为"需人工处理",并停止自动重试。
  • Outbox 投递与补偿扫描 MUST 按上述状态与下次重试时间判断是否执行:未到下次重试时间的不执行,"需人工处理"的不执行。
  • 后台人工重试 SHALL 允许重新执行"需人工处理"的退款单,并记为人工重试触发;执行前已尝试次数不清零。
  • 重复执行 MUST 保持既有幂等:不重复失效套餐,不重复处理资产。

Scenario: 退避重试

  • GIVEN 一张退款单的资产后处理第 3 次失败
  • WHEN 补偿扫描在下次重试时间之前运行
  • THEN 系统不执行该退款单的后处理

Scenario: 达到上限转人工

  • GIVEN 一张退款单的资产后处理已失败 9 次
  • WHEN 第 10 次仍失败
  • THEN 退款单状态为需人工处理,Outbox 与补偿扫描不再执行它,审计写一条结论为失败的事件

Scenario: 人工重试成功

  • GIVEN 一张需人工处理的退款单
  • WHEN 运营在后台发起人工重试并成功
  • THEN 退款单状态为已完成,尝试记录新增一条触发方式为人工重试、结果为成功的记录