@@ -2397,3 +2397,8 @@ Webhook需在当前受支持Node运行时通过真实HTTPS投递;SSRF校验后
|
||||
## 2026-09-21 未报备签名统计编码兼容修正
|
||||
|
||||
保持既有未报备签名定义:规范正文开头签名在当前企业应用有效签名库不存在才计入。实时统计和日报聚合须同时兼容现有SQL_ASCII及UTF8数据库;不能因汉字共享编码字节漏统计,也不能放宽空签名、嵌套括号或非规范开头限制。不更改分页、权限、归属、数据库编码或已冻结历史报表。根因和本地验收见[排查及修复记录](unreported-signature-diagnosis-20260921.md)。
|
||||
|
||||
|
||||
## 2026-09-21 六项运营功能更正
|
||||
|
||||
模板签名使用通用可搜索下拉框;变量名仅ASCII英文字母和数字1~32位,示例内容可中文。按用户最终更正,同一企业应用下模板名称唯一,与签名无关;名称去首尾空格,非deleted状态占用名称,跨应用同名允许,创建/编辑/恢复/并发均受约束。首页恢复北京时间今日小时发送曲线,置于企业消费排行上方;未知筛选包含submitted与历史unknown,submitted显示提交成功;签名通道质量列表删除通道提交列,详情保留;报备明细企业/应用/通道/对象四条件独立且AND组合。通道移除运营商须先提示并确认,然后事务性移除该运营商全部省网/全国组成员并审计,保留其他组成员及路由,禁止并发重新挂回不兼容成员。此项替代2026-09-20仅跳过不移除的规则。设计、迁移兼容与验收见[六项整改](operations-six-fixes-20260921.md)。授权代码提交推送,未授权环境部署。
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
# 2026-09-21 六项运营功能整改
|
||||
|
||||
状态:实现及本机真实接口、页面验收完成,提交推送收尾。授权:本地修改、测试、提交、推送;不部署、不发送短信、不修改线上业务配置。基线main 28951b4,2026-09-21 19:25前回读实际远端main 001d5f2;推送将包含前一轮未报备统计修复及本次提交,其他会话未提交修改保留。
|
||||
|
||||
## 规则与实现范围
|
||||
|
||||
1. 模板:运营端和客户端复用Select的searchable;变量名仅ASCII英文字母和数字,保留1~32字符上限,不接受下划线、空格、汉字或其他符号,数字可以开头。自定义输入、正文占位符、API变量配置均校验;变量示例值仍可使用中文。已有模板不自动改写,编辑涉及变量/正文时按新规则校验。按用户随后更正,以“企业应用×模板名称”唯一,签名不同也不能同名;名称去首尾空格,非deleted状态均占用名称,已删除模板不占用,新建/编辑/恢复和并发保存由数据库部分唯一索引兜底,API返回明确中文冲突提示。不同应用同名允许。2026-09-21预生产只读检查有效模板按applicationId+btrim(name)重名组0;迁移不自动重命名或删除任何模板,目标环境若有新冲突则阻断迁移。
|
||||
2. 首页:恢复今日24小时发送曲线,位于企业消费排行上方。沿用原曲线口径,按北京时间queuedAt小时汇总号码级业务短信数及其中最终delivered数,不把供应商补发计为新业务短信;来自真实PG当日范围查询,空小时补0,接口失败显示不可用/旧数据提示。通过现有首页summary加载,不重新调用旧的全量dashboard接口;返回hourlySendTrend,指标卡及其他快照逻辑保留。
|
||||
3. 短信记录:“未知”筛选包含提交成功尚无最终送达结果的submitted以及历史unknown;不包含成功/失败/排队/拒绝,既有其他条件取交集。submitted显示“提交成功”,不变更真实业务状态或回执。
|
||||
4. 签名质量:仅删除“签名通道发送质量”列表的通道提交列,调整该表统计说明;保留详情的提交尝试数及后端指标,避免改变其他统计口径。
|
||||
5. 通道报备明细:拆分企业、应用、通道、报备对象四个独立文本搜索框,AND组合且各自仅匹配对应字段。报备对象按当前类型匹配签名或引流站点/URL。保留旧keyword接口兼容、时间/状态/运营商/类型条件、虚拟未报备行、详情/导出及分页,查询/重置回第一页,翻页使用已应用条件。
|
||||
6. 通道运营商缩减:保存前列出移除的运营商并要求确认影响,提示将从这些运营商的全部通道组移除(含省网/全国),可能导致该组无可用通道;重新勾选/取消不写库。后端同一事务更新通道、按通道组carrier移除成员、记录移除关系审计,其他运营商组/组本体/企业应用路由/报备历史保持。能力变更不触发无关重连。成员写入的数据库约束锁定通道并检查组运营商兼容性,阻止并发通道组保存重新挂回已移除能力。事务失败整体回滚。替代此前“缩减能力仅跳过、不移除引用”的规则。
|
||||
|
||||
## 数据、权限与兼容
|
||||
|
||||
新增迁移仅增加模板名称部分唯一索引和通道组成员写入兼容性约束,无历史重写、余额/收费调整。迁移失败不自动resolve或清数据。应用回退不移除索引/约束,旧代码写入不兼容关系会被数据库拒绝。沿用既有运营端/客户端登录、权限及租户限定;前端提示不代替服务端校验。模板名称冲突返回400而非500。
|
||||
|
||||
## 验收
|
||||
|
||||
真实本机隔离PG全迁移、API与必要Redis;模板并发创建/更新、自编辑、跨应用、软删除重用、非法变量与中文示例;小时边界/零点/重复Submit;未知筛选的命中与排除;四搜索项组合及分页虚拟行;运营商移除、取消、回滚、并发成员写入、审计和保留项。页面1600×1000、1366×768、390×844首次进入/刷新/跨路由和相关交互,检查控制台及截图。Browser插件/对应browser技能不在清单,按前端测试技能使用已有Playwright,不安装依赖。定向+前后端全量、覆盖率、TypeScript/生产构建、格式/lint/样式/包体及diff门禁;精确提交候选与工作区结果区分。实际结果收尾追加,不将方案当已完成。
|
||||
|
||||
## 2026-09-21 本轮结果
|
||||
|
||||
- 根因:签名Select未启用通用搜索;变量校验允许下划线且前端缺少输入拦截;模板无应用名称唯一约束;新首页未接回旧小时序列;未知条件直接查unknown遗漏submitted;签名质量列表保留了不需要的列;报备查询只提供合并keyword;通道更新此前明确保留失配的通道组引用。
|
||||
- 真实验收脚本:`tools/testing/verify-operations-six-fixes.mjs`,仅允许localhost专用数据库名。PG16.14隔离新库115项迁移通过(113项基线和本轮2项,不含其他会话未提交迁移);Redis专用16452,真实Nest全局认证、PG、HTTP、前端production构建。无需文件上传/发送,未启动MinIO和Gateway,无任何网络短信发送。Redis5为既有本机版本,BullMQ版本建议提示保留;本轮只验证会话和配置查询,不作为队列/Gateway验收。
|
||||
- 模板:运营与客户端均拒绝同应用跨签名重名;两个并发创建只有一个成功;首尾空格、自编辑、编辑重名、跨应用、删除后重用及恢复冲突通过;非法变量、数字开头和中文示例通过;未登录和客户端访问运营接口被拒绝。数据库唯一索引覆盖写竞争,迁移不自动处理历史重名。
|
||||
- 小时与短信:真实24小时数据,北京零点包含、前日末排除、空桶为0;同业务多条供应商提交记录不增加小时业务量;真实首页summary一致。未知筛选只含submitted/unknown,浏览器真实请求参数为unknown且展示提交成功。
|
||||
- 报备:企业/应用/通道/对象同时匹配;逐项不匹配均空;虚拟未报备记录保留,分页总数和第二页不同记录验证通过。签名质量真实页面三种尺寸均无通道提交表头。
|
||||
- 通道:删除联通时全国与湖北成员均移除,移动/电信及4条应用路由保留,审计记录2条删除关系;强制审计失败触发整体回滚;真实第二数据库连接在通道更新期间写成员等待,提交后被兼容约束拒绝。页面不确认禁止保存、确认后可保存、关闭取消不写库。提示样式由同目录ChannelFormModal.css直接归属并登记所有权,不改历史CSS基线。
|
||||
- 页面:1600×1000、1366×768、390×844覆盖首页刷新/图表位置、四个搜索框、模板签名搜索及粘贴非法变量、通道警示与取消、质量列表、未知筛选、跨路由;无pageerror。18张截图在`C:/Users/hectorzhao/AppData/Local/Temp/cmpp-operations-six-20260921-final/`,人工查看桌面首页与移动通道警示。截图为本机真实测试数据,不是预生产页面。
|
||||
- 从暂存区导出精确候选`C:/cmpp-platform-local/operations-six-candidate-20260921`:前端38组179项、覆盖率语句88.48/分支85.09/函数84/行88.19;后端87组935项、覆盖率68.02/53.71/68.98/70.76,均达到现有门禁;前后端TypeScript与生产构建通过。lint无错误,保留10项既有any/Hook依赖警告;格式、样式、CSS所有权与15项治理测试、包体和staged diff检查通过,入口107.46KiB gzip低于250KiB预算。Gateway未改,不执行Go或线上链路测试。
|
||||
- 原始日志:工作区`.local-data/operations-six-20260921/`与`C:/cmpp-platform-local/operations-six-*.log`;最终真实验收`operations-six-real-verified.log`。最初后端事务mock、浏览器控件定位/手机隐藏表头等待错误已修正;工作区并发覆盖率曾15项超时,精确候选maxWorkers=2、testTimeout=15000全通过。Windows导出CRLF造成格式检查失败,改用本次checkout-index进程级core.autocrlf=false导出提交内LF后通过,未改全局配置。旧拒收脚本中通道缩减断言同步新规则,未执行其发送命令生成流程。
|
||||
- 边界:本次交付代码和两项迁移,未部署测试或预生产;目标环境真实页面、真实历史数据量下首页查询耗时以及迁移时新增重名检查仍需在获授权的发布流程核验。应用回退不会移除已执行的数据库约束。
|
||||
- 增量覆盖率门禁另行执行87组935项通过,语句87.98/分支77.03/函数95.91/行91.22;专用PG和Redis已停止,隔离数据、产物和失败/成功日志保留。
|
||||
@@ -5742,3 +5742,18 @@ TC-SQA-01~14:真实隔离PG覆盖核心日期/日报/长短信/事务/分页
|
||||
| TC-UNREPORTED-ENC-004 | 已冻结日报在源记录改变后普通生成跳过、补建覆盖拒绝,原内容保持;隔离测试不创建任何供应商Submit。 |
|
||||
|
||||
执行:本机PostgreSQL16.14两编码各113项提交内迁移,verify-unreported-signature-encoding.mjs全部通过;真实Nest控制器/服务/PG,不含全局登录鉴权、浏览器及在线发送。完整结果和证据见[本轮记录](unreported-signature-diagnosis-20260921.md)。
|
||||
|
||||
|
||||
## 2026-09-21 六项运营整改用例
|
||||
|
||||
| 编号 | 验收要求 |
|
||||
|---|---|
|
||||
| TC-OPS6-001 | 运营端/客户端签名可搜索;变量仅英文数字,汉字/符号/空格/未闭合/重复均拒绝,数字开头和中文示例可保存。 |
|
||||
| TC-OPS6-002 | 同应用跨签名同名拒绝;trim名称后比较;自编辑正常,跨应用允许;并发只一个成功;软删除可重用,恢复冲突拒绝。 |
|
||||
| TC-OPS6-003 | 首页真实24小时曲线在消费排行上方;北京时间日边界和零桶正确;重复供应商提交不增加业务短信量,刷新仍真实读取。 |
|
||||
| TC-OPS6-004 | 未知筛选匹配submitted/unknown,排除delivered/failed/queued/rejected,真实页面请求unknown且显示提交成功。 |
|
||||
| TC-OPS6-005 | 签名通道质量表头无通道提交列,详情指标不删;报备四个搜索框独立字段AND组合,过滤先于分页且保留虚拟未报备行。 |
|
||||
| TC-OPS6-006 | 移除运营商前明确提示并确认;取消不修改。全国/省网成员均移除,其他组/路由保留且审计完整;事务故障整体回滚,并发成员写入等待后拒绝失配。 |
|
||||
| TC-OPS6-007 | 三种尺寸1600×1000、1366×768、390×844覆盖相关页面、刷新、路由、搜索/校验/确认/取消,无pageerror。 |
|
||||
|
||||
本轮真实本机PG115项迁移、Redis、全Nest认证HTTP和production前端通过;脚本verify-operations-six-fixes.mjs,精确候选前端179/后端935项通过。目标环境未部署未验收,迁移冲突和历史数据量性能仍须发布时核验。详见[执行证据](operations-six-fixes-20260921.md)。
|
||||
|
||||
@@ -5221,3 +5221,12 @@ API全量81套/880项通过并达覆盖率门禁(语句67.73%、分支52.89%
|
||||
代码与需求口径一致,相关需求和TC-UNREPORTED-ENC-001~004同步。原始证据.local-data/unreported-signature-20260921/,详情见[诊断及修复记录](unreported-signature-diagnosis-20260921.md)。本轮仅本地修改和提交,无推送、部署或历史重算;不包含其他会话草稿。真实HTTP为最小控制器验收,未注册应用全局登录鉴权,未做浏览器或线上页面验收;前端/Go未变不重跑。预生产仍需单独授权部署后验收。
|
||||
|
||||
提交前从暂存区导出的精确候选另行通过API86套922项、覆盖率68.05/53.73/69.02/70.77和生产构建;候选产物在两种编码新库重新执行完整真实PG/HTTP/日报脚本通过。前述990项含他轮未提交测试,不作为本次精确提交测试数。最终candidate-api-coverage.log、candidate-build.log及real-*-candidate.log留档;专用PG已停止,数据保留。
|
||||
|
||||
|
||||
## 2026-09-21 六项运营整改:实现、隔离真实验收与提交推送
|
||||
|
||||
用户授权本轮修改、提交、推送,并明确模板唯一规则改为企业应用×模板名称。六项代码完成,设计先行并同步需求及TC-OPS6-001~007;其中通道移除组成员替代此前仅跳过规则。新增应用模板名部分唯一索引和通道组成员兼容约束,历史数据不重写;签名搜索/变量校验、首页小时曲线、未知映射、质量列删除、报备四条件、通道移除提示/事务均已实现。
|
||||
|
||||
本机PG16.14独立数据库115项迁移、真实Redis、全Nest认证API、production前端通过;并发模板只一个成功,跨签名/跨应用/软删除/恢复符合最终口径;通道省网/全国移除、故障回滚、第二数据库连接并发失配拒绝通过。三尺寸18张真实页面截图和刷新/路由/相关交互通过,无pageerror,未发送短信、未启动Gateway。精确暂存候选前端38组179项、后端87组935项,覆盖率/构建/类型/lint/格式/样式/包体/diff门禁通过;遗留10条原有lint警告。并发覆盖率超时和浏览器脚本定位失败保留,降低并发及修正定位后复验通过。原工作区后端1003项含他轮未提交测试,不作为提交内数量。
|
||||
|
||||
证据及未验收项见[六项整改记录](operations-six-fixes-20260921.md)。本轮Git将包含28951b4未报备签名修复及本次提交,保护其他会话所有未提交内容;推送结果以最终远端精确SHA回读为准。本轮未部署测试或预生产,线上页面、目标历史量下曲线查询性能与迁移时是否新出现重名不冒充已验收。
|
||||
|
||||
Reference in New Issue
Block a user