--- title: Checkpoint 2026-09-29 22:50:54 UTC [06e1b6eb09] type: checkpoint permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-29-22-50-54-utc-06e1b6eb09 stable_id: 766540ee-5b26-4fd8-be52-1782fd515a3d 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: m1-submit-ready-20260930-cd7a7e4 created_at: '2026-09-29T22:50:54.769615+00:00' updated_at: '2026-09-29T22:50:54.769615+00:00' tags: - ready-to-merge - m1 - line-M - feat/m1-submit --- # 检查点:M1 消息提交 ready-to-merge ## 完成内容 - 在 `internal/app/message` 实现 `App.Submit`(保留 Service 接口与 Stub):请求指纹防重、conflict、大小/目标/延迟定时互斥、成员或对话授权、回复授权、配额 `max_pending_per_sender`、速率桶(50/s 突发 100)、到点最小分发。 - 表驱动测试:防重命中、冲突、配额、授权、延迟/定时互斥、先防重再校验(对方停用仍返回原结果)、群分发去掉发送者、rate_limited。临时 SQLite。 - `docs/DEVIATIONS.md`「消息 M」四条。 ## 分支 / 路径 / 提交 - 分支:`feat/m1-submit` - 工作树:`E:/code/NixMsg-wt/m`(基于 origin/main `22c56d1`) - 提交:`cd7a7e4` feat: 实现消息提交防重配额授权与最小分发 - 已推送:`origin/feat/m1-submit`(未推 main) ## 验证 - `task check` 通过(web build、embeddist build、golangci-lint 0、go test ./... 含 message) - 工作区干净 ## 未完成的分发规则(留给 M2) - 停用成员投递 `rejected/endpoint_disabled` - 接收端 `queue_full` - `expire_at` / keep / 离线宽限 / `dropped offline` - 发送者不在群 / 无其他成员 → `completed` + reason - 无未完成投递时 `completed` 并删正文 - 回执写入 - 唤醒推送循环、推送窗口与确认超时 ## 其他偏差 - 突发容量固定 100;未改 `cmd/nixmsg`(仍 Stub) - 防重键在消息行已删时返回 `not_found` ## 下一步 - 总控可审阅合并 `feat/m1-submit`;接线时把 `wire.go` 的 `message.NewStub` 换成 `message.New` - M2 做完整 7.4/7.5 ## 给下个会话 - 只在 `E:/code/NixMsg-wt/m` 工作;勿改主工作区与 `cmd/nixmsg`/`internal/protocol` 帧/`internal/listener` - 标签 ready-to-merge