update
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 10m49s

This commit is contained in:
2026-09-03 09:28:28 +08:00
parent dbfeeee253
commit 370fd3e67f
150 changed files with 64402 additions and 247 deletions

View File

@@ -0,0 +1,31 @@
## ADDED Requirements
### Requirement: 高频轮询外部交互日志保留边界
系统 SHALL 不为成功且无业务变化的自动轮询逐次创建 `tb_integration_log`。支付、审批、入站回调及其他依赖外部交互记录实现可靠幂等、结果恢复或渠道裁决的调用 MUST 继续持久化其外部交互记录。轮询外部调用失败、响应无效或结果未知时,系统 MUST 持久化可调查的失败或恢复记录。
#### Scenario: Gateway 轮询成功且状态未变化
- **GIVEN** 一次 Gateway 自动轮询成功,且结果没有引起业务事实变化
- **WHEN** 系统完成该轮询
- **THEN** 系统不创建该次轮询的 Integration Log
#### Scenario: Gateway 轮询调用失败
- **WHEN** 一次 Gateway 自动轮询超时、连接失败或返回无效响应
- **THEN** 系统创建可调查的失败或恢复记录,并按既有策略处理后续轮询
#### Scenario: 入站支付回调
- **GIVEN** 支付渠道发送入站回调
- **WHEN** 系统处理该回调
- **THEN** 系统继续使用可靠持久化的外部交互记录保证既有幂等和恢复语义
### Requirement: 外部交互日志归档与留存受控执行
系统 SHALL 在审计归档与日留存任务总开关关闭时停止 Integration Log 的日归档和日留存处理,并安全跳过已入队的相关任务。总开关开启后,每次相关任务执行 MUST 至多处理一个已结束的上海自然日,且必须继续满足既有归档校验和 pending 记录保留规则。
#### Scenario: Integration Log 归档任务被停用
- **GIVEN** 审计归档与日留存任务总开关关闭
- **WHEN** Integration Log 日归档或日留存任务被调度或消费
- **THEN** 系统不扫描、归档、删除或更新在线 Integration Log
#### Scenario: Integration Log 积压受控推进
- **GIVEN** 任务总开关开启且存在多个满足既有归档条件的日期
- **WHEN** 系统执行一次 Integration Log 归档或留存任务
- **THEN** 系统仅处理一个自然日,并继续保留未处理日期以供后续执行

View File

@@ -0,0 +1,27 @@
## ADDED Requirements
### Requirement: 轮询审计事实保留边界
系统 SHALL 仅为产生业务事实变化、轮询失败、结果未知或人工触发的轮询操作持久化统一审计事件及资源快照。成功且无业务变化的自动轮询 MUST 不创建 `tb_audit_event``tb_audit_event_resource`,审计调查接口仅返回实际已保留的历史事实。
#### Scenario: 自动轮询成功但无业务变化
- **GIVEN** 一次自动轮询成功且没有改变任何业务状态、有效流量或风险结论
- **WHEN** 系统结束该轮询处理
- **THEN** 审计事件和审计资源表不新增该次轮询记录
#### Scenario: 自动轮询改变业务事实
- **GIVEN** 一次自动轮询产生可应用的业务状态或有效流量变化
- **WHEN** 系统提交该变化
- **THEN** 系统保留对应的审计事实与资源快照
### Requirement: 审计归档与日留存受控执行
系统 SHALL 提供独立的审计归档与日留存任务总开关。总开关关闭时,系统 MUST 不调度、不消费且安全跳过已入队的 Audit 日归档、Integration Log 日归档和日志日留存任务,不扫描或修改在线日志表。总开关开启时,每次任务执行 MUST 至多处理一个已结束的上海自然日;维护者可在低峰期重复执行以推进历史积压。
#### Scenario: 归档与留存总开关关闭
- **GIVEN** 审计归档与日留存任务总开关关闭
- **WHEN** 定时器触发或 Worker 取得已入队的归档或留存任务
- **THEN** 系统跳过该任务,不扫描 `tb_audit_event``tb_audit_event_resource``tb_integration_log`,且不创建归档或清理记录
#### Scenario: 总开关开启时处理积压
- **GIVEN** 审计归档与日留存任务总开关开启,且存在多个未处理的已结束自然日
- **WHEN** Worker 执行一次归档或留存任务
- **THEN** 系统至多处理一个自然日,并保留其余日期供后续受控执行

View File

@@ -0,0 +1,47 @@
## Purpose
使高频卡轮询在多 Worker、重启积压和渠道延迟场景下保持受控吞吐避免正常无变化观测将数据库写入量放大为不可接受的 I/O 负载。
## ADDED Requirements
### Requirement: 轮询全局并发与背压
系统 SHALL 同时对全部轮询任务以及每一种轮询任务应用跨 Worker 实例共享的全局并发上限。达到任一上限的任务 MUST 不调用外部渠道、不创建审计或外部交互记录,并按既有调度语义延后执行。配置的上限 MUST 受安全范围约束,不能以零、负数或不受约束的大值绕过背压。
#### Scenario: 多 Worker 达到同类轮询上限
- **GIVEN** 多个 Worker 正在执行同一种轮询,且该任务的全局并发已达到配置上限
- **WHEN** 又一个该类型轮询任务开始处理
- **THEN** 系统不发起外部调用、不写入 PostgreSQL 观测记录,并将任务延后处理
#### Scenario: 达到全部轮询任务总上限
- **GIVEN** 不同种类的轮询任务合计已达到全局总并发上限
- **WHEN** 任意一种新的轮询任务开始处理
- **THEN** 系统不发起外部调用、不写入 PostgreSQL 观测记录,并将任务延后处理
#### Scenario: 轮询上限配置非法
- **WHEN** 维护者提交超出允许范围或非正数的轮询并发上限
- **THEN** 系统拒绝该配置并保留原有有效上限
### Requirement: 正常无变化观测的低写入处理
系统 SHALL 将“渠道调用成功且未产生业务事实变化”的轮询视为短期运行观测,而非持久化审计事实。该结果 MUST 不创建逐次 Audit Event、Audit Event Resource 或 Integration Log系统仍 MUST 维护下一次调度所需状态,并可保留短期去重或聚合指标。
#### Scenario: 网络状态轮询无变化
- **GIVEN** 一张卡的网络状态轮询成功,且规范化后的状态与当前业务事实一致
- **WHEN** 系统应用该轮询结果
- **THEN** 系统不新增审计事件、审计资源或外部交互日志,并按配置继续后续轮询
#### Scenario: 流量读数无有效增量
- **GIVEN** 一张卡的流量轮询成功,且读数未形成有效流量增量或跨周期业务变化
- **WHEN** 系统应用该轮询结果
- **THEN** 系统不新增审计事件、审计资源或外部交互日志,并保留后续调度能力
### Requirement: 业务变化与轮询异常仍可追溯
系统 SHALL 在轮询产生网络、实名、套餐或有效流量等业务事实变化时持久化必要的业务事实与审计记录。外部调用失败、响应无效或结果未知时,系统 MUST 保留可调查的失败或恢复信息,且不得把失败静默降级为正常无变化观测。
#### Scenario: 轮询产生网络状态变化
- **GIVEN** 渠道返回的网络状态与当前业务事实不同
- **WHEN** 系统成功应用该状态变化
- **THEN** 系统持久化业务状态变化及相应审计事实
#### Scenario: 轮询渠道调用失败
- **WHEN** 轮询调用渠道超时、失败或返回无效响应
- **THEN** 系统保留可调查的失败或恢复信息,并按既有策略安排后续处理