diff --git a/docs/http-api-acceptance-20260915.md b/docs/http-api-acceptance-20260915.md new file mode 100644 index 0000000..d25585f --- /dev/null +++ b/docs/http-api-acceptance-20260915.md @@ -0,0 +1,64 @@ +# HTTP 接口改造与隔离验收(2026-09-15) + +## 范围与边界 + +本轮包含最新 HTTP 签名格式、双端签名计算页、运营端引流报备三列交互、客户端企业认证入口隐藏及 HTTP 全链路验收。用户明确授权提交、推送和测试环境部署,以及专用测试企业、应用、模拟通道和号码;未操作预生产,未连接真实运营商发送。 + +## 已定位并修复的问题 + +| 编号 | 根因与修复 | +|---|---| +| HTTP-0915-B01 | 上行手机号、接入号过滤参数缺少格式校验;非法参数原返回空列表,改为明确的 400 错误。 | +| HTTP-0915-B02 | HTTP 发送错误复用了 CMPP 接口开通校验;改为按可信内部 HTTP 请求上下文校验独立 HTTP 开关,保留其他发送入口规则。 | +| HTTP-0915-B03 | 引流 URL 左侧文字冒号被归入网址;显式 http(s) URL 保留分隔边界,同时维持恶意后缀、userinfo 和 query 校验。 | + +## 测试证据 + +- 前端精确候选:33 个文件、158 项测试通过;后端 c781313 候选 76 个套件、828 项通过,cbc4a03 修复候选 76 个套件、830 项通过。两次均由标准发布 validate 生成绑定提交的证据。 +- B03 定向回归先复现 2 失败/20 通过,修复后 22/22 通过。 +- 测试环境 c781313:78 项参数/签名用例、15 项开关/凭据/IP/QPS/JSON 用例通过,后者短信记录数保持 19 不变;并发幂等仅创建一条短信,正文冲突返回 409,不同应用查询返回 404。 +- 实际模拟 CMPP Submit、DELIVRD/UNDELIV、上行 DELIVER 与 ACK 均有记录;黑名单、频次和通道敏感词命中后无供应商 Submit。模拟号码运营商规则仅新增本轮精确号码匹配,不改历史规则。 +- Webhook 已验证成功、503 后 60 秒自动重试成功、400 一次终止、超时两次终止;最终核验的 16 次业务请求签名全部正确(接收器另含一条连通性探针)。 +- 初次引流分支测试受 B03 干扰,不能算作各审批分支通过;最终版本已按下述记录重新执行复测。 + +## 网络与发布记录 + +- c781313 第一次 prepare 因 npm ETIMEDOUT 失败,未切换服务;网络复测恢复后同计划 prepare 成功并完成标准部署及基础设施检查。 +- OpenWrt 只读检查确认默认网关/DNS 为 192.168.71.253,OpenClash 单一上游节点反复超时/EOF;未修改路由器配置,临时本机管理转发已关闭。不能将随后访问恢复记作代理节点故障已修复。 +- 回调接收域名的单域名公网 IP 映射获专项授权,每轮设自动撤回;第一次已主动撤回并核对 hosts 字节恢复,后续映射与最终撤回证据见本地记录。 +- 原始证据目录:`.local-data/http-complete-20260915/`;发布计划及候选日志位于 `.local-data/releases/`。本地证据不含真实客户发送内容或明文密钥。 + +## 最终部署与复测 + +2026-09-15 17:36(北京时间)核验测试环境精确版本为 `cbc4a033251c7496414b1e7aa6233ed49bd108ec`,本地 main 与 origin/main 已核对一致。前序合并范围由 c781313 提交交付,最新补充修复未遗漏 HTTP 协议、双端页面及运营端交互。预生产未部署。 + +- 最终版本 78/78 参数与签名用例再次通过,记录总数保持 25。 +- 引流 6 个真实分支复测:未登记、待审核、移动报备失败、电信报备失败均失败且 Submit=0;移动报备通过的中文冒号网址及电信报备通过的英文冒号网址均送达且各 Submit=1。首次 13000009002/13300009003 因测试机缺少号码规则实际按移动路由,未冒称三网验证;追加精确隔离号码规则后,13000009006/13300009007 及末轮 13300009025 已分别核对联通/电信实际通道。 +- 最终 25 条记录:送达 12、失败 11、入口失败 2;13 次模拟 Submit,13 条状态回执及 1 条上行 ACK 全部返回 0。黑名单、频次、模板、签名报备、引流和通道敏感词阻断分别有独立证据。 +- 账务单位按数据库原值:充值 1000000,扣费 4225,失败退款 325,余额 996100 = 1000000 - 12 × 325;冻结 -7475 与释放 +7475 抵消为 0,流水汇总与余额相同。未手工改回测试余额。 +- 25 个批次均终态(24 finished、1 rejected),23 条发送 Outbox 均 dispatched;Gateway 三个消费组 pending=0、lag=0。 +- 14 个 Webhook 投递终态:12 delivered、2 预期 failed(HTTP 400 一次终止,超时两次终止)。503 场景第二次自动重试成功;16 次接收业务请求 HMAC 全部正确,未人工重投失败回调。上行 API 只返回客户相关公共字段,未返回通道内部字段。 + +标准发布计划为 `.local-data/releases/20260915T085351-cbc4a033251c-f68de5d6/plan.json`。部署时基础设施检查通过;测试收尾再执行 verify 后,工具保留 `deployed-needs-review`,唯一提示为业务计数变化。基线 messages=119576/submits=130814,最终 119582/130816,增量 +6/+2 与六条引流用例及两次模拟 Submit 完全一致,已人工对账;未修改计数或覆盖发布状态。13 项服务均 active,7 个受影响应用服务的新 warning journal 行数均 0,资源/源码/保护文件核验通过。 + +## 收尾与保护资产 + +- 17:34 停用本轮 2 个应用 HTTP 开关、2 个凭据、2 个回调端点、3 个模拟通道、1 条频次规则、1 条企业黑名单、1 条通道敏感词、3 条精确号码规则。仅操作 fixture 记录的专用对象,25 条记录和余额保留。 +- 17:35 核对三个通道均 disconnected/currentConnections=0 后停止本轮模拟器 PID 61156;没有关闭平台服务。 +- 单域名临时映射已精确撤回,hosts 与初始备份逐字节一致,SHA256 为 adf2b112dcb2175c2b8013aed75ebd1b0e60d0d90f5616fad9add6740f22c6d3。自动撤回与备份记录保留。 +- 本机 sudo 仅由当前用户 DPAPI 文件提供,文件在 Git 外;标准工具增加的安全读取能力通过 47 项自测(42 通过、5 平台跳过)。`tools/release/` 为接手时受保护的未跟踪工具目录,未整批提交。此次计划绑定工具实际摘要 `324b27374339563a080062a995ceb89e442f4c750a76d54796b7fac1d4e73422`,不能把应用 SHA 视作完整工具版本。 + +## 耗时与容量 + +后端最终 validate 约 390.6 秒;cbc4a03 远端 prepare 阶段 39.1 秒,备份 36.7 秒,停止至服务启动完成约 13.9 秒,部署后首次 verify 4.5 秒。源包传输、SSH 超时、网络检查及测试/等待另计,不包含于远端 prepare 或停机时长。c781313 首次 npm 超时的失败记录保留;cbc4a03 第一次 preflight SSH 超时,复测通过。最终 verify 首次缺少环境确认参数被工具拒绝,补齐已授权的 test 参数后执行,未绕过门禁。 + +17:33 容量盘点:根分区 /dev/sda2,无独立数据盘,已用 84176310272 字节(85%),可用 15524478976 字节;相对本轮初始已用 81133178880 字节新增 3043131392 字节(约 2.83 GiB)。当前应用 1030688768、发布目录 13599055872、备份 8042622976、npm 缓存 698204160、日志 1004511232 字节。 + +当前 cbc4a03 计划目录占 995188736 字节,上一有效 c781313 计划目录占 1052385280 字节,路径分别为 /opt/cmpp-releases/20260915T085351-cbc4a033251c-f68de5d6 与 /opt/cmpp-releases/20260915T075847-c781313de5e8-aeee244a。独立恢复资产为 /var/backups/cmpp-platform/20260915T085351-cbc4a033251c-f68de5d6-attempt-1789464518635684582;上一恢复资产为 /var/backups/cmpp-platform/20260915T075847-c781313de5e8-aeee244a-attempt-1789461093446894333。未清理旧版本、失败候选或备份;“当前加上一有效版本”的容量治理尚未完成。 + +## 未验证项 + +- 本地最终生产组件的签名向量、复制、清空及 1600×1000、1366×768、390×844 三尺寸无横向溢出已验证;测试环境浏览器反复连接超时,登录后的双端菜单、报备弹窗、企业认证入口及真实发送详情页面验收尚未完成。工具超时不能证明用户未登录。真实 API 回执及回执时间已核验,不能替代页面验收。 +- 已覆盖验证码文本的模板/频次/敏感词链路;未确认用户所说“验证码限制”是否另指独立业务规则,不能宣称所有验证码策略均通过。 +- 代理节点偶发超时及 Tailscale 经西雅图中继的网络问题尚未治理;本轮未修改 OpenWrt,也不将网络暂时恢复称为永久修复。 +- 未测试真实运营商发送,未操作预生产,未做恢复演练。 diff --git a/docs/production-deployment.md b/docs/production-deployment.md index 343894b..92f690b 100644 --- a/docs/production-deployment.md +++ b/docs/production-deployment.md @@ -384,3 +384,10 @@ npm run prisma:generate、API 生产构建,以及线上 api/dist、api/node_mo 独立恢复资产 /var/backups/cmpp-platform/20260914T151450-4665079ca3d2-874a39f8-attempt-1789399125391792291(497029120 字节),摘要/可读性通过、未演练恢复。上一有效 97d1334 的 previous-dist / previous-api-dist / previous-api-node_modules / previous-source 保留于 /opt/cmpp-releases/20260914T151450-4665079ca3d2-874a39f8;当前程序 /opt/cmpp-platform 为 4665079。新报备数据不得按旧索引/旧数据库快照覆盖。 应用和备份同在 /dev/sda2:发布前已用 79648636928、可用 20052152320 字节;发布后已用 81221177344、可用 18479611904,净增 1572540416。当前程序 1029238784,发布目录根 11551481856,备份根 7047651328,本次发布目录约 1035001856 字节。资产清理未授权/未执行,当前+上一有效版本的稳态容量治理仍未完成;完整目录盘点、工具独立摘要、分阶段时长及验收边界见 [本轮整改记录](client-ui-remediation-20260914.md)。线上文档与真实数据库查询已核验,登录后客户端页面仍待账号,不将基础设施发布通过等同完整页面验收。 + + +### 2026-09-15 HTTP 联合改造测试环境发布 + +应用 c781313de5e8964db988830d402e0bd22887f394 后续最小修复升级至 cbc4a033251c7496414b1e7aa6233ed49bd108ec,按标准 plan/validate/preflight/prepare/deploy/verify 完成;测试环境恢复资产、容量和阶段耗时见 [联合验收记录](http-api-acceptance-20260915.md)。未操作预生产。最终 verify 的业务计数提示来自授权复测 +6 条消息/+2 次 Submit,逐条对账一致,保留工具提示及 UI 未验收状态。 + +本机标准工具可通过 --sudo-credential 指向 Git 外当前用户 DPAPI 文件,测试环境限定、与 --prompt-sudo 互斥,密码仅在内存解密后通过 SSH stdin 使用,不写参数和日志。本次实际工具 SHA256 为 324b27374339563a080062a995ceb89e442f4c750a76d54796b7fac1d4e73422;tools/release 为受保护的未跟踪目录,本轮未整批提交,不应将应用提交号等同于完整发布工具版本。自测 47 项中 42 通过、5 项平台跳过。 diff --git a/docs/system-functional-test-cases.md b/docs/system-functional-test-cases.md index abadc41..4b88808 100644 --- a/docs/system-functional-test-cases.md +++ b/docs/system-functional-test-cases.md @@ -5556,3 +5556,11 @@ CLIENT-0914-01~07 的模板样式/顺序、文档归属与检索、中文状 - 已审核签名、模板、引流资料及当前运营商通道报备通过时,正文中的“详情:https://qa0915.example.com”和英文冒号版本应提取完整 URL,正常路由;冒号不计入 URL。 - 未登记、未审核、当前运营商报备失败仍应分别拒绝,零供应商 Submit;恶意后缀、userinfo 和 query 不得借用其他域名报备。 + + +### HTTP-0915 联合验收补充结果 + +- 引流:同一模板下中文/英文冒号后显式 URL,未登记、待审核、移动报备失败、电信报备失败均不得进入通道;各运营商报备通过后正常送达。cbc4a03 实测六项符合,阻断四项 Submit=0,允许两项各 Submit=1。 +- 回调:成功单次;503 自动重试成功;400 单次终止;超时达到隔离配置两次上限。真实 HTTPS 接收与原字节 HMAC 验证 16/16,保留两项预期失败,不人工重投。 +- 收尾:25 条消息终态、25 个批次终态、23 个发送 Outbox dispatched;12 条送达按 325 内部单位计费,失败退款 325,最终余额 996100,冻结/释放相抵,三个消费组无积压。专用测试配置停用后数据和余额保留。 +- 测试环境浏览器 UI 及独立验证码策略不计通过,见 [2026-09-15 记录](http-api-acceptance-20260915.md)。 diff --git a/docs/testing-progress.md b/docs/testing-progress.md index af2365e..1bda83c 100644 --- a/docs/testing-progress.md +++ b/docs/testing-progress.md @@ -5051,3 +5051,10 @@ CUA本轮可用,实际后端文档三尺寸1600×1000/1366×768/390×844无页 - 修复目标:显式 http(s) URL 前的文字冒号不属于 URL;继续扩展恶意域名后缀、userinfo 和 query,保留已有安全校验。最终复测与发布状态后续追加。 - 定向回归:修复前 2 失败/20 通过,修复后 22/22 通过;候选全量门禁及部署后真实 URL 验收待执行。 + + +## 2026-09-15 HTTP 接口联合改造测试环境验收收尾 + +代码 c781313 与补充修复 cbc4a03 已提交推送,测试环境精确运行 cbc4a033251c7496414b1e7aa6233ed49bd108ec(17:36 核验)。包含最新签名协议、双端计算页、报备三列及认证入口隐藏,未遗漏前序范围。最终后端 830/830、前端 158/158,类型/构建/质量门禁通过;最终真实参数回归 78/78,前序独立配置回归 15/15,引流六分支复测通过。25 条隔离记录、13 次模拟 Submit,账务余额与流水一致、冻结净额 0、队列 pending/lag 均 0。Webhook 成功/503 重试/400 终止/超时上限及上行已验收,16 次业务回调 HMAC 正确。专用配置、凭据和模拟器已停用,hosts 精确恢复,未发送至真实运营商。 + +最终标准 verify 唯一提示为业务计数 +6 条短信/+2 次 Submit,已与本轮六个引流用例逐条核对,工具状态保留 deployed-needs-review,不伪造全绿。浏览器连接超时,测试环境登录后 UI 尚未验收;独立“验证码限制”的具体规则仍需明确。预生产未操作,容量治理未完成。完整证据、失败记录、时间、版本与恢复资产见 [HTTP 接口联合验收记录](http-api-acceptance-20260915.md)。