--- title: Checkpoint 2026-09-29 23:24:00 UTC [1c873d5e0b] type: checkpoint permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-29-23-24-00-utc-1c873d5e0b stable_id: c42e5f81-e06a-432b-b9be-64f7f9ec4d5c scope: project memory_type: checkpoint project_id: 25464650-ed5d-440e-b362-190f2852d451 usage_profile_id: 0c9feb46-d06e-43cd-9ef0-c5813c84a998 status: active revision: 1 request_id: m-delivery-m2m3m4-20260930-ready created_at: '2026-09-29T23:24:00.669438+00:00' updated_at: '2026-09-29T23:24:00.669438+00:00' tags: - ready-to-merge - line-M - M2 - M3 - M4 --- # 消息线 M2–M4 完成 - 分支:`feat/m-delivery` - 工作树:`e:\code\NixMsg-wt\m2` - 基于:`origin/main` `d357082` - 提交:`9b053fd feat: 实现消息分发推送确认撤回与启动恢复` - 验证:`task check` 通过(含 message 包表驱动测试:宽限、保留到期、确认超时两种、撤回竞态、防重、启动恢复等) - DEVIATIONS:已写「消息 M」M2/M3/M4 节,保留其他线节 - 未接真实 MQTT:`Downlink`/`ConnRegistry` 可注入;测试用 `RecordingDownlink`+`MemoryConns`;未改 `cmd/nixmsg`/`wire.go`;调度/清理循环需接线方调用 `DispatchDue`/`PushPending`/`CleanupOnce` ## 给下个会话 - 总控按第 7 节审阅后 ff-only 合并;本分支已推送、工作区干净 - 接线:握手/断线调 `OnHandshakeComplete`/`OnDisconnect`;`OnPublishDropped` 转 `App`;启调度与清理循环