create: Checkpoint 2026-09-29 22:50:54 UTC [06e1b6eb09]

MemRelay-Operation: checkpoint-save:m1-submit-ready-20260930-cd7a7e4
MemRelay-Resource: 766540ee-5b26-4fd8-be52-1782fd515a3d
This commit is contained in:
2026-09-30 06:51:06 +08:00
parent 89deaa8ee2
commit b538ee30d1
@@ -0,0 +1,58 @@
---
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