feat: add phone frequency controls and modularize codebase
This commit is contained in:
@@ -2610,10 +2610,12 @@
|
||||
1. 在客户端和运营端分别选择今日、近 7 天、近 30 天。
|
||||
2. 查看发送趋势图和成功率趋势。
|
||||
3. 与数据库或明细列表按时间范围聚合结果核对。
|
||||
4. 写入 UTC `01:00`~`01:59`(北京时间 `09:00`~`09:59`)的 `SmsMessageRecord.queuedAt` 样本,并分别在 PostgreSQL 会话时区为 UTC 和 `Asia/Shanghai` 时核对小时桶。
|
||||
- 预期结果:
|
||||
- 今日使用平台配置时区,不错算跨日数据。
|
||||
- 近 7 天和近 30 天边界包含/排除规则明确。
|
||||
- 趋势图每个点位与明细聚合一致。
|
||||
- UTC `01:00`~`01:59` 的样本只计入北京时间 `09:00` 小时桶,不计入 `01:00`;结果不随 PostgreSQL 会话时区变化。
|
||||
|
||||
### TC-BILLING-006 运营端人工充值闭环
|
||||
|
||||
@@ -4049,3 +4051,293 @@ npm run verify:phase8
|
||||
| TC-SMS-AUDIT-LAYOUT-002 | 查看包含较长短信正文的审核任务 | 短信内容列宽不小于 440px,正文获得明显更大的展示空间,不被其他元信息列无意义挤压 |
|
||||
| TC-SMS-AUDIT-LAYOUT-003 | 点击合并格中的“查看列表”并操作待审核任务 | 真实号码分页弹窗正常打开;详情、勾选、批量通过和驳回入口不受布局调整影响 |
|
||||
| TC-SMS-AUDIT-LAYOUT-004 | 在窄窗口打开短信审核列表 | 表格保持信息格内部上下层级,宽度不足时允许容器横向滚动,不发生文字重叠或操作按钮遮挡 |
|
||||
|
||||
## 2026-07-30 号码发送频次风控用例
|
||||
|
||||
| 用例编号 | 场景 | 预期结果 |
|
||||
|---|---|---|
|
||||
| TC-PHONE-FREQ-001 | 同一应用、同一号码在同一北京时间自然日依次提交 11 条业务短信 | 前 10 条通过号码频控,第 11 条直接拒绝;触发记录保存阈值 10、触发值 11 和当日周期起止 |
|
||||
| TC-PHONE-FREQ-002 | 同一应用、同一号码在固定 5 分钟周期依次提交 6 条,第 6 条同时未达到日阈值 | 前 5 条通过,第 6 条仅命中 5 分钟规则并直接拒绝;同周期继续提交仍拒绝且不重复生成活跃触发记录 |
|
||||
| TC-PHONE-FREQ-003 | 在北京时间 12:04:59 提交至阈值,12:05:00 再提交;另在 23:59:59 达到日阈值后次日 00:00:00 提交 | 5 分钟计数在 12:05:00 进入新周期;日计数在次日 00:00:00 进入新周期,均不是从上次提交时刻滚动计算 |
|
||||
| TC-PHONE-FREQ-004 | 同一号码分别在应用 A、应用 B 提交,或同一企业的两个应用提交 | 两个应用分别计数,一方命中不会拦截另一方 |
|
||||
| TC-PHONE-FREQ-005 | 为应用 A 分别配置日阈值 3、5 分钟阈值 2,并保持应用 B 无覆盖 | 应用 A 各自使用个性化阈值;应用 B 继续使用全局 10 条/日和 5 条/5 分钟兜底 |
|
||||
| TC-PHONE-FREQ-006 | 批量任务含一个已命中号码和一个未命中号码 | 只将命中号码保存为`submit_failed/PHONE_FREQUENCY_LIMIT`且金额为 0;未命中号码正常入队,计费、冻结和日配额只按可发送号码计算 |
|
||||
| TC-PHONE-FREQ-007 | 发送长短信并发生多个上游分片及失败补发 | 初次业务号码提交只计 1 条;分片、重投和补发不增加号码频次计数 |
|
||||
| TC-PHONE-FREQ-008 | 提交非法号码、黑名单号码,或任务先被内容/任务级风控整体拒绝 | 这些号码不占用号码频次;数据库状态计数不增加 |
|
||||
| TC-PHONE-FREQ-009 | 多个并发请求以同一应用、同一号码冲击阈值 | PostgreSQL 原子计数不丢失、不重复放行;超过阈值的请求直接拒绝,并且同周期只有一条活跃触发记录 |
|
||||
| TC-PHONE-FREQ-010 | 运营在触发记录填写原因后执行解除并清零 | 当前规则的活跃关联解除、计数清零并增加代次;历史命中保留操作人、时间和原因,另一条频控规则不受影响 |
|
||||
| TC-PHONE-FREQ-011 | 人工解除后在原周期再次连续提交至超阈值 | 按清零后的计数重新计算,再次超阈值时生成同周期新一代触发记录,不与历史唯一键冲突 |
|
||||
| TC-PHONE-FREQ-012 | 在触发记录页按应用范围、部分号码和拦截中/已到期/已解除筛选并翻页 | 条件、总数和目标页均由真实后端及 PostgreSQL 返回;刷新页面结果保持,不依赖 Mock 或 localStorage |
|
||||
| TC-PHONE-FREQ-013 | 新增或编辑号码频控规则,尝试阈值 0、小数或动作“人工审核” | 后端拒绝非法配置;有效规则的动作始终为直接拒绝,周期固定为北京时间自然日或固定 5 分钟 |
|
||||
## 2026-07-30 平台级号码频控白名单用例
|
||||
|
||||
| 用例编号 | 场景 | 预期结果 |
|
||||
|---|---|---|
|
||||
| TC-PHONE-WL-001 | 将一个已产生频控计数和活跃命中的号码新增为启用白名单 | 该号码在所有企业应用及两类频控规则下的计数清零,活跃命中标记为已解除,历史命中保留 |
|
||||
| TC-PHONE-WL-002 | 启用白名单号码分别通过两个企业应用连续提交超过24小时和5分钟阈值 | 两个应用均不产生频控计数或命中,提交仍继续经过号码格式、黑名单、内容、余额及其他风控 |
|
||||
| TC-PHONE-WL-003 | 停用或删除白名单后再次提交 | 停用/删除事务清零全部应用的旧状态;事务完成后的第一条业务短信从1开始计数 |
|
||||
| TC-PHONE-WL-004 | 将白名单号码A修改为号码B | A、B在所有应用及两类规则下的状态均清零;B按白名单豁免,A恢复受频控约束 |
|
||||
| TC-PHONE-WL-005 | 新增重复号码、非法号码或空用途说明 | 后端拒绝请求且不写入白名单、频控状态或审计成功记录 |
|
||||
| TC-PHONE-WL-006 | 查询启用、停用和已删除白名单并翻页 | 后端数据库筛选和分页总数准确;默认列表排除已删除历史,指定已删除状态可查询 |
|
||||
| TC-PHONE-WL-007 | 删除白名单但未填写删除原因 | 后端拒绝删除;原白名单状态和频控状态保持不变 |
|
||||
| TC-PHONE-WL-008 | 一批大量号码中仅部分号码在白名单 | 后端分块批量查询白名单,无逐号码N+1查询;仅非白名单号码进入原子频控计数 |
|
||||
|
||||
## 2026-07-30 客户端工作台与短信发送体验用例
|
||||
|
||||
| 用例编号 | 场景 | 预期结果 |
|
||||
|---|---|---|
|
||||
| TC-CLIENT-HOME-001 | 当前企业存在已通过认证、3个有效签名 | 账户状态显示“已认证”,企业主体显示真实企业名称,签名数量显示3,不展示账户启停状态或“当前租户” |
|
||||
| TC-CLIENT-HOME-002 | 当前企业不存在任何已通过认证 | 账户状态显示“未认证”,其他账户和企业数据仍正常展示 |
|
||||
| TC-CLIENT-HOME-003 | 分别准备待审核模板、签名和客户端待审核批量任务 | 三个卡片分别显示各自真实数量;点击后进入模板、签名和批量任务菜单 |
|
||||
| TC-CLIENT-HOME-004 | 当天多个北京时间小时存在短信记录 | 客户端趋势固定展示00:00~23:00提交量和成功量;UTC 01:00记录归入北京时间09:00 |
|
||||
| TC-CLIENT-SIGNATURE-005 | 筛选条件为空时后台更新签名报备状态,再点击重置 | 页面回到第一页并重新请求后端,展示更新后的报备、审核和引流信息 |
|
||||
| TC-ADMIN-AUDIT-006 | 首次打开或重置企业认证审核、模板审核页 | 默认筛选“待审核”,后端请求只返回对应待审核记录 |
|
||||
| TC-CLIENT-SEND-007 | 选择模板后将正文分别编辑为70、71、134和135个Unicode字符 | 单号码预计计费条数依次为1、2、2、3;总预计条数随有效号码数同步变化 |
|
||||
| TC-CLIENT-SEND-008 | 查看短信发送单价 | 单位显示“元/条”,不显示“元/人” |
|
||||
| TC-CLIENT-SEND-009 | 后端返回企业账户余额不足或其他提交失败 | 页面中央错误弹窗展示真实错误信息,不只在页面顶部显示 |
|
||||
| TC-CLIENT-SEND-010 | 打开定时发送日期控件 | 存在“今天”按钮,北京时间当天有浅色背景;选择今天后提交值显式携带`+08:00` |
|
||||
| TC-CLIENT-SEND-011 | 成功提交真实任务 | 成功弹窗展示后端任务编号和号码数;继续发送可清空全部表单,查看任务进度可定位批量任务 |
|
||||
|
||||
## 2026-07-30 R0 渐进式拆分安全护栏用例
|
||||
|
||||
| 用例编号 | 场景 | 预期结果 |
|
||||
|---|---|---|
|
||||
| TC-REFACTOR-R0-001 | 执行 `node tools/quality/verify-refactor-r0.mjs` | 8 个稳定门面、4 组跨进程契约和 8 项关键特征测试均存在;任一项丢失时非零退出 |
|
||||
| TC-REFACTOR-R0-002 | 执行 Gateway 队列契约校验 | SubmitCommand、SubmitResult、ReceiptEvent、UplinkEvent 四类真实消息样例全部通过 |
|
||||
| TC-REFACTOR-R0-003 | 运行 SendChain 与 Billing 特征测试 | 并发抢占、重试、最终回执、下游重排、冻结/扣费/释放/退款和幂等重放行为保持 |
|
||||
| TC-REFACTOR-R0-004 | 运行 Gateway 全量测试与 `go vet` | CMPP 2.0/3.0、SubmitResp、Deliver ACK、超时、自动重连和 tracker 行为保持 |
|
||||
| TC-REFACTOR-R0-005 | 检查 R0 代码差异 | 不移动或修改任何生产代码;仅新增路线图、责任索引、门禁清单、契约清单和验证脚本 |
|
||||
| TC-REFACTOR-R0-006 | 后续拆分开始前执行发布门禁 | 能明确目标域、唯一结构修改会话、稳定门面、事务、表、队列、副作用、停止条件和回滚依据 |
|
||||
|
||||
## 2026-07-31 R1 前端 API 兼容门面拆分用例
|
||||
|
||||
| 用例编号 | 场景 | 预期结果 |
|
||||
|---|---|---|
|
||||
| TC-REFACTOR-R1-001 | 执行 `node tools/quality/verify-admin-api-r1.mjs` | 183个运营端方法、60个客户端方法、7个会话方法和9个HTTP核心函数全部存在,拆分前后实现哈希一致 |
|
||||
| TC-REFACTOR-R1-002 | 对全部前端源码执行 TypeScript 检查 | 现有页面继续从`@/api/adminApi`导入,类型和方法不丢失,无需批量修改页面 |
|
||||
| TC-REFACTOR-R1-003 | 执行 Vite 生产构建 | 新领域模块全部进入生产依赖图,构建成功且没有循环依赖或重复导出错误 |
|
||||
| TC-REFACTOR-R1-004 | 打开本地运营登录页并刷新验证码 | 页面非空、标题和表单正常;验证码真实API返回新算式;控制台无相关warning/error |
|
||||
| TC-REFACTOR-R1-005 | 模拟或触发401、SESSION_LOCKED和RECENT_AUTHENTICATION_REQUIRED | 继续使用同一HTTP核心处理退出跳转、会话锁定和最近认证重试,不允许各业务域自行实现 |
|
||||
| TC-REFACTOR-R1-006 | 检查文件上传、Blob导出和查询参数 | 文件大小校验、multipart、租户头、Blob响应及`all`/空值过滤规则与拆分前一致 |
|
||||
| TC-REFACTOR-R1-007 | 运行R0门禁、API全量测试和Gateway全量测试 | R1没有改变后端、数据库、Redis Stream或CMPP协议行为 |
|
||||
|
||||
## 2026-07-31 R2 运营查询服务拆分用例
|
||||
|
||||
| 用例编号 | 场景 | 预期结果 |
|
||||
|---|---|---|
|
||||
| TC-REFACTOR-R2-001 | 执行`node tools/quality/verify-operations-r2.mjs` | 29个公开方法、3个私有方法、9个查询契约和36个辅助函数全部存在,拆分前后签名及实现哈希一致 |
|
||||
| TC-REFACTOR-R2-002 | 控制器继续注入并调用`OperationsService` | 路由、参数、返回结构不变,控制器不直接依赖七个内部查询类 |
|
||||
| TC-REFACTOR-R2-003 | 查询短信记录第一页5条 | PostgreSQL真实总数与分页items独立返回,客户端安全视图继续剔除通道成本、提交和内部路由信息 |
|
||||
| TC-REFACTOR-R2-004 | 查询北京时间小时发送趋势 | UTC存储值先按UTC解释再转换为`Asia/Shanghai`,不受数据库会话时区影响 |
|
||||
| TC-REFACTOR-R2-005 | 查询签名通道发送质量 | 分页、运营商固定顺序、业务短信条数和最终成功率口径保持 |
|
||||
| TC-REFACTOR-R2-006 | 查询系统日志并导出CSV | 关键字、级别、模块、时间范围、CSV转义、时间格式和客户端企业隔离保持 |
|
||||
| TC-REFACTOR-R2-007 | 查询下游投递、恢复状态和详情 | 告警窗口、分页、应用汇总、失败分类和导出字段保持,不触发重投 |
|
||||
| TC-REFACTOR-R2-008 | 执行Operations定向及API全量测试 | 页面查询、真实数据库、客户端安全映射和下游恢复既有行为全部通过 |
|
||||
|
||||
## 2026-07-31 R3 短信配置兼容门面拆分用例
|
||||
|
||||
| 用例编号 | 场景 | 预期结果 |
|
||||
|---|---|---|
|
||||
| TC-REFACTOR-R3-001 | 执行`node tools/quality/verify-sms-config-r3.mjs` | 51个公开方法、21个内部方法、19个DTO/查询契约和27个辅助声明全部存在,领域归属正确,迁移前后实现一致 |
|
||||
| TC-REFACTOR-R3-002 | 检查运营端、客户端和Gateway控制器导入 | 控制器继续只注入`SmsConfigService`;DTO从独立`contracts`导入,不再从实现类文件导入 |
|
||||
| TC-REFACTOR-R3-003 | 按当前企业查询应用、签名、引流信息和模板 | 继续读取真实PostgreSQL;客户端租户边界、分页和历史数据可见性与拆分前一致 |
|
||||
| TC-REFACTOR-R3-004 | 创建或编辑应用并验证CMPP账号、接入号和路由配置 | CMPP账号与接入号唯一性、密码规范、路由规则事务和操作日志保持原行为 |
|
||||
| TC-REFACTOR-R3-005 | 执行应用停用、72小时扫描、连接超时和下游断连测试 | 停用状态机、未决投递处理、Gateway断连调用、自动扫描和审计保持原行为 |
|
||||
| TC-REFACTOR-R3-006 | 新建、编辑、提交及审核签名、引流信息和模板 | 报备字段快照、审核状态、审核人、驳回原因、操作日志及删除治理接口保持 |
|
||||
| TC-REFACTOR-R3-007 | 执行短信配置与审核治理定向测试 | 既有68项测试全部通过,覆盖客户端租户边界、停用扫描、审核和报备资料校验 |
|
||||
| TC-REFACTOR-R3-008 | 执行R0~R3门禁、API全量、前端构建及Gateway全量测试 | 数据库schema、migration、Redis Stream、CMPP协议、页面API契约和其他业务行为不因R3改变 |
|
||||
|
||||
## 2026-07-31 R4 报备资料与企业签名页面拆分用例
|
||||
|
||||
| 用例编号 | 场景 | 预期结果 |
|
||||
|---|---|---|
|
||||
| TC-REFACTOR-R4-001 | 执行`node tools/quality/verify-report-materials-r4.mjs` | 12个公开方法、11个内部方法、10个契约和32个辅助函数完整存在,领域归属与迁移前实现一致 |
|
||||
| TC-REFACTOR-R4-002 | 控制器和其他模块继续注入`ReportMaterialsService` | 路由、DTO、请求和响应不变;控制器DTO改从独立contracts导入,内部领域服务不暴露给调用方 |
|
||||
| TC-REFACTOR-R4-003 | 查询待生成资料、导入配置、导入审核批次和已生成批次 | 真实PostgreSQL分页、关键字和时间筛选保持,不创建批次、文件或操作记录 |
|
||||
| TC-REFACTOR-R4-004 | 分析并提交Excel导入、逐行或批量审核 | 公式防护、图片提取、字段映射、暂存、审核人、原快照和错误隔离保持 |
|
||||
| TC-REFACTOR-R4-005 | 使用同一幂等键预检并生成报备批次 | 批次预检、事务认领、完成/失败记录、通道导出文件和任务轨迹保持幂等 |
|
||||
| TC-REFACTOR-R4-006 | 执行`node tools/quality/verify-enterprise-signatures-r4.mjs` | 原20个函数、签名/引流表格JSX、8个真实API调用和25个页面状态保持,页面容器只负责查询和协调 |
|
||||
| TC-REFACTOR-R4-007 | 在企业签名页查询、展开签名、编辑签名/引流资料并查看报备弹窗 | 组件拆分后筛选、分页、展开、上传、保存、删除治理及通道状态操作保持真实后端链路 |
|
||||
| TC-REFACTOR-R4-008 | 执行报备资料定向测试、API全量、前端构建和Gateway测试 | 既有测试全部通过,数据库schema、migration、Redis Stream、CMPP协议和其他页面不因R4改变 |
|
||||
|
||||
## 2026-07-31 R5 通道服务兼容门面拆分用例
|
||||
|
||||
| 用例编号 | 场景 | 预期结果 |
|
||||
| --- | --- | --- |
|
||||
| TC-REFACTOR-R5-001 | 执行`node tools/quality/verify-channels-r5.mjs` | 37个公开方法、14个内部方法、17个契约和60个辅助声明完整存在,领域归属和迁移前实现一致 |
|
||||
| TC-REFACTOR-R5-002 | 检查控制器、模块和既有测试调用 | 继续只依赖稳定`ChannelsService`;DTO从独立contracts导入,路由、参数和响应结构不变 |
|
||||
| TC-REFACTOR-R5-003 | 编辑名称、说明、成本等非连接参数 | 不调用Gateway断开/连接;只有连接参数实际变化且通道启用时才执行既有重连逻辑 |
|
||||
| TC-REFACTOR-R5-004 | 执行通道连接、断开、状态同步和超时处理测试 | Gateway控制路径、Redis队列与Stream、定时器、慢重连和状态审计顺序保持 |
|
||||
| TC-REFACTOR-R5-005 | 检查测试短信入口但不发送真实短信 | 手机号规范化、单次提交`maxAttempts=1`及结果口径保持;未获单独授权不得调用 |
|
||||
| TC-REFACTOR-R5-006 | 查询和维护通道组、成员及路由规则 | 顺序、权重、主备、运营商/省份兼容性、补发和操作日志语义保持 |
|
||||
| TC-REFACTOR-R5-007 | 查询报备字段、任务、导出、回执和记录 | 真实PostgreSQL分页、状态汇总、文件字段及历史记录保持,不因只读查询生成文件或写操作记录 |
|
||||
| TC-REFACTOR-R5-008 | 执行Channels定向测试、API全量及R0~R5完整门禁 | 既有测试全部通过,数据库schema、migration、Redis Stream、Gateway、CMPP协议和其他业务不因R5改变 |
|
||||
|
||||
## 2026-07-31 R6 Gateway 入站服务拆分用例
|
||||
|
||||
| 用例编号 | 场景 | 预期结果 |
|
||||
| --- | --- | --- |
|
||||
| TC-REFACTOR-R6-001 | 执行`go run tools/quality/verify-inbound-r6.go` | 迁移前93个声明在9个领域文件中全部存在,文件归属和实现哈希一致,`server.go`保持稳定入口 |
|
||||
| TC-REFACTOR-R6-002 | 使用CMPP 2.0、2.1和3.0账号登录 | 版本协商、AuthSource、密码校验、企业代码、最大连接数和连接状态回调保持 |
|
||||
| TC-REFACTOR-R6-003 | 分别提交单号码、多号码、8位及16位UDH长短信 | 每个目标号码保留独立内部消息映射;客户端每次Submit只收到一次SubmitResp,内容解码和Msg_Id保持 |
|
||||
| TC-REFACTOR-R6-004 | Submit业务拒绝或API失败 | 同步返回原错误Result,不生成待投递失败回执,不把SubmitResp误记为成功 |
|
||||
| TC-REFACTOR-R6-005 | Submit成功后立即存在排队回执 | Submit屏障保证SubmitResp先写出,回执Deliver不得抢先;原始Sequence_Id和Msg_Id映射可用于恢复 |
|
||||
| TC-REFACTOR-R6-006 | 下发回执或上行并收到CMPP_DELIVER_RESP | 按连接、Sequence_Id和Msg_Id精确确认;成功、拒绝、超时及协议日志回调口径保持 |
|
||||
| TC-REFACTOR-R6-007 | 当前进程找不到消息会话 | 只按原始Submit映射恢复,不允许退化为任意同账号连接;不可恢复时返回既有失败分类 |
|
||||
| TC-REFACTOR-R6-008 | 多Gateway实例同时扫描待恢复投递 | Redis presence、恢复锁、退避、waiting_connection及完成状态保持,不重复投递 |
|
||||
| TC-REFACTOR-R6-009 | 执行入站定向、Gateway全量测试和`go vet ./...` | 入站32项及Gateway所有package通过,没有竞态表现、编译错误或静态检查问题 |
|
||||
| TC-REFACTOR-R6-010 | 执行API全量、前后端构建及R0~R6门禁 | 既有381项API测试和全部门禁通过,数据库schema、migration、Redis Stream及其他业务不因R6改变 |
|
||||
|
||||
## 2026-07-31 R7 Gateway 上游管理拆分用例
|
||||
|
||||
| 用例编号 | 场景 | 预期结果 |
|
||||
| --- | --- | --- |
|
||||
| TC-REFACTOR-R7-001 | 执行`go run tools/quality/verify-upstream-r7.go` | 迁移前68个声明在9个领域文件中全部存在,接收者、文件归属和实现哈希一致,Manager入口保持 |
|
||||
| TC-REFACTOR-R7-002 | 通过控制接口连接、重复连接及断开通道 | 连接池按通道唯一注册;配置变化才替换池;手工断开关闭stopCh并阻止后续自动重连 |
|
||||
| TC-REFACTOR-R7-003 | 配置多物理连接和不同窗口大小并并发获取 | 轮询使用可用连接,每个连接独立占用和释放窗口,窗口满时等待且不突破Submit超时 |
|
||||
| TC-REFACTOR-R7-004 | 供应商端点连接失败后恢复 | 临时网络错误按既有上限退避自动重连;鉴权失败使用5分钟慢重试;恢复后清零重连状态 |
|
||||
| TC-REFACTOR-R7-005 | 心跳请求成功、响应不匹配或连续超时 | 只清除匹配Sequence_Id;超过阈值关闭连接、唤醒未决提交并进入重连状态机 |
|
||||
| TC-REFACTOR-R7-006 | 分别向CMPP 2.0和3.0通道提交短信 | 使用对应Submit报文、企业代码、Src_Id、MsgFmt和接收号码;SubmitID及回调字段保持 |
|
||||
| TC-REFACTOR-R7-007 | 提交UCS2长短信并逐分片返回不同结果 | 拆分、UDH、分片顺序、逐片回调、首Sequence_Id/Msg_Id及聚合停止条件保持 |
|
||||
| TC-REFACTOR-R7-008 | 收到状态报告、普通上行及乱序长上行 | 回执状态映射、Submit tracker关联、内容解码、长上行组装和API事件保持 |
|
||||
| TC-REFACTOR-R7-009 | 记录Submit和Deliver协议日志 | 只记录既有安全字段、方向、结果和长度,不泄露密码或完整敏感内容 |
|
||||
| TC-REFACTOR-R7-010 | 执行上游定向、Gateway全量测试和`go vet ./...` | 上游18项及Gateway全部package通过,连接、重连、窗口、心跳和回执行为不变 |
|
||||
| TC-REFACTOR-R7-011 | 执行API全量、前后端构建及R0~R7门禁 | 既有381项API测试和全部门禁通过,数据库、Redis Stream、通道配置及业务规则不因R7改变 |
|
||||
|
||||
## 2026-07-31 R8 发送链纯逻辑拆分用例
|
||||
|
||||
| 用例编号 | 场景 | 预期结果 |
|
||||
| --- | --- | --- |
|
||||
| TC-REFACTOR-R8-001 | 执行`node tools/quality/verify-send-chain-r8.mjs` | 24个DTO/事件/队列契约和64个迁移纯声明实现哈希一致;98个编排方法及数据库、队列、重试和分片审计副作用仍由`SendChainService`持有 |
|
||||
| TC-REFACTOR-R8-002 | 检查运营端、客户端和Gateway事件控制器 | 路由、参数和响应保持;控制器继续注入`SendChainService`,DTO改从独立contracts导入 |
|
||||
| TC-REFACTOR-R8-003 | 给定已按数据库优先级排序的省内和全国通道候选 | 过滤排除、未报备、运营商不兼容及不可连接通道后,优先选择匹配省份,省内不可用时使用全国兜底 |
|
||||
| TC-REFACTOR-R8-004 | 分片审计尚未收齐、全部成功、存在明确失败或全部为未知 | 未收齐不产生最终成功;全部预期分片成功才成功;任一明确失败优先;收齐但无明确成功/失败时保持未知口径 |
|
||||
| TC-REFACTOR-R8-005 | 比较上游端点并重复生成回执事件键 | 账号、主机、端口、协议和CMPP版本全部相同才视为同一端点;相同回执输入稳定生成相同事件键 |
|
||||
| TC-REFACTOR-R8-006 | 运行纯逻辑与既有SendChain定向测试 | 省内/全国选择、分片最终状态、端点身份和事件键新增8项测试通过;既有104项发送链特征测试保持 |
|
||||
| TC-REFACTOR-R8-007 | 对真实本地PostgreSQL执行只读核验 | 使用真实短信、分片审计和通道连接数据调用纯函数;无可用分片样本时明确记为不适用,不用mock或造数冒充通过 |
|
||||
| TC-REFACTOR-R8-008 | 执行API全量、前后端构建、Gateway检查及R0~R8门禁 | 389项API测试和全部门禁通过;不改变schema、migration、事务范围、查询、日志字段、队列消息、CMPP协议或业务数据 |
|
||||
|
||||
## 2026-07-31 R9 发送入口与提交编排拆分用例
|
||||
|
||||
| 用例编号 | 场景 | 预期结果 |
|
||||
| --- | --- | --- |
|
||||
| TC-REFACTOR-R9-001 | 执行`node tools/quality/verify-send-chain-r9.mjs` | 45个迁移方法在五个职责文件中的实现哈希保持,`SendChainService`98个稳定方法及内部兼容门面逐项委托 |
|
||||
| TC-REFACTOR-R9-002 | 创建客户端批量任务或确认号码文件导入 | 非法、重复及黑名单号码先被剔除且不计频控;剩余号码按企业应用隔离执行任务风控、号码频控、日限额和余额预占 |
|
||||
| TC-REFACTOR-R9-003 | 通过HTTP API提交模板短信 | 模板、签名、变量、企业和应用校验保持;每个号码独立消息记录,仍进入同一批量入口,不形成静态或旁路实现 |
|
||||
| TC-REFACTOR-R9-004 | CMPP单号码、多号码和长短信入站 | 每个目标号码独立内部记录;同一业务号码只计一次频控和日限额,分片不重复计数;原SubmitResp和Msg_Id恢复语义保持 |
|
||||
| TC-REFACTOR-R9-005 | 审核通过或拒绝待审核任务 | 通过时恢复消息并按内部批次逐一入队;拒绝时释放未扣预占并生成既有平台失败回执;不重复处理已完成任务 |
|
||||
| TC-REFACTOR-R9-006 | 两个调度扫描器并发认领到期任务或恢复陈旧认领 | PostgreSQL条件更新保证只冻结和入队一次;入队失败保持可恢复状态,不丢失零资费任务 |
|
||||
| TC-REFACTOR-R9-007 | Worker处理排队消息并发布Gateway提交 | 通道路由、报备校验、限速、Submit记录事务、BullMQ命令、Redis Stream消息和日志字段保持原顺序及内容 |
|
||||
| TC-REFACTOR-R9-008 | 替换稳定门面的入队、调度、限速或队列方法后调用上层入口 | 新实现的内部跨方法调用仍经过稳定门面,既有测试缝和可观察边界不被绕过 |
|
||||
| TC-REFACTOR-R9-009 | 检查R10事故高风险方法归属 | Gateway结果、分片提交/回执、最终聚合、补发、退款和下游投递仍保留在`SendChainService`,R9不得提前迁移 |
|
||||
| TC-REFACTOR-R9-010 | 对真实本地PostgreSQL调用任务查询和导入预检 | 使用真实服务与黑名单查询;任务、短信、频控状态和账户流水调用前后不变,不发送或创建短信 |
|
||||
| TC-REFACTOR-R9-011 | 执行SendChain定向、API全量、前后端构建、Gateway及R0~R9门禁 | 112项定向和389项API测试通过;schema、migration、Redis契约、CMPP协议及其他业务不因R9改变 |
|
||||
|
||||
## 2026-07-31 R10 发送完成链编排拆分用例
|
||||
|
||||
| 用例编号 | 场景 | 预期结果 |
|
||||
| --- | --- | --- |
|
||||
| TC-REFACTOR-R10-001 | 执行`node tools/quality/verify-send-chain-r10.mjs` | 41个迁移方法在七个职责文件中的实现哈希保持;内部完成链门面和`SendChainService`98个稳定方法逐项委托 |
|
||||
| TC-REFACTOR-R10-002 | Gateway逐分片返回提交成功、拒绝或异常 | 每个预期分片只形成对应审计;提交结果按既有聚合规则更新,不把SubmitResp误认为最终送达 |
|
||||
| TC-REFACTOR-R10-003 | 重复接收相同上游回执事件 | 稳定事件键和数据库唯一约束保证收件箱、分片审计与最终回执幂等,不重复扣费或投递 |
|
||||
| TC-REFACTOR-R10-004 | 当前补发尝试和迟到旧尝试分别返回回执 | 只有当前尝试能够推进最终状态;迟到旧尝试保留历史但不得覆盖当前结果 |
|
||||
| TC-REFACTOR-R10-005 | 分片未收齐、全部成功、明确失败或全部未知 | 未收齐不提前成功;全部成功才最终成功;明确失败优先;未知按既有超时和失败口径处理 |
|
||||
| TC-REFACTOR-R10-006 | 两个执行者并发抢占同一失败短信补发 | 来源提交唯一关系、事务条件更新和P2002唯一冲突处理保证最多创建一个新提交尝试 |
|
||||
| TC-REFACTOR-R10-007 | 重复执行成功扣费、失败退款或预占释放 | 账务使用原稳定幂等键,同一业务事件只产生一次账户流水,余额和预占不重复变化 |
|
||||
| TC-REFACTOR-R10-008 | 创建、认领、发送并ACK最终CMPP/HTTP回执 | 每短信只有一条最终回执语义;下游去重、attempt记录、ACK确认、超时恢复和失败分类保持 |
|
||||
| TC-REFACTOR-R10-009 | 人工重排失败下游投递或恢复陈旧认领 | 使用稳定重排键和原状态条件,已完成或正由其他执行者处理的记录不得重复投递 |
|
||||
| TC-REFACTOR-R10-010 | 执行回执超时扫描 | 仅处理满足既有时间和状态条件的当前记录;扫描并发保护和终态聚合保持 |
|
||||
| TC-REFACTOR-R10-011 | 检查七个完成链领域的持久化操作 | 不存在删除历史事故记录的`deleteMany`路径;提交、回执、attempt、死信和账务历史继续保留 |
|
||||
| TC-REFACTOR-R10-012 | 对真实本地PostgreSQL查询R10八类表 | 查询前后计数完全一致;无分片或attempt样本时如实记为0,不造数、不发短信、不触发补发或重投 |
|
||||
| TC-REFACTOR-R10-013 | 执行SendChain定向、API全量、前后端构建、Gateway及R0~R10门禁 | 112项定向和389项API测试通过;schema、migration、事务语义、Redis契约、CMPP协议及其他业务不因R10改变 |
|
||||
|
||||
## 2026-07-31 R11 页面域与专属样式拆分用例
|
||||
|
||||
| 用例编号 | 场景 | 预期结果 |
|
||||
| --- | --- | --- |
|
||||
| TC-REFACTOR-R11-001 | 执行`node tools/quality/verify-admin-channels-r11.mjs` | 稳定页面入口不超过300行;五个聚焦模块、真实API调用、交互文案和页面CSS归属完整 |
|
||||
| TC-REFACTOR-R11-002 | 打开运营端短信通道管理页 | 页面使用真实API返回通道、连接状态和质量数据;标题、筛选区、表头、行操作和分页正常渲染 |
|
||||
| TC-REFACTOR-R11-003 | 输入通道名称后查询并执行重置 | 查询向真实后端传递筛选条件,列表和总数同步更新;重置恢复全部筛选和真实列表 |
|
||||
| TC-REFACTOR-R11-004 | 打开编辑通道弹窗后取消 | 原通道名称、运营商、单价、地区、CMPP和心跳参数正常回填;取消不调用保存接口 |
|
||||
| TC-REFACTOR-R11-005 | 打开连接日志并筛选 | 真实连接状态和日志数据正常展示;关键词只过滤当前结果,不改变通道或连接状态 |
|
||||
| TC-REFACTOR-R11-006 | 检查发送测试弹窗但不提交 | 手机号、短信内容、接入号、计费条数和结果区域保持;未获授权不得点击最终发送按钮 |
|
||||
| TC-REFACTOR-R11-007 | 检查复制、启停、删除和添加入口但不确认 | 所有既有入口和确认提示保持;页面拆分不会旁路原API或自动执行写操作 |
|
||||
| TC-REFACTOR-R11-008 | 检查`global.css`、`admin.css`与页面CSS | 通道页专属选择器只存在于`AdminChannelsPage.css`;共享`.channel-confirm`由admin层托管,移动端连接摘要规则保持 |
|
||||
| TC-REFACTOR-R11-009 | 在默认桌面与375×812视口检查页面 | 页面非空、无框架错误覆盖、控制台无相关warning/error;窄屏继续使用既有横向表格浏览方式 |
|
||||
| TC-REFACTOR-R11-010 | 执行前端生产构建、API/Gateway全量及R0~R11门禁 | 真实后端契约、数据库、Redis Stream、Gateway和CMPP协议不因前端结构迁移改变 |
|
||||
| TC-REFACTOR-R11-011 | 执行`node tools/quality/verify-admin-sms-task-progress-r11.mjs` | 稳定页面入口不超过220行;六个聚焦模块、真实任务/号码/终止API、交互文案和页面CSS归属完整 |
|
||||
| TC-REFACTOR-R11-012 | 打开运营端短信任务进度页 | 页面使用真实API返回客户批量任务、企业和应用筛选项;批次号、企业应用、提交时间、号码数、进度、状态和分页正常渲染 |
|
||||
| TC-REFACTOR-R11-013 | 输入不存在的发送批次号查询,再重置并查询 | 不存在条件返回真实空列表;重置清空全部条件,再次查询恢复真实任务和总数 |
|
||||
| TC-REFACTOR-R11-014 | 打开真实任务详情 | 提交、发送、计费和成功率指标以及模板、进度、运营商和省份聚合保持原口径,不在前端伪造数据 |
|
||||
| TC-REFACTOR-R11-015 | 打开号码列表并按部分手机号查询 | 调用真实批次号码分页接口;手机号、归属地、运营商和短信状态与后端一致,筛选后总数同步变化 |
|
||||
| TC-REFACTOR-R11-016 | 打开终止确认后取消 | 确认文案和已提交部分提示保持;取消不调用终止接口、不改变任务状态 |
|
||||
| TC-REFACTOR-R11-017 | 检查`global.css`、`admin.css`与短信任务页面CSS | 页面详情、运营商卡片和移动端专属选择器只存在于页面CSS;报备/下游等运营页面共用的筛选、表格、标识和卡片选择器由admin层托管 |
|
||||
| TC-REFACTOR-R11-018 | 在默认桌面与375×812视口检查短信任务页面 | 页面、详情弹窗和窄屏卡片均非空且无框架错误覆盖;控制台无warning/error,长表格保持既有可浏览方式 |
|
||||
| TC-REFACTOR-R11-019 | 执行前端生产构建、API/Gateway全量及全部R0~R11门禁 | 389项API测试、Prisma/API构建、Gateway测试/vet和依赖门禁通过;短信、任务、数据库和协议行为不因页面结构迁移改变 |
|
||||
| TC-REFACTOR-R11-020 | 执行`node tools/quality/verify-admin-sms-records-r11.mjs` | 稳定页面入口不超过220行;四个聚焦模块、五个真实API调用、交互文案、专属与共享CSS归属完整 |
|
||||
| TC-REFACTOR-R11-021 | 打开运营端短信记录页 | 默认日期范围、企业/应用/运营商/状态选项、内容与通道筛选、后端导出入口、记录列表和分页正常渲染 |
|
||||
| TC-REFACTOR-R11-022 | 清空默认日期并查询全部真实记录 | 后端返回实际记录与总数,前端不使用静态数组;超过25条时真实分页总页数和上下页状态正确 |
|
||||
| TC-REFACTOR-R11-023 | 输入完整或部分手机号查询 | 查询参数传给真实记录API,结果、总数和分页同步收窄;不存在的号码显示真实空状态 |
|
||||
| TC-REFACTOR-R11-024 | 展开运营商筛选 | 固定提供全部、移动、联通、电信、未识别,选择后使用后端`carrier`条件查询 |
|
||||
| TC-REFACTOR-R11-025 | 打开真实记录的发送详情 | 最终/提交/回执状态、号码归属、接入号、短信内容、通道尝试及回执时间/码与后端数据一致 |
|
||||
| TC-REFACTOR-R11-026 | 查看有分片与无分片的详情 | 分片审计调用真实接口;有数据按时间、分片序号和ID排序,无数据明确显示暂无分片审计,不造数 |
|
||||
| TC-REFACTOR-R11-027 | 检查后端CSV导出边界 | 导出继续调用`exportOperationMessages`并使用当前筛选条件,不退化为仅导出当前页的浏览器静态数据 |
|
||||
| TC-REFACTOR-R11-028 | 检查`global.css`、`components.css`与短信记录页面CSS | 页面列表、详情、路由、分片和响应式选择器只存在于页面CSS;共享弹窗标题和空状态由components托管,弱化文本样式仍在global |
|
||||
| TC-REFACTOR-R11-029 | 在默认桌面与375×812视口检查短信记录页面 | 筛选区、记录卡片、详情弹窗和分页非空且无框架错误覆盖;控制台无相关warning/error,窄屏字段不重叠 |
|
||||
| TC-REFACTOR-R11-030 | 执行前端生产构建、API/Gateway全量及全部R0~R11门禁 | 389项API测试、Prisma/API构建、Gateway测试/vet和依赖门禁通过;短信记录、回执和协议行为不因页面拆分改变 |
|
||||
| TC-REFACTOR-R11-031 | 执行`node tools/quality/verify-admin-enterprise-applications-r11.mjs` | 稳定页面入口不超过300行;六个聚焦模块、六类真实API调用、交互文案、筛选状态分层和页面CSS归属完整 |
|
||||
| TC-REFACTOR-R11-032 | 打开运营端企业应用管理页 | 页面使用真实分页API返回应用、企业、今日发送、到达率、单价、客户连接状态和应用状态,不使用静态数组 |
|
||||
| TC-REFACTOR-R11-033 | 输入不存在的企业或应用名称查询,再重置 | 查询条件传给真实后端,列表和总数同步变为空;重置恢复全部条件、第一页和真实应用列表 |
|
||||
| TC-REFACTOR-R11-034 | 点击添加应用并取消 | 弹窗通过真实企业接口加载未删除企业;未选择企业时下一步禁用,取消不导航、不创建应用 |
|
||||
| TC-REFACTOR-R11-035 | 打开CMPP连接详情 | 当前连接数、配置连接数、AppID、连接状态和真实已连接会话保持;无会话时显示真实空状态 |
|
||||
| TC-REFACTOR-R11-036 | 打开CMPP或HTTP参数弹窗后关闭 | 参数由真实详情接口返回;标题、企业/应用上下文和复制入口保持,关闭不修改接口凭据或应用配置 |
|
||||
| TC-REFACTOR-R11-037 | 打开启用、停用或删除确认后取消 | 停用先调用真实影响预检;等待清算与强制停用文案、未决项统计和确认边界保持,取消不调用状态变更接口 |
|
||||
| TC-REFACTOR-R11-038 | 检查短信/彩信页签 | 短信应用显示真实表格与分页;彩信继续明确为后端能力待确认,不用mock或静态数据伪造功能 |
|
||||
| TC-REFACTOR-R11-039 | 检查`global.css`、`admin.css`、`components.css`、`shell.css`与企业应用页面CSS | 筛选、连接、参数和新增提示专属选择器只存在于页面CSS;共享筛选/确认由admin托管,弹窗标题/表单布局由components托管,section布局由shell托管 |
|
||||
| TC-REFACTOR-R11-040 | 在默认桌面与375×812视口检查企业应用页面 | 页面、筛选、横向表格和安全只读弹窗非空且无框架错误覆盖;控制台无相关warning/error |
|
||||
| TC-REFACTOR-R11-041 | 执行前端生产构建、API/Gateway全量及全部R0~R11门禁 | 389项API测试、Prisma/API构建、Gateway测试/vet和依赖门禁通过;企业应用、连接、数据库和协议行为不因页面拆分改变 |
|
||||
| TC-REFACTOR-R11-042 | 执行`node tools/quality/verify-foundation-styles-r11.mjs` | 76个设计令牌、13组reset/base规则、逐规则声明哈希、选择器所有权和当前`tokens → reset → shell → global → admin → client → components → AppRoutes`依赖顺序完整 |
|
||||
| TC-REFACTOR-R11-043 | 检查`tokens.css`、`reset.css`和`global.css`职责 | tokens只保留`:root`设计令牌;reset只含元素级基础规则;原global不再重复拥有这些规则,AppShell、组件及页面类未在本步骤迁移 |
|
||||
| TC-REFACTOR-R11-044 | 执行前端TypeScript及Vite生产构建并检查产物CSS位置 | 新增reset入口进入生产CSS依赖图,实际产物按tokens、reset、global、components/页面依赖顺序拼接;CSS总体体积和既有单chunk提示无异常增长 |
|
||||
| TC-REFACTOR-R11-045 | 打开已登录运营端代表页面 | 页面背景、字体、标题、链接、按钮、输入框、下拉框、禁用态、表格和弹窗保持,真实API数据正常渲染 |
|
||||
| TC-REFACTOR-R11-046 | 打开客户端登录页 | Logo、标题、说明、账号/密码/验证码输入、登录按钮和链接保持;不提交登录表单、不改变会话 |
|
||||
| TC-REFACTOR-R11-047 | 使用键盘聚焦可交互控件 | `:focus-visible`继续显示令牌化焦点环;普通焦点不出现浏览器默认outline,禁用控件仍为不可操作光标 |
|
||||
| TC-REFACTOR-R11-048 | 在默认桌面与375×812视口检查运营端和客户端代表页面 | 页面非空、无框架错误覆盖或页面级横向溢出,排版和控件没有因reset加载顺序产生跳变;控制台无相关warning/error |
|
||||
| TC-REFACTOR-R11-049 | 执行API/Gateway全量、Prisma、安全门禁、全部R0~R11结构门禁和`git diff --check` | 389项API测试、API构建、Gateway测试/vet及全部门禁通过;数据库、Redis、CMPP和业务行为不因基础CSS迁移改变 |
|
||||
| TC-REFACTOR-R11-050 | 执行`node tools/quality/verify-app-shell-styles-r11.mjs` | 118组壳层规则、44个壳层类、九组通用布局选择器、三类响应式/动效边界和样式所有权完整 |
|
||||
| TC-REFACTOR-R11-051 | 检查`main.tsx`及生产产物CSS | 依赖顺序为`tokens → reset → shell → global → admin → client → components → AppRoutes`,壳层代表规则位于各页面域和components之前 |
|
||||
| TC-REFACTOR-R11-052 | 检查`global.css`、`shell.css`和组件样式职责 | AppShell和通用布局原语只由shell托管;在第六步时复用的`.icon-button`、页签、表格、表单和弹窗尚未迁移,第七步迁移后由components托管,页面域样式仍不越界 |
|
||||
| TC-REFACTOR-R11-053 | 在已登录运营端桌面宽屏点击收起/展开导航 | 主区列宽在标准侧栏和76px折叠栏间切换;完整/紧凑Logo、菜单图标和活动态正常,无内容遮挡 |
|
||||
| TC-REFACTOR-R11-054 | 在已登录运营端打开并关闭通知及用户菜单 | 弹层定位、层级、计数和空状态保持;只读开关弹层不触发退出、审核、配置或其他写操作 |
|
||||
| TC-REFACTOR-R11-055 | 在375×812视口打开并关闭移动导航 | 顶栏显示移动入口,侧栏以抽屉和遮罩呈现;关闭按钮/遮罩可收起,页面无横向溢出 |
|
||||
| TC-REFACTOR-R11-056 | 在系统减少动画偏好下检查侧栏 | 侧栏过渡被关闭,布局和可操作性不变 |
|
||||
| TC-REFACTOR-R11-057 | 无可用运营端登录态或遇到验证码 | 不伪造会话、不读取浏览器存储、不绕过验证码;将真实点击验收标记为受阻并保留代码级结果 |
|
||||
| TC-REFACTOR-R11-058 | 执行前端生产构建、API/Gateway全量、Prisma、安全门禁、全部R0~R11结构门禁和`git diff --check` | 29个API套件/389项测试、API构建、Gateway测试/vet及全部门禁通过;数据库、Redis、CMPP和业务行为不因壳层CSS迁移改变 |
|
||||
| TC-REFACTOR-R11-059 | 执行`node tools/quality/verify-shared-components-r11.mjs` | 259组规则、291个选择器、14组通用类族、桌面/780px所有权和Button/Input/Select/Table/Modal真实绑定完整 |
|
||||
| TC-REFACTOR-R11-060 | 检查`global.css`与`components.css`职责 | 纯通用表格、表单、弹窗、页签、图标按钮和表格辅助类只由components托管;页面域复合选择器不被误迁 |
|
||||
| TC-REFACTOR-R11-061 | 检查组件级联和入口加载顺序 | 兼容规则位于规范组件规则之前,响应式规则位于对应桌面规则之后;最终`tokens → reset → shell → global → admin → client → components → AppRoutes`顺序完整 |
|
||||
| TC-REFACTOR-R11-062 | 在已登录运营端打开代表性表格并检查空/有数据状态 | 真实后端数据、表头、行、操作区、分页和空状态保持;移动端卡片标签和字段值不重叠 |
|
||||
| TC-REFACTOR-R11-063 | 打开并关闭普通、宽版和XL代表弹窗 | 遮罩、标题、关闭按钮、正文滚动、页脚操作和宽度保持;仅打开/取消不调用写接口 |
|
||||
| TC-REFACTOR-R11-064 | 检查代表性表单、单选、页签和图标按钮 | 输入、选择、双列表单、单选行、活动页签、图标按钮及焦点/禁用/悬停状态保持 |
|
||||
| TC-REFACTOR-R11-065 | 在375×812视口检查表格、表单和弹窗 | 表格使用既有移动卡片布局,表单双列改为单列,弹窗不超出视口,操作按钮可见且页面无横向溢出 |
|
||||
| TC-REFACTOR-R11-066 | 在PostgreSQL停止但API/Redis仍运行时用有效运营会话恢复 | 会话中间件查用户时应暴露数据库连接异常;当前实现会返回500,不能误归因为前端会话拆分,后续可单独评估health与错误映射增强 |
|
||||
| TC-REFACTOR-R11-067 | 恢复PostgreSQL后检查会话边界 | 真实Prisma用户查询恢复;无cookie访问`/api/admin/auth/session`返回401,运营端跳转登录页而非500;不得绕过验证码伪造登录态 |
|
||||
| TC-REFACTOR-R11-068 | 执行前端生产构建、API/Gateway全量、Prisma、安全门禁、全部R0~R11结构门禁和`git diff --check` | 29个API套件/389项测试、API构建、Gateway测试/vet及全部门禁通过;业务、数据库、Redis、Gateway和CMPP行为不因通用组件CSS迁移改变 |
|
||||
| TC-REFACTOR-R11-069 | 执行`node tools/quality/verify-admin-shared-styles-r11.mjs` | 117组规则、141个选择器、11项跨页面使用下限、admin/client所有权和780px/360px响应式边界完整 |
|
||||
| TC-REFACTOR-R11-070 | 检查`main.tsx`及生产CSS依赖图 | 最终加载顺序为`tokens → reset → shell → global → admin → client → components → AppRoutes`,admin/client域位于global之后、通用组件之前 |
|
||||
| TC-REFACTOR-R11-071 | 检查`global.css`与`admin.css`所有权 | 纯admin共享选择器只由admin托管;global只保留带单页面上下文的覆盖规则,client源码不引用admin所有权类 |
|
||||
| TC-REFACTOR-R11-072 | 打开审核中心的企业、短信、模板、签名和引流审核页 | 审核筛选卡、响应式网格、查询/重置操作和审核操作布局保持,真实后端数据与原API不变 |
|
||||
| TC-REFACTOR-R11-073 | 打开任务进度、报备记录及下游记录代表页面 | 共用筛选区、任务表格卡、批次标识、企业信息、分页和详情入口保持,真实分页与筛选参数不变 |
|
||||
| TC-REFACTOR-R11-074 | 打开全局黑名单、企业黑名单和敏感词页面 | 安全页标题、筛选、表单、表格及移动端布局保持;只读验收不新增、删除或导入数据 |
|
||||
| TC-REFACTOR-R11-075 | 打开用户、号段和引流字段等系统管理代表页面 | 系统工具栏、表格卡、弹窗双列表单和操作区保持;打开后取消,不执行创建、编辑或删除 |
|
||||
| TC-REFACTOR-R11-076 | 打开质量、利润和对账统计页 | 三类统计筛选网格及查询按钮在桌面和780px下保持,仍调用真实统计接口,不使用静态数据 |
|
||||
| TC-REFACTOR-R11-077 | 在375×812视口检查审核、任务、安全和系统代表页面 | 筛选区转为单列或既有紧凑布局,按钮宽度、表格/卡片和弹窗不发生页面级横向溢出 |
|
||||
| TC-REFACTOR-R11-078 | 执行前端生产构建、API/Gateway全量、Prisma、安全门禁、全部R0~R11结构门禁和`git diff --check` | 29个API套件/389项测试、API构建、Gateway测试/vet及全部门禁通过;业务、数据库、Redis、Gateway和CMPP行为不因admin共享CSS迁移改变 |
|
||||
| TC-REFACTOR-R11-079 | 执行`node tools/quality/verify-client-shared-styles-r11.mjs` | client唯一共享规则、两页面使用下限、三组跨门户兼容边界和五类单页面保留边界完整 |
|
||||
| TC-REFACTOR-R11-080 | 核对client/admin源码类引用 | `.eyebrow`至少由客户端首页和账单页使用且运营端不引用;没有为了扩大迁移量而错误处理单页面类 |
|
||||
| TC-REFACTOR-R11-081 | 检查`global.css`与`client.css`所有权 | 纯`.eyebrow`声明只由client托管;`.overview-hero .eyebrow`页面覆盖继续留在global |
|
||||
| TC-REFACTOR-R11-082 | 检查跨门户兼容类 | `.sms-send-title`、`.system-page-toolbar`和`.system-table-card`继续留在global,客户端与运营端系统日志页面均不丢失样式 |
|
||||
| TC-REFACTOR-R11-083 | 打开客户端首页和账户账单页 | eyebrow颜色、字号、字重和间距保持;真实首页与账单API数据正常渲染 |
|
||||
| TC-REFACTOR-R11-084 | 打开签名、发送、企业认证、发送详情和模板代表页面 | 各单页面样式仍由原global规则托管,页面结构、真实接口和交互不因第九步改变 |
|
||||
| TC-REFACTOR-R11-085 | 在375×812视口检查首页、账单及一个单页面代表 | 标题、卡片、表格和操作区无新增横向溢出,控制台无相关warning/error |
|
||||
| TC-REFACTOR-R11-086 | 执行前端生产构建、API/Gateway全量、Prisma、安全门禁、全部R0~R11结构门禁和`git diff --check` | 29个API套件/389项测试、API构建、Gateway测试/vet及全部门禁通过;R11九步完成且业务行为不因client共享CSS迁移改变 |
|
||||
|
||||
Reference in New Issue
Block a user