全局审计完成
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m31s

This commit is contained in:
2026-08-07 11:02:52 +08:00
parent 88cc5e96ec
commit c64f3d8b80
94 changed files with 8641 additions and 6714 deletions

View File

@@ -355,7 +355,7 @@ Audit 业务 Repository 只有 Append/Read应用运行账号不获得审计 U
3. 交付 Writer、Registry、安全清理、平台基础事件/资源 Query 和主体活动 Query以代表性配置、Outbox 人工操作、多卡设备和资金用例证明接缝;不创建旧日志历史 Adapter。
4. 按纵向切片迁移账号权限、店铺企业、资产/换货、套餐、订单支付退款充值、钱包佣金、审批配置、批量任务、通知轮询、Worker/Scheduler/Callback每片独立验证后停止该用例旧写。
5. 交付 Integration 调查及 request/correlation/finance/risk 组合 Query完成 OpenAPI/中文文档与前端契约;旧 operation log 不接入这些 Query。
6. 先以只归档不清理模式运行完整自然月,验证每日对象、manifest、重复任务和月度最终复核门禁稳定后再单独启用月初清理开关
6.在显式确认的隔离测试环境构造一个已结束的完整自然月,以只归档不清理模式验证每日对象、manifest、重复任务和月度最终复核无需等待现实时间流逝。dry-run 通过后仅在该测试环境启用清理,验证目标月三张日志表归零且月前/月后哨兵、其他业务事实和对象归档不受影响;生产清理开关仍由发布决策单独启用
7. 停机前核对旧 Writer 调用归零、Action 覆盖无空白、同事务失败回滚、主体隔离、凭据不落库、查询性能、归档完整性和历史样本;失败则不切换旧写或清理开关。
8. 切换生产组合根并启用旧写护栏。产生新 Audit Event 后,业务回滚只允许暂停异常生产者并前向修复;正常保留期清理由 Retention Worker 按已归档月份执行,不得恢复旧 Writer 制造分裂历史。

View File

@@ -3,6 +3,18 @@
### Requirement: 资产操作审计日志必须补充业务可读字段
系统 SHALL 将卡、设备、绑定关系、换货单和相关店铺作为独立 Audit Event Resource 记录,并 MUST 为每个资源保存事件发生时的业务标识快照及该资源自己的 `before_data``after_data`,确保业务侧无需查询当前业务表即可理解历史操作。
#### Scenario: 卡相关日志补充 ICCID
- **WHEN** 系统记录针对单卡或多卡的分配、回收、删除、实名、停复机等 Audit Event
- **THEN** 每张卡的资源快照或资源级前后数据除内部卡 ID 外,还包含对应的 ICCID
#### Scenario: 设备相关日志补充设备标识
- **WHEN** 系统记录设备绑定、解绑、切卡、远程控制、删除等 Audit Event
- **THEN** 每台设备的资源快照或资源级前后数据除内部设备 ID 外,还包含 VirtualNo、IMEI、SN 中当时可用的业务标识
#### Scenario: 店铺相关日志补充店铺名称
- **WHEN** 系统记录资产分配、资产回收或归属变更类 Audit Event
- **THEN** 店铺资源快照在店铺 ID 之外还包含事件发生时的店铺名称
#### Scenario: 卡相关事件保存完整关键标识
- **WHEN** 系统记录针对单卡或多卡的分配、回收、删除、实名、停复机、绑定或换货事件
- **THEN** 每张卡资源快照除内部卡 ID 外还包含当时可用的 ICCID、虚拟号及其他已登记关键业务标识
@@ -28,6 +40,14 @@
### Requirement: 审计日志可读字段必须遵循兼容新增原则
系统 SHALL 在统一 Audit Event 切换后保留旧 `tb_asset_operation_log` 原始数据,但 MUST NOT 回填、转换或投影到新审计中心;新事件不得为兼容旧单资产结构而丢失多资源关系。
#### Scenario: 现有内部字段仍然保留
- **WHEN** 统一 Audit Event 上线并停止旧资产日志新增
- **THEN** 旧日志中的 `card_id``device_id``target_shop_id``binding_id` 等内部字段原样保留,不被移除或重命名
#### Scenario: 新增字段不影响旧日志读取
- **WHEN** 现有日志消费方继续通过独立旧历史入口读取资产操作日志
- **THEN** 旧字段结构保持可用,统一 Audit Event 不改写旧记录
#### Scenario: 旧历史保持独立
- **WHEN** 平台需要查询切换前的资产操作历史
- **THEN** 系统仅通过既有旧资产日志入口读取原表内容
@@ -46,6 +66,14 @@
### Requirement: 同类审计场景必须使用统一的可读字段命名
系统 SHALL 通过 Resource Registry 为同类资产资源定义稳定的类型、角色与标识快照字段,平台查询和安全资源活动投影 MUST 使用一致语义。
#### Scenario: 单卡与批量卡操作字段一致
- **WHEN** 系统分别记录单卡和批量卡 Audit Event
- **THEN** 每张卡资源均使用 `iccid` 字段,批量关系通过资源子事件或多个资源关联表达
#### Scenario: 设备相关可读字段命名稳定
- **WHEN** 系统记录多个设备相关 Audit Event
- **THEN** 设备业务标识统一使用 Resource Registry 声明的 `virtual_no``imei``sn` 字段
#### Scenario: 单卡与批量卡标识命名一致
- **WHEN** 系统分别记录单卡和批量卡事件
- **THEN** 每张卡均使用同一资源类型及 `iccid``virtual_no` 快照字段

View File

@@ -100,18 +100,18 @@
- [x] 10.1 交付 Audit Event + Event Resource 每日归档纵向切片:新增无外键 `tb_log_archive_run`、按 `Asia/Shanghai` 前一完整自然日读取、事件携带完整 resources 的 JSONL+gzip、manifest/SHA-256、对象 metadata 复核、稳定对象 Key 与重复任务幂等;复用现有对象存储和 Asynq不阻塞业务 Writer。【主Infrastructure + Application/Asynq边界Audit 每日冷归档完整闭环不迁移Integration、Access、清理与归档查询验证迁移 up/down、空日/大日、事件资源计数、对象损坏、重复投递、存储故障和业务写入隔离核对通过LSP 无诊断】
- [x] 10.2 交付 Integration Log 每日归档及月度最终 revision 纵向切片:每日保存创建日快照,月初按数据库当前内容复核可变记录,内容变化时创建不可变新 revisionpending 或不一致阻止清理不覆盖旧对象。【主Infrastructure + Application/Asynq边界Integration 冷归档最终性不迁移Integration Writer 语义、恢复和对象存储查询验证pending→success/unknown、跨月更新、hash 变化、重复复核、无法终结和对象版本核对通过LSP 无诊断】
- [x] 10.3 交付月初整月数据库物理删除纵向切片:先完成上月最后一天归档,再校验全部日期的 Audit/Integration manifest、Audit 事件与资源数、Integration 最终 revision、对象大小和 SHA-256通过后使用 GORM、索引和有界批次按先 Event Resource 后 Event、再 Integration 的受控流程物理 `DELETE` PostgreSQL 上月数据,任务可从 ledger 断点继续,并写当前月 `retention_worker` Audit Event审计 Model 不含 `gorm.DeletedAt`不写归档状态、不迁移数据库历史表、不删除对象存储备份。【主Application + Infrastructure/Asynq边界归档门禁与 PostgreSQL 上月数据物理删除不迁移Access Log、Domain Ledger、Outbox、旧 operation log、对象存储生命周期、分区改造和人工清表验证缺日/hash 不一致/部分对象/pending 全部阻断物理行数归零、批次中断续跑、窗口隔离、对象长期保留、清理事件和数据库膨胀指标核对通过LSP 无诊断】
- [ ] 10.4 为平台 Audit/Integration 及代理/企业活动 DTO 增加 `retention{online_from,archived_before,timezone}`显式时间范围早于或跨越在线边界时返回稳定已归档错误默认只查在线窗口ID-only 不存在仍按资源不存在处理不访问对象存储也不新增下载或恢复路由。【主Query/API边界在线查询留存语义不迁移冷热联合查询和前端页面实现验证在线、已归档、跨边界、默认范围、空在线月、路由/OpenAPI 无归档读写能力核对通过LSP 无诊断】
- [ ] 10.5 先以“只归档、不清理”开关运行并验收一个完整自然月,记录每日成功率、积压、对象大小、压缩率、hash/计数差异、Integration revision、清理预估耗时和告警;只有月度演练全部通过后才启用清理开关。【主Release/Observability边界留存能力灰度启用不迁移Access Log、自动恢复和分区改造验证完整月 manifest、故障重试、月度 dry-run、监控阈值、操作手册和启停回滚证据齐全】
- [x] 10.4 为平台 Audit/Integration 及代理/企业活动 DTO 增加 `retention{online_from,archived_before,timezone}`显式时间范围早于或跨越在线边界时返回稳定已归档错误默认只查在线窗口ID-only 不存在仍按资源不存在处理不访问对象存储也不新增下载或恢复路由。【主Query/API边界在线查询留存语义不迁移冷热联合查询和前端页面实现验证在线、已归档、跨边界、默认范围、空在线月、路由/OpenAPI 无归档读写能力核对通过LSP 无诊断】
- [x] 10.5 先以“只归档、不清理”开关对隔离测试环境中构造的完整自然月执行逐日归档和月度 dry-run记录成功率、积压、对象大小、压缩率、hash/计数差异、Integration revision、清理预估批次和告警;无需等待现实时间流逝。dry-run 全部通过后,仅在显式确认的测试数据库执行物理清理演练,验证只删除目标月 Audit Event、Event Resource 和 Integration Log月前/月后边界、其他业务事实及对象归档不受影响;生产清理开关仍保持关闭,直到发布启用决策。【主Release/Observability边界留存能力灰度启用不迁移Access Log、自动恢复和分区改造验证完整月 manifest、故障重试、月度 dry-run、目标月归零、边界哨兵保留、监控阈值、操作手册和启停回滚证据齐全】
## 11. 旧 Writer Contract 与发布门禁
- [ ] 11.1 完成账号、资产及借用旧 account audit 的充值/套餐/支付配置等调用清单逐项归零,删除生产组合根对旧 Writer 的注入和所有裸/双重 goroutine 审计写入;旧表原样保留且不接入新审计 Query既有旧资产历史入口与手动轮询运行写入显式白名单。【主Infrastructure/Governance边界旧 operation log contract不迁移旧数据回填/转换、删除旧表和历史数据|验证:静态扫描、生产装配、统一 Query 无旧表依赖、真实业务写入和旧表无新增核对通过LSP 无诊断】
- [ ] 11.2 执行最终 Action/Resource Registry 与当前代码覆盖比对并增量更新 `.scratch/tech-global-audit/审计覆盖基线.md`,确认所有非查询写入口和 Registry 标记的敏感读取均登记、普通查询/N/A 有理由,多资源/设备卡槽/换货/批量/资金/自动入口无遗漏未注册动作或资源使门禁失败。【主治理边界全仓当前入口不迁移未来未提交功能验证覆盖门禁、Registry 清单、基线文件和业务/研发/安全签字证据齐全】
- [ ] 11.3 执行安全与身份发布门禁:平台接口仅 SuperAdmin/Platform、代理店铺层级、企业有效授权、internal_only 不泄露、业务字段平台完整、所有系统安全凭据在库和响应中均不存在、无用户审计导出、对象存储查询/恢复或业务删除路由。【主Security/API边界第一阶段访问与字段契约不迁移细粒度权限码验证敌对 HTTP 场景、数据库抽样、路由/OpenAPI 扫描全部 PASS】
- [ ] 11.4 执行事务、幂等与跨链路发布门禁关键成功审计失败回滚、失败短事务保留原错、批量根子计数一致、correlation/parent/series 正确、Audit/Integration/Domain Ledger/Outbox 边界没有混用。【主Verification边界高风险和代表性流程不迁移业务规则优化验证代表性业务流程的接口、数据库与日志证据核对通过已知错误为零】
- [ ] 11.5 执行迁移、性能、OpenAPI、归档留存和回滚演练增量迁移可在无事实环境 down业务回滚保留在线窗口内事实归档失败阻止清理清理后不恢复旧 Writer或伪造在线历史记录监控阈值和操作手册。【主Release/Infrastructure边界一次 contract 发布|不迁移:数据库分区、冷热联合查询与自动恢复|验证:迁移演练、性能目标、归档 dry-run、两份文档生成、构建、监控和回滚演练全部 PASS】
- [x] 11.1 完成账号、资产及借用旧 account audit 的充值/套餐/支付配置等调用清单逐项归零,删除生产组合根对旧 Writer 的注入和所有裸/双重 goroutine 审计写入;旧表原样保留且不接入新审计 Query既有旧资产历史入口与手动轮询运行写入显式白名单。【主Infrastructure/Governance边界旧 operation log contract不迁移旧数据回填/转换、删除旧表和历史数据|验证:静态扫描、生产装配、统一 Query 无旧表依赖、真实业务写入和旧表无新增核对通过LSP 无诊断】
- [x] 11.2 执行最终 Action/Resource Registry 与当前代码覆盖比对并增量更新 `.scratch/tech-global-audit/审计覆盖基线.md`,确认所有非查询写入口和 Registry 标记的敏感读取均登记、普通查询/N/A 有理由,多资源/设备卡槽/换货/批量/资金/自动入口无遗漏未注册动作或资源使门禁失败。【主治理边界全仓当前入口不迁移未来未提交功能验证覆盖门禁、Registry 清单、基线文件和业务/研发/安全签字证据齐全】
- [x] 11.3 执行安全与身份发布门禁:平台接口仅 SuperAdmin/Platform、代理店铺层级、企业有效授权、internal_only 不泄露、业务字段平台完整、所有系统安全凭据在库和响应中均不存在、无用户审计导出、对象存储查询/恢复或业务删除路由。【主Security/API边界第一阶段访问与字段契约不迁移细粒度权限码验证敌对 HTTP 场景、数据库抽样、路由/OpenAPI 扫描全部 PASS】
- [x] 11.4 执行事务、幂等与跨链路发布门禁关键成功审计失败回滚、失败短事务保留原错、批量根子计数一致、correlation/parent/series 正确、Audit/Integration/Domain Ledger/Outbox 边界没有混用。【主Verification边界高风险和代表性流程不迁移业务规则优化验证代表性业务流程的接口、数据库与日志证据核对通过已知错误为零】
- [x] 11.5 执行迁移、性能、OpenAPI、归档留存和回滚演练增量迁移可在无事实环境 down业务回滚保留在线窗口内事实归档失败阻止清理清理后不恢复旧 Writer或伪造在线历史记录监控阈值和操作手册。【主Release/Infrastructure边界一次 contract 发布|不迁移:数据库分区、冷热联合查询与自动恢复|验证:迁移演练、性能目标、归档 dry-run、两份文档生成、构建、监控和回滚演练全部 PASS】
## 12. 最终文档与交付确认
- [ ] 12.1 在 `docs/feature-504-multi-view-audit-center/` 编写中文总结,包含四类事实边界、字段字典、当前领域/资源/动作矩阵、各资源快照、所有查询视角与 DTO、平台和主体可见性、多卡设备/换货/资金/批量样例、每日归档与月度清理、在线窗口、异常闭环、发布回滚、监控和明确未实现项,并更新 README 索引。【主Documentation边界本 Change 完整交付不迁移旧历史评审文档验证文档逐项引用实现、OpenAPI 和验收证据,无过时字段或路径】
- [ ] 12.2 汇总静态扫描、LSP、迁移、构建、OpenAPI、数据库性能、API P95/P99、身份隔离、凭据抽样、旧写归零、归档完整性、月度清理 dry-run 和业务流程证据,逐条核对 proposal/design/specs/tasks只有全部完成且无已知错误时才标记 Change 可归档。【主:最终验收|边界:全部能力|不迁移:后续权限码、用户导出、对象存储历史查询/恢复、分区、风险处置和自动恢复|验证:制品与人工/数据证据核对通过 + OpenSpec strict validate PASS】
- [x] 12.1 在 `docs/feature-504-multi-view-audit-center/` 编写中文总结,包含四类事实边界、字段字典、当前领域/资源/动作矩阵、各资源快照、所有查询视角与 DTO、平台和主体可见性、多卡设备/换货/资金/批量样例、每日归档与月度清理、在线窗口、异常闭环、发布回滚、监控和明确未实现项,并更新 README 索引。【主Documentation边界本 Change 完整交付不迁移旧历史评审文档验证文档逐项引用实现、OpenAPI 和验收证据,无过时字段或路径】
- [x] 12.2 汇总静态扫描、LSP、迁移、构建、OpenAPI、数据库性能、API P95/P99、身份隔离、凭据抽样、旧写归零、归档完整性、月度清理 dry-run 和业务流程证据,逐条核对 proposal/design/specs/tasks只有全部完成且无已知错误时才标记 Change 可归档。【主:最终验收|边界:全部能力|不迁移:后续权限码、用户导出、对象存储历史查询/恢复、分区、风险处置和自动恢复|验证:制品与人工/数据证据核对通过 + OpenSpec strict validate PASS】