This commit is contained in:
@@ -1,11 +1,11 @@
|
||||
# 全系统审计覆盖基线
|
||||
|
||||
状态:2026-07-29 当前源码重扫及业务语义、研发边界、安全字段三视角复核已完成;后续入口变更由静态门禁持续校验
|
||||
状态:2026-08-06 当前源码最终重扫及业务语义、研发边界、安全字段三视角复核已完成;后续入口变更由静态门禁持续校验
|
||||
|
||||
## 可复核制品
|
||||
|
||||
- 显式逐入口清单:[`审计覆盖清单.json`](审计覆盖清单.json),当前共 647 项;七月旧 490 项只用于遗漏比对,不再作为现行契约。
|
||||
- 扫描范围:326 个 HTTP RouteSpec、31 个 Asynq Worker、8 个 Asynq 定时任务、27 个 Application、5 个 Domain、178 个旧 Service 公共业务入口、57 个 Integration Log 调用点和 15 个旧 Writer 调用点。
|
||||
- 显式逐入口清单:[`审计覆盖清单.json`](审计覆盖清单.json),当前共 692 项;七月旧 490 项只用于遗漏比对,不再作为现行契约。
|
||||
- 扫描范围:331 个 HTTP RouteSpec、39 个 Asynq Worker 注册语句(35 个唯一 TaskType)、12 个 Asynq 定时任务、33 个 Application、5 个 Domain、180 个旧 Service 公共业务入口、78 个 Integration Log 调用点、14 个 Outbox Consumer 注册点和 0 个旧 Writer 调用点。
|
||||
- 生成入口:`go run ./cmd/audit-coverage`。
|
||||
- 发布门禁:重新执行 `go run ./cmd/audit-coverage`,并通过清单差异、gopls、构建和数据库数据核对确认入口与决策同步。
|
||||
- 每项均固定代码入口、业务所有者、中文摘要以及待评审的 Audit Event / Domain Ledger / Integration Log / Outbox 分类候选,并预留动作、风险、资源、操作者来源、事务边界、失败策略、前后数据、敏感策略和确认核对接缝。
|
||||
@@ -13,12 +13,12 @@
|
||||
|
||||
生成器只负责产生待评审候选,不能自行代表评审通过。更新清单时必须核对业务语义,不能仅运行生成命令后直接提交。本轮复核已按下述证据完成,后续新增入口仍需重新执行同样流程。
|
||||
|
||||
## 2026-07-29 当前入口重扫结论
|
||||
## 2026-08-06 当前入口最终重扫结论
|
||||
|
||||
### 现行矩阵与旧清单差异
|
||||
|
||||
- 当前逐入口矩阵固定 `code_entry/kind/owner/action/actor/resource/transaction/visibility`,并分别登记 Audit Event、Domain Ledger、Integration Log、Outbox 或 N/A 理由;647 项不存在空白决策字段。
|
||||
- RouteSpec 从旧 270 项增至当前 316 项;Worker 从 24 项增至 31 项;Asynq 定时任务从 4 项增至 8 项。当前另显式登记 60 个 Integration Log 调用点和 21 个旧 Writer 调用点,避免用模块级泛化描述替代真实入口。
|
||||
- 当前逐入口矩阵固定 `code_entry/kind/owner/action/actor/resource/transaction/visibility`,并分别登记 Audit Event、Domain Ledger、Integration Log、Outbox 或 N/A 理由;692 项不存在空白决策字段,所有 Audit Event N/A 项均有理由。
|
||||
- RouteSpec 从旧 270 项增至当前 331 项;Worker 从 24 项增至 39 个注册语句(35 个唯一 TaskType);Asynq 定时任务从 4 项增至 12 项。当前另显式登记 78 个 Integration Log 调用点、14 个 Outbox Consumer 注册点和 0 个旧 Writer 调用点,避免用模块级泛化描述替代真实入口。
|
||||
- 扫描器排除无 `context.Context` 的依赖注入 `SetXxx`、构造器、注册/装配函数和纯分发壳;普通 GET、购买检查和资产验证均按只读 N/A 登记。`SetSpeedTier` 因包含真实业务上下文和 Gateway 副作用保留为业务入口。
|
||||
- Callback 使用 `external_system/callback` actor;Worker 与消费者使用 `system_task/asynq`;Scheduler 只投递任务时为 N/A,真实业务变化归对应 Worker/Application。
|
||||
|
||||
@@ -37,8 +37,8 @@
|
||||
### Integration Log 与旧 Writer 复核
|
||||
|
||||
- Integration Log 唯一 Repository 写入口为 `Start/Complete/RecordInbound/ClaimExpiredInboundPending`,当前已覆盖运营商回调、支付 H5 下单/查单/回调、卡观测、卡限速及企微 token/通讯录/模板/附件/提交/详情/回调;支付宝 WAP URL 本地签名不伪造外部尝试。
|
||||
- 当前设备 Gateway、IoT 卡 Gateway、统一资产实时状态等直连调用尚未全部接入 Integration Log;矩阵已逐用例登记为“必须”,由后续 3.3、6.x、8.6~8.8 纵向切片落实,不能用旧 Asset Operation Log 代替。
|
||||
- 支付配置的 5 个旧账号日志外层 goroutine 已归零;旧 Writer 仍有少量未迁移资产、卡、设备、导入和轮询调用,旧 Writer 自身的 goroutine 留待最终 contract 任务统一移除。
|
||||
- 设备 Gateway、IoT 卡 Gateway、统一资产实时状态、支付、企微与运营商回调均已按真实外部尝试接入 Integration Log;扫描器覆盖 `Start/Complete/RecordInbound/ClaimExpiredInboundPending`,不能用 Audit Event 或旧 Asset Operation Log 代替。
|
||||
- 旧账号和旧资产 Writer、直接业务调用及裸/双重 goroutine 均已归零;旧账号表与旧资产表原样保留,旧资产仅保留独立历史只读入口。
|
||||
|
||||
### 已落地代表切片
|
||||
|
||||
@@ -149,10 +149,8 @@
|
||||
|
||||
### 旧账号审计
|
||||
|
||||
- Writer 与 Store:`internal/service/account_audit/service.go`、`internal/store/postgres/account_operation_log_store.go`。
|
||||
- 生产装配:`internal/bootstrap/services.go`、`internal/bootstrap/stores.go`。
|
||||
- 调用模块:`internal/service/account/service.go`、`internal/service/agent_recharge/service.go`、`internal/service/shop_package_batch_allocation/service.go`、`internal/service/wechat_config/service.go`。
|
||||
- 已切换入口:账号创建、基础资料更新、独立启停、软删除、管理员改密、本人改密、企微绑定及后台登录/登出已改用统一 Writer;PostgreSQL 账号安全事实与审计同事务,登录/登出审计为提交后 best-effort,失败不撤销 Token 也不改变原认证结果;刷新保持原单次刷新协议,不因审计重写。企微绑定旧账号日志调用已移除,其他借用旧账号日志的调用模块仍按后续任务保留。
|
||||
- contract 结果:旧 Writer、Store、生产装配和全部借用旧账号日志的调用已删除;`tb_account_operation_log` 表及存量数据原样保留,不回填、不转换、不接入统一 Query。
|
||||
- 已切换入口:账号创建、基础资料更新、独立启停、软删除、管理员改密、本人改密、企微绑定及后台登录/登出已改用统一 Writer;PostgreSQL 账号安全事实与审计同事务,登录/登出审计为提交后 best-effort,失败不撤销 Token 也不改变原认证结果;刷新保持原单次刷新协议,不因审计重写。
|
||||
- 角色创建/更新/启停/删除/默认信用、权限创建/更新/删除及角色权限分配/移除已切换统一 Writer;角色、权限和关联变化与 Audit Event 同一 GORM 事务,批量配置不再逐项自动提交,权限快照保存 code/name 和资源级 before/after。
|
||||
- 账号角色分配/移除及店铺默认角色分配/移除已切换统一 Writer;账号或店铺为主要资源,实际变化角色保存 ID/name/type/status 与分配前后值,关系变化与审计共用同一 GORM 事务;权限缓存在提交后 best-effort 失效,Redis 失败不回滚业务。账号两处旧 operation log 写入已移除;店铺侧原本不存在旧账号日志写入。
|
||||
- 店铺创建与基础资料变化已切换统一 Writer:创建事件保存店铺编码、名称、上级和层级并与店铺、初始账号、默认角色及钱包初始化共用原有事务;更新事件只记录实际变化的基础资料,状态、业务员和 C 端登录限制留给 5.6。父子层级仍仅在创建时按既有七级规则确定,相关入口原本不存在旧账号日志写入。
|
||||
@@ -198,21 +196,59 @@
|
||||
- Integration Log 冷归档复用同一对象存储、归档 Service 和 `tb_log_archive_run`:`integration:daily:archive` 按 `created_at` 保存前一自然日的结构化 JSONL+gzip 创建日快照;`integration:monthly:finalize` 在月初逐日按数据库当前内容重新生成并比较记录数与 SHA-256,首次终结、内容变化或对象 metadata 不一致时创建新的不可变 revision,旧对象不覆盖。月度复核仅把无 `pending` 记录且最终对象、manifest 均复核成功的日期标记 `is_final`;`pending`、对象损坏或复核失败会使任务失败并明确阻止后续清理。该切片不修改 Integration Writer、恢复语义或业务状态,也不删除 PostgreSQL 数据、不提供对象存储查询/恢复接口。
|
||||
- 月度留存清理使用 `audit:monthly:retention` Asynq 任务,在 `Asia/Shanghai` 每月 1 日 06:00 处理上一完整自然月:先补齐最后一日 Audit/Integration 归档并完成 Integration 最终 revision,再逐日核对 ledger、manifest、对象 metadata、压缩对象实际大小/SHA-256 及数据库数量。全月硬门禁通过后仅按 Event Resource → Audit Event → Integration Log 顺序对 `tb_audit_event_resource`、`tb_audit_event`、`tb_integration_log` 以 1000 行有界批次执行 GORM 物理删除,并复用 `tb_log_archive_run.cleanup_started_at/cleaned_at` 断点续跑;对象存储归档和 manifest 长期保留。清理结果以 `retention_worker/system_task` 写当月 `audit.retention_cleanup` Audit Event,资源为 `log_archive_month`;Domain Ledger、Integration Log 新写、Outbox 均为 N/A,因该事实是内部留存执行结果,不是业务状态、外部交互或可靠投递。Access Log、订单/支付/退款/钱包等 Domain Ledger、Outbox、Asynq 运行事实、手动轮询、旧 operation log 及其他业务表明确不删除。
|
||||
- 在线审计查询以 `tb_log_archive_run.cleaned_at/range_end` 作为真实清理边界:平台 Audit/Integration、request/correlation/finance/risk 及代理/企业活动响应统一返回 `retention{online_from,archived_before,timezone}`;缺省时间范围只查 PostgreSQL 在线窗口,显式早于或跨越边界返回 `CodeAuditDataArchived` 和当前边界。稳定事件或 Integration ID 只在在线库查找,不存在仍返回资源不存在;历史资源快照搜索和 Integration 尝试序列同样受边界限制。该 Query 切片不访问对象存储,不新增归档下载、恢复、冷热联合查询、导出或写路由,普通读取仍为 Audit Event/Domain Ledger/Integration Log/Outbox N/A。
|
||||
- 留存灰度默认使用 `worker.audit_retention_cleanup_enabled=false`:月初 `audit:monthly:retention` 只读复核完整月 ledger、manifest、对象 metadata/大小/SHA-256、Audit 计数和 Integration 最终 revision,并记录三类在线行数、manifest 数、校验耗时和预计 1000 行删除批次;不会写 `cleanup_started_at/cleaned_at`,也不会执行 DELETE。完整自然月可在显式确认的隔离测试数据库中按真实日界构造,无需等待现实时间流逝;dry-run 通过后仅在该测试环境启用清理,验证目标月三张日志表归零且月前/月后哨兵、其他业务事实和对象归档不受影响。2026-08-06 使用 `.env.local` 的 `junhong_cmp_test` 完成 `2001-02` 仿真:56/56 归档成功、28/28 Integration final、最大 revision/attempt=2、压缩率 0.5047、dry-run 无清理断点、清理后目标月三表归零且 6 条边界哨兵保留、56 条账本清理断点完整并写入 1 条清理审计。生产开关仍保持关闭;该 Release/Observability 切片不产生 Domain Ledger、Integration Log 或 Outbox。
|
||||
|
||||
## 2026-08-06 最终 Registry 与覆盖门禁复核
|
||||
|
||||
- 业务复核:692 个当前源码入口均进入显式清单;状态变更、资金、权限、关键配置、批量、多资源、设备卡槽、换货、自动入口及 5 组敏感读取均已在上方领域矩阵给出 Audit Event 或逐项 N/A 决定。39 个 Worker 注册语句对应 35 个唯一 TaskType,重复注册来自对象存储可用/不可用两条互斥装配分支,不代表重复消费。
|
||||
- 研发复核:219 个 `AuditAction` 常量与 219 个 `actionsByCode` 注册项一一对应,16 个兼容 `AuditOperation` 与 `actionsByOperation` 一一对应;生产使用未注册动作、动作字符串字面量均为 0。61 个资源类型常量与 61 个 Resource Registry 条目一一对应,146 个资源角色常量均有生产引用,生产 `ResourceInput` 未使用资源类型或角色字符串字面量。Writer 对未知 action、未知 resource、主要资源不匹配及不完整关系保持 fail-closed。
|
||||
- 查询复核:通用资源时间线直接以 Resource Registry 判定支持类型,不再维护独立 13 类白名单;资源搜索仍按第一阶段契约只开放卡、设备、店铺、订单和退款 5 类 resolver。统一 Query 不读取旧账号/资产 operation log。
|
||||
- 外部与可靠链路复核:78 个 Integration Log 调用点覆盖 `Start/Complete/RecordInbound/ClaimExpiredInboundPending`,14 个 Outbox Consumer 注册点均显式登记;Consumer 注册本身为技术装配 N/A,实际状态变化沿用对应 Consumer/Application 动作,Outbox 投递事实不伪装成业务成功。
|
||||
- 安全复核:普通 GET 继续逐项 N/A;企微明文应用凭据、资产实时状态、后台/个人实名链接、完成态导出任务详情等敏感读取保持返回前 fail-closed 审计。密码、验证码、Token、Secret、私钥、Cookie、签名 URL 和支付密钥不进入 Audit/Integration 或主体投影。
|
||||
- contract 复核:旧 Writer 调用为 0,旧账号表与旧资产表原样保留,旧资产历史入口只读,手动轮询 ledger 继续读写。扫描清单 692 项必填分类字段缺失为 0,Audit Event N/A 无理由为 0;静态扫描、gopls、全仓构建与 `git diff --check` 作为本 Change 禁止自动化测试约束下的完成证据。
|
||||
|
||||
## 2026-08-06 安全与身份发布门禁复核
|
||||
|
||||
- 身份边界:平台 Audit/Integration Query 仅允许 `SuperAdmin/Platform`,代理与企业即使通过通用后台认证也在 Query 层统一 fail-closed;代理范围只取认证上下文中的自身及下级店铺,企业只取认证上下文企业 ID,并要求卡/设备授权 `revoked_at IS NULL AND deleted_at IS NULL`。
|
||||
- 主体投影:不支持资源类型与不存在/越权统一返回“无权限操作该资源或资源不存在”;活动投影返回前再次核验目标资源当前归属或有效授权。`internal_only` 不进入统计、列表和关联资源,`subject_result` 强制返回空 `subject_data`,只有 `subject_detail` 解码持久化白名单数据;主体 DTO 不包含 actor、risk、内部 before/after、Audit Event ID、request/correlation 或 Integration 内容。
|
||||
- 平台完整性:平台事件详情继续完整投影已存业务 metadata、资源身份快照及各资源 before/after,不对手机号、IP、ICCID、VirtualNo、金额和交易号执行展示掩码;系统安全凭据仍由 Writer/Sanitizer 在持久化前删除。
|
||||
- 凭据门禁:统一 Sanitizer 已覆盖驼峰字段名、裸 token/api/payment key 及凭据文本值;Audit/Integration 标量同样在落库和历史响应投影前清理。`.env.local` 测试 PostgreSQL 只读抽样中,Audit Event JSON、Audit Resource JSON、Audit 标量、Audit Resource 标量、Integration 标量、Integration 禁止键和 Integration 凭据值命中均为 0。历史 Integration 的 129 条初始正则命中全部是允许的 `token_present` 布尔安全事实,不包含 token 值。
|
||||
- 能力面:`internal/routes/audit.go` 及生成的 `docs/admin-openapi.yaml` 中 15 条平台/代理/企业审计路径全部只有 GET;未注册审计导出、对象存储归档查询/恢复、Integration 重试/补偿/修改/删除或 Audit Event 业务删除路由。旧资产 operation-logs 继续作为仅平台可读的独立历史白名单入口。
|
||||
- 验证约束:本 Change 明确禁止新增、修改或运行自动化测试;本门禁使用敌对身份调用链静态复核、数据库只读抽样、路由/OpenAPI 扫描、全仓构建、gopls 与 `git diff --check` 作为完成证据。
|
||||
|
||||
## 2026-08-06 事务、幂等与跨链路发布门禁复核
|
||||
|
||||
- 同事务失败关闭:系统配置更新在同一 GORM 事务内完成业务写和 `WriteConfigChange`;代理主钱包扣款/入账在同一事务内完成条件更新、唯一流水和 Audit Event,Writer 错误直接返回并回滚业务事务。Outbox 恢复、审批终态及其他高风险纵向切片沿用相同 `tx` 接缝,不使用提交后的补写冒充原子性。
|
||||
- 失败短事务:统一 `Writer.RecordFailure` 仅在原业务返回后开启独立短事务,`fillFailureInput` 保留原 `AppError` code/message;二次写失败只递增 `secondaryWriteFailures` 并输出含 action、资源、request/correlation 和原错误码的 critical 日志,不替换原业务错误。
|
||||
- 批量根子:`AppendBatch` 在落库前拒绝负数、`success+fail>total`、子事件少于成功数或多于已处理数,并为子事件补齐稳定 parent/correlation。该门禁发现并修复 IoT 卡批量轮询开关原先缺少根/子 `EventID` 的生产缺口,现按请求批次和卡 ID 生成稳定 ID,并以实际有效卡数计数。测试库只读核对中,批量计数错误、非法结果、缺少/多个主要资源均为 0;当前在线窗口没有带批次统计的根事件,因此不伪造动态样本结论。
|
||||
- Audit 链路:测试库中 `child_without_parent_online`、`child_without_correlation`、`parent_correlation_mismatch` 均为 0。跨事实 Query 分别读取 Audit Event、Integration Log、Outbox,并以独立 `record_source` 投影;Domain Ledger 和 Asynq 仅作为 `reference_only` 稳定引用,金额权威仍由资金业务表提供。
|
||||
- Integration 技术序列:只读核对发现存量代理充值查单及卡观测记录存在重复 `trigger_series + attempt`。新写入已前向修复:自动 attempt 在序列级 PostgreSQL advisory lock 的同一短事务内分配;卡观测按 `series_id + sync_type` 区分不同 Gateway operation。历史数据不回填、不猜测,详情保留每条真实 operation,并以 `attempt_sequence_reliable=false` 明确重复、断档或混合 operation 的受限保真度。
|
||||
- 幂等边界:Audit Event 继续以稳定 `event_id` 冲突不重复写;资金使用业务唯一流水和状态/版本条件;Outbox 保持独立至少一次投递状态。Audit、Integration、Domain Ledger 和 Outbox 之间只通过 request/correlation/parent、稳定业务 ID 或只读引用关联,没有把外部尝试、投递成功或审计摘要伪装成业务成功。
|
||||
- 验证约束:未新增、修改或运行自动化测试;完成证据使用代表性事务源码调用链、测试 PostgreSQL 只读不变量查询、覆盖清单、OpenAPI、全仓构建、gopls 与 `git diff --check`。
|
||||
|
||||
## 2026-08-06 迁移、性能、OpenAPI、归档留存与回滚发布门禁复核
|
||||
|
||||
- 迁移现状:`.env.local` 测试 PostgreSQL 的 `schema_migrations` 为 `205/dirty=false`;Audit、Integration、归档账本关键增量索引已存在。共享测试库已有 Audit 和归档事实,未对 `public` 执行 down。
|
||||
- 无事实 down/up:在同一测试 PostgreSQL 的隔离 schema 中使用最小前置表结构执行 `000199`~`000205` up,再按 `205→199` 逆序 down;上行后目标表/列/索引存在,回滚后 Audit/归档表移除且 Outbox parent/订单预占列恢复。`000199.down` 自带事务并提交外层事务,隔离 schema 已显式删除且核对不存在;该注意项已写入操作手册。
|
||||
- 性能观测:复用已完成 9.4 的分页 ID + 批量投影与索引证据;当前库只读 `EXPLAIN (ANALYZE, BUFFERS)` 中,事件列表、资源时间线、Integration 列表、风险聚合执行时间分别为 `0.315ms/0.116ms/0.186ms/0.123ms`,均低于 50ms。当前 Audit 在线样本很小,PostgreSQL 对部分路径选择顺序扫描,Integration 已命中 provider 索引;未因小样本增加缓存、分区或额外抽象。API P95/P99 沿用 9.4 完成证据及发布后 Access Log 阈值,本门禁不重复运行接口压测。
|
||||
- OpenAPI:`go run ./cmd/gendocs` 生成 `docs/admin-openapi.yaml`;运行时文档入口已生成 `logs/openapi.yaml`。两份制品均包含 15 条平台 Audit/Integration 及代理/企业资源活动路径。
|
||||
- 归档留存:复用 10.5 的 `2001-02` 完整月证据:56/56 归档成功、28/28 Integration final、最大 revision/attempt=2、压缩率 0.5047、dry-run 零清理断点,物理清理后目标三表为 0、6 条边界哨兵保留、56 条清理断点完整、1 条当月清理审计且对象/manifest 未删除。归档失败、缺日、pending、计数/SHA-256/对象 metadata 不一致均在 DELETE 前 fail-closed;生产清理开关仍关闭。
|
||||
- 回滚:现有归档手册已补充 contract 回滚 SOP 与全局监控阈值。业务回滚保留版本 205 结构、当前在线 Audit/Integration、全部 Domain Ledger/Outbox 和对象存储归档;只能回到旧 Writer 已停写的 contract 基线,不恢复旧 Writer,不对已清理月份回填或伪造在线历史。
|
||||
- 静态门禁:覆盖清单重新生成 692 项;全仓 `go build ./...`、已改 Go 文件 `gopls check` 和 `git diff --check` 通过。Go 只输出 module stat cache 无权限警告,构建退出码为 0。本 Change 未新增、修改或运行 `_test.go`;当前门禁按用户要求不再执行接口压测。
|
||||
|
||||
### 与审计接入分开保留的独立修复
|
||||
|
||||
- 企业、企业卡和企业设备的权限校验、空筛选防全量、批量边界、越权同错及企业设备 TOCTOU/真实命中计数作为独立安全与并发修复保留,不视为审计所需的业务重构。
|
||||
- 手机号绑定/换绑的行锁和事务内二次复检、账号状态与代理越权校验、管理员账号改密后撤销 Token 作为独立修复保留;企业账号改密不扩展同样的 Token 行为。
|
||||
- 角色/权限变化和店铺删除后的权限缓存清理能力作为独立修复保留,但只在数据库提交后 best-effort 执行,不让 Redis 失败反向回滚业务事实。
|
||||
- 已确认支付配置和员工线下充值的外层裸 goroutine 均已归零;旧 Writer 自身仍另启 goroutine,由最终 contract 任务统一处理。
|
||||
- 支付配置和员工线下充值的外层裸 goroutine、旧账号 Writer 及旧资产 Writer 的异步写入均已归零。
|
||||
- 迁移责任:04、07、08;19 号票验证生产装配和直接旧表写入归零。
|
||||
|
||||
### 旧资产审计
|
||||
|
||||
- Writer、Builder 与 Store:`internal/service/asset_audit/`、`internal/store/postgres/asset_operation_log_store.go`。
|
||||
- API/Worker 装配:`internal/bootstrap/services.go`、`internal/bootstrap/worker_services.go`、`internal/bootstrap/stores.go`、`internal/bootstrap/worker_stores.go`。
|
||||
- 调用模块:`internal/service/asset/`、`internal/service/device/`、`internal/service/iot_card/`、`internal/service/polling/asset_polling_service.go`;卡/设备导入任务创建已停止调用旧 Writer,但生产组合根的兼容参数留待 11.1 统一清理。
|
||||
- 兼容读取:`internal/handler/admin/asset.go`、`internal/routes/asset.go`、`internal/model/dto/asset_operation_log_dto.go`;由 10 号票保留读取契约。
|
||||
- contract 结果:旧资产 Create/Writer、全部业务调用、裸/双重 goroutine 和 Worker 装配已删除;卡/设备停用、轮询开关及套餐人工调整已切换统一 Writer,业务事实与成功审计同事务,已识别资源后的失败/拒绝使用独立短事务。
|
||||
- 历史只读白名单:`internal/service/asset_audit/`、`internal/store/postgres/asset_operation_log_store.go`、`internal/handler/admin/asset.go`、`internal/routes/asset.go`、`internal/model/dto/asset_operation_log_dto.go` 仅保留旧资产历史查询;主进程只注入只读 Store/Service,Worker 不再装配旧资产 Store。
|
||||
- `tb_asset_operation_log` 表及存量数据原样保留,不回填、不转换、不接入统一 Query;生产业务不再新增记录。
|
||||
- 迁移责任:05、06、09;19 号票验证生产装配和直接旧表写入归零。
|
||||
|
||||
### 旧手动轮询日志
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user