暂存一下,防止丢失

This commit is contained in:
2026-07-24 16:07:18 +08:00
parent 5d6e23f1a5
commit a18ed8bc8d
180 changed files with 13597 additions and 1986 deletions

View File

@@ -18,6 +18,28 @@
- **WHEN** 实施人员领取任一未完成纵向任务
- **THEN** 任务中的主/辅助通道 MUST 与其状态机、金额、并发、外部副作用或纯读取性质一致,并按任务声明限制迁移范围
### Requirement: 审批业务必须与具体渠道解耦
退款、线下充值及未来审批业务 MUST 只依赖渠道无关的 Approval Port、标准审批实例、标准决策和终态事件不得在业务 Domain/Application 中引用企微、钉钉等渠道 SDK、DTO、回调状态码、模板控件 ID 或外部审批编号字段。审批实例 MUST 使用 `provider` 与通用 `external_ref` 标识渠道和外部实例;企微 `sp_no` 等渠道字段只能由对应 Adapter 转换或保存在渠道专属配置/安全快照中。
#### Scenario: 先实现退款业务核心
- **WHEN** 企微 Adapter 尚未实现但退款金额、状态机和整单终结规则开始开发
- **THEN** 退款业务 MUST 能围绕 Approval Port 和标准 `approved/rejected/cancelled/deleted/revoked_after_approved` 决策完成构建,不得依赖企微包或 `sp_no`
#### Scenario: 接入企微首个 Adapter
- **WHEN** 企微提交、回调或轮询取得渠道状态
- **THEN** WeCom Adapter MUST 将其翻译为标准审批引用与决策,再调用渠道无关 Application 用例;业务模块不得解析企微状态
#### Scenario: 未来接入其他审批渠道
- **WHEN** 后续新增钉钉或其他审批平台
- **THEN** 实施 MUST 新增对应 Adapter 和渠道配置,不得修改退款、充值、钱包、佣金、套餐或换货业务不变量
### Requirement: 审批抽象不得演变为本地流程引擎
渠道无关审批层 MUST 仅管理业务引用、真实提交人快照、`provider/external_ref`、标准状态、提交与同步 Port、标准终态事件及幂等。系统不得在本期实现审批节点编排、审批人解析、组织模型、会签/或签、审批动作页面或 BPMN这些能力继续由外部审批平台负责。
#### Scenario: 外部渠道未就绪
- **WHEN** 业务代码已经完成但当前环境没有可用审批 Adapter 或场景配置
- **THEN** 新审批提交入口 MUST 在写入业务单、审批实例和 Outbox 前失败关闭,已存在实例仍按其原 provider 继续同步和处理
### Requirement: API 必须使用项目统一契约
所有新增或修改 API MUST 使用 Fiber v2、Validator、`pkg/response``{code,msg,data,timestamp}` 响应包络;不得使用 `{message}` 替代 `msg`。错误 MUST 在 `pkg/errors` 中定义或复用Handler 参数校验失败统一返回 `CodeInvalidParam`,资源不存在与越权使用不泄露存在性的 `CodeForbidden` 语义,禁止向客户端拼接底层错误。
@@ -51,7 +73,7 @@
涉及跨事务副作用或外部系统的用例 MUST 保留事务、幂等、Outbox、Asynq 至少一次投递、Integration Log 和外部调用恢复能力。关键事件 MUST 与业务事实同事务写入 Outbox消费者 MUST 使用状态条件、唯一业务键、处理租约或乐观锁保证幂等;`EnqueueTask` 载荷 MUST 传 struct 或 map不得传预序列化 `[]byte`
#### Scenario: 外部调用结果未知
- **WHEN** 企微、支付、Gateway 或其他具有副作用的请求已经发出但结果未知
- **WHEN** 任一审批渠道、支付、Gateway 或其他具有副作用的请求已经发出但结果未知
- **THEN** 系统 MUST 保存可恢复的 Integration Log 和业务状态,不得伪装为明确失败后盲目重试或重复资金动作
#### Scenario: 可靠事件投递失败
@@ -70,5 +92,4 @@
#### Scenario: 快速交付遇到复杂异常分支
- **WHEN** 某异常分支实现成本高但已被冻结 PRD 定义为资金或外部调用安全边界
- **THEN** 该分支 MUST 留在本轮业务实现范围,不能自动化测试 Audit Event 一起延期
- **THEN** 该分支 MUST 留在本轮业务实现范围,不能自动化测试延期或 Audit Event 已移出范围而被删除

View File

@@ -18,22 +18,22 @@
- **WHEN** 任务因本次豁免没有自动化或真实外部验证证据
- **THEN** 验证状态 MUST 标记“代码完成、验证延期”或“待前端/人工验收”,不得标记“验收完成”
### Requirement: Audit Event 专项不得阻塞测试环境里程碑
`.scratch/tech-global-audit/issues/01``19``20``21` 及其他 Audit Event 写入、审计中心、历史投影、敏感读取、导出、保留清理和一次性审计切换任务 MUST 不进入本轮实现任务,也不得作为其他七月需求的测试环境阻塞项。提交 `ff44305` 已存在的审计代码 MUST 原样冻结,不删除、不回滚、不继续扩展。
### Requirement: Audit Event 专项必须移出本 Change 与本次上线范围
`.scratch/tech-global-audit/issues/01``19``20``21` 及其他 Audit Event 写入、审计中心、历史投影、敏感读取、导出、保留清理和一次性审计切换任务 MUST 不进入本轮实现任务,也不得作为其他七月需求的测试环境或生产上线阻塞项。提交 `ff44305` 已存在的相关代码 MUST 原样冻结,不删除、不回滚、不继续扩展未来如需恢复审计治理MUST 另开独立 Change 重新评审
#### Scenario: 下游原 Ticket 依赖全局审计
- **WHEN** 某七月 PRD/Ticket 原先把 Audit Event 或一次性审计发布门禁列为 blocker
- **THEN** 本 Change MUST 移除测试环境阻塞边,同时保留其生产发布前恢复义务
- **THEN** 本 Change MUST 同时移除测试环境和生产上线阻塞边,不在本 Change 内保留恢复义务
#### Scenario: 审计冻结代码存在
- **WHEN** 构建包含 `integrationlog.Repository``cmd/audit-coverage``pkg/sanitizer` 或迁移 `000167_create_audit_integration_log`
- **THEN** 不得为冻结目的删除这些代码;未装配到生产组合根的审计组件不得被本轮业务主动启用
### Requirement: 可靠性日志与 Audit Event 必须保持边界清晰
Access Log SHALL 继续负责 HTTP 调试并使用现有递归脱敏Integration Log SHALL 记录外部交互及结果未知恢复事实Domain Ledger SHALL 继续作为金额、订单、退款、充值、审批和状态的业务权威Outbox SHALL 继续作为可靠副作用投递事实。Audit Event 作为“谁对什么做了什么”的治理能力暂缓,其他三类事实不得被停用或合并。
### Requirement: 可靠性事实不得因 Audit Event 排除而削弱
Access Log SHALL 继续负责 HTTP 调试并使用现有递归脱敏Integration Log SHALL 记录外部交互及结果未知恢复事实Domain Ledger SHALL 继续作为金额、订单、退款、充值、审批和状态的业务权威Outbox SHALL 继续作为可靠副作用投递事实。Audit Event 作为“谁对什么做了什么”的统一治理能力不属于本 Change,其他事实不得被停用或合并。
#### Scenario: 新业务调用外部系统
- **WHEN** 本轮新业务调用企微、支付、Gateway 或接收运营商回调
- **WHEN** 本轮新业务通过企微等审批渠道 Adapter、支付、Gateway 或运营商 Adapter 发出请求或接收回调
- **THEN** 仍 MUST 写 Integration Log 并保留幂等、事务与恢复语义,即使本次不写 Audit Event
#### Scenario: Access Log 处理敏感正文
@@ -47,6 +47,10 @@ Access Log SHALL 继续负责 HTTP 调试并使用现有递归脱敏Integrati
- **WHEN** 迁移、构建、配置、路由、Worker 注册或前后端版本一致性检查失败
- **THEN** 测试环境 MUST 保持维护或停止新入口,不得将该批标记部署完成
#### Scenario: 审批业务核心先于渠道装配完成
- **WHEN** 退款或线下代充业务代码已围绕 Approval Port 完成,但当前环境尚无有效 WeCom Adapter、场景或发起身份配置
- **THEN** 该业务只能记录“后端代码完成”,新提交入口 MUST 保持关闭或失败关闭,不得标记“测试环境可用”
### Requirement: 回滚必须保留不可逆业务事实
开放访问前失败 MAY 回滚应用和可逆迁移一旦产生审批、支付、资金流水、订单、退款、充值、Outbox、Integration Log、通知或部分成功批量任务回滚 MUST 保留这些事实,暂停异常生产者并采用前向修复。不得通过清表、恢复旧 Writer 或要求用户重复支付来回滚。
@@ -55,9 +59,8 @@ Access Log SHALL 继续负责 HTTP 调试并使用现有递归脱敏Integrati
- **THEN** 系统 MUST 保留支付与 Outbox/恢复事实,并在恢复后幂等完成入账,不得关闭原事实或要求重新支付
### Requirement: 生产发布不得继承测试豁免
生产发布前 MUST 恢复并完成自动化测试、真实 PostgreSQL/Redis/企微/支付/Gateway 验收、前后端联调、历史数据抽样与迁移演练、性能/权限/安全检查,以及 Audit Event 专项的重新评审、写入覆盖和发布门禁。延期项 MUST 保持未勾选,直至产生真实证据;不得把本测试环境豁免升级为永久 N/A
生产发布前 MUST 恢复并完成自动化测试、真实 PostgreSQL/Redis/企微/支付/Gateway 验收、前后端联调、历史数据抽样与迁移演练、性能/权限/安全检查。延期项 MUST 保持未勾选直至产生真实证据Audit Event 已明确移出本 Change不属于需要恢复的测试豁免
#### Scenario: 准备生产发布
- **WHEN** 团队从测试环境里程碑推进正式生产
- **THEN** 发布负责人 MUST 重新启用延期验证与治理清单,全部完成前不得声明生产验收通过