Files
junhong_cmp_fiber/openspec/changes/complete-july-iteration-test-release/tasks.md
2026-07-24 09:41:02 +08:00

244 lines
42 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## 0. 七月迭代 28 线唯一总台账
状态口径:每条线同时记录“后端 / 前端 / 验证 / 发布”。`[x]` 只表示该行声明的范围已有仓库证据;`[ ]` 表示仍有实施、前端、人工、延期验证或发布工作。后续七月工作只从本文件领取,不再从分散 `.scratch` 目录直接启动。
- [x] 0.1 `JULY-TECH-FOUNDATION` TECH 七月公共开发基础|来源 `.scratch/tech-public-foundation/`状态已完成PRD `completed`12/12 Tickets 完成)|主通道 Infrastructure辅助 Application/Query发布本仓公共基础已交付。
- [ ] 0.2 `JULY-TECH-NOTIFICATION` TECH 公共站内通知|来源 `.scratch/tech-inapp-notifications/`8 Tickets状态未开始主通道简单写 Application辅助 Query/Infrastructure依赖0.1。
- [ ] 0.3 `JULY-UR33` 套餐临期查询、Dashboard 与提醒|来源 `.scratch/ur33-package-expiry-reminder/PRD.md`(由 PRD 直接转任务)|状态:未开始|主通道 Query辅助 Application/Infrastructure依赖0.2、0.9、0.14、0.26。
- [ ] 0.4 `JULY-UR34` 代理在线扫码充值与平台线下代充值|来源 `.scratch/ur34-agent-recharge/PRD.md`|状态:未开始|主通道复杂写,辅助 Query/Payment/WeCom Adapter依赖0.2、0.7、0.8。
- [ ] 0.5 `JULY-UR35` 退款企微审批与整单终结|来源 `.scratch/ur35-refund-wecom-approval/PRD.md`|状态:未开始|主通道复杂写,辅助 Query/WeCom Adapter依赖0.2、0.7、0.8。
- [ ] 0.6 `JULY-UR36` 批量订购套餐|来源 `.scratch/ur36-bulk-package-purchase/`11 Tickets状态未开始主通道 Application/Domain辅助 Query/Infrastructure依赖0.8、0.9。
- [ ] 0.7 `JULY-UR37` 企业微信审批公共能力|来源 `.scratch/ur37-wecom-approval-foundation/`14 Tickets状态未开始主通道复杂写辅助 Query/Infrastructure依赖0.1;首个退款组合依赖 0.5。
- [ ] 0.8 `JULY-UR38` 代理主钱包信用额度|来源 `.scratch/ur38-agent-main-wallet-credit/`10 Tickets状态未开始主通道复杂写辅助简单写/Query依赖0.1。
- [ ] 0.9 `JULY-UR40` 下架套餐历史用户续费|来源 `.scratch/ur40-off-shelf-package-renewal/`8 Tickets状态未开始主通道 Domain Policy辅助 Query依赖0.1。
- [ ] 0.10 `JULY-UR42` 统一导出与字段权限|来源 `.scratch/ur42-unified-export-field-permissions/PRD.md`|状态:未开始|主通道 Query/DataSource辅助简单写 Application依赖0.3、0.4、0.5、0.12、0.14。
- [ ] 0.11 `JULY-UR43` 系列套餐批量授权|来源 `.scratch/ur43-series-package-bulk-authorization/`3 Tickets状态未开始主通道复杂写辅助 Query依赖0.1。
- [ ] 0.12 `JULY-UR44` 列表提交人与审批摘要|来源 `.scratch/ur44-list-submitter-approval-summary/PRD.md`|状态:未开始|主通道 Query辅助简单写/迁移依赖0.4、0.5、0.7。
- [ ] 0.13 `JULY-UR45` 换货快照与新旧独立搜索|来源 `.scratch/ur45-exchange-asset-search/`2 Tickets状态后端完成、Ticket 元数据待收口;前端/人工待确认|主通道复杂写 + Query。
- [ ] 0.14 `JULY-UR46` 预计最终到期时间|来源 `.scratch/ur46-estimated-final-expiry/`4 Tickets状态后端完成、前端/人工未完成|主通道 Query依赖 0.19 已满足。
- [ ] 0.15 `JULY-UR47` 卡片手动限速|来源 `.scratch/ur47-manual-card-speed-limit/`4 Tickets状态未开始主通道 Application + Port/Adapter辅助 Infrastructure依赖0.1。
- [ ] 0.16 `JULY-UR48` 按资产类型限制支付方式|来源 `.scratch/ur48-asset-payment-methods/`5 Tickets状态未开始主通道简单写 + 复杂写,辅助 Query依赖0.1。
- [ ] 0.17 `JULY-UR49` 设备 CSV 批量分配|来源 `.scratch/ur49-device-batch-allocation-csv/`5 Tickets状态未开始主通道 Application辅助 Infrastructure/Query依赖0.6 的受控上传边界。
- [ ] 0.18 `JULY-UR53` 卡和设备实名状态筛选|来源 `.scratch/ur53-asset-realname-filter/PRD.md`|状态:未开始|主通道 Query辅助投影 Application/Infrastructure依赖0.25。
- [x] 0.19 `JULY-UR55` 套餐生效条件覆盖与购买快照|来源 `.scratch/ur55-package-expiry-base/`状态5/5 Tickets 已完成PRD 顶层状态滞后不影响代码完成证据|主通道简单写 + 复杂写。
- [ ] 0.20 `JULY-UR57` 活跃退款资产禁止换货|来源 `.scratch/ur57-block-exchange-active-refund/PRD.md`|状态:未开始|主通道复杂写,辅助批量 Query依赖0.5。
- [ ] 0.21 `JULY-UR60` 店铺联系电话精确查询|来源 `.scratch/ur60-shop-phone-search/`3 Tickets状态后端完成、前端联调/人工验收未完成|主通道旧架构简单 Query。
- [ ] 0.22 `JULY-UR62` H5 购买与实名顺序配置|来源 `.scratch/ur62-h5-realname-order/PRD.md`|状态:未开始|主通道 Domain/Application辅助简单写/Query依赖0.25。
- [ ] 0.23 `JULY-UR73` 按运营商实名能力控制复机|来源 `.scratch/ur73-resume-realname-policy/PRD.md`|状态:未开始|主通道复杂写,辅助 Gateway/Outbox依赖0.25。
- [ ] 0.24 `JULY-UR86` 资产前代/后代换货链|来源 `.scratch/ur86-asset-exchange-trace/`2 Tickets状态后端完成、前端验收与历史抽样未完成主通道 Query。
- [ ] 0.25 `JULY-UR94` 卡状态公共写入与运营商回调|来源 `.scratch/ur94-card-state-events-callbacks/`13 Tickets状态未开始主通道复杂写辅助 Adapter/Query依赖0.1。
- [ ] 0.26 `JULY-UR96` 店铺业务员归属|来源 `.scratch/ur96-shop-business-owner/`6 Tickets状态未开始主通道简单写辅助 Query/Port依赖0.1。
- [ ] 0.27 `JULY-UR97` 钱包低余额预警|来源 `.scratch/ur97-wallet-low-balance-alert/PRD.md`|状态:未开始|主通道复杂写,辅助 Query/Outbox/Notification依赖0.2、0.8、0.26。
- [ ] 0.28 `JULY-UR98` 换货新资产继承店铺|来源 `.scratch/ur98-exchange-inherit-shop/`4 Tickets状态未开始主通道复杂写辅助 Query/Infrastructure依赖0.1。
需求16保持排除无对应复选框、实现任务、迁移或发布依赖店铺业务员不得恢复分销或佣金语义。
## 1. 已完成后端证据与剩余元数据收口
- [x] 1.1 固化 TECH 公共基础完成证据12 张 Ticket、Outbox/Relay、幂等、五态任务、受控配置、Access Log 安全能力、迁移与交接文档;明确它不等于通知、审计或业务消费者已完成。
- [x] 1.2 固化 UR55 后端完成证据:创建/编辑覆盖值、同步购买快照、自动购包快照、激活与排队只消费快照共 5 张 Ticket不重复实现后端。
- [x] 1.3 固化 UR45 后端完成证据:统一换货资产快照和新旧资产独立搜索均已有代码/文档/提交;不回填历史快照、不顺带迁移 UR86/UR98。
- [ ] 1.4 收口 UR45 原 PRD/Ticket 元数据并向前端交付新旧资产筛选契约;保持“后端完成、前端/人工待验收”,不得把元数据修正记为重新实现。
- [x] 1.5 固化 UR46 四个后端 Query 切片完成证据后台详情、卡列表、设备列表、C 端资产信息;不写汇总表、不重复计算第二套到期字段。
- [x] 1.6 固化 UR60 后端完成证据:分页校验、联系电话 11 位精确过滤/索引、企业账号路由限制;保留前端与人工任务未完成。
- [x] 1.7 固化 UR86 后端完成证据:前代和后代 Query、权限投影与索引不新建换货关系表、不修改换货状态机。
- [x] 1.8 冻结提交 `ff44305` 现有审计代码:保留 Integration Log 基础、离线 `cmd/audit-coverage`、Access Log 敏感字段判定复用和无外键迁移 `000167`;不装配 Audit Event、不继续开发审计中心生产恢复见 6.5。
## 2. 第一批:共享核心与独立 frontier
### B1-01 公共站内通知(`JULY-TECH-NOTIFICATION`
- [ ] 2.1 映射原通知 Ticket 01交付后台明确接收账号的通知写入、`event_id + recipient` 幂等、未读查询与单条已读完整纵向切片。【主:简单写 ApplicationQuery/Infrastructure边界通知事实与当前账号读取不迁移业务触发规则、WebSocket依赖1.1】
- [ ] 2.2 映射原 Ticket 02交付后台通知筛选、分类汇总、稳定分页和全部/按分类已读。【主Query简单写边界当前接收人数据不迁移业务列表依赖2.1】
- [ ] 2.3 映射原 Ticket 03交付个人客户通知投递、简化列表与已读 API。【主简单写 + Query边界personal_customer 接收人不迁移后台权限模型依赖2.1】
- [ ] 2.4 映射原 Ticket 04交付店铺主账号、平台业务员及其他动态接收人的 Port/Adapter 解析。【主Application + Port/Adapter边界只解析稳定接收人不复制业务触发不迁移店铺层级依赖2.1、2.63】
- [ ] 2.5 映射原 Ticket 05交付受控 `ref_type/ref_id/ref_key` 目标解析、跳转白名单与跳转后二次权限校验。【主QueryApplication边界通知目标解析不迁移任意 URL、业务权限实现依赖2.1】
- [ ] 2.6 映射原 Ticket 06交付通知保留、分批清理、失败可观测与安全日志。【主InfrastructureQuery边界通知记录生命周期不迁移Audit Event、外部消息渠道依赖2.1】
- [ ] 2.7 映射原 Ticket 07冻结后台与 C 端通知页面、30 秒轮询、铃铛/抽屉/中心、加载/空态/失败与受控跳转契约,并更新 OpenAPI/中文文档。【主Query/API 契约不迁移前端框架选择依赖2.2、2.3、2.5】
- [ ] 2.8 映射原 Ticket 08 为测试环境发布检查:完成通知 Handler/路由/文档生成器、Worker/模板注册与生产组合根装配;仅执行本批格式化、必要生成、构建和部署检查,自动化与正式发布门禁转 6.2/6.5。【主Infrastructure依赖2.2-2.7】
### B1-02 企业微信审批公共能力(`JULY-UR37`
- [ ] 2.9 映射原 UR37-01交付企微连接状态、Token 缓存/锁、安全 Viper 配置与 WeCom Adapter所有外部尝试接入 Integration Log。【主Infrastructure Adapter不迁移业务退款/充值依赖1.1】
- [ ] 2.10 映射原 UR37-02交付平台/超管五分钟扫码绑定会话、本人查询/解绑与超管强制解绑;代理不绑定。【主:复杂写 Application/DomainQuery边界账号与 userid 一对一不迁移组织模型依赖2.9】
- [ ] 2.11 映射原 UR37-03交付稳定场景、不可变模板版本、控件映射校验与首次发布。【主复杂写Adapter/Query边界模板版本事实不迁移本地审批节点依赖2.9】
- [ ] 2.12 映射原 UR37-04交付业务创建前置校验、真实提交人/企微发起身份快照、审批实例与业务单/Outbox 同事务 Port。【主Application + Port边界公共审批创建事务不迁移业务金额规则依赖2.10、2.11】
- [ ] 2.13 映射原 UR37-05交付本地业务附件权威存储、企微副本上传、异步 `applyevent`、结果未知状态和 Integration Log。【主Application/Infrastructure边界一次审批技术提交不迁移业务附件权限依赖2.12】
- [ ] 2.14 映射原 UR37-06交付场景暂停、提交租约、模板换版/指纹验证、原子恢复与失效告警。【主复杂写Scheduled Job边界新提交开关不中断存量实例不迁移业务终态依赖2.11、2.13】
- [ ] 2.15 映射原 UR37-07交付加密回调验签解密、权威 `getapprovaldetail` 同步、状态条件更新与首次终态 Outbox。【主复杂写Adapter边界审批镜像状态不迁移终态业务处理依赖2.13】
- [ ] 2.16 映射原 UR37-08交付两分钟轮询补偿、回调/轮询共用同步用例、处理租约与终态事件幂等。【主ApplicationWorker不迁移退款/充值 Worker依赖2.15】
- [ ] 2.17 映射原 UR37-09交付审批运行列表/详情、业务摘要、权限主体投影和稳定分页,代理不得看到审批人/内部意见/附件。【主Query边界公共审批读取不迁移业务列表依赖2.10、2.11、2.15】
- [ ] 2.18 映射原 UR37-10交付提交结果未知的“绑定已有 sp_no”和“确认未创建后重发”受控恢复保留每次技术尝试与 Integration Log。【主复杂写Adapter不迁移新业务审批申请依赖2.13、2.15、2.17】
- [ ] 2.19 映射原 UR37-11消费首次终态事件并向真实业务提交人发送审批结果通知按实例/接收人防重。【主ApplicationNotification Adapter不迁移业务到账通知依赖2.8、2.16】
- [ ] 2.20 映射原 UR37-12交付存量审批迁移契约、`legacy` 只读投影、平台绑定/代理固定账号前置检查与异常清单。【主Application/InfrastructureQuery不迁移伪造历史企微实例依赖2.10-2.15】
- [ ] 2.21 映射原 UR37-13冻结企微配置页、个人绑定、审批运行/详情/恢复与业务摘要的跨仓契约,补 OpenAPI、文档生成器和中文文档。【主API/Query 契约不迁移前端技术栈依赖2.10、2.11、2.17、2.18】
- [ ] 2.22 完成 UR37 公共能力的测试环境装配:配置模板/回调/轮询 Worker、路由与组合根并执行构建/部署检查;原 UR37-14“退款首个真实企微门禁”整体转 6.2,不阻塞 B3 退款代码实现。【主Infrastructure依赖2.9-2.21】
### B1-03 代理主钱包信用额度(`JULY-UR38`
- [ ] 2.23 映射原 UR38-01扩展主钱包信用字段、CHECK/索引/版本与 Wallet Domain 不变量;迁移前核对现有约束和异常数据。【主:复杂写 DomainInfrastructure不迁移员工/佣金/资产钱包依赖1.1】
- [ ] 2.24 映射原 UR38-02交付客户角色“仅新建店铺使用”的默认信用模板、权限与 API/前端契约。【主:简单写 ApplicationQuery不迁移已有钱包追溯更新依赖2.23】
- [ ] 2.25 映射原 UR38-03新建店铺事务内原子复制默认角色信用快照到代理主钱包。【主复杂写 Application边界店铺 + 钱包创建事务不迁移其他店铺创建规则依赖2.24】
- [ ] 2.26 映射原 UR38-04交付平台独立权限调整店铺实际额度、版本冲突、降低/关闭边界和变更前后投影。【主:复杂写 DomainQuery不迁移代理自助调额依赖2.23】
- [ ] 2.27 映射原 UR38-05统一代理订单、代购和钱包支付扣款用例使用有效信用、版本/锁、唯一流水和同事务事实。【主:复杂写 Domain不迁移无关订单创建依赖2.23】
- [ ] 2.28 映射原 UR38-06统一代理主钱包冻结/解冻,维持 `balance-frozen+credit>=0` 与幂等流水。【主:复杂写 Domain不迁移佣金冻结依赖2.23、2.27】
- [ ] 2.29 映射原 UR38-07统一充值入账与人工调整用例按唯一业务号、版本和流水幂等只提供 UR34 可复用能力。【主:复杂写 Domain不迁移支付/企微/通知依赖2.23】
- [ ] 2.30 映射原 UR38-08统一代理订单退款回充仅按原扣款流水定位原主钱包并幂等回溯。【主复杂写 Domain不迁移渠道退款/资产钱包退款依赖2.27、2.29】
- [ ] 2.31 映射原 UR38-09资金概况 Query 返回信用开关、额度、现金可用、总可用、欠款和版本前端不得自行计算。【主Query不迁移钱包写入依赖2.23、2.26】
- [ ] 2.32 映射原 UR38-10 为测试环境停机切换:完成所有主钱包写入口接入、迁移/API/前端契约/组合根装配与本批构建部署检查;并发/真实资金验收转 6.1/6.3。【主Infrastructure/Application 收口依赖2.24-2.31】
### B1-04 卡状态公共写入与运营商回调(`JULY-UR94`
- [ ] 2.33 映射原 UR94-01扫描 19 位 ICCID 冲突并交付未删除范围部分唯一索引与发布前异常清单。【主Infrastructure不迁移ICCID 归一化依赖1.1】
- [ ] 2.34 映射原 UR94-02交付实名观测的唯一 `ApplyCardObservation` 写入闭环、锁/条件更新、领域事实与 Outbox。【主复杂写 Domain/Application不迁移轮询调度依赖2.33】
- [ ] 2.35 映射原 UR94-03将流量观测收口到同一公共写入用例并保持已有周期/资格语义。【主:复杂写 Domain不迁移套餐轮询依赖2.34】
- [ ] 2.36 映射原 UR94-04将网络状态观测收口到同一用例并保持停复机业务边界。【主复杂写 Domain不迁移复机资格由 3.2 负责依赖2.34】
- [ ] 2.37 映射原 UR94-05一次性切换三个现有轮询结果写入口到公共用例保持 PostgreSQL 配置、Redis 分片、间隔、开关和失败重排不变。【主Application/Infrastructure不迁移轮询调度依赖2.34-2.36】
- [ ] 2.38 映射原 UR94-06交付同场景可合并的立即/3/5 分钟观测序列、单次请求互斥、最小间隔与 Integration Log。【主ApplicationAsynq/Adapter不迁移自动退避状态依赖2.34-2.36】
- [ ] 2.39 映射原 UR94-07在查询资产、获取实名链接等成功边界接入观测序列不新增显式同步 API。【主Application Adapter不迁移读取 Query 业务依赖2.38】
- [ ] 2.40 映射原 UR94-08在停复机、购包和套餐激活成功边界接入观测序列仅负责触发不复制业务资格。【主Application Adapter不迁移UR73/套餐规则依赖2.38】
- [ ] 2.41 映射原 UR94-09在切卡、重启等设备控制成功边界接入观测序列并解析最终卡。【主Application Adapter不迁移设备控制规则依赖2.38】
- [ ] 2.42 映射原 UR94-10交付电信实名回调 Translator、19/20 位精确路由、幂等入站 Integration Log 和成功应答。【主Infrastructure AdapterApplication依赖2.33、2.34、2.38】
- [ ] 2.43 映射原 UR94-11交付移动实名成功回调的对应防腐层与公共写入接入。【主Infrastructure Adapter依赖2.33、2.34、2.38】
- [ ] 2.44 映射原 UR94-12交付联通解除实名回调的留痕与约定成功应答不修改本地实名状态。【主Infrastructure Adapter边界Integration Log only依赖2.33】
- [ ] 2.45 映射原 UR94-13 为测试环境发布检查:装配回调 Handler/路由/文档生成器、观测 Worker、Gateway Adapter 与配置,执行格式化、必要生成、构建和部署检查;真实运营商/Gateway验证转 6.4。【主Infrastructure依赖2.37-2.44】
### B1-05B1-09 独立 frontier
- [ ] 2.46 `JULY-UR43` 映射原 Ticket 01首次系列授权在同一事务创建系列授权和至少一条套餐授权复用现有套餐 Query已授权项置灰。【主复杂写Query不迁移授权模型/候选 API依赖1.1】
- [ ] 2.47 `JULY-UR43` 映射原 Ticket 02`operation_type=authorize|update_cost|remove` 三类原子命令,最多 100 项、同价幂等、异价冲突。【主复杂写不迁移混合命令兼容依赖2.46】
- [ ] 2.48 `JULY-UR43` 映射原 Ticket 03交付首次/后续管理前端契约、三类价格语义、OpenAPI/文档生成器与同批切换部署检查。【主API/Query 契约依赖2.46、2.47】
- [ ] 2.49 `JULY-UR47` 映射原 Ticket 01修复同一设备多当前卡并建立部分唯一约束异常数据先入清单。【主Infrastructure不迁移绑定历史依赖1.1】
- [ ] 2.50 `JULY-UR47` 映射原 Ticket 02交付语义化 `speed_level` 到账号/运营商渠道 `code` 的 Gateway Adapter、能力校验与 Integration Log。【主Port/Adapter不迁移自动限速依赖2.49】
- [ ] 2.51 `JULY-UR47` 映射原 Ticket 03交付统一资产手动限速 API设备解析当前卡区分不限速与 0kbps外部结果未知可恢复Audit Event 延期到 6.5。【主ApplicationAdapter不迁移套餐限速依赖2.49、2.50】
- [ ] 2.52 `JULY-UR47` 映射原 Ticket 04交付卡/设备详情限速能力、固定档位、失败状态、OpenAPI/文档生成器与测试环境配置/构建检查;真实 Gateway 验收转 6.4。【主Query/API 契约依赖2.49-2.51】
- [ ] 2.53 `JULY-UR48` 映射原 Ticket 01复用受控系统配置读取/更新,向资产展示允许支付方式并提供安全默认值。【主:简单写 + Query不迁移通用配置中心依赖1.1】
- [ ] 2.54 `JULY-UR48` 映射原 Ticket 02限制普通资产钱包充值为资产允许集合与微信/支付宝交集,钱包不得作为充值渠道。【主:复杂写 Policy不迁移C 端全部充值依赖2.53】
- [ ] 2.55 `JULY-UR48` 映射原 Ticket 03订单创建时必填并固化支付方式快照强充按同一方式拉起且钱包不能给自身强充。【主复杂写 Domain不迁移其他订单状态依赖2.53】
- [ ] 2.56 `JULY-UR48` 映射原 Ticket 04支付时只执行订单快照方式并按最新资产配置二次校验需要换方式时取消旧单重建。【主复杂写 Domain不迁移支付方式替换接口依赖2.53、2.55】
- [ ] 2.57 `JULY-UR48` 映射原 Ticket 05交付后台配置、C 端支付页/强充/取消重建契约、OpenAPI/文档生成器与测试环境构建部署检查;真实支付验证转 6.3。【主API/前端契约依赖2.54-2.56】
- [ ] 2.58 `JULY-UR96` 映射原 Ticket 01为店铺增加 nullable 平台业务员字段、索引与启用平台账号约束不回填历史。【主Infrastructure不迁移店铺层级/分销依赖1.1】
- [ ] 2.59 `JULY-UR96` 映射原 Ticket 02平台创建店铺时显式设置或按规则继承业务员并在同一用例保存快照。【主简单写 Application不迁移信用模板由 UR38依赖2.58】
- [ ] 2.60 `JULY-UR96` 映射原 Ticket 03代理创建直属下级店铺时安全继承当前业务员不允许代理指定其他平台账号。【主简单写不迁移店铺权限依赖2.59】
- [ ] 2.61 `JULY-UR96` 映射原 Ticket 04交付业务员编辑权限、停用/删除后的历史保留和重绑Audit Event 延期 6.5。【主简单写不迁移账号生命周期依赖2.58】
- [ ] 2.62 `JULY-UR96` 映射原 Ticket 05店铺创建/编辑/列表/详情/筛选返回业务员投影、候选账号与手机号摘要。【主Query不迁移数据范围依赖2.58】
- [ ] 2.63 `JULY-UR96` 映射原 Ticket 06交付主账号与可用业务员接收人解析 Port、OpenAPI/前端契约与测试环境构建部署检查。【主Port/Adapter + Query不迁移通知触发规则依赖2.59-2.62】
- [ ] 2.64 `JULY-UR98` 映射原 Ticket 01建立换货分配记录与目标资产归属校正基础目标已属其他店铺时拒绝。【主Infrastructure/Domain不迁移历史回填依赖1.1】
- [ ] 2.65 `JULY-UR98` 映射原 Ticket 02换货完成事务内让新资产继承旧店铺并保留旧资产归属钱包/套餐迁移仍只受 `migrate_data` 控制。【主:复杂写 Domain/Application不迁移整个换货模块依赖2.64】
- [ ] 2.66 `JULY-UR98` 映射原 Ticket 03创建/发货/完成接口投影继承店铺和只读展示信息禁止前端提交目标店铺。【主Query/API 契约依赖2.65】
- [ ] 2.67 `JULY-UR98` 映射原 Ticket 04交付前端展示、迁移/路由/文档生成器、测试环境构建与部署检查;人工换货链验证转 5.5/6.6。【主Infrastructure/API 契约依赖2.65、2.66】
- [ ] 2.68 第一批批次检查:对本批修改执行 `gofmt`、必要代码生成、`go build ./...`核对迁移所有权、Handler 文档生成器、API/Worker/Relay 组合根和配置样例;不新增/运行测试。
## 3. 第二批:共享核心下游
### B2-01 UR40 统一套餐可售策略
- [ ] 3.1 映射原 UR40-01建立统一套餐可售决策与真实历史资格禁用永不可买、下架仅资产所有人凭有效历史续费。【主Domain Policy不迁移订单全模块依赖1.1】
- [ ] 3.2 映射原 UR40-02正常套餐商城 Query 只展示在售可购项。【主Query不迁移购买写入依赖3.1】
- [ ] 3.3 映射原 UR40-03当前套餐投影提供 `renew_only` 续费入口与原因。【主Query依赖3.1】
- [ ] 3.4 映射原 UR40-04历史套餐投影按真实使用资格提供续费入口。【主Query依赖3.1】
- [ ] 3.5 映射原 UR40-05C 端订单创建重新校验续费资格、资产所有权和套餐状态。【主:复杂写 Domain/Application依赖3.1】
- [ ] 3.6 映射原 UR40-06后台代购、自动购包等非个人入口统一禁止下架套餐绕过。【主复杂写 Policy 接入不迁移入口其他规则依赖3.1】
- [ ] 3.7 映射原 UR40-08交付跨入口 API/前端契约、OpenAPI/文档生成器与构建部署检查;原 Ticket 07 Audit Event 迁入 6.5不在本轮实现。【主API/发布契约依赖3.2-3.6】
### B2-02B2-05 卡状态与钱包下游
- [ ] 3.8 `JULY-UR73` 统一所有后台/OpenAPI 复机入口的资格用例:`realname_link_type=none` 不要求实名,`template/gateway` 必须已实名,未知配置拒绝且不调用 Gateway。【主复杂写 Domain/Application不迁移其他风险/套餐/保护期规则依赖2.45】
- [ ] 3.9 `JULY-UR73` 复机成功后写 Integration Log、可靠触发 0/3/5 观测并由公共卡状态收敛Gateway 成功不直接改本地网络状态。【主Application + Adapter/Outbox不迁移观测实现依赖3.8、2.38】
- [ ] 3.10 `JULY-UR73` 交付复机失败中文错误、API/前端契约、OpenAPI/文档生成器与构建部署检查;真实 Gateway 验收转 6.4。【主API 契约依赖3.8、3.9】
- [ ] 3.11 `JULY-UR53` 建立设备实名可重建投影、历史初始化和卡实名/绑定/解绑/换卡事件消费者任一有效绑定卡实名即设备实名。【主Application 投影Outbox/Infrastructure不迁移卡实名真相依赖2.34】
- [ ] 3.12 `JULY-UR53` 为卡/设备列表增加可区分未传与显式 0 的实名状态过滤、字段与索引,保持权限/分页。【主Query依赖3.11】
- [ ] 3.13 `JULY-UR53` 交付前端筛选、OpenAPI/文档生成器、投影 Worker 装配和构建部署检查;历史/事件真实验证转 6.1。【主API/Infrastructure依赖3.11、3.12】
- [ ] 3.14 `JULY-UR62` 建立“运营商能力 + 资产视角 + realname_policy”的统一有效策略与购买/实名资格用例;设备 before-order 要求全部有效卡实名。【主Domain/Application不迁移运营商配置协议依赖2.45】
- [ ] 3.15 `JULY-UR62` 交付卡/设备 1500 条批量策略更新,全量校验后事务内全成全败,并扫描冲突数据。【主:简单写 Application不迁移新字段依赖3.14】
- [ ] 3.16 `JULY-UR62` 扩展 C 端 asset info 和所有充值/订单/实名入口只消费统一有效策略交付前端流程、OpenAPI/文档生成器与构建部署检查。【主Query + Application 接入不迁移前端自行推断依赖3.14、3.15】
- [ ] 3.17 `JULY-UR97` 在所有代理主钱包写入口完成前后现金可用快照,只有 `before>10000 && after<=10000` 产生稳定低余额事件,持续低位不重复、回升后重布防。【主:复杂写 Wallet Domain不迁移信用/佣金/资产钱包依赖2.32】
- [ ] 3.18 `JULY-UR97` 同事务保存钱包/流水/Outbox消费事件并向店铺主账号和可用业务员按事件/接收人幂等通知。【主Application + Outbox/Notification不迁移外部通知依赖2.8、2.63、3.17】
- [ ] 3.19 `JULY-UR97` 扩展资金概况 `cash_available/low_balance_warning` 与前端提示不提供阈值配置。【主Query/API 契约依赖3.17】
- [ ] 3.20 `JULY-UR97` 完成钱包入口接入清单、Worker/模板、OpenAPI/文档生成器和构建部署检查;并发/通知真实验证转 6.1/6.6。【主Infrastructure 收口依赖3.17-3.19】
### B2-06 UR36 批量订购套餐
- [ ] 3.21 映射原 UR36-01交付统一资产解析后的批次内唯一资产识别跨不同标识仍按资产类型+ID 判重。【主Application/Domain不迁移资产解析白名单依赖1.1】
- [ ] 3.22 映射原 UR36-02交付 `purpose=bulk_purchase` 受控预签名上传、对象归属/类型/10MB 校验和稳定 file_key。【主Infrastructure/Application不迁移通用对象存储框架依赖1.1】
- [ ] 3.23 映射原 UR36-04复用 `3.1` 的统一后台套餐可售策略并按结算代理重新校验授权/成本价。【主Domain Policy依赖3.1】
- [ ] 3.24 映射原 UR36-05提供可复用单资产套餐订购命令订单、钱包/线下支付、流水和套餐使用保持一个业务单元。【主:复杂写 Domain/Application不迁移批次状态依赖2.27、3.23】
- [ ] 3.25 映射原 UR36-06幂等创建批量任务固化请求指纹、套餐/支付/凭证/文件快照并可靠投递处理事件。【主Application + Outbox不迁移同步解析 CSV依赖3.22】
- [ ] 3.26 映射原 UR36-07Worker 校验 UTF-8/BOM、固定表头/未知列/语法/空文件/1000 行合法后持久化逐行明细文件错误整体失败。【主Infrastructure/Application不迁移逐行业务依赖3.21、3.25】
- [ ] 3.27 映射原 UR36-08按行号独立事务完成 offline 行订购整批凭证快照、部分成功与失败明细可追踪。【主复杂写不迁移财务核销依赖3.24、3.26】
- [ ] 3.28 映射原 UR36-09wallet 批次严格按行号逐行扣各资产结算代理主钱包,租约/幂等支持恢复且余额不足只失败当前行。【主复杂写不迁移整批预占依赖2.27、3.27】
- [ ] 3.29 映射原 UR36-10交付任务/明细 Query、五态、计数摘要、失败详情、轮询与前端四阶段契约。【主Query/API 契约不迁移创建人隔离新规则依赖3.28】
- [ ] 3.30 映射原 UR36-11 为测试环境装配:完成迁移、上传/任务 Handler、Worker/Outbox、OpenAPI/文档生成器和构建部署检查;原 UR36-03 集成 Harness、真实依赖/全链门禁转 6.1/6.3。【主Infrastructure依赖3.21-3.29】
### B2-07 UR49 设备 CSV 批量分配
- [ ] 3.31 映射原 UR49-01基于 `3.22` 受控上传和公共五态建立设备批量任务/失败明细/租约基础,一任务只允许 `assign_shop``assign_series`。【主Application/Infrastructure不迁移通用批量平台依赖3.22、3.30】
- [ ] 3.32 映射原 UR49-02交付 CSV 批量分配代理完整切片,批量查设备、平台库存/直属下级权限、已是目标幂等、其他店铺拒绝。【主Application不迁移回收流程依赖3.31】
- [ ] 3.33 映射原 UR49-03交付 CSV 批量分配套餐系列完整切片,校验归属和有效授权,已是目标幂等且不修改 shop_id。【主Application不迁移套餐授权模型依赖3.31】
- [ ] 3.34 映射原 UR49-04冻结前端双入口、上传/进度/失败明细契约,补 OpenAPI/文档生成器。【主API/前端契约依赖3.32、3.33】
- [ ] 3.35 映射原 UR49-05 为测试环境装配完成迁移、Handler、Worker、路由、对象存储用途与构建部署检查真实链路/自动化门禁转 6.1/6.3。【主Infrastructure依赖3.31-3.34】
- [ ] 3.36 第二批批次检查:执行 `gofmt`、必要代码生成、`go build ./...`核对迁移、Handler 文档生成器、Worker/Outbox/Integration Log、配置和跨批依赖不新增/运行测试。
## 4. 第三批:复杂业务与组合 Query
### B3-01 UR34 代理充值
- [ ] 4.1 交付在线/线下充值共用的状态模型、幂等指纹、支付/审批/处理三套状态、迁移与 Query 投影。【主:复杂写 + Query不迁移C 端支付全模块依赖2.32】
- [ ] 4.2 交付代理当前店铺可用支付方式与在线充值创建100 元100 万元、新 request_id 新业务单/支付单、微信 Native/支付宝 PreCreate、结果未知恢复和 qr_content 原样返回。【主:复杂写 + Payment Adapter不迁移二维码图片/多通道池依赖2.29、2.57】
- [ ] 4.3 交付支付回调与受控查单共用确认用例:渠道/配置/金额/交易号/业务关联校验,迟到成功优先,支付事实与入账 Outbox 同事务。【主复杂写Integration Log/Outbox不迁移前端轮询触发查单依赖4.2】
- [ ] 4.4 交付钱包入账 Worker唯一流水、版本、处理租约、状态恢复和目标主账号/真实提交人到账通知,支付已成功时失败不得回滚收款事实。【主:复杂写 Wallet Application不迁移人工重复入账依赖2.29、2.8、4.3】
- [ ] 4.5 交付平台/超管线下代充值创建、15 付款凭证、固定金额与企微实例;审批通过入账、驳回终结、撤销分流,旧 offline-pay/reject 停机下线。【主复杂写WeCom/Worker不迁移本地审批/操作密码依赖2.22、4.1、4.4】
- [ ] 4.6 交付充值列表/详情/payment-status、代理店铺层级权限、前端二维码/轮询/审批/处理状态、OpenAPI/文档生成器和测试环境构建部署检查;真实支付/企微验收转 6.2/6.3。【主Query/API 契约依赖4.2-4.5】
### B3-02 UR35 退款
- [ ] 4.7 交付退款固定申请金额、业务凭证、真实提交人、唯一企微实例与三套状态迁移;创建前校验无其他活跃退款。【主:复杂写|不迁移:本地审批/旧原单重提依赖2.22】
- [ ] 4.8 交付退款创建纵向切片:后端读取实收金额、保存 15 本地凭证和审批快照、写提交 Outbox删除 approve/reject/return/resubmit/manual-complete 路由。【主:复杂写 Application不迁移渠道自动退款依赖4.7】
- [ ] 4.9 交付企微首次终态消费与退款处理租约:拒绝/撤销终结通过后按支付类型处理资金代理主钱包只按原扣款流水回溯非代理资金由人工退款事实确认。【主复杂写不迁移资产钱包自动回充依赖2.30、4.8】
- [ ] 4.10 交付整单终结的订单、已发放/未发放佣金、全部有效套餐、下一套餐激活或停止资产的持久化步骤幂等与失败恢复。【主:复杂写 Domain/Application不迁移未触碰订单/佣金模块依赖4.9、2.40】
- [ ] 4.11 交付退款列表/详情、店铺层级权限、代理最小审批投影、处理失败摘要和前端只读状态;更新 OpenAPI/文档生成器。【主Query/API 契约依赖4.7-4.10】
- [ ] 4.12 完成退款/企微/Worker/迁移测试环境装配和构建部署检查;真实企微、资金/佣金/套餐人工验收及自动化转 6.1/6.2/6.3。【主Infrastructure依赖4.8-4.11】
### B3-03B3-06 下游业务
- [ ] 4.13 `JULY-UR57` 在换货创建完整用例的任何副作用前,批量判定活跃退款(状态 1/历史 4或状态 2 且处理未成功)并以统一禁止错误拒绝;不新增预检查 API、不改退款/换货状态机。【主复杂写Query依赖4.7】
- [ ] 4.14 `JULY-UR57` 更新换货 API/前端错误契约、中文文档和构建部署检查;拒绝路径 Audit Event 延期 6.5。【主API 契约依赖4.13】
- [ ] 4.15 `JULY-UR33` 交付复用 UR46 的 015 天临期 Query、3 天内置顶、列表/Dashboard/C 端/续费投影只接受可准确推算事实。【主Query不迁移到期算法第二套实现依赖1.5、3.7、2.63】
- [ ] 4.16 `JULY-UR33` 交付每日扫描、15/7/3 最近节点、防重记录与 Outbox/通知消费漏跑不补多条站内通知失败不修改套餐事实。【主Application/Infrastructure不迁移短信/企微提醒依赖2.8、4.15】
- [ ] 4.17 `JULY-UR33` 接入 `expiring_asset` 导出输入契约、前端临期页/Dashboard/高亮/续费与 OpenAPI/文档生成器;实际 DataSource 实现在 4.23。【主Query/API 契约依赖4.15】
- [ ] 4.18 `JULY-UR33` 完成迁移、定时任务、Worker/模板、路由与测试环境构建部署检查;时间边界/通知真实验证转 6.1/6.6。【主Infrastructure依赖4.15-4.17】
- [ ] 4.19 `JULY-UR44` 为退款、充值、换货新增提交人不可变快照和历史回填(含软删除账号,缺失显示未知),新建时同事务冻结。【主:简单写/迁移不迁移业务状态机依赖4.1、4.7】
- [ ] 4.20 `JULY-UR44` 扩展三类列表,以本页实例批量投影 approval_source/status/current approver/processing代理当前审批人固定为空换货固定 none。【主Query不迁移实时调用企微依赖2.17、4.19】
- [ ] 4.21 `JULY-UR44` 交付前端列/状态/权限、OpenAPI/文档生成器和构建部署检查。【主API 契约依赖4.20】
- [ ] 4.22 `JULY-UR42` 交付代码字段 Registry、角色 Scene 字段授权全量替换、超管全目录、普通账号并集交集和零字段拒绝。【主:简单写 ApplicationQuery不迁移菜单/行权限依赖1.1】
- [ ] 4.23 `JULY-UR42` 创建导出任务时快照字段/表头/过滤/数据范围/脱敏级别,扩展各 Scene DataSourceCount/Fetch 条件一致且无 N+1。【主Query/DataSourceApplication不迁移第二套导出框架依赖4.6、4.11、4.17、4.20、1.5】
- [ ] 4.24 `JULY-UR42` 交付稳定不可枚举 attachment_ref、前端登录恢复落地页和按当前业务权限生成短期下载 URL不得输出对象 Key/media_id/预签名 URL。【主Query/Infrastructure不迁移公开 Bucket依赖2.13、4.23】
- [ ] 4.25 `JULY-UR42` 交付角色字段配置、导出入口/任务/失败/附件页面契约,更新 OpenAPI/文档生成器和中文文档。【主API/前端契约依赖4.22-4.24】
- [ ] 4.26 `JULY-UR42` 完成权限表/附件引用迁移、Export Worker/对象存储/配置装配和测试环境构建部署检查;文件内容/性能/权限自动化转 6.1/6.3。【主Infrastructure依赖4.22-4.25】
- [ ] 4.27 第三批批次检查:执行 `gofmt`、必要代码生成、`go build ./...`,核对资金/审批/支付/导出迁移、Handler 文档生成器、Worker/Outbox/Integration Log、旧路由下线与配置不新增/运行测试。
## 5. 最终收口与测试环境部署
- [ ] 5.1 收口 UR45修正 PRD/Ticket 元数据,向前端交付新旧资产独立搜索并完成页面/人工验收;后端不重复实现。
- [ ] 5.2 收口 UR46完成后台详情、卡/设备列表和 C 端预计最终到期字段的前端展示与人工一致性验收;后端四票保持“已完成”。
- [ ] 5.3 收口 UR60完成联系电话精确筛选前端、加载/空态/非法参数展示与浏览器人工联调;维护窗口确认索引部署。
- [ ] 5.4 收口 UR86完成前代/后代标签与受控跳转前端验收,并在维护窗口抽样历史数据;不得因未抽样把后端状态回退。
- [ ] 5.5 联合收口 UR98/UR45/UR86确认换货新资产继承店铺、旧资产保留归属、新旧搜索和双向链路契约在同一前后端版本一致。
- [ ] 5.6 冻结测试环境版本、迁移清单、API/Worker/Relay/前端版本、配置样例和回滚负责人确认需求16无代码/迁移/入口。
- [ ] 5.7 进入维护模式,停止相关写入与旧 Worker执行增量迁移和前置数据清单失败时保持维护且不开放访问。
- [ ] 5.8 发布 API、Relay/Worker、匹配前端版本装配企微、支付、Gateway、运营商、对象存储与 Redis/Asynq 测试环境配置。
- [ ] 5.9 执行最终允许门禁:`gofmt` 检查、必要代码生成、`go build ./...`、迁移版本、路由/OpenAPI、Worker 注册、配置就绪和前后端版本一致性检查;不运行 `go test` 或真实依赖自动验收。
- [ ] 5.10 恢复 Worker 与测试环境访问,记录每条线实际状态;只能标记“测试环境已部署/待人工验收”,不得标记生产验收完成。
- [ ] 5.11 发布后若产生审批、支付、资金、Outbox、Integration Log、通知或部分成功任务事实回滚仅暂停异常入口并前向修复不清表、不恢复旧 Writer、不要求重复付款。
## 6. 延期验证与生产发布门禁(本次不得预勾选)
- [ ] 6.1 恢复并完成所有单元、集成、HTTP、业务流程、并发、迁移、权限、性能与回归自动化补齐本轮未新增的 `_test.go`,运行完整 `go test ./...` 并保留最终代码证据。
- [ ] 6.2 完成真实企业微信模板、平台本人绑定、代理固定成员、附件、提交、加密回调、轮询、同意/拒绝/撤销/删除/结果未知恢复,以及退款和线下充值终态验收。
- [ ] 6.3 完成真实 PostgreSQL、Redis/Asynq、对象存储、微信 Native、支付宝 PreCreate/TradeQuery/回调、支付成功未入账恢复与导出文件验收。
- [ ] 6.4 完成真实 Gateway 限速账号/运营商档位、设备当前卡、失败/结果未知,以及移动/联通/电信运营商回调和 19/20 位 ICCID 验收。
- [ ] 6.5 恢复全局 Audit Event 治理:重新评审 `.scratch/tech-global-audit/` 22 张票,完成 Writer、业务覆盖、历史投影、审计中心、系统配置/Outbox 正式 Adapter、敏感读取/导出/保留与一次性发布门禁;不得把测试环境冻结改为永久 N/A。
- [ ] 6.6 完成后台、代理端、C 端全部页面与真实人工验收矩阵,包括异步部分成功、权限空态、通知、临期、换货历史抽样、余额预警和状态展示。
- [ ] 6.7 完成生产存量数据核对、进行中退款/充值迁移、企微模板与账号准备、支付/Gateway配置、停机发布与回滚演练、性能/安全/Access Log 脱敏门禁。
- [ ] 6.8 只有 6.16.7 全部具备真实证据后,才可把生产发布和七月迭代验收标记完成;测试环境豁免不得继承到生产。