This commit is contained in:
@@ -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 制造分裂历史。
|
||||
|
||||
|
||||
@@ -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` 快照字段
|
||||
|
||||
@@ -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 纵向切片:每日保存创建日快照,月初按数据库当前内容复核可变记录,内容变化时创建不可变新 revision,pending 或不一致阻止清理,不覆盖旧对象。【主: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】
|
||||
|
||||
Reference in New Issue
Block a user