# 2026-09-16 五项整改测试环境交付与验收 ## 版本、范围与证据边界 截至2026-09-16 19:20 CST,测试环境100.93.204.60:12026运行`010ba3216889032a6160cdb14d8536b616ae7102`,线上标记、归档源码、Gateway产物和服务由标准release verify核验。此前依次发布五项实现`a350aca883369b1cfa67ea630a93cf592a9ed6f7`,更名提交`a0209f93bc8eee6cb08a9d7cace4163b26749ae6`随同发布。远端main已回读010ba32,分叉0/0;收尾文档后续独立提交,不表示再次重启应用。预生产未连接或部署。 已实现:第4阶段方案第10节的耐久收尾工作/原子认领/revision与fence/事务和Outbox/失败接续;通道测试免签名与引流检测(普通客户链路保留规则);HTTP参数化真实发送及应用层HTTP报文;告警恢复留存与人工清除;监控失败保留最后真实快照并标明采样时间。短信链路细节见[权威方案](phase-4-send-pipeline-redesign.md)第10节。 保护原61项修改与草稿,不提交原metrics、版本3.0.0、发布工具或部署脚本草稿。原包版本修改未进入应用提交;产品命名与工程版本提交是独立事项。共享文档仅精确暂存本轮新增段落;原文件快照及摘要保留于`.local-data/five-fixes-20260916/before`与`protected-hashes.json`。发布工具仍为受保护的未提交工具,应用SHA不代表工具版本,其摘要由每份plan.json绑定。 ## 验收结果 | 范围 | 实际结果 | |---|---| | 精确应用候选a350aca | 前端35套163项、API77套834项;类型/格式/lint/样式/CSS门禁及远端生产构建通过。工作区API835项含一项受保护metrics测试,不混为候选成绩 | | PostgreSQL | 隔离真实PG全量106迁移重放;11组并发/原子回滚/多进程/过期租约/fence/通知账务/人工处理告警测试通过。路由/限速隔离测试不冒充真实Gateway | | Gateway补充010ba32 | 两种协议即时TCP应答各500次×5轮通过;全量go test ./...、go vet ./...通过,标准工具对精确提交重新validate | | 真实短信链路 | 专用隔离应用20条业务短信,另1条无租户通道测试;模拟供应商只监听测试机loopback,不转真实运营商。涵盖2/3/4段、逆序和每段3次重复DELIVER、补发成功及最终失败 | | 最终账务 | 20份账单,19条成功、1条失败;初始隔离资金1000000,扣费20150、退款650、余额980500(均数据库内部整数单位);冻结-20150与释放20150抵消,账户与流水一致 | | 耐久工作/Outbox | 24个业务发送尝试工作全部idle且revision=processedRevision;所有对应Outbox为published;每个源Submit最多一个后继,无额外账单或业务通知 | | HTTP通知 | 20个稳定业务事件全部delivered;5个早期TLS失败自动恢复,独立503和超时样本各第二次200;重试复用原投递记录,不补发短信。接收端未单独验HMAC,不宣称该项完成 | | CMPP下行 | 客户断线后重连,实际收到并ACK 9份客户原始分段回执;Registered_Delivery=false样本无CMPP通知,HTTP按both配置单独生成;无多余目标 | | 通道测试 | UI敏感操作由用户重新验证身份;195字、无签名且含未报备example.invalid链接,3段全部真实提交并delivered;tenant/batch均空,不创建客户HTTP或CMPP通知 | | HTTP调试页面 | 实际点击发送返回202,展示请求/返回HTTP报文;对应3段短信终态delivered,未将仅202当最终送达 | | 监控页面 | 1600×1000、1366×768、390×844检查,刷新、路由切换、页面重载通过;真实API成功后注入请求中断,仍保留真实快照及时间,解除中断恢复刷新;无页面JS异常 | | 告警人工清除 | 实际发布产生的cmpp-api恢复告警持续留存;UI手动清除后刷新不再出现,PG clearedAt=11:09:32.356Z,一条monitoring.alert_cleared审计;未清除原有磁盘/演示告警 | | 最终队列 | gateway.submit.commands/results/protocol.logs三个消费组pending=0、lag=0;没有凭SubmitResp推算容量 | ### 验收发现的附加缺陷及处理 a350aca初次真实验收中,CMPP样本923和页面样本931首尝试分别只写出2/4、1/3段,出现60秒SUBMIT_TIMEOUT并自动补发。只读代码确认Gateway发送后才登记等待者,快速应答可能被readLoop提前丢弃;未修代码真实TCP回归在2.0第206次、3.0第7次复现。010ba32将写包和登记等待者置于与heartbeat相同mu→sendMu临界区,已按标准流程第二次发布。 010ba32新增6条样本970~975(2/3/4段各两条),6个Submit、18个wire分段全部一次成功,无补发。全轮合计74个wire分段包含通道测试3段,以及修复前异常首尝试3段;20条业务消息24个Submit中的4个后继,分别为2个预设失败场景和2个修复前竞态场景。原异常保留,不算成修复后的无重复样本。短信账务仍按业务消息一份。 首轮模拟CMPP客户端MsgSrc误填account,入口结果9,确认无业务创建后修正测试客户端才运行正式样本;最初503/超时控制读取错误JSON层级,952/953仅作为普通200样本,修正为data.phoneNumber后962/963才计故障验收。保留原失败记录,不用后续成功覆盖。Webhook临时域名在测试机解析到198.18.1.79造成TLS失败;仅对该QA域名临时hosts映射到经TLS验证的地址,未关闭证书校验,验收后精确移除。 ## 发布及最终工具状态 两轮均使用npm run release的plan→validate→preflight→prepare→deploy→verify,使用已授权测试凭据的安全本机入口。第一轮106迁移,第二轮无新增迁移。标准工具不接收业务验收录入,报告中businessAcceptance仍是“未执行”;业务证据由本文件独立维护。 最终verify状态为`deployed-needs-review`,唯一提示“Business counts changed during online release”。已核对:第二轮基线messages/submits为119597/130835,验收后119603/130841,恰为新增6条/6次,无额外记录。应用文件日志新增errorMarkers=0,所涉服务journal warningLines=0;精确版本、资源及服务检查通过。保留工具原始提示,不改状态文件冒充全绿。 | 发布计划 | 远端准备 | 备份 | 停止 | 迁移 | 启动恢复 | 工具验证 | |---|---:|---:|---:|---:|---:|---:| | 20260916T104026-a350aca88336-7f5f9fd9 | 58.1s | 34.6s | 3.7s | 1.2s | 5.4s | 5.0s | | 20260916T110901-010ba3216889-257390d0 | 17.0s | 34.7s | <0.1s | <0.1s | 2.2s | 0.9s | 数字取自state.steps,不将开发、浏览器诊断、验证码/重新认证等待、Webhook网络排障或附加竞态修复计为服务停机。本地候选验证日志独立保留;API全量候选179.627s,前端工作区115.33s不冒称候选耗时。 恢复资产分别位于: - `/var/backups/cmpp-platform/20260916T104026-a350aca88336-7f5f9fd9-attempt-1789555402719951496`(原cbc4a03)。 - `/var/backups/cmpp-platform/20260916T110901-010ba3216889-257390d0-attempt-1789557105165052776`(原a350aca)。 两份备份经工具摘要/可读性检查,未进行整机或数据库恢复演练。旧版本不理解新工作表,禁止直接回退并宣称接续已验证。 ## 容量与测试资源收尾 测试机程序、发布目录和备份均落同一`/dev/sda2`根盘,没有独立数据盘。发布前后已用84166586368→86242967552字节,增加2076381184字节;最终可用13457821696字节,df使用率87%。 | 路径 | 发布前字节 | 发布后字节 | 保留原因 | |---|---:|---:|---| | /opt/cmpp-platform | 1030688768 | 1032572928 | 当前010ba32 | | /opt/cmpp-releases | 13599055872 | 14703378432 | 候选、原产物/依赖、源包、阶段证据 | | /var/backups/cmpp-platform | 8042622976 | 9034113024 | 两份独立恢复点及既有备份 | | /var/log | 1025540096 | 1026125824 | 服务诊断日志 | | /root/.npm | 698204160 | 722685952 | 依赖缓存 | 上一有效应用a350aca的previous-dist(43720704字节)及previous-source(1654784字节)位于第二轮发布目录;首轮previous-api-node_modules(587194368字节)、previous-api-dist(4771840字节)、previous-dist(42360832字节)对应cbc4a03恢复组件。首轮candidate-1789555279750741134为397352960字节;第二轮candidate-1789557047597611732为15458304字节。精确路径清单/占用见本地final-assets.log。当前/上一有效版本之外历史资产仍保留,容量治理未完成;未擅自删除备份、旧依赖或迁移目录。 本轮隔离应用cmu3z59t200031ple266tmprq及HTTP接口已停用,凭据revoked、Webhook端点disabled;两个模拟通道通过真实管理API停用并断链。模拟器7910、临时隧道、Webhook监听器、本轮启动的两个本地隔离PG集群均停止;临时hosts精确映射及清理timer已撤销。测试短信、账务、协议日志与审计保留,不改回余额,不删除业务证据。其他客户/通道配置未更改。 ## 仍未验证的范围 TC-RC-01~12为综合矩阵,不能逐行笼统全部通过:两独立进程和旧租约fence、事务回滚/接续等已在真实隔离PG验证;目标环境已完成前述真实端到端,但未在所有生产消费者位置逐断点kill/restart,未等待真实72小时,未演练旧版恢复及全部历史脏数据组合。未执行修复前后同负载性能对照或持续容量压测,不能宣称CPU下降幅度/TPS。TC-RC-13即时应答竞态本地及目标补测通过。预生产验收完全未执行。 测试证据:`.local-data/five-fixes-20260916/{completion-final.log,immediate-before.log,immediate-after.log,go-all.log,go-vet.log,reconcile-final.log,count-diagnosis.log,cleanup-fixture.log,final-verification-detail.json,capacity-before.log,capacity-after.log,final-assets.log}`;标准计划/验证/报告在`.local-data/releases/`对应上述两计划目录。浏览器截图及受控脚本位于本机临时目录`cmpp-five-fixes-20260916`,不包含密码、Cookie或认证状态。测试脚本PASS文字已将“audited recovery”纠正为“isolated database recovery”,该恢复测试不代表人工恢复审计功能。