验证状态:存在关键缺口,不可作为完整契约发布。Web 发布与中心设备服务的受理链(订阅、路由、消费者、应答发布)已源码核验;
server/{deviceNo}/iot/deliver/v1的最终读者是采集服务器,其源码不在本工作区,接收后行为与完成语义断链。 适用基线:源码归纳 @ 2026-09-14
采集服务器管理页「固件升级」按钮触发:请求中心为指定采集服务器编号生成固件上报数据,并把结果投递到该服务器的 server/{deviceNo}/iot/deliver/v1。本页是 server/{deviceNo}/iot/retrieve/v1(采集服务器变体)的唯一操作正本;设备变体 device/{deviceNo}/iot/retrieve/v1 见触发设备固件与文件上报,两者共用中心同一消费链,仅 topic 前缀与调用页面不同。
| 页面/功能 | items |
|---|---|
| 采集服务器列表·固件升级 | ["firmware"] |
对应 inventory operationId:mqtt-module-server-var-iot-retrieve-v1-c1db2bc6(合并交接时由整合票 20 认领并发布本正本)。
MQTT 发布 server/{serverNo}/iot/retrieve/v1(中心消费后把应答投递到采集服务器侧 server/{serverNo}/iot/deliver/v1,Web 不可见)— 请求中心为指定采集服务器生成固件上报数据并下发。
谓词族契约全量事实(identity ∈ device/server/user、汇入静态 RETRIEVE destination、消费方)见 MQTT 主题清单 · 谓词族与yaml 详解 · retrieve;应答信封与 deliver 投递链的业务语义见设备业务 · mqtt-bridge 设备消息链。载荷形态 {sub:"retrieve", id, reply, params:{items:[]}}——id 为 Web 伪装的采集服务器身份(server,{serverNo},iot,simulate-sending),reply 固定为 server/{serverNo}/iot/deliver/v1,items 本变体固定 ["firmware"]。
| 层级 | 判据 |
|---|---|
| 发布完成 | publishAsync Promise 成功;Web 随即 toast「操作成功/已发送新固件信息」——只代表 Broker 接收发布调用 |
| 中心受理 | 无 Web 可观察信号:应答发往采集服务器 topic,Web 不订阅;受理失败(如 id 非法)同样静默 |
| 采集服务器执行 | 不可观测:最终消费者源码不在工作区,收到 deliver 应答后的行为无任何回传 |
| 中心副作用 | 每次调用把 server,{deviceNo},iot 标记为在线并刷新最后在线时间,影响在线统计口径 |
internal error 应答(不回传原始异常);固件业务缺失(设备不存在、无固件包)不报错,而是成功应答内带 data.firmware.error 键——采集服务器如何处理这两种形态缺证。id 非法时中心仅记 error 日志,无应答、无重试。params.replyNumberMax/replyInterval 未由 Web 使用;若 App 设置,取值被钳制在 1-10 次、1-10 秒,且续发前检查该 id 前缀在线状态。server/{deviceNo}/iot/deliver/v1 的接收、固件下载/升级与失败重试行为缺证(最终消费者源码不在工作区)——本页因此标「存在关键缺口,不可作为完整契约发布」。