From ac6449028c4ab072ef16a219f61d592e2d453a7e Mon Sep 17 00:00:00 2001 From: hectorzhao Date: Mon, 14 Sep 2026 15:53:22 +0800 Subject: [PATCH] docs: close HTTP API real simulator acceptance --- .../first-version-development-requirements.md | 5 + docs/http-api-assessment-20260910.md | 7 + docs/http-api-full-acceptance-20260914.md | 344 ++++++++++++++++-- docs/production-deployment.md | 9 + docs/system-functional-test-cases.md | 14 + docs/testing-progress.md | 23 ++ 6 files changed, 372 insertions(+), 30 deletions(-) diff --git a/docs/first-version-development-requirements.md b/docs/first-version-development-requirements.md index 1215543..10788c8 100644 --- a/docs/first-version-development-requirements.md +++ b/docs/first-version-development-requirements.md @@ -2288,3 +2288,8 @@ Webhook需在当前受支持Node运行时通过真实HTTPS投递;SSRF校验后 ### HTTP公共参数错误边界补充(2026-09-14) 上行日期须为有效ISO8601日历日期/带时区时间,query与cursor一致;IPv6和IPv4-mapped地址继续执行私网限制;畸形/超限/不支持编码的公开HTTP请求体返回稳定400/413/415及关联ID,不回显输入。详见HTTP整改方案最新修复节。 + + +### HTTP公共接口整改验收状态(2026-09-14) + +上述Webhook DNS、IPv6 URL、严格日历与正文错误边界已在测试版本97d1334完成真实验收;不改变既定业务规则、计费或租户边界。高精度小数秒输入保留兼容,上行详情仅客户业务字段,禁止通道和内部匹配字段。详见 [验收报告](http-api-full-acceptance-20260914.md),生产环境状态不可由测试结论替代。 diff --git a/docs/http-api-assessment-20260910.md b/docs/http-api-assessment-20260910.md index 3480ce4..f34ddcf 100644 --- a/docs/http-api-assessment-20260910.md +++ b/docs/http-api-assessment-20260910.md @@ -298,3 +298,10 @@ R03不能仅通过“增加重试”关闭。后续详细设计至少说明: 用户已授权本轮全部已发现Bug的修复、复测、提交/推送、测试部署,以及仅测试机专用回调域名的临时hosts映射;映射有30分钟独立精确移除timer,验收结束主动移除。无默认网关/DNS服务/OpenWrt或预生产变更。12个既有本轮回调已真实HTTPS送达;200/204成功、400/302终止、429/503/超时重试、持续503上限及人工重试保护均通过,HMAC、eventId与60秒退避一致。 HTTP-FULL-B02:去除URL IPv6方括号后区分IP字面量与DNS,DNS失败转稳定400;同时规范化IPv4-mapped IPv6后复用私网校验,避免修复引入私网绕过。B03:先校验ISO8601年月日/闰年/时分秒/时区,拒绝Date自动归一化;覆盖query与cursor,不改变查询跨度和归属。B04:只对/api/openapi/v1/sms的body-parser已知错误输出统一problem+json和X-Request-Id,400/413/415正文固定,不泄露原始输入;非公开路径和未知错误继续原处理链。无迁移、短信链路、计费或权限规则变更。线上边界复测及最终收尾待新候选发布。 + + +## 2026-09-14 HTTP全量验收最终闭环 + +截至 2026-09-14T07:49:14.156Z,测试环境精确版本97d133442350b9725422ed4e55386f47e37004fd。HTTP-FULL-B01至B04已修复、提交、推送、标准发布并真实复验;74套809项精确候选测试、格式、Lint、类型、构建及安全门禁通过。235项真实请求/断言中229项通过,另6条原始非通过记录已分类并有复测,不删除失败历史。20条短信19送达/1预期失败退款,23个模拟CMPP Submit,21成功计费单位,净扣6825,余额1848101→1841276。7条上行3歧义隐藏/4匹配且ACK完成;24个Webhook事件22送达/2预设终止,31次真实HTTPS收件,签名、密钥轮换、状态码、退避、超时和人工重试均核验。三个Redis Stream pending/lag均0;本轮待办排空、三个应用停用/凭据撤销、receiver及隧道关闭、hosts原字节恢复。未操作预生产、真实运营商或其他客户配置。 + +完整矩阵、根因、发布恢复资产/容量与未执行项见 [HTTP全量验收报告](http-api-full-acceptance-20260914.md)。本段更新此前阶段性“待修/待授权/阻塞”状态,不将其当当前状态。 diff --git a/docs/http-api-full-acceptance-20260914.md b/docs/http-api-full-acceptance-20260914.md index 234bbb7..1f0729a 100644 --- a/docs/http-api-full-acceptance-20260914.md +++ b/docs/http-api-full-acceptance-20260914.md @@ -1,50 +1,334 @@ # HTTP接口全量真实模拟验收(2026-09-14) -更新:2026-09-14T06:36:14.050Z。状态:**Webhook真实成功及异常重试已通过;三个参数边界修复正在回归和发布,最终收尾未完成。** +更新:2026-09-14T07:49:14.156Z。本轮四个已确认代码缺陷均已修复、提交、推送、部署测试并真实复验;测试设施已收尾。本文最终结果替代此前阶段性状态,原失败请求保存在证据中。 -## 环境与交付 +## 交付范围与版本 -测试环境100.93.204.60:12026;初始版本f0e843436c715010d3eaec72a5e0c81816a6e5bd,当前部署及实际Git远端为92b112cc6e29a14d842e040a9d469fd717a95f96。仅测试环境,无预生产操作。现有metrics、发布工具、其他文档草稿保留,提交只含本轮代码/工具及文档精确追加。 +- 测试环境:100.93.204.60:12026。真实PG回读应用版本 **97d133442350b9725422ed4e55386f47e37004fd**;无预生产发布。 +- 提交:92b112cc6e29a14d842e040a9d469fd717a95f96(DNS lookup),a420d61b23e2ce527d4f8978bb36d7ca5825b6c7(参数边界),97d133442350b9725422ed4e55386f47e37004fd(小数秒兼容)。三者均推送;a420未单独部署,最终97包含全部修复。文档收尾另作仅文档提交,不改变线上应用版本。 +- 原main和其他会话metrics、tools/release、部署工具与文档草稿保留;不reset、不清理、不切分支,精确文件/hunk提交。本轮测试配置只作用于三个新应用。 +- 用户专项授权的真实模拟:仅现有6条LGST-M/U/T主备通道,虚构号段,最多30条独立短信、常规每秒不超过1条、最多160个报文;本轮实际20条/23个Submit。无真实运营商、历史重入队、余额直接修改或旧客户/通道配置变更。 -## 已执行 +## 缺陷与根因 -共记录140项HTTP请求/业务断言,含失败原记录和测试前置问题,不将140当全部通过数。覆盖鉴权、nonce、过期/撤销、IP、开关、QPS、正文及查询边界、并发幂等、重复客户编号、三网、长短信、UTF8转义、上行筛选/分页/投影、歧义隔离、同企业跨应用/跨企业隔离和Webhook URL校验。 - -- 9条真实业务短信:8送达、1失败;成功10计费单位,净扣3250内部金额单位,余额1848101→1844851。失败短信在2条LGST模拟通道尝试后退款;冻结/解冻及最终扣退账相符。12个实际CMPP Submit报文(含长短信分段和失败短信的备用模拟路由),未连接真实运营商。 -- 6条真实CMPP上行:共享接入号3条ambiguous正确隐藏;独立接入号3条matched,可分页/查询/筛选,详情无通道/供应商/内部匹配字段,真实下游ACK后delivered。 -- 9条HTTP发送待办dispatched、10条Gateway待办published;未直接修改Redis、余额或历史短信。 -- 本地工作区API73套783项/构建通过;精确发布候选73套782项、类型、格式、lint通过。数量差来自其他会话受保护的metrics测试,不夹带。无前端/Gateway修改,未重复无关门禁。 - -## 真实问题 - -| 编号 | 结果 | 状态 | +| 编号 | 只读复现/根因 | 最小修复与最终验证 | |---|---|---| -| HTTP-FULL-B01 | Node all=true lookup旧回调格式导致Invalid IP address: undefined,初始11个Webhook在2次后失败且收件端无请求 | 最小修复已提交/推送/标准部署;保留SSRF检查,真实本机连接回归通过;公网业务成功仍受下述DNS路径阻塞 | -| HTTP-FULL-B02 | https://[::1]/hook配置返回500,旧配置未改变;URL.hostname含方括号进入DNS lookup | 待修,未绕过私网保护 | -| HTTP-FULL-B03 | 2026-02-30被Date自动换算,查询返回200 | 待修:应严格验证日历日期 | -| HTTP-FULL-B04 | 畸形JSON/非对象JSON在全局body-parser阶段返回普通400,无公开problem code/X-Request-Id | 待修:统一入口错误契约 | +| B01/P1 | 真实Webhook在发送网络请求前报Invalid IP address: undefined;Node自动地址族选择传all=true,旧lookup仍回单地址 | 按all返回固定地址数组,保留SSRF和DNS固定;真实HTTP连接回归、实际公网HTTPS签名/成功/重试验收通过 | +| B02/P2 | https://[::1]/hook返回500;URL.hostname含括号错误进入DNS查询 | 先规范化IPv6字面量,DNS失败稳定400;映射IPv4规范化后执行私网检查;线上回环/ULA/link-local/mapped私网400且原配置不变 | +| B03/P2 | 2026-02-30被Date自动换算,查询返回200 | 严格日历/闰年/时分秒/时区校验,query和cursor一致;非法400,合法闰日、日期、时区及高精度小数秒200 | +| B04/P2 | body-parser阶段的畸形/非对象JSON返回通用错误,缺少公开code/关联ID | 只在公开SMS路径处理已知parser错误;真实畸形/primitive400、3MiB413、未知字符集/编码415,固定安全正文、problem契约和X-Request-Id一致 | -未知channelId字段的400预期与现有未禁止附加字段的契约不一致,send关闭时实际403且无发送,登记为契约观察而非确认缺陷。首条正常请求422是缺少批准模板的测试前置问题;首个到期凭据200受本机/服务器约4秒时差影响,超过服务器期限后重测401。原结果全部保留。 +DNS失败400及公网IPv6地址分类有定向单测;未将私网检查声明为全部特殊用途网段治理。新增@types/express仅开发类型依赖,无运行时依赖升级、迁移、计费/发送规则改变。 -## Webhook网络阻塞与待完成 +## 自动与真实验收 -实际12个本轮回调事件(9回执、3上行)。修复后仅重试本轮11个旧失败事件,首次2秒超时;单事件10秒诊断随后报TLS建连前断开。测试机DNS把临时Cloudflare地址解析为198.18.1.78,备用webhook.site解析为198.18.1.79,两者普通HTTPS均约5秒后TLS断开。本机同域名正常200;测试机只读探针固定到本机解析的104.16.231.132/104.16.230.132且保留原TLS主机校验,分别2232/313ms返回200。不能把网络失败继续归因于已修复lookup格式,也不能宣称回调业务验收通过。 +- 精确最终候选74套 **809项** 全通过,格式、Lint、TypeScript、远端实际API构建通过;security:verify通过。之前工作区783与精确92候选782的差异来自受保护metrics额外测试,不夹带。中间mock DNS spy配置失败已改为模块mock,原失败日志保留;不将失败重试时间算停机。 +- **235条请求/断言记录:229条通过,6条原始非通过保留**。其中2条是已修复后通过的新旧缺陷对照;4条为契约预期/批准模板前置/约4秒服务器时差/测试断言路径错误,逐项见下表。不宣称数学意义上的所有参数组合均已穷举。 +- 四公开接口覆盖认证缺失/错误、timestamp/nonce、过期/撤销、IP、能力开关/QPS、手机号/正文/客户编号/幂等键、类型长度边界、同键重放冲突和5请求并发、日期/cursor/limit、同企业跨应用/跨企业隔离。 +- 真实Chrome 152.0.7977.83加载公开文档200、无pageerror;MD和OpenAPI JSON可读,413/415声明存在。原浏览器连接工具报nodeRepl.fetch request failed,改用已安装Chrome独立无头会话;未控制/关闭用户浏览器。没有UI/CSS代码改动。 -已提出待确认方案:只在测试机/etc/hosts临时加入104.16.230.132与本轮唯一域名映射,30分钟独立自动移除,测试后精确移除;**目前未授权、未执行**。默认网关、系统DNS及OpenWrt保持不变。备用WebHook.site一小时过期收件端已创建后删除(204),未收到业务事件。服务操作参考[官方Token文档](https://docs.webhook.site/api/tokens.html)。 +### 账务、CMPP与上行 -待验证:真实收件HMAC/eventId、200/204 ACK、400终止、429/503/超时自动退避/上限、302不跟随、人工重试及完成后的专用测试设施停用。全共享环境的DB/Redis停机及进程崩溃注入未执行;不以隔离测试代替。暂保留本轮应用/凭据和模拟接收进程用于继续验收,未删除任何历史记录。 +20条短信:19送达、1预期UNDELIV失败并退款;3网、长短信3段、UTF8换行转义均覆盖。23个实际CMPP Submit(含长短信分段及失败短信备用模拟路由),PG21条发送待办published、20条HTTP待办dispatched。失败短信2次供应商尝试未重复收取客户费用;成功计费21单位×325=6825,余额 **1848101→1841276**,冻结/解冻/扣退款流水与最终记录一致。 -## 标准发布与容量 +7条实际CMPP上行:共享接入号3条ambiguous隐藏,独立接入号4条matched;列表、同时间分页、过滤、详情、客户自身字段及租户隔离通过。匹配上行4条下游ACK后delivered;发布重启后测试CMPP客户端重新连接才收到最后1条,未重新入队。详情不暴露通道、供应商或内部匹配字段。 -计划20260914T060412-92b112cc6e29-35305dbd;preflight、prepare、deploy含verify通过,verificationWarnings为空。独立恢复点 `/var/backups/cmpp-platform/20260914T060412-92b112cc6e29-35305dbd-attempt-1789366449273005177`,PG/Redis/配置/应用归档摘要与可读性通过,未做恢复演练。候选准备40.3秒、备份35.0秒、停止2.8秒、启动5.5秒、验证4.1秒;本地候选测试146.085秒(依赖安装另计),业务验收及网络/等待时间不算停机。 +### Webhook完整场景 -测试机无独立数据盘,当前应用、发布目录、备份均落/dev/sda2。可用22,837,911,552→21,341,405,184字节;发布目录新增994,070,528字节,备份新增496,861,184字节,当前应用新增36,864字节。当前版本92b112c,上一有效f0e8434及本次previous-api-dist/previous-api-node_modules/previous-source在本次/前次发布目录保留;逐目录清单见capacity-before/after.json。缓存/日志独立盘点,未擅自清理历史资产,容量治理未完成。 +实际24事件(20回执、4上行):22 delivered、2预设failed(302不跟随、持续503耗尽);受控接收端31次真实HTTPS请求。HTTP 200/204成功;400终止;302不跟随;408/429/500/503第一次失败后至少60秒退避,再次200;10秒超时、15秒延迟响应后重试;最大2次停止;人工重试本轮400失败成功、已完成再次重试409、跨应用404。逐次原始体HMAC有效,eventId/体摘要稳定、重试时间戳更新;本轮receipt密钥轮换后新事件首投成功。 -## 证据 +初始12个本轮旧失败事件在网络路径恢复后全部真实送达,未把旧Invalid-IP、超时或TLS断开记录删除。接收端按测试事件模拟HTTP状态,业务消息、队列、PG和CMPP均使用真实服务。 -本机 `%TEMP%/cmpp-http-full-20260914/`:results.json、cases.md、baseline.json、pre-fix-reconcile.json、negative-reconcile.json、mo-audit.json、remote-https.json、fallback-network.json、public-ip-probe.json、capacity-before/after.json、lookup-tests.log/api-full.log/api-build.log。发布证据 `.local-data/releases/20260914T060412-92b112cc6e29-35305dbd/`。不保存凭据、Cookie、回调密钥;对话工具中的受控密码提示不写入Git。 +### 原始非通过记录 +| 记录 | 澄清/闭环 | +|---|---| +| unknown_internal_channel_field | 预期400与未禁止附加字段契约不一致,send关闭实际403且无发送;不是确认缺陷 | +| normal_mobile | 缺少批准模板导致422;补齐本轮fixture后202/送达 | +| expired_credential | 本机与服务器约4秒时差;超过服务器期限后401 | +| webhook_url_ipv6_loopback | B02原500;最终线上400且配置不变 | +| nonexistent_calendar_date | B03原200;最终线上400 | +| postdeploy_rotated_webhook | 断言误读event.messageId,应为event.data.messageId;实际首投delivered、签名有效,修正断言通过 | -## 后续进展(2026-09-14T07:11:33.208Z) +## 基础设施与测试收尾 -用户已授权并执行唯一域名hosts临时映射,精确移除兜底timer已启用;上文网络阻塞/未授权描述是原阶段记录,现已解除。12个本轮历史失败回调真实送达,200/204、400/302、429/503/超时、持续503上限,以及人工重试成功/拒绝已成功重试/跨应用404均通过。HMAC、eventId、原始体摘要和至少60秒退避一致。B02/B03/B04最小修复及55项定向回归已通过,等待精确候选全量门禁与测试环境复验。 +最终PG记录及实际版本、三Redis Streams(gateway.submit.commands/results、gateway.protocol.logs)pending/lag均0;API/Gateway/PostgreSQL/Redis active。真实服务名cmpp-minio active/running、/minio/health/live200;最初查询minio无此unit不代表服务故障。标准发布verify核查服务、日志增量、迁移、保护文件和队列,verificationWarnings为空。 + +测试机代理DNS把临时Cloudflare域名解析成198.18.1.78,普通HTTPS约5秒TLS断开;固定公开解析IP且保留TLS主机校验200。用户批准唯一域名临时hosts映射,约15:02建立,15:30重置30分钟独立自动清理;15:45:58主动精确移除,原hosts SHA256 adf2b112dcb2175c2b8013aed75ebd1b0e60d0d90f5616fad9add6740f22c6d3完全恢复,timer inactive。没有改默认网关、DNS服务或OpenWrt。备用webhook.site临时接收端创建后删除204,无业务事件。 + +三个新应用已disabled、HTTP关闭、active凭据0,待办0;测试supplier、CMPP客户端、HTTP receiver、Cloudflared及独立浏览器均关闭。原用户Tailscale17900转发保留。测试应用、模板、签名、消息、回执、上行、账务与审计保留,不删除业务历史。 + +## 发布、恢复资产和容量 + +最终标准计划20260914T072054-97d133442350-766123b9:plan→validate→preflight→prepare→deploy(含verify)通过。工具为受保护未提交tools/release,计划绑定完整工具摘要,不以应用SHA冒充工具版本。当前版本97在/opt/cmpp-platform,上一有效92的previous-api-dist、previous-api-node_modules、previous-source位于/opt/cmpp-releases/20260914T072054-97d133442350-766123b9/。 + +| 阶段 | 92部署秒 | 97最终部署秒 | +|---|---:|---:| +| 远端prepare | 40.3 | 48.6 | +| 独立备份 | 35.0 | 34.8 | +| stop | 2.8 | 1.7 | +| start | 5.5 | 5.5 | +| verify | 4.1 | 4.2 | + +最终本地候选API测试142.092秒,依赖安装/其他门禁另记validation时间;实际本轮业务验收时间见results.json startedAt/completedAt。故障修复、网络等待、浏览器诊断与文档整理均不计服务停机。两次无DB迁移。恢复资产: + +- /var/backups/cmpp-platform/20260914T060412-92b112cc6e29-35305dbd-attempt-1789366449273005177 +- /var/backups/cmpp-platform/20260914T072054-97d133442350-766123b9-attempt-1789371103065630279 + +PG/Redis/源码/配置独立归档摘要与可读性通过,未实际恢复演练。current/previous/candidate/source/冷副本路径逐项见capacity-final.json;本轮没有迁盘冷副本或数据盘。测试机全部/dev/sda2;可用22,837,911,552→21,341,405,184→19,834,384,384字节(最终81%已用)。 + +| 路径 | 92发布前字节 | 92发布后字节 | 97发布后字节 | 97阶段新增 | +|---|---:|---:|---:|---:| +| /opt/cmpp-platform | 1027432448 | 1027469312 | 1027747840 | 278528 | +| /opt/cmpp-releases | 8527847424 | 9521917952 | 10516475904 | 994557952 | +| /var/backups/cmpp-platform | 5556809728 | 6053670912 | 6550622208 | 496951296 | +| /var/log | 963973120 | 964083712 | 964415488 | 331776 | +| /root/.npm | 646717440 | 646819840 | 671383552 | 24563712 | + +最终发布目录独立994,557,952字节、独立备份496,951,296字节;上一92独立发布目录994,070,528/备份496,861,184字节。更早历史资产保留,未获清理范围、不使用临时删除脚本,容量治理未完成。 + +## 未执行与证据边界 + +未连接真实运营商、未做压力容量结论、未改预生产;未做共享PG/Redis停机、进程崩溃、恢复演练或公网IPv6可达性验收。MinIO仅健康/服务核验,本次无对象存储功能变更。测试机默认代理DNS路径未治理,本次公网回调在已批准临时映射下完成,不能宣称环境DNS已修复。 + +本机 %TEMP%/cmpp-http-full-20260914/ 保存 results.json、cases.md、baseline.json、final-audit.json、final-reconcile.json、hosts-applied/renewed/restored.json、capacity-before/after/final.json、网络探针和完整测试日志;无凭据/密钥。发布证据 .local-data/releases/20260914T072054-97d133442350-766123b9/ 及前次92目录。需求/设计/测试同步见 [整改方案](http-api-assessment-20260910.md)、[测试用例](system-functional-test-cases.md)、[进度](testing-progress.md)、[部署手册](production-deployment.md)。 + +## 请求与断言索引(保留原结果) + +| # | 记录名 | 结果/分类 | HTTP或状态 | +|---:|---|---|---| +| 1 | valid_empty_uplinks | 通过 | 200 | +| 2 | unknown_message | 通过 | 404 | +| 3 | empty_object | 通过 | 400 | +| 4 | missing_mobile | 通过 | 400 | +| 5 | mobile_number | 通过 | 400 | +| 6 | mobile_null | 通过 | 400 | +| 7 | mobile_array | 通过 | 400 | +| 8 | mobile_short | 通过 | 400 | +| 9 | mobile_long | 通过 | 400 | +| 10 | mobile_letters | 通过 | 400 | +| 11 | mobile_prefix | 通过 | 400 | +| 12 | mobile_space | 通过 | 400 | +| 13 | missing_content | 通过 | 400 | +| 14 | content_null | 通过 | 400 | +| 15 | content_number | 通过 | 400 | +| 16 | content_object | 通过 | 400 | +| 17 | content_array | 通过 | 400 | +| 18 | content_empty | 通过 | 400 | +| 19 | content_blank | 通过 | 400 | +| 20 | client_id_number | 通过 | 400 | +| 21 | client_id_object | 通过 | 400 | +| 22 | client_id_too_long | 通过 | 400 | +| 23 | body_array | 通过 | 400 | +| 24 | body_string | 通过 | 400 | +| 25 | limit_zero | 通过 | 400 | +| 26 | limit_negative | 通过 | 400 | +| 27 | limit_fraction | 通过 | 400 | +| 28 | limit_nan | 通过 | 400 | +| 29 | limit_infinite | 通过 | 400 | +| 30 | limit_over_safe | 通过 | 400 | +| 31 | limit_duplicate | 通过 | 400 | +| 32 | date_invalid | 通过 | 400 | +| 33 | date_end_invalid | 通过 | 400 | +| 34 | date_reverse | 通过 | 400 | +| 35 | range_over_limit | 通过 | 400 | +| 36 | date_duplicate | 通过 | 400 | +| 37 | keyword_duplicate | 通过 | 400 | +| 38 | mobile_duplicate | 通过 | 400 | +| 39 | access_duplicate | 通过 | 400 | +| 40 | cursor_invalid | 通过 | 400 | +| 41 | cursor_wrong_json | 通过 | 400 | +| 42 | cursor_bad_time | 通过 | 400 | +| 43 | cursor_bad_id | 通过 | 400 | +| 44 | cursor_extra | 通过 | 400 | +| 45 | cursor_too_long | 通过 | 400 | +| 46 | limit_max_clipped | 通过 | 200 | +| 47 | unknown_uplink | 通过 | 404 | +| 48 | idem_short | 通过 | 400 | +| 49 | idem_long | 通过 | 400 | +| 50 | idem_illegal_ascii | 通过 | 400 | +| 51 | idem_missing | 通过 | 400 | +| 52 | malformed_json | 通过 | 400 | +| 53 | unknown_internal_channel_field | expectation_mismatch_unknown_fields_not_forbidden_by_current_contract | 403 | +| 54 | send_permission_disabled | 通过 | 403 | +| 55 | auth_headers_missing | 通过 | 401 | +| 56 | nonce_short | 通过 | 401 | +| 57 | nonce_illegal | 通过 | 401 | +| 58 | timestamp_expired | 通过 | 401 | +| 59 | timestamp_non_numeric | 通过 | 401 | +| 60 | signature_wrong | 通过 | 401 | +| 61 | unknown_credential | 通过 | 401 | +| 62 | nonce_first_use | 通过 | 200 | +| 63 | nonce_replay | 通过 | 401 | +| 64 | message_query_disabled | 通过 | 403 | +| 65 | uplink_query_disabled | 通过 | 403 | +| 66 | ip_not_allowed | 通过 | 403 | +| 67 | http_api_disabled | 通过 | 403 | +| 68 | qps_limit_concurrent_queries | 通过 | 200,429,429,429 | +| 69 | normal_mobile | fixture_incomplete_no_approved_template | 422 | +| 70 | normal_mobile_ready | 通过 | 202 | +| 71 | accepted_idempotent_replay | 通过 | 202 | +| 72 | accepted_snapshot_immutable_after_delivery | 通过 | 断言 | +| 73 | idempotency_body_conflict | 通过 | 409 | +| 74 | expired_credential | fixture_clock_skew_server_4s_behind | 200 | +| 75 | revoked_credential | 通过 | 401 | +| 76 | normal_unicom | 通过 | 202 | +| 77 | normal_telecom | 通过 | 202 | +| 78 | long_message | 通过 | 202 | +| 79 | utf8_escape_newline | 通过 | 202 | +| 80 | expired_after_server_deadline | 通过 | 401 | +| 81 | normal_mobile_ready_final | 通过 | delivered | +| 82 | normal_unicom_final | 通过 | delivered | +| 83 | normal_telecom_final | 通过 | delivered | +| 84 | long_message_final | 通过 | delivered | +| 85 | utf8_escape_newline_final | 通过 | delivered | +| 86 | query_by_client_message_id | 通过 | 200 | +| 87 | isolated_mo | 通过 | 202 | +| 88 | uplink_page1 | 通过 | 200 | +| 89 | uplink_page2 | 通过 | 200 | +| 90 | uplink_pagination_no_duplicate | 通过 | 断言 | +| 91 | uplink_detail | 通过 | 200 | +| 92 | uplink_public_fields | 通过 | 断言 | +| 93 | uplink_filter_mobile | 通过 | 200 | +| 94 | uplink_filter_mobile_rows | 通过 | 断言 | +| 95 | uplink_filter_mobile_empty | 通过 | 200 | +| 96 | uplink_filter_mobile_empty_rows | 通过 | 断言 | +| 97 | uplink_filter_access | 通过 | 200 | +| 98 | uplink_filter_access_rows | 通过 | 断言 | +| 99 | uplink_filter_keyword | 通过 | 200 | +| 100 | uplink_filter_keyword_rows | 通过 | 断言 | +| 101 | uplink_filter_combined | 通过 | 200 | +| 102 | uplink_filter_combined_rows | 通过 | 断言 | +| 103 | ambiguous_hidden_cmu0tpvfy001atllegn688fn6 | 通过 | 404 | +| 104 | ambiguous_hidden_cmu0tpvgi001ltlleaz7vda8y | 通过 | 404 | +| 105 | ambiguous_hidden_cmu0tpvgr001wtlletjox30bi | 通过 | 404 | +| 106 | concurrent_same_idempotency | 通过 | 断言 | +| 107 | concurrent_single_supplier_submit | 通过 | 200 | +| 108 | same_app_message_hidden | 通过 | 404 | +| 109 | same_app_clientId_hidden | 通过 | 404 | +| 110 | same_app_uplink_hidden | 通过 | 404 | +| 111 | same_app_uplink_list | 通过 | 200 | +| 112 | same_app_list_empty | 通过 | 断言 | +| 113 | cross_app_message_hidden | 通过 | 404 | +| 114 | cross_app_clientId_hidden | 通过 | 404 | +| 115 | cross_app_uplink_hidden | 通过 | 404 | +| 116 | cross_app_uplink_list | 通过 | 200 | +| 117 | cross_app_list_empty | 通过 | 断言 | +| 118 | webhook_url_plain_http | 通过 | 400 | +| 119 | webhook_url_loopback | 通过 | 400 | +| 120 | webhook_url_private | 通过 | 400 | +| 121 | webhook_url_metadata | 通过 | 400 | +| 122 | webhook_url_ipv6_loopback | confirmed_bug_fixed_and_live_retested | 500 | +| 123 | webhook_url_userinfo | 通过 | 400 | +| 124 | webhook_url_bad_protocol | 通过 | 400 | +| 125 | webhook_url_invalid_url | 通过 | 400 | +| 126 | raw_json_whitespace_omitted_clientId | 通过 | 202 | +| 127 | raw_pretty_final | 通过 | 断言 | +| 128 | uppercase_prefixed_signature | 通过 | 200 | +| 129 | raw_body_tamper | 通过 | 401 | +| 130 | nonce_min_length | 通过 | 200 | +| 131 | nonce_max_length | 通过 | 200 | +| 132 | duplicate_clientId_different_idempotency | 通过 | 409 | +| 133 | duplicate_clientId_no_wire | 通过 | 断言 | +| 134 | nonexistent_calendar_date | confirmed_bug_fixed_and_live_retested | 200 | +| 135 | unknown_method | 通过 | 404 | +| 136 | post_deploy_authenticated_query | 通过 | 200 | +| 137 | negative_receipt | 通过 | 202 | +| 138 | negative_receipt_final | 通过 | 断言 | +| 139 | negative_receipt_two_simulated_routes | 通过 | 断言 | +| 140 | negative_receipt_refund | 通过 | 断言 | +| 141 | initial_webhooks_real_https_hmac | 通过 | 断言 | +| 142 | hook_ok | 通过 | 202 | +| 143 | hook_ok_sms_final | 通过 | 断言 | +| 144 | hook_204 | 通过 | 202 | +| 145 | hook_204_sms_final | 通过 | 断言 | +| 146 | hook_400 | 通过 | 202 | +| 147 | hook_400_sms_final | 通过 | 断言 | +| 148 | hook_302 | 通过 | 202 | +| 149 | hook_302_sms_final | 通过 | 断言 | +| 150 | hook_503 | 通过 | 202 | +| 151 | hook_503_sms_final | 通过 | 断言 | +| 152 | hook_429 | 通过 | 202 | +| 153 | hook_429_sms_final | 通过 | 断言 | +| 154 | hook_timeout | 通过 | 202 | +| 155 | hook_timeout_sms_final | 通过 | 断言 | +| 156 | hook_max_attempts | 通过 | 202 | +| 157 | hook_max_attempts_sms_final | 通过 | 断言 | +| 158 | webhook_ok_terminal | 通过 | delivered | +| 159 | webhook_204_terminal | 通过 | delivered | +| 160 | webhook_400_terminal | 通过 | failed | +| 161 | webhook_302_terminal | 通过 | failed | +| 162 | webhook_503_terminal | 通过 | delivered | +| 163 | webhook_503_retry_consistency | 通过 | 断言 | +| 164 | webhook_429_terminal | 通过 | delivered | +| 165 | webhook_429_retry_consistency | 通过 | 断言 | +| 166 | webhook_timeout_terminal | 通过 | delivered | +| 167 | webhook_timeout_retry_consistency | 通过 | 断言 | +| 168 | webhook_always503_terminal | 通过 | failed | +| 169 | webhook_always503_retry_consistency | 通过 | 断言 | +| 170 | webhook_manual_retry_success | 通过 | delivered | +| 171 | webhook_delivered_retry_rejected | 通过 | 409 | +| 172 | webhook_cross_app_retry_hidden | 通过 | 404 | +| 173 | hook_408 | 通过 | 202 | +| 174 | hook_408_sms_final | 通过 | 断言 | +| 175 | hook_500 | 通过 | 202 | +| 176 | hook_500_sms_final | 通过 | 断言 | +| 177 | webhook_408_retry | 通过 | delivered | +| 178 | webhook_500_retry | 通过 | delivered | +| 179 | pre_final_release_reconcile | 通过 | 断言 | +| 180 | fixed_date_feb30 | 通过 | 400 | +| 181 | fixed_date_code_feb30 | 通过 | 断言 | +| 182 | fixed_date_nonleap | 通过 | 400 | +| 183 | fixed_date_code_nonleap | 通过 | 断言 | +| 184 | fixed_date_apr31 | 通过 | 400 | +| 185 | fixed_date_code_apr31 | 通过 | 断言 | +| 186 | fixed_date_hour24 | 通过 | 400 | +| 187 | fixed_date_code_hour24 | 通过 | 断言 | +| 188 | fixed_date_no_timezone | 通过 | 400 | +| 189 | fixed_date_code_no_timezone | 通过 | 断言 | +| 190 | fixed_date_empty | 通过 | 400 | +| 191 | fixed_date_code_empty | 通过 | 断言 | +| 192 | fixed_date_valid_leap | 通过 | 200 | +| 193 | fixed_date_valid_date_only | 通过 | 200 | +| 194 | fixed_date_valid_precision | 通过 | 200 | +| 195 | fixed_date_valid_offset | 通过 | 200 | +| 196 | fixed_webhook_ipv6_loopback | 通过 | 400 | +| 197 | fixed_webhook_ipv6_ula | 通过 | 400 | +| 198 | fixed_webhook_ipv6_linklocal | 通过 | 400 | +| 199 | fixed_webhook_ipv6_mapped | 通过 | 400 | +| 200 | fixed_webhook_ipv6_mapped_private | 通过 | 400 | +| 201 | invalid_webhook_preserves_endpoint | 通过 | 断言 | +| 202 | fixed_parser_malformed | 通过 | 400 | +| 203 | fixed_problem_contract_malformed | 通过 | 断言 | +| 204 | fixed_parser_primitive | 通过 | 400 | +| 205 | fixed_problem_contract_primitive | 通过 | 断言 | +| 206 | fixed_parser_oversize | 通过 | 413 | +| 207 | fixed_problem_contract_oversize | 通过 | 断言 | +| 208 | fixed_parser_charset | 通过 | 415 | +| 209 | fixed_problem_contract_charset | 通过 | 断言 | +| 210 | fixed_parser_encoding | 通过 | 415 | +| 211 | fixed_problem_contract_encoding | 通过 | 断言 | +| 212 | webhook_secret_rotated | 通过 | 断言 | +| 213 | postdeploy_rotated_secret | 通过 | 202 | +| 214 | postdeploy_sms_final | 通过 | delivered | +| 215 | fixed_cursor_calendar | 通过 | 400 | +| 216 | fixed_cursor_code | 通过 | 断言 | +| 217 | postdeploy_rotated_webhook | test_assertion_used_event_messageId_instead_of_event_data_messageId | delivered | +| 218 | postdeploy_uplink_list | 通过 | 200 | +| 219 | postdeploy_new_mo_received | 通过 | 断言 | +| 220 | postdeploy_uplink_detail | 通过 | 200 | +| 221 | postdeploy_uplink_no_internal_fields | 通过 | 断言 | +| 222 | postdeploy_isolation_same | 通过 | 404 | +| 223 | postdeploy_isolation_cross | 通过 | 404 | +| 224 | postdeploy_rotated_webhook_corrected | 通过 | delivered | +| 225 | postdeploy_uplink_webhook | 通过 | 断言 | +| 226 | browser_client_docs | 通过 | 断言 | +| 227 | public_openapi_error_schema | 通过 | 断言 | +| 228 | public_md_updated | 通过 | 200 | +| 229 | final_money_reconcile | 通过 | 断言 | +| 230 | final_submit_reconcile | 通过 | 断言 | +| 231 | application_drained_before_cleanup | 通过 | 断言 | +| 232 | test_app_cleanup | 通过 | 断言 | +| 233 | hosts_exact_restoration | 通过 | 断言 | +| 234 | final_queues_drained | 通过 | 断言 | +| 235 | minio_actual_service_health | 通过 | 断言 | diff --git a/docs/production-deployment.md b/docs/production-deployment.md index 8ad5b5b..022c322 100644 --- a/docs/production-deployment.md +++ b/docs/production-deployment.md @@ -366,3 +366,12 @@ npm run prisma:generate、API 生产构建,以及线上 api/dist、api/node_mo ## 2026-09-10 通道敏感词测试发布 已按用户授权使用标准入口将测试应用从0c3f820更新为8e4bc5a20e4d98e96fc8572fabbac149ba12c8e6。计划20260910T075122-8e4bc5a20e4d-0e177bfe,前端/API及一项增量迁移,7个Node服务更新,Gateway保持原进程。独立备份、13服务、迁移/资源/日志/队列及真实管理员页面通过;详细恢复路径、容量增量、未执行项见[本次验收](release-20260910-test-channel-sensitive-words.md)。系统盘可用8.81GB(92%已用),资产未清理;此记录不授权清理、推送或预生产。 + + +### 2026-09-14 HTTP全量验收修复测试发布收尾 + +标准计划20260914T072054-97d133442350-766123b9,精确提交97d133442350b9725422ed4e55386f47e37004fd,线上基线92b112cc6e29a14d842e040a9d469fd717a95f96;validate/preflight/prepare/deploy含verify通过,verificationWarnings为空。独立恢复资产 `/var/backups/cmpp-platform/20260914T072054-97d133442350-766123b9-attempt-1789371103065630279` 保留;当前97d1334位于 `/opt/cmpp-platform`,上一有效92b112c的previous-api-dist/previous-api-node_modules/previous-source位于 `/opt/cmpp-releases/20260914T072054-97d133442350-766123b9/`。无迁移或预生产部署。 + +本次prepare48.6秒、备份34.8秒、stop1.7秒、start5.5秒、verify4.2秒,业务验收另计。系统盘/dev/sda2,无独立数据盘;最终可用19,834,384,384字节(81%已用)。本次发布目录新增994,557,952字节、备份496,951,296字节,旧资产未清理,容量治理待完成。 + +唯一临时hosts映射在15:02左右建立,15:30续设30分钟自动清理,15:45:58北京时间主动精确移除;原SHA256 adf2b112dcb2175c2b8013aed75ebd1b0e60d0d90f5616fad9add6740f22c6d3完全恢复,timer inactive。备份和精确清理脚本保留 `/root/cmpp-maintenance/http-qa-bdd774bf/`;三个新测试应用停用/凭据撤销,模拟进程及本轮Cloudflared关闭,原Tailscale17900转发保留。真实业务验收与自动基础检查分别见 [完整报告](http-api-full-acceptance-20260914.md)。 diff --git a/docs/system-functional-test-cases.md b/docs/system-functional-test-cases.md index 7fed673..35460a5 100644 --- a/docs/system-functional-test-cases.md +++ b/docs/system-functional-test-cases.md @@ -5469,8 +5469,22 @@ TC-CHANNEL-WORD测试部署验收:应用8e4bc5a;新Tab/API200真实空词库 执行结果与限制见 [HTTP全量验收](http-api-full-acceptance-20260914.md),用例存在不表示全部通过。 +### 2026-09-14 HTTP全量模拟验收阶段结果 + +已记录140项检查,9条真实模拟短信(8送达、1失败并退款)、6条上行(3matched/3ambiguous)、真实队列/计费对账完成。Webhook DNS callback最小修复92b112c已提交/推送/标准部署测试,精确候选782项通过。IPv6 URL500、日历日期自动归一化、body-parser错误契约3项待修。公网回调成功/状态码重试仍被测试机198.18.x.x代理DNS路径阻塞,固定真实公网IP的只读TLS探针200;正等待临时仅专用域名hosts映射授权,尚未改网络。详见[完整阶段记录](http-api-full-acceptance-20260914.md),不宣称全量通过。 + + ## 2026-09-14 HTTP全量验收后续修复与授权 用户已授权本轮全部已发现Bug的修复、复测、提交/推送、测试部署,以及仅测试机专用回调域名的临时hosts映射;映射有30分钟独立精确移除timer,验收结束主动移除。无默认网关/DNS服务/OpenWrt或预生产变更。12个既有本轮回调已真实HTTPS送达;200/204成功、400/302终止、429/503/超时重试、持续503上限及人工重试保护均通过,HMAC、eventId与60秒退避一致。 HTTP-FULL-B02:去除URL IPv6方括号后区分IP字面量与DNS,DNS失败转稳定400;同时规范化IPv4-mapped IPv6后复用私网校验,避免修复引入私网绕过。B03:先校验ISO8601年月日/闰年/时分秒/时区,拒绝Date自动归一化;覆盖query与cursor,不改变查询跨度和归属。B04:只对/api/openapi/v1/sms的body-parser已知错误输出统一problem+json和X-Request-Id,400/413/415正文固定,不泄露原始输入;非公开路径和未知错误继续原处理链。无迁移、短信链路、计费或权限规则变更。线上边界复测及最终收尾待新候选发布。 + + +## 2026-09-14 HTTP全量验收最终闭环 + +截至 2026-09-14T07:49:14.156Z,测试环境精确版本97d133442350b9725422ed4e55386f47e37004fd。HTTP-FULL-B01至B04已修复、提交、推送、标准发布并真实复验;74套809项精确候选测试、格式、Lint、类型、构建及安全门禁通过。235项真实请求/断言中229项通过,另6条原始非通过记录已分类并有复测,不删除失败历史。20条短信19送达/1预期失败退款,23个模拟CMPP Submit,21成功计费单位,净扣6825,余额1848101→1841276。7条上行3歧义隐藏/4匹配且ACK完成;24个Webhook事件22送达/2预设终止,31次真实HTTPS收件,签名、密钥轮换、状态码、退避、超时和人工重试均核验。三个Redis Stream pending/lag均0;本轮待办排空、三个应用停用/凭据撤销、receiver及隧道关闭、hosts原字节恢复。未操作预生产、真实运营商或其他客户配置。 + +完整矩阵、根因、发布恢复资产/容量与未执行项见 [HTTP全量验收报告](http-api-full-acceptance-20260914.md)。本段更新此前阶段性“待修/待授权/阻塞”状态,不将其当当前状态。 + +新增覆盖:TC-HTTP-FULL-DATE(非法日历/query/cursor与时区、高精度兼容)、TC-HTTP-FULL-BODY(畸形/非对象/超限/字符集/编码的400/413/415及关联ID)、TC-HTTP-FULL-IPV6(回环/ULA/link-local/mapped私网拒绝且配置不变)、TC-HTTP-FULL-ROTATE(新密钥真实签名成功);记录与断言名称逐项见报告附录。 diff --git a/docs/testing-progress.md b/docs/testing-progress.md index 41e20e6..c92927f 100644 --- a/docs/testing-progress.md +++ b/docs/testing-progress.md @@ -4938,13 +4938,36 @@ git diff --check 测试实际公开文档/JSON为200,七query/唯一幂等头/未认证401关联ID通过;Edge三尺寸、检索、示例、复制降级、同字节下载和刷新通过,无pageerror。未将公开页验收冒称已登录客户端完整验收,未发送/补发/重投/入队短信,未作真实计费/供应商链路测试。测试系统盘78%、可用22,848,892,928字节,51目录容量清单和上一有效8e4bc5a组件保留;历史资产清理目标未完成。密码仅标准输入传递,不写入文件;原认证/路径/换行失败和等待不并入停机耗时。详见[最终发布记录](release-20260914-test-http-api.md)。预生产未操作,文档收尾提交不改变测试选定应用版本。 +## 2026-09-14 HTTP全量模拟链路验收计划 + +用户专项要求在测试环境全面测试HTTP正常/错误参数,并使用历史模拟通道模拟上行、回执和webhook。本轮仅测试,不扩展至预生产或真实供应商;不继承历史清理、重投授权。需求和业务设计不变,按HTTP整改方案及手册检验实现。 + +已核验本地/实际远端40c8e27、暂存区空,保护已有metrics/发布工具/文档。测试基线PG无pending/dispatching提交、Inbox均completed,六条LGST通道指向100.91.249.119:17900,三组只含这些模拟通道。使用新建本轮应用、签名、凭据和回调端点,现有客户/通道/余额不手工修改。测试正常费用从现有测试企业账户按原正价325计费并对账。 + +计划最多30条独立业务消息(请求/参数/查询不计消息数),常规新消息最高1条/秒,同键并发只检查幂等;虚拟号码限定13800001xxx、13000280xxx、18900280xxx,最多160个模拟Submit分片。覆盖四接口、鉴权/nonce/时间/body签名、DTO/幂等/权限/QPS、结果/上行查询分页隔离;回执与MO经过真实Gateway/PG/Redis;webhook覆盖HMAC、2xx、4xx、429/5xx重试、超时、重复事件和手工重试边界。独立HTTPS受控接收端仅接收本轮合成数据,不绕过服务端SSRF;临时接收端与模拟器测试后关闭,旧Tailscale17900转发保持。 + +单例观察上限90秒,自动重试按真实60秒退避,收尾排空最多180秒;未知目标/错误路由、账务不一致、重复Submit或持续积压即停止新增业务消息并保留证据,不清队列、不手动伪造ACK。尚未执行的场景不填通过,缺陷先记录和最小复现。 + + ## 2026-09-14 真实HTTP全量验收发现的Webhook DNS缺陷 测试环境 f0e8434 上,专用模拟应用已产生真实送达回执,但5个Webhook事件均在2次尝试后失败,lastError为 `Invalid IP address: undefined`,受控HTTPS接收端无请求。Node自动地址族选择以 `all=true` 调用自定义lookup,旧实现仍返回单地址三参数,违反回调契约。保留原SSRF解析、私网拒绝及地址固定,只按all选项返回固定地址数组或原单地址。未改变重试、计费、发送与租户规则。真实Node HTTPS连接旧实现失败/修正实现200,本地真实HTTP连接回归及API全量73套783项、类型构建通过;线上修复与Webhook全场景验收尚待标准发布完成。用户已另行授权本修复提交、推送及测试发布,不涉及预生产。完整结果将登记 [HTTP全量验收](http-api-full-acceptance-20260914.md)。 +### 2026-09-14 HTTP全量模拟验收阶段结果 + +已记录140项检查,9条真实模拟短信(8送达、1失败并退款)、6条上行(3matched/3ambiguous)、真实队列/计费对账完成。Webhook DNS callback最小修复92b112c已提交/推送/标准部署测试,精确候选782项通过。IPv6 URL500、日历日期自动归一化、body-parser错误契约3项待修。公网回调成功/状态码重试仍被测试机198.18.x.x代理DNS路径阻塞,固定真实公网IP的只读TLS探针200;正等待临时仅专用域名hosts映射授权,尚未改网络。详见[完整阶段记录](http-api-full-acceptance-20260914.md),不宣称全量通过。 + + ## 2026-09-14 HTTP全量验收后续修复与授权 用户已授权本轮全部已发现Bug的修复、复测、提交/推送、测试部署,以及仅测试机专用回调域名的临时hosts映射;映射有30分钟独立精确移除timer,验收结束主动移除。无默认网关/DNS服务/OpenWrt或预生产变更。12个既有本轮回调已真实HTTPS送达;200/204成功、400/302终止、429/503/超时重试、持续503上限及人工重试保护均通过,HMAC、eventId与60秒退避一致。 HTTP-FULL-B02:去除URL IPv6方括号后区分IP字面量与DNS,DNS失败转稳定400;同时规范化IPv4-mapped IPv6后复用私网校验,避免修复引入私网绕过。B03:先校验ISO8601年月日/闰年/时分秒/时区,拒绝Date自动归一化;覆盖query与cursor,不改变查询跨度和归属。B04:只对/api/openapi/v1/sms的body-parser已知错误输出统一problem+json和X-Request-Id,400/413/415正文固定,不泄露原始输入;非公开路径和未知错误继续原处理链。无迁移、短信链路、计费或权限规则变更。线上边界复测及最终收尾待新候选发布。 + + +## 2026-09-14 HTTP全量验收最终闭环 + +截至 2026-09-14T07:49:14.156Z,测试环境精确版本97d133442350b9725422ed4e55386f47e37004fd。HTTP-FULL-B01至B04已修复、提交、推送、标准发布并真实复验;74套809项精确候选测试、格式、Lint、类型、构建及安全门禁通过。235项真实请求/断言中229项通过,另6条原始非通过记录已分类并有复测,不删除失败历史。20条短信19送达/1预期失败退款,23个模拟CMPP Submit,21成功计费单位,净扣6825,余额1848101→1841276。7条上行3歧义隐藏/4匹配且ACK完成;24个Webhook事件22送达/2预设终止,31次真实HTTPS收件,签名、密钥轮换、状态码、退避、超时和人工重试均核验。三个Redis Stream pending/lag均0;本轮待办排空、三个应用停用/凭据撤销、receiver及隧道关闭、hosts原字节恢复。未操作预生产、真实运营商或其他客户配置。 + +完整矩阵、根因、发布恢复资产/容量与未执行项见 [HTTP全量验收报告](http-api-full-acceptance-20260914.md)。本段更新此前阶段性“待修/待授权/阻塞”状态,不将其当当前状态。