diff --git a/projects/25464650-ed5d-440e-b362-190f2852d451/Checkpoint 2026-09-30 07-48-01 UTC [74b75a5315].md b/projects/25464650-ed5d-440e-b362-190f2852d451/Checkpoint 2026-09-30 07-48-01 UTC [74b75a5315].md new file mode 100644 index 0000000..c686daf --- /dev/null +++ b/projects/25464650-ed5d-440e-b362-190f2852d451/Checkpoint 2026-09-30 07-48-01 UTC [74b75a5315].md @@ -0,0 +1,58 @@ +--- +title: Checkpoint 2026-09-30 07:48:01 UTC [74b75a5315] +type: checkpoint +permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-30-07-48-01-utc-74b75a5315 +stable_id: fc447801-da3d-43d2-a272-6048861a19b4 +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: nixmsg-c01-c03-a4e51ec-20260930 +created_at: '2026-09-30T07:48:01.548320+00:00' +updated_at: '2026-09-30T07:48:01.548320+00:00' +tags: +- ready-to-merge +- C-01 +- C-02 +- C-03 +- lane/message +- feat/fix-message-c01-c03 +--- + + +## 消息线复审 C-01 / C-02 / C-03 已完成并推送(未 merge main) + +- **线**:消息 M +- **任务**:C-01(#32)→ C-02(#33)→ C-03(#34) +- **工作树**:`E:\\code\\NixMsg-wt\\r2-c2` +- **分支**:`feat/fix-message-c01-c03`(已普通推送 origin,非 force,未合 main) +- **HEAD**:`a4e51ec` `fix: 按完成时刻分批清理并限制读连接池` +- **未 merge main**;未关 Gitea issues;未改 `PublishDown` 签名;停机等待留给 L-03 + +## 基线与合并 +1. `git worktree add -b feat/fix-message-c01-c03 E:\\code\\NixMsg-wt\\r2-c2 origin/feat/fix-message-c04-c07` +2. `git merge origin/feat/fix-broker-b01-b12` → `a485b52`(含 B-02 PacketID 大帧名额) +3. `git merge origin/feat/fix-store-d01-d05` → `825e13c`(含 D-02 Checkpoint) +- 冲突:DEVIATIONS 自动保留双方。未改 PublishDown。 + +## 提交 +- `eca4c83` fix: 仅向已握手连接推送并拆分调度循环(C-01;回执在途实现随 push.go 一并进入) +- `75f4647` fix: 回执按连接去重在途且不改可重复约定(C-02 测试 + DEVELOPMENT §10 receipt_ack 一句) +- `a4e51ec` fix: 按完成时刻分批清理并限制读连接池(C-03) + +## 完成内容(issue 统一方案) +1. **C-01**:只对 `LiveConn.Ready` / `handshook` 连接推送;每连接 cap-1 worker;`StartLoops` 拆分发/到期/小时清理;`messageLoops` 只调 `StartLoops` + 15s 采指标;删除 message 包 `largeSem`;`ErrBackpressure`/`ErrNotSubscribed`/`ErrNoConnection` 当发布失败(清标记、1s 重推);`RecoverOnStart` 不再 `DispatchDue`。 +2. **C-02**:`rcptInflight` 按连接去重;失败撤销;确认超时后才允许重发;重复 ack 不唤醒;`ReceiptAck` 成功才移出在途并唤醒。产品仍允许断线后重复。裸设备须 `receipt_ack` 或 `receipt:false`。 +3. **C-03**:`ExpireOnce` 500/批 + 僵尸宽限;`PurgeOnce` 分写操作后 `Queue.Checkpoint`;迁移 `0004_cleanup_indexes.sql`(避开 U-02 的 0003,原 0003/0005 合并改号):`completed_at` + 清理索引;收尾写 `completed_at`;清理 `COALESCE(completed_at, send_at)`;读池 MaxOpen=64 / MaxIdle=16 / idle 5m / `query_only`。`db_test.go` 仅计数 2→3、备份名 v1-to-v4。 + +## 验证 +`go test ./internal/app/message/ ./internal/broker/ ./cmd/nixmsg/ ./internal/store/ -count=1` 一次通过(message 1.7s / broker 6.3s / cmd/nixmsg 7.3s / store 1.5s)。 + +## 未做 / 给下个会话 +- 不要 merge main;不要强推 main;不要关 issue。 +- 不要占用 `E:\\code\\NixMsg-wt\\r2-c`(C-04–C-07)或删 `E:\\code\\NixMsg-wt\\fix3`。 +- serve 停机/WaitLoops 留给 L-03。 +- 总控可审阅后 ff-only 合 `feat/fix-message-c01-c03`(建议在 C-04–C-07、B-01–B-12、D-01–D-05 之后,本分支已 merge 后两者与 C-04–C-07)。 +- 标签:ready-to-merge