Compare commits
258
Commits
0f43b25241
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
65065042af | ||
|
|
d2044a2337 | ||
|
|
069a122c9b | ||
|
|
1ef3dc2b00 | ||
|
|
bd332c0804 | ||
|
|
d1d4155754 | ||
|
|
8b75c486d1 | ||
|
|
9f9b943959 | ||
|
|
63c1d78fb1 | ||
|
|
a94cc5775e | ||
|
|
f6b7b57915 | ||
|
|
b768ee1c98 | ||
|
|
d9804b5542 | ||
|
|
3e760e8af5 | ||
|
|
86ca7db467 | ||
|
|
12afc3b549 | ||
|
|
66e342c173 | ||
|
|
0fd418a2ba | ||
|
|
f75062b445 | ||
|
|
a86c54ec2f | ||
|
|
a8d7fac956 | ||
|
|
90e46c6ee8 | ||
|
|
a7f40aa8e3 | ||
|
|
cdbea5b773 | ||
|
|
7547bb7211 | ||
|
|
f5941cdba3 | ||
|
|
f2eb46d217 | ||
|
|
c8de7be73e | ||
|
|
a0b156b3c7 | ||
|
|
fc7e97517b | ||
|
|
3e09a5f2cc | ||
|
|
978cebb291 | ||
|
|
55eacd66b3 | ||
|
|
b41307bc8d | ||
|
|
2b1329d0e5 | ||
|
|
194032ddaa | ||
|
|
6aea8a35b5 | ||
|
|
30bf0b0ccc | ||
|
|
93c7713489 | ||
|
|
d467526b14 | ||
|
|
c66b576bc1 | ||
|
|
80964c5035 | ||
|
|
be26e34ea8 | ||
|
|
b8fa264b98 | ||
|
|
7770ae74cd | ||
|
|
ae532aed3a | ||
|
|
fa50be02dc | ||
|
|
55b8317579 | ||
|
|
bc46d5f8bd | ||
|
|
b73900b969 | ||
|
|
731605068d | ||
|
|
6bb1f282fb | ||
|
|
325b99b157 | ||
|
|
c4c6b5b37a | ||
|
|
68b355fe24 | ||
|
|
2dd4d20aab | ||
|
|
126a47fd0c | ||
|
|
ce517001b1 | ||
|
|
d1af7b1bf2 | ||
|
|
09d8f6fe12 | ||
|
|
1d0a0bf2e8 | ||
|
|
7855239b0c | ||
|
|
f4080d9d3e | ||
|
|
9975e37df5 | ||
|
|
f75177e8b2 | ||
|
|
75db2061f6 | ||
|
|
48f5169d1e | ||
|
|
73af6725e1 | ||
|
|
f93b407c03 | ||
|
|
ef3699ab53 | ||
|
|
12b314af81 | ||
|
|
d5b85ba6ca | ||
|
|
35a1aebf8a | ||
|
|
753637e91c | ||
|
|
dbe4b1bf81 | ||
|
|
8c797bfb87 | ||
|
|
6e4d78c2f9 | ||
|
|
d6c89020fe | ||
|
|
ff7a40d5d3 | ||
|
|
a65f36f4e2 | ||
|
|
8dfc19d9e9 | ||
|
|
6c4d30960d | ||
|
|
7bd50740fb | ||
|
|
98e2155103 | ||
|
|
610151bd58 | ||
|
|
2e24907e1b | ||
|
|
400fc8cbce | ||
|
|
d34ebb5623 | ||
|
|
b538ee30d1 | ||
|
|
89deaa8ee2 | ||
|
|
bbfc987165 | ||
|
|
8773d1291e | ||
|
|
c357a01cea | ||
|
|
f88cf18944 | ||
|
|
4818cea38c | ||
|
|
d595a1b7c8 | ||
|
|
9b0436dce8 | ||
|
|
c48ad0e26b | ||
|
|
6707eaec56 | ||
|
|
de8e6f2391 | ||
|
|
93f42aa588 | ||
|
|
8e64dbe91f | ||
|
|
c81ddeefab | ||
|
|
355f0d49fb | ||
|
|
8696aa34a5 | ||
|
|
da04e4cc94 | ||
|
|
422a672174 | ||
|
|
5eda644630 | ||
|
|
6cc9f92c33 | ||
|
|
de29a14504 | ||
|
|
950183d97b | ||
|
|
c8a7e99395 | ||
|
|
2d47e25cc5 | ||
|
|
2687dc1465 | ||
|
|
90398a984a | ||
|
|
3a7f226115 | ||
|
|
873e01e8d1 | ||
|
|
445c5d3c25 | ||
|
|
a1595a0a64 | ||
|
|
b0a4eb5d3a | ||
|
|
b26a0fbd86 | ||
|
|
d17bccd61e | ||
|
|
e0cee30e63 | ||
|
|
06a5c1c208 | ||
|
|
e629f2bae6 | ||
|
|
f9d633c4f9 | ||
|
|
a265959441 | ||
|
|
60074a0050 | ||
|
|
650f46b1ae | ||
|
|
0a83e60dc6 | ||
|
|
888fff2894 | ||
|
|
f2783a5300 | ||
|
|
06e933d0aa | ||
|
|
c88e7bd9d9 | ||
|
|
e485fec733 | ||
|
|
953985ed64 | ||
|
|
ad1b9582aa | ||
|
|
fba18d5148 | ||
|
|
d6b9d3d77e | ||
|
|
5ae2ae717c | ||
|
|
73d075e18e | ||
|
|
b5f77e3170 | ||
|
|
7f71e66ac8 | ||
|
|
8123b442b5 | ||
|
|
6dedb796eb | ||
|
|
e08ae1d9b4 | ||
|
|
da0d978d32 | ||
|
|
42b844dea3 | ||
|
|
a1a5f7ac51 | ||
|
|
e0da50bb27 | ||
|
|
a92b3f30cc | ||
|
|
31a1b16c8a | ||
|
|
936b74719c | ||
|
|
fa76e96da3 | ||
|
|
4748c74663 | ||
|
|
fbcd116ca8 | ||
|
|
3e665a9b94 | ||
|
|
df10209989 | ||
|
|
65c18760e6 | ||
|
|
9b4144e0c0 | ||
|
|
98b8612a28 | ||
|
|
78ec6b785f | ||
|
|
14bf879358 | ||
|
|
f83b71bb56 | ||
|
|
59124d48e0 | ||
|
|
4c0c87fd76 | ||
|
|
dd391a92cd | ||
|
|
c9f33ccd66 | ||
|
|
6ab8337bc0 | ||
|
|
3537a4732a | ||
|
|
52f42483be | ||
|
|
bc320c46e4 | ||
|
|
969bee8aea | ||
|
|
035d6023f8 | ||
|
|
76e8f4f7a4 | ||
|
|
5e926bd737 | ||
|
|
e786158d94 | ||
|
|
f3bfab3516 | ||
|
|
3d05da226b | ||
|
|
ca70266c9c | ||
|
|
134644ab41 | ||
|
|
1770cf498a | ||
|
|
ef6c63deef | ||
|
|
fd0cc0b201 | ||
|
|
547a185a96 | ||
|
|
c9f6811f05 | ||
|
|
abb312adce | ||
|
|
af65bf6f5d | ||
|
|
4cc7b8721b | ||
|
|
85a5ff20db | ||
|
|
90660e5b59 | ||
|
|
7d89a83c61 | ||
|
|
e5290b7f80 | ||
|
|
dbf9591e29 | ||
|
|
67d153496a | ||
|
|
a651f20424 | ||
|
|
85fd8d535e | ||
|
|
04e3dbf5c8 | ||
|
|
a33c40d48c | ||
|
|
0b15eeee96 | ||
|
|
7b0f7b6e39 | ||
|
|
ee008e93a5 | ||
|
|
2a77aaf6a2 | ||
|
|
612ac92d8b | ||
|
|
e2b34e17a4 | ||
|
|
e85b4620c9 | ||
|
|
111518447f | ||
|
|
91986e2974 | ||
|
|
366d2b239e | ||
|
|
857c80a4f2 | ||
|
|
fa15eb7c6b | ||
|
|
0db1a25f71 | ||
|
|
57d38c3c9b | ||
|
|
179dd4ce6a | ||
|
|
4f5e68347a | ||
|
|
c84227da52 | ||
|
|
c476769e0d | ||
|
|
00dc848861 | ||
|
|
0d007b969e | ||
|
|
8c8a3ff37d | ||
|
|
28037b6b4a | ||
|
|
048945bf16 | ||
|
|
32ed152a16 | ||
|
|
a6f612d31c | ||
|
|
11af2d430f | ||
|
|
0530892b73 | ||
|
|
3b7e043dbb | ||
|
|
6db6ecf49c | ||
|
|
7ac3289356 | ||
|
|
9e5b59010f | ||
|
|
345079b00a | ||
|
|
def18de1b8 | ||
|
|
6e65683833 | ||
|
|
3dc4512844 | ||
|
|
faf39271c4 | ||
|
|
5977d3b18d | ||
|
|
5dcba770a0 | ||
|
|
640218fcfb | ||
|
|
23a84f02b2 | ||
|
|
7212d53a23 | ||
|
|
5efe7691ca | ||
|
|
494df8efe0 | ||
|
|
4bd7a7ed37 | ||
|
|
cab6ca46cc | ||
|
|
9992baf0a5 | ||
|
|
4fb256c5d5 | ||
|
|
bc464fed47 | ||
|
|
cede49eee2 | ||
|
|
c1c9021d8e | ||
|
|
3a86fd5cfb | ||
|
|
b801a6452a | ||
|
|
25a0089975 | ||
|
|
ae244f5cf8 | ||
|
|
3f3a466a73 | ||
|
|
a87a2601fd | ||
|
|
63a751d312 | ||
|
|
32b9b15954 | ||
|
|
6d76f19dcb |
@@ -0,0 +1,29 @@
|
||||
---
|
||||
title: 'Gitea 批量创建 issue 与 #n 引用链接'
|
||||
type: experience
|
||||
permalink: main/global/gitea-批量创建-issue-与-n-引用链接
|
||||
stable_id: 7bf4d88e-2e2d-48bf-9d0c-9f85cf89c60d
|
||||
scope: global
|
||||
memory_type: experience
|
||||
project_id: null
|
||||
usage_profile_id: 0c9feb46-d06e-43cd-9ef0-c5813c84a998
|
||||
status: active
|
||||
revision: 1
|
||||
request_id: global-exp-gitea-bulk-issues-20260930-a1
|
||||
created_at: '2026-09-30T06:04:10.405927+00:00'
|
||||
updated_at: '2026-09-30T06:04:10.405927+00:00'
|
||||
tags:
|
||||
- gitea
|
||||
- issues
|
||||
- api
|
||||
- markdown
|
||||
---
|
||||
|
||||
- issue 正文按评论模式渲染。#n 只有在前面是空白、行首或半角 ( [ 时才会自动链接;全角括号「(#8)」不会链接,要写成「 (#8)」。
|
||||
- 可以用 POST /api/v1/markdown(Mode=comment,Context=仓库完整 URL)预先验证渲染效果;Mode=gfm 不解析 issue 引用。
|
||||
- 批量建 issue 的稳妥流程:
|
||||
1. 凭据用 git credential fill 取出后拼 Basic auth,不写进命令行或文件。
|
||||
2. 每建一个 issue 就把「编号→issue 号」落盘,脚本可以幂等重跑。
|
||||
3. 先建占位总览拿到编号,再建各子 issue,最后二次 PATCH 回填依赖编号和总览表格。
|
||||
4. 改写已有 issue 前,先把原正文保存到本地;新正文里用 details 折叠保留原文。
|
||||
- 仓库没有任何标签时,GET /labels 可能返回 null,需要先过滤空值。
|
||||
@@ -0,0 +1,26 @@
|
||||
---
|
||||
title: Windows PowerShell 5.1 脚本与中文:脚本保持纯 ASCII,中文放 UTF-8 文件
|
||||
type: experience
|
||||
permalink: main/global/windows-power-shell-5.1-脚本与中文脚本保持纯-ascii-中文放-utf-8-文件
|
||||
stable_id: b1d6b466-629c-45dc-b041-652e2c2925ae
|
||||
scope: global
|
||||
memory_type: experience
|
||||
project_id: null
|
||||
usage_profile_id: 0c9feb46-d06e-43cd-9ef0-c5813c84a998
|
||||
status: active
|
||||
revision: 1
|
||||
request_id: global-exp-ps51-encoding-20260930-a1
|
||||
created_at: '2026-09-30T06:04:05.431813+00:00'
|
||||
updated_at: '2026-09-30T06:04:05.431813+00:00'
|
||||
tags:
|
||||
- powershell
|
||||
- windows
|
||||
- encoding
|
||||
- utf-8
|
||||
---
|
||||
|
||||
- Windows PowerShell 5.1 按系统代码页(中文 Windows 为 GBK)解析无 BOM 的 .ps1。脚本里的中文字面量会乱码,甚至引发解析错误(字符串被截断、括号不配对)。命令行里直接写的中文正则同样会被破坏。
|
||||
- 做法:.ps1 只写 ASCII;中文放 UTF-8 的模板或 JSON 文件,用 [IO.File]::ReadAllText(path, [Text.Encoding]::UTF8) 读取;写文件用 [IO.File]::WriteAllText(path, text, (New-Object Text.UTF8Encoding($false)))。另一种办法是给 .ps1 加 UTF-8 BOM。
|
||||
- 5.1 下 Add-Content / Out-File 的默认编码不是 UTF-8,追加到 Go 等 UTF-8 源码会导致 invalid UTF-8 encoding。
|
||||
- 管道里的 Select-Object -First N 会提前终止上游(包括子 powershell 进程)。不要用它截断仍在执行写操作的脚本的输出,应让脚本跑完或把输出写到文件。
|
||||
- for 循环语句不能直接接管道;需要管道时用 ForEach-Object 或先收集到变量。
|
||||
@@ -1,17 +0,0 @@
|
||||
---
|
||||
title: 暂不启用MemRelay AI自动整理
|
||||
type: preference
|
||||
permalink: main/global/暂不启用-mem-relay-ai-自动整理
|
||||
stable_id: 57d22ec2-5a66-441e-b012-829a8f9c5cd9
|
||||
scope: global
|
||||
memory_type: preference
|
||||
project_id: null
|
||||
usage_profile_id: 0c9feb46-d06e-43cd-9ef0-c5813c84a998
|
||||
status: active
|
||||
revision: 1
|
||||
request_id: memrelay-ai-disabled-20260924
|
||||
created_at: '2026-09-23T22:10:40.365387+00:00'
|
||||
updated_at: '2026-09-23T22:10:40.365387+00:00'
|
||||
---
|
||||
|
||||
2026-09-24用户要求暂停AI功能,先同步已有记忆并核验清理本地副本。MemRelay AI自动整理保持关闭,未经用户后续明确要求不启用;普通记忆读写继续使用。
|
||||
@@ -76,6 +76,106 @@
|
||||
"created_at": "2026-09-23T14:45:04.261794+00:00",
|
||||
"updated_at": "2026-09-23T14:45:04.261812+00:00"
|
||||
},
|
||||
{
|
||||
"id": "25464650-ed5d-440e-b362-190f2852d451",
|
||||
"name": "NixMsg",
|
||||
"slug": "nixmsg",
|
||||
"git_remote": null,
|
||||
"workspace_type": "development",
|
||||
"archived": false,
|
||||
"aliases": [
|
||||
{
|
||||
"kind": "directory",
|
||||
"value": "e:/code/nixmsg"
|
||||
},
|
||||
{
|
||||
"kind": "directory",
|
||||
"value": "e:/code/nixmsg-wt/t01"
|
||||
},
|
||||
{
|
||||
"kind": "directory",
|
||||
"value": "e:/code/nixmsg-wt/t02"
|
||||
},
|
||||
{
|
||||
"kind": "directory",
|
||||
"value": "e:/code/nixmsg-wt/t03"
|
||||
},
|
||||
{
|
||||
"kind": "directory",
|
||||
"value": "e:/code/nixmsg-wt/t05"
|
||||
},
|
||||
{
|
||||
"kind": "directory",
|
||||
"value": "e:/code/nixmsg-wt/t04"
|
||||
},
|
||||
{
|
||||
"kind": "directory",
|
||||
"value": "e:/code/nixmsg-wt/p"
|
||||
},
|
||||
{
|
||||
"kind": "directory",
|
||||
"value": "e:/code/nixmsg-wt/m"
|
||||
},
|
||||
{
|
||||
"kind": "directory",
|
||||
"value": "e:/code/nixmsg-wt/w"
|
||||
},
|
||||
{
|
||||
"kind": "directory",
|
||||
"value": "e:/code/nixmsg-wt/s1"
|
||||
},
|
||||
{
|
||||
"kind": "directory",
|
||||
"value": "e:/code/nixmsg-wt/s2"
|
||||
},
|
||||
{
|
||||
"kind": "directory",
|
||||
"value": "e:/code/nixmsg-wt/accept"
|
||||
},
|
||||
{
|
||||
"kind": "directory",
|
||||
"value": "e:/code/nixmsg-wt/r2-h"
|
||||
},
|
||||
{
|
||||
"kind": "directory",
|
||||
"value": "e:/code/nixmsg-wt/r2-k"
|
||||
},
|
||||
{
|
||||
"kind": "directory",
|
||||
"value": "e:/code/nixmsg-wt/r3-66"
|
||||
},
|
||||
{
|
||||
"kind": "directory",
|
||||
"value": "e:/code/nixmsg-wt/r3-68"
|
||||
},
|
||||
{
|
||||
"kind": "directory",
|
||||
"value": "e:/code/nixmsg-wt/r3-70"
|
||||
},
|
||||
{
|
||||
"kind": "directory",
|
||||
"value": "e:/code/nixmsg-wt/r3-72"
|
||||
}
|
||||
],
|
||||
"created_at": "2026-09-29T15:42:27.642284+00:00",
|
||||
"updated_at": "2026-09-29T15:42:27.642301+00:00"
|
||||
},
|
||||
{
|
||||
"id": "280dd2a0-d23d-4a71-91e1-dce4353163be",
|
||||
"name": "RapDrama",
|
||||
"slug": "rapdrama",
|
||||
"git_remote": null,
|
||||
"workspace_type": "general",
|
||||
"archived": false,
|
||||
"aliases": [
|
||||
{
|
||||
"kind": "directory",
|
||||
"value": "e:/code/rapdrama"
|
||||
}
|
||||
],
|
||||
"created_at": "2026-09-24T18:06:18.592630+00:00",
|
||||
"updated_at": "2026-09-24T18:06:18.592647+00:00"
|
||||
},
|
||||
{
|
||||
"id": "4111f53b-afa5-48e1-aaf8-d70a7edc0638",
|
||||
"name": "Age of Empires III EditTools",
|
||||
@@ -476,6 +576,22 @@
|
||||
"created_at": "2026-09-23T14:45:04.457537+00:00",
|
||||
"updated_at": "2026-09-23T14:45:04.457554+00:00"
|
||||
},
|
||||
{
|
||||
"id": "edd08c64-97c3-47f2-9d10-224833752a50",
|
||||
"name": "Cloudflare Worker",
|
||||
"slug": "cloudflare-worker",
|
||||
"git_remote": null,
|
||||
"workspace_type": "general",
|
||||
"archived": false,
|
||||
"aliases": [
|
||||
{
|
||||
"kind": "directory",
|
||||
"value": "e:/code/cloudflare worker"
|
||||
}
|
||||
],
|
||||
"created_at": "2026-09-29T03:49:25.599082+00:00",
|
||||
"updated_at": "2026-09-29T03:49:25.599099+00:00"
|
||||
},
|
||||
{
|
||||
"id": "f1812459-8630-4306-98e0-8a44e8d137d9",
|
||||
"name": "AIRules",
|
||||
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-23 22:17:22 UTC [f164eaea6c]
|
||||
type: checkpoint
|
||||
permalink: main/projects/132cd958-cd54-4449-9415-4608fd985a82/checkpoint-2026-09-23-22-17-22-utc-f164eaea6c
|
||||
stable_id: 5e5bcdee-aee0-43ba-b65a-00d923bbd1cd
|
||||
scope: project
|
||||
memory_type: checkpoint
|
||||
project_id: 132cd958-cd54-4449-9415-4608fd985a82
|
||||
usage_profile_id: 0c9feb46-d06e-43cd-9ef0-c5813c84a998
|
||||
status: active
|
||||
revision: 1
|
||||
request_id: capacityreport-initial-push-20260924
|
||||
created_at: '2026-09-23T22:17:22.760313+00:00'
|
||||
updated_at: '2026-09-23T22:17:22.760313+00:00'
|
||||
tags:
|
||||
- git
|
||||
- initial
|
||||
---
|
||||
|
||||
|
||||
## 2026-09-24 代码仓库初始推送
|
||||
- 完成:将 E:/code/capacityreport 初始提交并推送到 https://git.asio.asia/Metrix/CapacityReport.git 的 main。
|
||||
- 提交:89cca70,feat: 导入 CapacityReport 初始源码,作者 Nixevol <guaotiantang@outlook.com>,134 个文件。
|
||||
- 原因:Gitea 仓库为空,本地目录尚未初始化 Git。
|
||||
- 处理:排除 .env、auth.ini、api_tokens.json、license.dat、node_modules 和 aidocs;.gitignore 补充 aidocs/。计划文档里的 SFTP 口令已清空,不写入仓库。
|
||||
- 仍在仓库中的部署默认值:Configure.json 本地库口令、packaging 中 MySQL/SFTP 默认口令。这些是项目原有编排默认值,已随源码推送到私有仓库。
|
||||
- 验证:git push 成功,main 跟踪 origin/main。
|
||||
- 下一步:Metrix 主仓已以子模块引用本提交。
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-29 15:44:11 UTC [6720a64a9c]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-29-15-44-11-utc-6720a64a9c
|
||||
stable_id: 890af45e-b976-40a1-964d-a388cfc1b89f
|
||||
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-ckpt-20260929-1544
|
||||
created_at: '2026-09-29T15:44:11.561647+00:00'
|
||||
updated_at: '2026-09-29T15:44:11.561647+00:00'
|
||||
tags:
|
||||
- nixmsg
|
||||
- design
|
||||
---
|
||||
|
||||
完成:记录 NixMsg 产品需求(设备互发、在线列表、单设备在线查询、单端口按 tag 通讯、设备密码、跨语言 SDK)。仓库 e:\\code\\NixMsg 为空目录,尚未 git init。
|
||||
原因:用户要求技术选型建议,并询问 MQTT 能否减少开发与维护。
|
||||
建议(未经用户确认,不得当作已裁定决定):数据面用 Mosquitto(MQTT over WebSocket),管理面用很薄的 FastAPI 做设备注册、密码和在线查询;对外用反向代理合并为一个端口;SDK 包装官方 MQTT 客户端,对外只暴露 connect/publish/subscribe/send/isOnline。EMQX 仅在需要现成控制台或上万连接时再考虑。若只有少量服务进程且以请求-响应为主、不需要离线补发,自研 Go WebSocket Hub 更轻。
|
||||
验证:未写代码,无可运行验证。
|
||||
下一步:等用户确认数据面方案后再搭骨架。确认前需要知道:是否有资源很小的嵌入式设备;对方不在线时消息要不要先存着补发。
|
||||
给下个会话:项目 ID 25464650-ed5d-440e-b362-190f2852d451,目录 e:\\code\\NixMsg,需求记忆 9cea62eb-5435-4fb1-af51-9699bb182b1a。不要把未确认的 MQTT 建议写成已裁定决定。不要为假设规模引入 EMQX 集群或规则引擎。
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-29 15:52:48 UTC [2365e8d4b5]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-29-15-52-48-utc-2365e8d4b5
|
||||
stable_id: de804d80-c991-45b0-ae0b-9b07f573f022
|
||||
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-ckpt-20260929-1552b
|
||||
created_at: '2026-09-29T15:52:48.620315+00:00'
|
||||
updated_at: '2026-09-29T15:52:48.620315+00:00'
|
||||
tags:
|
||||
- nixmsg
|
||||
- design
|
||||
---
|
||||
|
||||
完成:用户补充并已写入需求(记忆 9cea62eb-5435-4fb1-af51-9699bb182b1a revision 2)。单机不做集群;设备 1000 以内,可能有嵌入式;发送时可选择对方不在线是否保留;离线消息必须有过期时间,超时销毁;弱网也要尽量送达。
|
||||
原因:数据面仍用 MQTT,离线邮箱用自己的 SQLite,不能只靠 broker 会话队列。
|
||||
建议(尚未经用户明确说开工,不得当作已裁定决定):单机 Docker Compose。Mosquitto 负责在线长连接与 QoS 1 重传。FastAPI 加 SQLite 负责设备密码、在线查询,以及可选离线邮箱(按消息 TTL,上线后按序补发,超时删除)。对外一个 WebSocket 端口;极小嵌入式若跑不动 WebSocket,再单独开 1883。传达语义是至少一次,消息带 ID 供接收方去重。在线抖动靠 MQTT 重传;已经离线且选择保留时才进 SQLite。不要用 EMQX,不要做集群。
|
||||
验证:未写代码。
|
||||
下一步:等用户说开工后再搭 Docker Compose 骨架。
|
||||
给下个会话:项目 ID 25464650-ed5d-440e-b362-190f2852d451,目录 e:/code/NixMsg,仓库仍为空。
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-29 15:55:01 UTC [a883cdb54c]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-29-15-55-01-utc-a883cdb54c
|
||||
stable_id: 4b8a0222-20d3-4531-98b1-4b735b3ef70e
|
||||
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-ckpt-20260929-1555
|
||||
created_at: '2026-09-29T15:55:01.068377+00:00'
|
||||
updated_at: '2026-09-29T15:55:01.068377+00:00'
|
||||
tags:
|
||||
- nixmsg
|
||||
- design
|
||||
---
|
||||
|
||||
完成:用户询问离线邮箱能否改用 Redis。已回复建议:单机、1000 设备以内,离线消息是唯一副本,继续用 SQLite。Redis 只能替换邮箱存储,在线传输仍然是 Mosquitto;若改用必须开 AOF,每条消息的 TTL 仍要自己扫,代码量差不多,多一个服务。仅当机器已有 Redis,或管理服务要多进程共享邮箱时再换。
|
||||
原因:用户对 SQLite 选型有疑问。
|
||||
验证:未写代码。
|
||||
下一步:等用户确认邮箱用 SQLite 还是 Redis,再说是否开工。未确认前不要把 Redis 写成已裁定决定。
|
||||
给下个会话:项目 ID 25464650-ed5d-440e-b362-190f2852d451,目录 e:/code/NixMsg,需求记忆 9cea62eb-5435-4fb1-af51-9699bb182b1a revision 2。
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-29 16:02:32 UTC [3077498558]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-29-16-02-32-utc-3077498558
|
||||
stable_id: c8d1788e-e33a-46b2-a2f6-49dacaf90bb6
|
||||
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-ckpt-20260930-0002
|
||||
created_at: '2026-09-29T16:02:32.204083+00:00'
|
||||
updated_at: '2026-09-29T16:02:32.204083+00:00'
|
||||
tags:
|
||||
- nixmsg
|
||||
- design
|
||||
---
|
||||
|
||||
完成:用户衡量 SQLite 能否承担撤回、定时发送、固定延迟窗口。需求已更新(记忆 9cea62eb-5435-4fb1-af51-9699bb182b1a revision 3)。
|
||||
结论(尚未开工):SQLite 仍适合。三条都是同一张消息表上的状态:pending(未到 send_at)、offline_hold(到点不在线且保留)、delivering(已交给在线连接、等确认)、accepted、recalled、expired、dropped。延迟和定时都是 send_at;相对延迟由服务器时钟计算。离线保留时间从开始投递的那一刻起算。未出服务器的撤回用条件更新保证成功;已推到设备但未确认的撤回与确认谁先到算谁。tag 的订阅者在到点发送时再解析。单进程轮询到期消息即可,1000 设备不需要 Redis。
|
||||
验证:未写代码。
|
||||
下一步:等用户确认这套状态语义,尤其是离线保留从投递时刻起算、以及已推送未确认时撤回是争赛。确认后再开工。
|
||||
给下个会话:项目 ID 25464650-ed5d-440e-b362-190f2852d451,目录 e:/code/NixMsg,仓库仍为空。
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-29 16:06:29 UTC [08073ae1eb]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-29-16-06-29-utc-08073ae1eb
|
||||
stable_id: 65eabb18-364f-417f-8fe6-af9ba0db2cb6
|
||||
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-ckpt-20260930-0006
|
||||
created_at: '2026-09-29T16:06:29.829347+00:00'
|
||||
updated_at: '2026-09-29T16:06:29.829347+00:00'
|
||||
tags:
|
||||
- nixmsg
|
||||
- design
|
||||
---
|
||||
|
||||
完成:用户明确参与者是对等的端,每个端有标识,可组群,群成员看共同消息。需求已更新到 revision 5(记忆 9cea62eb-5435-4fb1-af51-9699bb182b1a)。
|
||||
建议语义(未开工,未当作已裁定的实现承诺之外的产品默认):地址只有端和群。群消息在 SQLite 只存一份,每个成员一条投递状态。群主是建群的端。到点发送时按当时成员生成投递。入群前的消息不补。选择保留时,离线成员上线后读到同一条;过期和撤回作用在这一份上。已经确认的成员不能被撤回成功,接口返回这些端。单聊规则不变。SQLite 仍然合适。
|
||||
验证:未写代码。
|
||||
下一步:等用户确认群主、入群前不补历史、群消息只存一份这三项默认,再开工。
|
||||
给下个会话:项目 ID 25464650-ed5d-440e-b362-190f2852d451,目录 e:/code/NixMsg,仓库仍为空。
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-29 18:08:46 UTC [8e22c33c2c]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-29-18-08-46-utc-8e22c33c2c
|
||||
stable_id: 66798f1b-3270-4902-917d-539d9c68fb76
|
||||
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-ckpt-20260930-0208
|
||||
created_at: '2026-09-29T18:08:46.069659+00:00'
|
||||
updated_at: '2026-09-29T18:08:46.069659+00:00'
|
||||
tags:
|
||||
- nixmsg
|
||||
- prd
|
||||
- handoff
|
||||
---
|
||||
|
||||
完成:用户要求在 e:/code/NixMsg/docs 下写 PRD 和开发文档(不写代码,交给 Grok 开发组开发,完成后回来审核),写前先用通俗问题每轮 1-2 个确认边界。已问两轮,确认内容在记忆 de0503ed-3d77-400d-a0bb-bbe44371f906(revision 2):程序和人都会用;登录密码和对话密码都要;对话密码输对一次就记住,对方改密码后所有人重新输。
|
||||
中断点:问到“送达后服务器要不要留历史”时,用户说先停,有些问题之前给过答案,要把资料发过来。历史问题尚未回答。
|
||||
待问(视用户资料决定是否还要问):送达后是否保留历史;是否发图片或文件及单条大小;嵌入式设备能否跑 WebSocket(不能则需要 MQTT/TCP 接入);第一批 SDK 语言;是否要网页管理后台。
|
||||
未与用户讨论的技术判断:加上定时、延迟、撤回、对话密码和群消息后,每条消息都必须经过自己的服务,独立 MQTT broker 的价值变小;若嵌入式都能跑 WebSocket,倾向改为自研单进程 WebSocket 服务加 SQLite。写入文档前需向用户说明这一变化。
|
||||
验证:尚未写文档。docs 目录还不存在,仓库不是 Git 仓库。
|
||||
下一步:等用户发来之前的答案,对照后只问仍未解决的问题,再写 docs/PRD.md 和开发文档。
|
||||
给下个会话:项目 ID 25464650-ed5d-440e-b362-190f2852d451;需求记忆 9cea62eb-5435-4fb1-af51-9699bb182b1a revision 5。不要重复问用户已经回答过的问题。
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-29 19:39:50 UTC [7606d37caa]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-29-19-39-50-utc-7606d37caa
|
||||
stable_id: d1e16266-bff0-4672-ac87-c677895e2783
|
||||
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-ckpt-20260930-docs-start
|
||||
created_at: '2026-09-29T19:39:50.553619+00:00'
|
||||
updated_at: '2026-09-29T19:39:50.553619+00:00'
|
||||
tags:
|
||||
- nixmsg
|
||||
- prd
|
||||
---
|
||||
|
||||
完成:用户要求接上 t.md 的设计思考,把 PRD 和开发文档写入 e:/code/NixMsg/docs,不写代码。单条消息上限已改为 256 KB,不做分块和断点续传;大文件以后用上传后发链接,本期不做。
|
||||
原因:文档要交给 Grok 开发组实现,完成后回来审核。
|
||||
已确认边界见记忆 de0503ed-3d77-400d-a0bb-bbe44371f906 revision 6。文档里单独标出未逐条口头确认、按设计默认写入的条款,供用户复核。
|
||||
验证:文档写完后再对照已推翻的决定(多设备同时登录、分块、服务器历史)做一次检查。
|
||||
下一步:写 docs/PRD.md 与 docs/DEVELOPMENT.md。t.md 是草稿,不当规范。
|
||||
给下个会话:项目 ID 25464650-ed5d-440e-b362-190f2852d451。
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-29 19:44:39 UTC [63a4deb4cf]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-29-19-44-39-utc-63a4deb4cf
|
||||
stable_id: 5a6ff1ec-0640-48b2-b183-e260a07b57de
|
||||
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-ckpt-20260930-docs-done
|
||||
created_at: '2026-09-29T19:44:39.672133+00:00'
|
||||
updated_at: '2026-09-29T19:44:39.672133+00:00'
|
||||
tags:
|
||||
- nixmsg
|
||||
- prd
|
||||
- handoff
|
||||
---
|
||||
|
||||
完成:已写 docs/PRD.md 与 docs/DEVELOPMENT.md,未写代码。单条上限 256 KiB,不做分块。服务端为单个 Go 进程,内置 mochi-mqtt,单端口同时提供后台、MQTT WebSocket 和裸 TCP,数据在 SQLite。
|
||||
验证:已检查文档,多设备同时登录、分块、服务器历史都写成本期不做。未跑代码。
|
||||
默认(PRD 第 9 节,用户尚未逐条口头确认):改对话密码不影响已提交消息;进群必须当次带对话密码;回执默认开启并可补送 7 天;不保留的消息在对方断线 60 秒内仍等待;记录默认 7 天,防重标记另留 24 小时。
|
||||
下一步:等用户复核默认项。确认后交给开发组。开发完成后回来审核,差异应在 docs/DEVIATIONS.md。
|
||||
给下个会话:项目 ID 25464650-ed5d-440e-b362-190f2852d451。正式文档只有 docs/PRD.md 和 docs/DEVELOPMENT.md。根目录 t.md 是中断时的思考草稿,不是规范。边界记忆 de0503ed-3d77-400d-a0bb-bbe44371f906 revision 6。
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-29 20:29:18 UTC [b354dd06b7]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-29-20-29-18-utc-b354dd06b7
|
||||
stable_id: 3724d016-1752-40b0-80a4-ce4405595505
|
||||
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-20260930-0505-checkpoint-v02
|
||||
created_at: '2026-09-29T20:29:18.431733+00:00'
|
||||
updated_at: '2026-09-29T20:29:18.431733+00:00'
|
||||
tags:
|
||||
- nixmsg
|
||||
- prd
|
||||
- handoff
|
||||
---
|
||||
|
||||
完成:docs/PRD.md 与 docs/DEVELOPMENT.md 升到 0.2(整份重写,0.1 已确认的规则全部保留)。用户要求的两项:端口改为「端只用一个固定端口,后台可用 admin_listen 单独监听」,不用 Redis(F21);新增 F23 端自助注册(管理员开关 + 注册安全码,换码不影响已注册,SDK 注册与改密,HTTP 接口 POST /api/client/register)。
|
||||
同时全面审查并直接修正的问题:登录锁定改按编号+IP(防恶意锁死);服务器内部故障不能回「密码错误」(否则 SDK 全部停止重连,改在 mochi OnConnect 里返回 error);SDK 去重命中已确认消息要再回 ack;重交不重算 send_at_ms;防重指纹改为整条请求且记录还在时不删;下行大小按整帧自查(mochi 超客户端包上限会静默丢弃);写入合并事务(synchronous=FULL 下才撝得住 200 条/秒);启动恢复(清推送标记、重启当作断线再给宽限);解散群/删除端时作废定时消息并清数据(编号可复用不串数据);coder/websocket 要关 Origin 校验、自查子协议;TLS 不设 NextProtos;argon2id 改 OWASP 19MiB/t=2 并加并发池;配置库改 go.yaml.in/yaml/v3;首次启动需 admin init(原 F22 验收与此冲突);send 示例同时带 send_at_ms 和 delay_ms 的矛盾;单位统一 KiB;补 settings 表(原文档没地方存管理员密码哈希)。需要用户裁定的产品选择写成 PRD 第 9 节 D14–D23。
|
||||
验证:对照 mochi-mqtt/server v2、coder/websocket、autopaho、modernc sqlite 主分支源码核对库行为(结论见 experience 记忆 27e87e23);联网确认 yaml 库状态和 OWASP 参数。交叉核对两份文档的章节引用、默认项编号、单位、错误码。本阶段不写代码,没有可运行的验证。
|
||||
问题与解决:重写时一度把「旧连接断开」整体跳过,会让推给旧连接的消息卡死,已改为任何连接断开都按代号清自己的推送标记,只有当前连接才标离线(DEVELOPMENT 7.5)。
|
||||
下一步:等用户复核 PRD 第 9 节(D1–D13 仍未逐条确认,D14–D23 是新增);确认后交给开发组;开发完成后回来审核,差异应在 docs/DEVIATIONS.md。
|
||||
给下个会话:项目 ID 25464650-ed5d-440e-b362-190f2852d451;工作区 e:/code/NixMsg 只有 docs/PRD.md、docs/DEVELOPMENT.md,不是 Git 仓库(没有版本记录,改动在 PRD 第 11 节修订记录);边界记忆 de0503ed revision 7;规则记忆 63748f00(只写文档,不写代码)。没写进文档、只向用户提过的建议:端自注销(接入方 iOS App 若提供注册,苹果要求 App 内可删账号,目前列在「本期不做」)、SDK 包名和发布渠道归属待定。要避开的坑见 DEVELOPMENT 第 15 节。
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-29 20:36:13 UTC [ffdc9966d6]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-29-20-36-13-utc-ffdc9966d6
|
||||
stable_id: 3a168129-ef93-487a-a8f6-f516398db8a4
|
||||
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-20260930-0445-checkpoint-review2
|
||||
created_at: '2026-09-29T20:36:13.408727+00:00'
|
||||
updated_at: '2026-09-29T20:36:13.408727+00:00'
|
||||
tags:
|
||||
- nixmsg
|
||||
- prd
|
||||
- handoff
|
||||
---
|
||||
|
||||
完成:用户再次强调只做设计和文档(交给 Grok 开发团队),要求检查设计问题。在 0.2 基础上做了第二轮设计审查,直接改进文档(版本号仍为 0.2,修订记录已补):提交改为先查防重再校验(否则已成功的消息重试时会误报失败);新增每端未完成消息和排队投递各 10000 条上限(quota_exceeded / queue_full,D25);对话密码另按被猜的端限总数 1 小时 50 次(防多账号轮流猜,D24);大帧(>64KiB)并发发布上限 64,靠 mochi OnQosComplete 释放;优雅停机和磁盘满处理;directory.list 的 query 语义;status 只能查自己发的;后台改对话密码也增加版本号;后台端列表显示在线状态;注册安全码内置 App 可被提取、公网注册要配证书的提醒;手机 App 后台收不到提醒的说明;Windows 托管和 NTP 运维说明。
|
||||
验证:交叉核对 D24、D25、quota_exceeded、queue_full、max_pending_per_* 在两份文档中一致。没有写代码。
|
||||
未决(用户关掉了问卷,文档暂按默认):1)开放注册后目录可见范围,文档保持所有端互相可见,我建议自助注册的端不进目录;2)管理 API 令牌(给接入方后台程序化开通、停用、重置密码),文档未加,我建议本期加;3)PRD 第 9 节 D1–D25 均未被用户逐条确认,影响最大的是 D19、D17、D14、D21、D25。
|
||||
下一步:等用户对以上三项表态,按选择改文档后交给开发组。
|
||||
给下个会话:用户对“看起来像在写代码”很敏感,审查时说清所有动作只落在文档上,不要搭脚手架或跑代码;前一个检查点 3724d016 记录了 0.2 的主要改动。
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-29 20:54:58 UTC [3449427cae]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-29-20-54-58-utc-3449427cae
|
||||
stable_id: fcde0b5d-7443-42ff-9448-3c4ff1c839a7
|
||||
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-20260930-0508-checkpoint-v03
|
||||
created_at: '2026-09-29T20:54:58.346160+00:00'
|
||||
updated_at: '2026-09-29T20:54:58.346160+00:00'
|
||||
tags:
|
||||
- nixmsg
|
||||
- prd
|
||||
- handoff
|
||||
- tech-stack
|
||||
---
|
||||
|
||||
完成:文档升到 0.3。PRD 第 9 节加了状态列,D1–D26 全部已确认(D26 目录保持所有端可见;D25 配额 0 表示不限),D27 API 令牌细节待确认。新增管理 API 令牌和操作日志(PRD F17、DEVELOPMENT 第 8 节、api_tokens 表、/api/admin/tokens)。技术栈写入 DEVELOPMENT 第 2 节(2.1 负责人选定、2.2 按推荐定下、2.3 SDK 依赖、2.4 Naive UI 界面做法);第 11 节拆成 11.1 配置、11.2 命令与构建(新增 nixmsg healthcheck、Taskfile 构建)、11.3 证书与 1Panel、11.4 Docker(compose 示例);第 4.3 节加 /metrics 访问规则和指标清单;里程碑和测试同步。PRD F21 写明证书自动重载和 1Panel,F22 加 Docker 和指标,修订记录加 0.3 行。
|
||||
验证:用 npm registry 查了组件库活跃度(Ant Design Vue 2024-11 后未发版)和 Node LTS(24);联网确认 1Panel 有「推送证书到本地目录」和「申请证书后执行脚本」,其 TCP/UDP 代理不做 TLS。交叉核对 D26/D27、第 11.x 节引用、metrics.token、api_tokens、版本号。没有写代码。
|
||||
下一步:用户说技术栈写完后「再讨论别的」。可讨论的线索:D27 令牌细节确认;代码仓库和 CI(用户有 Gitea);SDK 包名和发布渠道归属;iOS 自删账号(苹果要求)和手机后台推送的取舍;交给 Grok 开发组的方式和审核流程。
|
||||
给下个会话:项目 ID 25464650-ed5d-440e-b362-190f2852d451;工作区只有 docs/PRD.md、docs/DEVELOPMENT.md(非 Git 仓库);技术栈决定见对应 decision 记忆;用户选了 Naive UI 而非我推荐的 Element Plus,不要再改回;用户对“像在写代码”敏感,只改文档。
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-29 21:12:14 UTC [f10cd71c01]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-29-21-12-14-utc-f10cd71c01
|
||||
stable_id: f0caec01-3c5e-4c7a-99e4-f90b3b995fbb
|
||||
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-20260930-0527-checkpoint-repo-init
|
||||
created_at: '2026-09-29T21:12:14.614742+00:00'
|
||||
updated_at: '2026-09-29T21:12:14.614742+00:00'
|
||||
tags:
|
||||
- nixmsg
|
||||
- handoff
|
||||
- repo
|
||||
- multi-agent
|
||||
---
|
||||
|
||||
完成:
|
||||
1)按用户反馈(设备 IP 会变;希望每次登录换 token,新设备登录后旧设备自动退出)把登录改成会话令牌,文档升 0.4:PRD F02 重写(密码登录发 nst_ 令牌、重连用令牌、密码登录轮换令牌、闲置 30 天失效、self.logout);锁定改为按编号加 IP(5 分钟 10 次)和按编号总数(1 小时 50 次),只拦密码登录不拦令牌重连;后台 unlock;DEVELOPMENT 第 5 节「登录与会话令牌」、endpoints 表 session_* 列、hello 返回 session_token、SDK onSession/logout/session_invalid、配置 session_idle_days。D28 已确认,D18、D29 待确认。
|
||||
2)新增 docs/TASKS.md:交付标准、资料、环境(随机端口、容器名前缀)、协作规则(工作树、一功能一验证一提交、共享文件规则、总控快进合并、ready-to-merge 检查点)、分工 10 条线、阶段 0–3 的任务明细(T0.1–T0.5、P1–P4、N1–N3、M1–M4、I1–I5、A1–A3、W1–W4、SDK 各语言 5 个任务、Q1–Q5、Z1–Z3)、审核清单、负责人在 Cursor 里的操作说明和两段提示词。DEVELOPMENT 第 3 节加 internal/auth 和 internal/app 子包;第 4.1 节加 listen 端口 0 时写 <data_dir>/listen.addr。
|
||||
3)仓库初始化:git init -b main,远端 https://git.asio.asia/nixevol/NixMsg.git(原来是空仓库),首个提交 2ab0950「docs: 初始化仓库,加入需求、开发说明和任务拆分」,包含 docs/PRD.md、DEVELOPMENT.md、TASKS.md、DEVIATIONS.md(按线分节模板)、README.md、.gitignore、.gitattributes(eol=lf)、.cursor/rules/nixmsg-dev.mdc(alwaysApply 协作规则);已推送并确认远端 main=2ab0950。Gitea 凭证(密码库条目 git.asio.asia)已存入本机 Git Credential Manager,供各 Agent 推送。
|
||||
4)用户授权开发 Agent 对自己的 feat/*、fix/* 分支用 --force-with-lease,main 禁止强推(已写进 TASKS 第 9 节和规则文件)。阶段规则记忆 63748f00 已更新为进入开发阶段。
|
||||
验证:用 cursor-guide 确认 Cursor 3 多 Agent 用法(代理窗口、工作树、worktreeMaxCount 默认 25、.cursor/worktrees.json、云端 Agent 不支持 Gitea);git ls-remote 确认推送成功。没有写业务代码。
|
||||
下一步:用户在 Cursor 代理窗口开总控 Agent(Grok 模型)执行阶段 0,再按 TASKS 第 8 节开各开发线。待确认:D18、D27、D29。
|
||||
给下个会话:本会话是设计会话,不写业务代码;工作区现在是 Git 仓库(main 跟踪 origin/main),改文档要提交并推送;工作树文件是 CRLF、仓库里是 LF,属正常。
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-29 21:22:38 UTC [973538971d]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-29-21-22-38-utc-973538971d
|
||||
stable_id: 8825fba6-41ab-46a5-b76f-523f8744daa5
|
||||
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-20260930-0540-checkpoint-ready-for-dev
|
||||
created_at: '2026-09-29T21:22:38.523726+00:00'
|
||||
updated_at: '2026-09-29T21:22:38.523726+00:00'
|
||||
tags:
|
||||
- nixmsg
|
||||
- handoff
|
||||
- ready-for-dev
|
||||
---
|
||||
|
||||
完成:文档定稿,可以交给 Grok 开发团队。一次性问完剩余 8 个问题,用户全选推荐项:D18、D27、D29 确认;SDK 发布到 Gitea 包仓库(npm @nixevol/nixmsg、PyPI nixmsg、Maven asia.asio.nixmsg:nixmsg-sdk,Go 模块 git.asio.asia/nixevol/NixMsg/sdk/go);镜像推到 git.asio.asia/nixevol/nixmsg;不做 CI;许可证专有;小默认(SDK 最低版本、管理员密码 12 位、本地时区显示、备份靠 1Panel/cron)。评估冲突时发现「专有许可」和「仓库公开、账号公开导致包和镜像公开」冲突(已核实:Gitea 1.27.3,仓库 private=false,nixevol 公开,官方文档说个人名下的包跟随账号可见性),追问后用户选全部保持公开,许可证写明公开不代表授权。
|
||||
关键改动:PRD 0.5(状态「已确认,可交给开发」,D1–D33 全部已确认,新增 D30–D33,F17/F19/F22 补充);DEVELOPMENT(第 2.1 节加发布/镜像/CI/许可证行,第 2.3 节最低版本,第 2.4 节时间显示,第 5 节 OnConnectAuthenticate 补令牌失效,第 8 节管理员密码 12 位,第 9 节正式包名、获取方式、许可证字段和发布规则、停止重连补 logout,第 11 节备份和镜像推送);TASKS 0.2(交付标准加发布和镜像、发布令牌规则、不做 CI、T0.5 加命令行启动器给非 Go SDK 测试用、SDK 任务 5 改为打包和文档、Z3 执行发布);新增 LICENSE(专有),README 加许可证说明。
|
||||
验证:文档里已无待确认项和占位包名,D14–D33 共 20 条,版本引用一致;提交 6daaa95「docs: 确认全部默认项并补充发布、许可证和最低版本要求」已推送,远端 main=6daaa95。没有写业务代码。
|
||||
下一步:用户按 TASKS 第 8 节在 Cursor 代理窗口开总控 Agent(Grok)执行阶段 0。设计会话之后只负责文档维护和审核。
|
||||
给下个会话:没有未决事项;若开发中要改产品行为,先问用户,再同步改 PRD、DEVELOPMENT 并记修订记录。审核开发成果时参考 experience 记忆 27e87e23(依赖库核对结论)和 TASKS 第 7 节审核清单。
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-29 21:26:40 UTC [bda5f2d7fe]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-29-21-26-40-utc-bda5f2d7fe
|
||||
stable_id: a9447797-1c08-4260-8327-d775c1915d8a
|
||||
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-20260930-0547-checkpoint-multitask
|
||||
created_at: '2026-09-29T21:26:40.565877+00:00'
|
||||
updated_at: '2026-09-29T21:26:40.565877+00:00'
|
||||
tags:
|
||||
- nixmsg
|
||||
- handoff
|
||||
- multi-agent
|
||||
---
|
||||
|
||||
完成:用户说明用的是 Cursor Multitask 模式,需要一段能直接发出、让主 Agent 自己启动多个子 Agent 的提示词。docs/TASKS.md 升到 0.3:第 8 节整节改写为 8.1 负责人要做的(附单段总控提示词,可断点续跑)、8.2 编排计划(阶段 0 总控自己做;第 1 波 P1–P4、N1–N2、M1、I1、A1、W1–W3、Q1+Q4 骨架、S1/S2 任务 1–3;第 2 波 N3、M2–M4、I2–I4、A2、Q2 第一部分;第 3 波 I5、A3、S1/S2 任务 4–5、Q2 补齐+Q3;第 4 波 W4、Q4 定稿+Q5;阶段 3 总控 Z1–Z3;每波有合并顺序,同波未合并的依赖用 T0.4 接口和假实现)、8.3 子 Agent 提示词模板(子 Agent 看不到上下文,必须写清线、任务、目录、返回内容)。第 4.1、4.3、6 节同步;第 6 节加了约定:任务说明里的「第 X 节」指 DEVELOPMENT,指本文写「本文第 X 节」(Z2、Z3 已改)。提交 7c7fb3b 已推送。
|
||||
验证:四波覆盖第 6 节全部任务且每个只出现一次、都排在依赖之后;文档里已无「代理窗口」「开发线提示词」等旧写法。没有写业务代码。
|
||||
下一步:用户在 Cursor 新建 Agent、选 Grok、切 Multitask,发 TASKS 第 8.1 节的提示词。
|
||||
给下个会话:总控会话中断时重发同一段提示词即可续跑;设计会话只维护文档和审核。
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-29 21:32:05 UTC [0a1edb4277]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-29-21-32-05-utc-0a1edb4277
|
||||
stable_id: e3334cc3-93ab-41ff-bde0-fdb61e8ffdc1
|
||||
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-20260930-0554-checkpoint-autonomous
|
||||
created_at: '2026-09-29T21:32:05.442342+00:00'
|
||||
updated_at: '2026-09-29T21:32:05.442342+00:00'
|
||||
tags:
|
||||
- nixmsg
|
||||
- handoff
|
||||
- autonomous
|
||||
---
|
||||
|
||||
完成:用户要求全程自动、不再问他(他要离开一段时间,回来时希望系统已开发完成)。改动:TASKS 8.1 提示词去掉「先问我」,改为按推荐做法自己定并记进 DEVIATIONS、卡住的记进遗留问题继续推进、不做破坏性操作(撤销用 git revert)、每波汇报后不要结束直接进下一波、全部完成才结束、总控只编排审核保持上下文精简;阶段 0 也改为分三步派子 Agent(T0.1 → T0.2/T0.3/T0.5 → T0.4);子 Agent 模板、交付标准(未测项和偏差不再经负责人认可,改为事后审阅)、资料说明、共享文件规则、Z3、第 9 节授权记录同步修改;.cursor/rules/nixmsg-dev.mdc 和 DEVIATIONS 模板同步;阶段规则记忆 63748f00 升到 revision 3 写明全程自动授权。提交 4bdeb07 已推送。
|
||||
验证:全仓库搜索「问负责人、先问我、问总控、负责人确认/同意/认可、请我确认、停下来」,只剩新写的「不要停下来」和 PRD 里的历史记录。没有写业务代码。
|
||||
下一步:用户在 Cursor 新建 Agent、选 Grok、切 Multitask,发 TASKS 8.1 的提示词后离开。主 Agent 若被截断或机器睡眠,回来重发同一段提示词续跑。
|
||||
给下个会话:审核开发成果时重点看 docs/DEVIATIONS.md 和交付说明里总控自己拿的主意。
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-29 21:50:45 UTC [a584145af7]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-29-21-50-45-utc-a584145af7
|
||||
stable_id: b00ef735-8716-4395-b784-8b3acfa81925
|
||||
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: t01-checkpoint-20260930-0530
|
||||
created_at: '2026-09-29T21:50:45.393155+00:00'
|
||||
updated_at: '2026-09-29T21:50:45.393155+00:00'
|
||||
tags:
|
||||
- t01
|
||||
- ready-to-merge
|
||||
- line-L
|
||||
- feat/t01-skeleton
|
||||
---
|
||||
|
||||
完成:T0.1 仓库骨架(线 L)。
|
||||
分支:feat/t01-skeleton
|
||||
工作树:E:/code/NixMsg-wt/t01(勿在 e:/code/NixMsg 主工作区改)
|
||||
提交:5041a5b chore: 建立仓库目录骨架、Go 模块与构建检查配置;857ba89 feat: 初始化 Vue 前端工程与 embed 占位;27fccc2 feat: 实现 version/serve 骨架、迁移占位与健康检查;86dc10a docs: 补充部署示例、worktrees 设置并记录 T0.1 偏差。已推送 origin/feat/t01-skeleton。
|
||||
关键实现:DEVELOPMENT 第3节目录;go.mod=git.asio.asia/nixevol/NixMsg Go1.27;Taskfile(build/test/lint/check/web:*/itest/docker)+ taskfiles/*.yml;golangci-lint v2;web Vite+Vue3+TS+Naive+Router+Pinia;embed 用 embeddist 标签(stub 保证裸 go build);cmd/nixmsg version+serve(SQLite modernc、空迁移 0001、/healthz、listen.addr);deploy/config.example.yaml + Dockerfile 骨架;.cursor/worktrees.json。
|
||||
验证:Windows task check / task build 通过;二进制 nixmsg.exe 嵌入前端;Docker 容器 t01-task-check(golang:1.27-bookworm)task check 通过(DOCKER_CHECK_OK),容器已 --rm。
|
||||
偏差:见 docs/DEVIATIONS.md「总控 L」T0.1 五条。
|
||||
下一步:总控审核后 ff-merge 进 main;再开 T0.2/T0.3/T0.5。
|
||||
给下个会话:复用工作树 E:/code/NixMsg-wt/t01 与分支 feat/t01-skeleton;T0.3 需替换 0001 正文并补 VACUUM 备份;不要在主工作区改文件。
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-29 21:54:09 UTC [8de54ff3fa]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-29-21-54-09-utc-8de54ff3fa
|
||||
stable_id: a8218cf4-1c09-474b-9d62-9b493d26e6e3
|
||||
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: t01-merged-20260930-0555
|
||||
created_at: '2026-09-29T21:54:09.208471+00:00'
|
||||
updated_at: '2026-09-29T21:54:09.208471+00:00'
|
||||
tags:
|
||||
- t01
|
||||
- merged
|
||||
- main
|
||||
---
|
||||
|
||||
## T0.1 已合并进 main
|
||||
|
||||
- **任务**:T0.1 仓库骨架(feat/t01-skeleton)
|
||||
- **合并方式**:fast-forward `origin/feat/t01-skeleton` → `main`
|
||||
- **main 新 hash**:`86dc10a3716258617a29a0db1c4ab1a99ef03ce9`(短:`86dc10a`)
|
||||
- **前 tip**:`4bdeb07` → `86dc10a`
|
||||
- **包含提交**:`5041a5b`、`857ba89`、`27fccc2`、`86dc10a`
|
||||
- **task check**:通过(web:install、web:build、build embeddist、golangci-lint 0 issues、go test 全绿)
|
||||
- **已推送**:`git push origin main` 成功(普通推送,非 force)
|
||||
- **工作树**:已 `git worktree remove E:\code\NixMsg-wt\t01`;远端分支 `origin/feat/t01-skeleton` 保留
|
||||
- **审核**:无业务密码/令牌、无 web/dist、无数据库文件、未改 PRD;DEVIATIONS「总控 L」五条偏差(embed stub、listen.addr 总是写入、迁移占位、taskfiles include、Dockerfile 骨架)原因充分,已接受
|
||||
- **审核问题**:无阻断项
|
||||
- **下一步**:不要在本检查点开 T0.2;由总控按阶段 0 编排继续
|
||||
- **给下个会话**:main 已在 86dc10a;本地仍有 `feat/t01-skeleton` 分支指针(可留可删本地分支);勿删远端 feat/t01-skeleton;勿开始 T0.2 除非总控明确派发
|
||||
+54
@@ -0,0 +1,54 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-29 22:00:06 UTC [0a3e2dc9c1]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-29-22-00-06-utc-0a3e2dc9c1
|
||||
stable_id: ef3be336-00c6-40d7-ae47-77e7994e5e93
|
||||
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-t03-checkpoint-20260930-l
|
||||
created_at: '2026-09-29T22:00:06.111132+00:00'
|
||||
updated_at: '2026-09-29T22:00:06.111132+00:00'
|
||||
tags:
|
||||
- t03
|
||||
- ready-to-merge
|
||||
- line-L
|
||||
- feat/t03-store
|
||||
---
|
||||
|
||||
## T0.3 完成(线 L)
|
||||
|
||||
- **任务**:T0.3 internal/store(迁移、建表、写入队列接口)
|
||||
- **分支**:feat/t03-store
|
||||
- **工作树**:E:/code/NixMsg-wt/t03(toplevel 确认不是主工作区)
|
||||
- **基于**:origin/main @ 86dc10a
|
||||
- **提交**:33db3e7 feat: 实现 SQLite 迁移备份、完整表结构与简单写入队列
|
||||
- **已推送**:origin/feat/t03-store(普通推送,未推 main、未强推)
|
||||
|
||||
### 关键实现
|
||||
- 保留 0001=SELECT 1;新增 0002_schema.sql(DEVELOPMENT 7.7 全部业务表/索引,含 api_tokens、settings、session_*)
|
||||
- Migrate:有 pending 且打开前已有 nixmsg.db 时 VACUUM INTO data_dir/backup/pre-migrate-<UTC>.db;失败返回错误
|
||||
- Open:写连接 DSN+_txlock=immediate MaxOpenConns(1);读池去掉 _txlock;Queue 简单互斥一操作一事务
|
||||
- serve 改为 store.Open,保留 /healthz 与 listen.addr
|
||||
|
||||
### 验证
|
||||
- task check 通过(web build、embeddist build、golangci-lint 0 issues、go test 全绿)
|
||||
- 单测:空目录建表、重复启动不重迁、旧库遇新版本有备份、Queue 写入可读
|
||||
|
||||
### 偏差(docs/DEVIATIONS.md 总控 L / T0.3)
|
||||
1. 表在 0002 不改 0001
|
||||
2. Queue 互斥一事务,合并留给 P2
|
||||
3. 空库不备份;失败不自动还原
|
||||
|
||||
### 未做
|
||||
- 写入合并(P2)
|
||||
- 7.8 启动恢复逻辑(属后续消息/平台任务,本任务未做)
|
||||
- 未改 go.mod(无新依赖)
|
||||
|
||||
### 给下个会话
|
||||
- 复用工作树 E:/code/NixMsg-wt/t03 与分支 feat/t03-store
|
||||
- 总控审核后 ff-merge;勿在 e:/code/NixMsg 主工作区改
|
||||
- schema_migrations 由执行器维护,不在 0002 内
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-29 22:01:20 UTC [b12c120b2c]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-29-22-01-20-utc-b12c120b2c
|
||||
stable_id: e7becf00-932c-44df-a1ad-ba9c4d07f1f4
|
||||
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: t02-checkpoint-20260930-ready
|
||||
created_at: '2026-09-29T22:01:20.722902+00:00'
|
||||
updated_at: '2026-09-29T22:01:20.722902+00:00'
|
||||
tags:
|
||||
- t02
|
||||
- ready-to-merge
|
||||
- line-L
|
||||
- feat/t02-protocol
|
||||
---
|
||||
|
||||
## T0.2 协议包完成(线 L)
|
||||
|
||||
- **任务**:T0.2 `internal/protocol`
|
||||
- **分支**:`feat/t02-protocol`(已普通推送到 origin,非 force)
|
||||
- **工作树**:`E:/code/NixMsg-wt/t02`(`git rev-parse --show-toplevel` = `E:/code/NixMsg-wt/t02`,非主工作区)
|
||||
- **基于**:`origin/main` @ `86dc10a`
|
||||
- **提交**:
|
||||
- `31d92f8` feat: 实现 internal/protocol 帧类型、编解码、校验与请求指纹
|
||||
- `f9351e8` docs: 记录 T0.2 协议包实现偏差
|
||||
- **关键实现**:第 6 节全部 MQTT 帧类型 + 6.9 注册请求/响应 + hello `session_token` + `self.logout`;6.10 错误码常量;`Marshal`/`Encode` 用 `json.Encoder`+`SetEscapeHTML(false)` 并去掉尾换行;字段校验(端编号小写、消息号可大小写、正文/meta 大小、send_at_ms/delay_ms 互斥、登录密码禁 `nst_`);7.3 请求指纹(meta 键序无关);`FrameBytes`
|
||||
- **验证**:工作树内 `task check` 通过(web build、embeddist build、golangci-lint 0 issues、go test 全绿含 protocol 表驱动)
|
||||
- **偏差**:`docs/DEVIATIONS.md`「总控 L」T0.2 四条(指纹布局、有效默认值、去尾换行、校验范围)
|
||||
- **未做**:T0.3/T0.5/T0.4;未改 PRD;未改主工作区
|
||||
- **下一步**:总控审阅后 ff-merge 进 main;各线 rebase
|
||||
- **给下个会话**:复用工作树 `E:/code/NixMsg-wt/t02` 与分支 `feat/t02-protocol`;指纹布局以 fingerprint.go 为准,SDK 须对齐;合并前再 `task check`
|
||||
+42
@@ -0,0 +1,42 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-29 22:02:30 UTC [65673db73f]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-29-22-02-30-utc-65673db73f
|
||||
stable_id: 889272ca-6a6b-4ab3-bde7-c0ae2ee700d0
|
||||
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: t05-harness-checkpoint-20260930-0556
|
||||
created_at: '2026-09-29T22:02:30.673925+00:00'
|
||||
updated_at: '2026-09-29T22:02:30.673925+00:00'
|
||||
tags:
|
||||
- t05
|
||||
- ready-to-merge
|
||||
- line-L
|
||||
- feat/t05-harness
|
||||
---
|
||||
|
||||
## T0.5 完成(线 L)
|
||||
|
||||
- **任务**:T0.5 集成测试启动器 test/harness
|
||||
- **分支**:feat/t05-harness
|
||||
- **工作树**:E:/code/NixMsg-wt/t05(勿改 e:/code/NixMsg)
|
||||
- **基于**:origin/main @ 86dc10a
|
||||
- **提交**:5d046e2 feat: 实现 test/harness 集成测试启动器(已推送 origin/feat/t05-harness,普通推送)
|
||||
- **关键实现**:
|
||||
- Binary() 进程内只编译一次 nixmsg
|
||||
- Start:临时目录 + listen 127.0.0.1:0,读 listen.addr
|
||||
- AdminInitializer / CLIAdminInit(admin 未实现时 ErrAdminInitUnsupported,密码空串)
|
||||
- AdminClient:CookieJar + 变更请求 X-Nixmsg-Request;API Token 走 Bearer
|
||||
- MQTTClient 占位:DialMQTTTCP / DialMQTTWebSocket,原始控制包收发
|
||||
- cmd/testserver:JSON 打 stdout,中断后 Kill 并删目录
|
||||
- 示例测试:healthz+清理;并行隔离(不同端口/目录)
|
||||
- **验证**:task check 通过;task itest 通过;golangci-lint 0 issues
|
||||
- **DEVIATIONS「总控 L」T0.5**:admin 密码留给 P1;MQTT 仅传输层;Stop 用 Kill
|
||||
- **没做完**:admin init 密码解析待 P1;MQTT 业务帧/CONNACK 未做;优雅停机未测;Taskfile 未改(itest 已存在)
|
||||
- **标签**:ready-to-merge
|
||||
- **下一步**:总控审阅后 ff-merge;P1 合入后补上 admin init 密码回填验证
|
||||
- **给下个会话**:复用 E:/code/NixMsg-wt/t05 与 feat/t05-harness;勿强推 main;勿在主工作区改
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-29 22:02:34 UTC [aede789577]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-29-22-02-34-utc-aede789577
|
||||
stable_id: 750f14c0-ecc9-43ea-bf32-4e5c9784fc9c
|
||||
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: t02-merged-20260930T0601
|
||||
created_at: '2026-09-29T22:02:34.766042+00:00'
|
||||
updated_at: '2026-09-29T22:02:34.766042+00:00'
|
||||
tags:
|
||||
- t02
|
||||
- merged
|
||||
- main
|
||||
---
|
||||
|
||||
# 检查点:T0.2 已合并进 main
|
||||
|
||||
- 时间:2026-09-30(本地)
|
||||
- 任务:T0.2 协议包 `internal/protocol`
|
||||
- 分支:`feat/t02-protocol` 快进合并进 `main`
|
||||
- main 新 hash:`f9351e8b61cf3f436d54dacc9d4b4fcd2dd81aaf`(短:`f9351e8`)
|
||||
- 合并前提 tip:`origin/main`=`86dc10a`;分支含 `31d92f8`、`f9351e8`
|
||||
- 已推送:`git push origin main` 成功(`86dc10a..f9351e8`)
|
||||
- task check:通过(web:install/build、go build embeddist、golangci-lint 0 issues、go test ./... 含 protocol)
|
||||
- 审核:仅改 `internal/protocol/*` 与 `docs/DEVIATIONS.md`「总控 L」T0.2 四条偏差;无 go.mod 变更;无密码/web/dist/数据库/PRD 产品行为改动;偏差原因已写明并接受
|
||||
- 工作树:计划删除 `E:\code\NixMsg-wt\t02`;未动 t03/t05;远端 `feat/t02-protocol` 保留
|
||||
- 下一步:继续等 T0.3 / T0.5 ready-to-merge 后再按顺序合并;勿强推 main
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-29 22:03:59 UTC [1be04b8c63]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-29-22-03-59-utc-1be04b8c63
|
||||
stable_id: 5eed215b-3893-450b-96c3-fcd07e2c1df4
|
||||
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: t05-harness-checkpoint-rebased-20260930
|
||||
created_at: '2026-09-29T22:03:59.336947+00:00'
|
||||
updated_at: '2026-09-29T22:03:59.336947+00:00'
|
||||
tags:
|
||||
- t05
|
||||
- ready-to-merge
|
||||
- line-L
|
||||
- feat/t05-harness
|
||||
---
|
||||
|
||||
## T0.5 完成(线 L)ready-to-merge
|
||||
|
||||
- **分支**:feat/t05-harness
|
||||
- **工作树**:E:/code/NixMsg-wt/t05
|
||||
- **提交**:bf39b47 feat: 实现 test/harness 集成测试启动器
|
||||
- **基于**:已 rebase 到 origin/main(含 T0.2,tip f9351e8);初开时为 86dc10a
|
||||
- **推送**:origin/feat/t05-harness(rebase 后 --force-with-lease;未推 main)
|
||||
- **验证**:rebase 后 task check、task itest 均通过
|
||||
- **DEVIATIONS**:总控 L 保留 T0.1/T0.2,新增 T0.5 三条(admin 密码待 P1、MQTT 传输层占位、Kill 停进程)
|
||||
- **未完成**:admin init 密码;MQTT 业务帧;优雅停机
|
||||
- **给下个会话**:可 ff-merge feat/t05-harness;勿改主工作区
|
||||
+53
@@ -0,0 +1,53 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-29 22:30:38 UTC [177f6c558d]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-29-22-30-38-utc-177f6c558d
|
||||
stable_id: 61afe52a-e79b-485b-8ccb-dd95e194825d
|
||||
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: t03-t05-merged-20260930T0628Z
|
||||
created_at: '2026-09-29T22:30:38.897026+00:00'
|
||||
updated_at: '2026-09-29T22:30:38.897026+00:00'
|
||||
tags:
|
||||
- t03
|
||||
- t05
|
||||
- merged
|
||||
- main
|
||||
---
|
||||
|
||||
# 检查点:T0.3 与 T0.5 已按序合并进 main
|
||||
|
||||
- 时间:2026-09-30(本地)
|
||||
- 执行:总控合并执行者;顺序先 t03 后 t05;未开 T0.4
|
||||
- main 最终 hash:`dd5a331db21c9a1f5e2ad260ee6f01fbfac71ccf`(短:`dd5a331`)
|
||||
- 已推送:`git push origin main` 两次均成功;未对 main 使用 force/reset
|
||||
|
||||
## T0.3 feat/t03-store
|
||||
- 合并前 tip:33db3e7(基线 86dc10a);rebase 到 origin/main(f9351e8) 后 tip:`7582e8b`
|
||||
- 冲突:仅 docs/DEVIATIONS.md;保留双方总控 L 的 T0.1、T0.2、T0.3
|
||||
- 推送:`git push --force-with-lease origin feat/t03-store`(33db3e7→7582e8b)
|
||||
- 审核:仅改 internal/store/*、migrations/0002、cmd/nixmsg/serve.go、DEVIATIONS;无 PRD/web/dist/db/密码;偏差接受
|
||||
- 合并:主工作区 `git merge --ff-only feat/t03-store` → main=`7582e8b`
|
||||
- task check:通过(web build、embeddist、golangci-lint 0、go test 含 store)
|
||||
- 工作树:`E:\code\NixMsg-wt\t03` 已 `git worktree remove`;远端 feat/t03-store 保留
|
||||
|
||||
## T0.5 feat/t05-harness
|
||||
- 合并前 tip:bf39b47(已基于 f9351e8);rebase 到含 t03 的 origin/main(7582e8b) 后 tip:`dd5a331`
|
||||
- 冲突:仅 docs/DEVIATIONS.md;保留 T0.1–T0.3 与 T0.5
|
||||
- 推送:`git push --force-with-lease origin feat/t05-harness`(bf39b47→dd5a331)
|
||||
- 审核:仅改 test/harness/*、DEVIATIONS;未改 Taskfile(itest 已有);无 PRD/web/dist/db/密码;偏差接受
|
||||
- 合并:`git merge --ff-only feat/t05-harness` → main=`dd5a331`
|
||||
- task check:通过;task itest:通过(test/harness ok)
|
||||
- 工作树:`e:\code\NixMsg-wt\t05` 已删除;远端 feat/t05-harness 保留
|
||||
|
||||
## 下一步
|
||||
- 可开 T0.4 或其他阶段 0 剩余任务;各线若基于旧 main 需 rebase 到 dd5a331
|
||||
- 勿强推 main;勿在主工作区并行开发
|
||||
|
||||
## 给下个会话
|
||||
- main=`dd5a331` 含 T0.1–T0.3+T0.5;工作树仅剩主目录
|
||||
- DEVIATIONS 总控 L 已含 T0.1/T0.2/T0.3/T0.5 全部条目
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-29 22:36:38 UTC [de7d2eb653]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-29-22-36-38-utc-de7d2eb653
|
||||
stable_id: c28f8d69-d185-4df0-9803-c4b0c11850f0
|
||||
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: t04-checkpoint-20260930-ready
|
||||
created_at: '2026-09-29T22:36:38.291116+00:00'
|
||||
updated_at: '2026-09-29T22:36:38.291116+00:00'
|
||||
tags:
|
||||
- t04
|
||||
- ready-to-merge
|
||||
- line-L
|
||||
- feat/t04-contracts
|
||||
---
|
||||
|
||||
## T0.4 完成(线 L)ready-to-merge
|
||||
|
||||
- **分支**:feat/t04-contracts
|
||||
- **工作树**:E:/code/NixMsg-wt/t04(toplevel 确认非主工作区)
|
||||
- **基于**:origin/main @ dd5a331
|
||||
- **提交**:22c56d1 feat: 补齐模块接口契约与管理 API 文档
|
||||
- **推送**:origin/feat/t04-contracts(普通推送,未强推,未推 main)
|
||||
- **验证**:工作树内 task check 通过(web build、embeddist build、golangci-lint 0、go test 含 auth/app/*/port/wire)
|
||||
|
||||
## 交付内容
|
||||
- internal/auth:HashPool、SessionTokens、APITokens、LoginLocks + Stub
|
||||
- internal/app/message|identity|group|presence:Service 接口 + Stub
|
||||
- internal/app/port:UplinkHandler / Downlink / ConnControl(broker↔app,选 app/port)
|
||||
- cmd/nixmsg/wire.go 组装假实现;serve 接 RecoverOnStart,version/serve/healthz 不变
|
||||
- docs/api/admin-api.md:第 8 节管理路由契约(含 Cookie/X-Nixmsg-Request/Bearer,响应无正文)
|
||||
- docs/DEVIATIONS.md 总控 L T0.4 四条
|
||||
|
||||
## 契约覆盖路由
|
||||
login/logout/me/password/overview/endpoints 列表开通 import batch 详情修改删除 kick reset-login-password talk-password unlock/registration/tokens 全部/groups 全部(含补充 GET 详情)/messages 列表详情/settings
|
||||
|
||||
## 没做
|
||||
P/N/M/I/A 真实业务;mochi;admin HTTP 实现(仅文档契约)
|
||||
|
||||
## 给下个会话
|
||||
可 ff-merge feat/t04-contracts;勿改主工作区;勿强推 main
|
||||
+55
@@ -0,0 +1,55 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-29 22:38:40 UTC [de149dc3e6]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-29-22-38-40-utc-de149dc3e6
|
||||
stable_id: 3de8e5c6-511c-4f26-a8e0-4829c4f214bb
|
||||
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: t04-merged-20260930T0637
|
||||
created_at: '2026-09-29T22:38:40.613321+00:00'
|
||||
updated_at: '2026-09-29T22:38:40.613321+00:00'
|
||||
tags:
|
||||
- ready-to-merge
|
||||
- t04
|
||||
- merged
|
||||
---
|
||||
|
||||
# 检查点:T0.4 feat/t04-contracts 已合并进 main
|
||||
|
||||
## 完成内容
|
||||
- 将 `feat/t04-contracts`(`22c56d1`)快进合并进 `main` 并推送。
|
||||
- 基线 `origin/main` 仍为 `dd5a331`,无需 rebase。
|
||||
- `task check` 通过后普通推送 `origin/main`。
|
||||
- git worktree 已卸下 `E:\code\NixMsg-wt\t04`;若目录残留会在报告中说明。远端 `feat/t04-contracts` 保留。
|
||||
|
||||
## 原因
|
||||
总控合并执行:只合并 T0.4 契约,不开第一波开发。
|
||||
|
||||
## 关键实现 / 变更范围
|
||||
- `internal/auth`、`internal/app/{group,identity,message,port,presence}`、`cmd/nixmsg/wire.go` + serve 接线、`docs/api/admin-api.md`、`docs/DEVIATIONS.md`(T0.4 偏差)。
|
||||
- 未改 PRD;无密码/web/dist/数据库进入提交。
|
||||
|
||||
## 验证结果
|
||||
- `git merge --ff-only origin/feat/t04-contracts`:成功,`main` = `22c56d1f35384f4d23e19a69b706936c062c5aca`
|
||||
- `task check`:通过(web install/build、go build embeddist、golangci-lint 0 issues、go test ./... ok)
|
||||
- `git push origin main`:`dd5a331..22c56d1`
|
||||
|
||||
## 审核结论
|
||||
- diff 范围符合预期;admin-api.md 覆盖 login/logout/me/password/overview/endpoints(列表/开通/import/batch/详情/改/删/kick/reset-login-password/talk-password/unlock)/registration/groups/messages/settings/tokens;另契约补充 `GET /api/admin/groups/{id}`(已写 DEVIATIONS)。
|
||||
- 偏差条目已写明,接受。
|
||||
|
||||
## 问题与解决
|
||||
- 无阻塞。
|
||||
|
||||
## 下一步
|
||||
- 总控可按 TASKS 推进第一波后续任务;勿重复合并 T0.4。
|
||||
|
||||
## 给下个会话
|
||||
- `main` 现为 `22c56d1`;T0.4 已合入。
|
||||
- 远端分支 `origin/feat/t04-contracts` 仍在,按总控策略保留。
|
||||
- 不要对 main 使用 --force / reset --hard。
|
||||
- 临时约定:本会话仅做 T0.4 合并,未启动第一波开发。
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-29 22:47:58 UTC [99329660b1]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-29-22-47-58-utc-99329660b1
|
||||
stable_id: ff8132b0-d7c6-429a-998e-dc3ebc8645ab
|
||||
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: i1-register-ready-20260930-064800
|
||||
created_at: '2026-09-29T22:47:58.818501+00:00'
|
||||
updated_at: '2026-09-29T22:47:58.818501+00:00'
|
||||
tags:
|
||||
- ready-to-merge
|
||||
- i1
|
||||
- line-I
|
||||
- feat/i1-register
|
||||
---
|
||||
|
||||
# 检查点:I1 注册接口 ready-to-merge
|
||||
|
||||
## 完成内容
|
||||
- 实现 `POST /api/client/register` 为可挂载 `http.Handler`(`identity.NewRegisterHandler` / `NewServer().Handler()`)。
|
||||
- 覆盖 DEVELOPMENT 6.9:开关、安全码常量时间比较、IP 锁定、CORS/OPTIONS、4KiB 体、字段规则、`source=self`、日志不含安全码/密码。
|
||||
- httptest + 临时 SQLite 覆盖 F23 验收;`task check` 通过。
|
||||
- 写 `docs/DEVIATIONS.md`「身份 I」五条。未改 PRD、cmd、listener。
|
||||
|
||||
## 分支 / 路径 / 提交
|
||||
- 分支:`feat/i1-register`(已推送 origin,未推 main)
|
||||
- 工作树:`E:/code/NixMsg-wt/i`(基于 origin/main `22c56d1`)
|
||||
- 提交:`3f6f942` feat: 实现端自助注册 HTTP 接口与 F23 验收测试
|
||||
|
||||
## 挂载方式
|
||||
```go
|
||||
mux.Handle("/api/client/register", identity.NewRegisterHandler(identity.RegisterConfig{
|
||||
DB: db, Hash: hashPool, Locks: loginLocks, // P3 实现
|
||||
}))
|
||||
```
|
||||
|
||||
## 验证
|
||||
- `task check`:web build、embeddist、golangci-lint 0、go test ./... 含 identity F23
|
||||
|
||||
## 没做完
|
||||
- 未接线到 cmd/listener(等 N/总控)
|
||||
- 依赖 P3 真实 HashPool/LoginLocks;测试用 StubHashPool + 测试用 register IP 锁定器
|
||||
- I2–I5 未做;trusted_proxies IP 由接线注入 ClientIP
|
||||
|
||||
## 给下个会话
|
||||
- 可 rebase origin/main 后由总控 ff-merge;勿强推 main;勿改主工作区 e:/code/NixMsg
|
||||
+50
@@ -0,0 +1,50 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-29 22:50:21 UTC [6c1785ad56]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-29-22-50-21-utc-6c1785ad56
|
||||
stable_id: ea17e326-a067-4528-a017-7acb5d9473d5
|
||||
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: a1-admin-auth-e10716a-20260930
|
||||
created_at: '2026-09-29T22:50:21.537811+00:00'
|
||||
updated_at: '2026-09-29T22:50:21.537811+00:00'
|
||||
tags:
|
||||
- ready-to-merge
|
||||
- a1
|
||||
- line-A
|
||||
- feat/a1-admin-auth
|
||||
---
|
||||
|
||||
## A1 完成(线 A)ready-to-merge
|
||||
|
||||
- **分支**:feat/a1-admin-auth
|
||||
- **工作树**:E:/code/NixMsg-wt/a(toplevel 非主工作区)
|
||||
- **基于**:origin/main @ 22c56d1
|
||||
- **提交**:e10716a feat: 实现管理鉴权、API 令牌与操作日志
|
||||
- **推送**:origin/feat/a1-admin-auth(普通推送,未推 main)
|
||||
- **验证**:工作树内 task check 通过(web build、embeddist、golangci-lint 0、go test 含 admin/httpx)
|
||||
|
||||
## 交付
|
||||
- internal/httpx:JSON 信封、ClientIP/IsHTTPS(trusted_proxies)
|
||||
- internal/admin:可挂载 Handler;Cookie 会话 nixmsg_admin;X-Nixmsg-Request CSRF;Bearer API 令牌;login/logout/me/password;tokens CRUD(仅 Cookie);操作日志 slog;其余路由鉴权后 501
|
||||
- 测试注入 StubHashPool;MemoryLoginLocks + RandomAPITokens(P3 未合入)
|
||||
- DEVIATIONS「后台接口 A」A1 五条
|
||||
|
||||
## 挂载
|
||||
```go
|
||||
h := admin.New(admin.Deps{DB, Hash, Tokens, Locks, ...})
|
||||
mux.Handle("/api/admin/", h)
|
||||
```
|
||||
|
||||
## 未实现路由(501)
|
||||
overview、endpoints*、registration、groups*、messages*、settings
|
||||
|
||||
## 没做
|
||||
未改 cmd/listener/protocol;未接线 serve
|
||||
|
||||
## 给下个会话
|
||||
可 ff-merge;合入后需在 serve/wire 挂载并注入 P3 真实 Hash/Locks/APITokens;勿强推 main
|
||||
+58
@@ -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
|
||||
+59
@@ -0,0 +1,59 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-29 22:51:28 UTC [2fdc51067a]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-29-22-51-28-utc-2fdc51067a
|
||||
stable_id: 27de0ed5-9250-4b4c-8a65-bbca569181ac
|
||||
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: n-connect-n1n2-20260930-ready
|
||||
created_at: '2026-09-29T22:51:28.201592+00:00'
|
||||
updated_at: '2026-09-29T22:51:28.201592+00:00'
|
||||
tags:
|
||||
- ready-to-merge
|
||||
- line-N
|
||||
- n1
|
||||
- n2
|
||||
- feat/n-connect
|
||||
---
|
||||
|
||||
# 检查点:连接 N · N1+N2 ready-to-merge
|
||||
|
||||
## 完成内容
|
||||
- N1 `internal/listener`:首字节识别(放回)、10s 超时、TLS(无 NextProtos)、证书按 mtime 每小时重载、admin 分离与 404、通道 Listener、路由骨架、受信任代理 XFF、端口 0 写 listen.addr/admin.addr。
|
||||
- N2 `internal/broker`:mochi InlineClient 装配约束、coder/websocket `/mqtt`、连接随机代号、心跳校正、Authenticator 接口(默认拒绝)、每端串行上行队列 256、下行大小检查与大帧名额、QoS 选择由 PublishOpts。
|
||||
- 未改 `cmd/nixmsg`、未改 `internal/protocol` 帧定义、未做 N3。
|
||||
|
||||
## 分支 / 路径
|
||||
- 分支:`feat/n-connect`(已推送 origin,未推 main,未强推)
|
||||
- 工作树:`E:\code\NixMsg-wt\n`
|
||||
- tip:`151707ba093b8d4bab6dc24414a556c4bd8a9bfb`
|
||||
- 基于:`origin/main` @ `22c56d1`
|
||||
- 提交:
|
||||
1. `6e5179f` feat: 实现端口识别、TLS 证书重载与路由骨架
|
||||
2. `151707b` feat: 实现 WebSocket、mochi broker 与下行发布
|
||||
|
||||
## 验证
|
||||
- 工作树内 `task check` 通过(web build、embeddist、golangci-lint 0、go test 含 listener/broker)。
|
||||
|
||||
## 总控合并时要接的入口
|
||||
1. `listener.New(Options{Listen, AdminListen, DataDir, CertFile, KeyFile, AllowPlaintext, TrustedProxies, ClientHandler, AdminHandler, OnMQTT})` → `Start`/`Close`;`OnMQTT` 调 `broker.AttachTCP`。
|
||||
2. `listener.NewMux(RoleClient|RoleAdmin|RoleShared, Handlers{MQTT: broker.WSHandler(proxies), ...})`。
|
||||
3. `broker.New(Options{Authenticator, Uplink})`;`wire` 里 `Downlink`/`Conns` 用 `*broker.Broker`。
|
||||
4. N3 前 Authenticator 用 Reject 或临时 Allow;N3 替换真实登录。
|
||||
|
||||
## DEVIATIONS
|
||||
- `docs/DEVIATIONS.md`「连接 N」五条(未接线 cmd、addr 仅 port0、默认拒绝登录、大帧释放、OnPublishDropped 仅日志)。
|
||||
|
||||
## 没做完
|
||||
- N3 登录/会话令牌/握手/顶号/30s 握手超时。
|
||||
- cmd/nixmsg 接线。
|
||||
- OnPublishDropped → M 线清推送标记。
|
||||
- 大帧确认超时释放(依赖 M)。
|
||||
|
||||
## 给下个会话
|
||||
- 可 ff-merge `feat/n-connect`;勿改主工作区并行开发;勿强推 main。
|
||||
- 主工作区若有无关 `?? 2.0` 勿动。
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-29 22:52:03 UTC [6d051fd286]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-29-22-52-03-utc-6d051fd286
|
||||
stable_id: 6fbac592-c59a-403f-8146-5e8cdc4d617a
|
||||
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: q-infra-20260930-checkpoint-1
|
||||
created_at: '2026-09-29T22:52:03.040225+00:00'
|
||||
updated_at: '2026-09-29T22:52:03.040225+00:00'
|
||||
tags:
|
||||
- ready-to-merge
|
||||
- line-q
|
||||
- q1
|
||||
- q4
|
||||
---
|
||||
|
||||
# 检查点:测试交付 Q · Q1 + Q4 骨架
|
||||
|
||||
- 线名:测试交付 Q
|
||||
- 任务:Q1 测试基础设施;Q4 Docker 镜像骨架(本波不做弱网压测、验收用例、不 docker push)
|
||||
- 分支:feat/q-infra
|
||||
- 工作树:e:\\code\\NixMsg-wt\\q(基于 origin/main @ 22c56d1)
|
||||
|
||||
## 完成内容
|
||||
1. test/chaos:toxiproxy 官方镜像 compose(-p q-chaos,容器 q-toxiproxy)、Go 客户端(延迟/断开)、netem Linux 容器脚本与 README;单元测试用 httptest。
|
||||
2. test/load:MQTT 多连接压测骨架 + mqttbench 命令;假 broker 单元测试打印连接数(未压到 1000/10 分钟)。
|
||||
3. test/report:F01–F23 验收报告生成器 + 空结果样例 + genreport;单元测试与样例输出。
|
||||
4. deploy:多阶段 Dockerfile(Node→Go→distroless static nonroot)、docker-compose.yml(镜像 git.asio.asia/nixevol/nixmsg,healthcheck /nixmsg healthcheck)、config.docker.yaml;根目录 .dockerignore。
|
||||
5. 为健康检查在 cmd/nixmsg 增加 healthcheck 子命令(共享目录小改动,已记 DEVIATIONS)。
|
||||
6. docs/DEVIATIONS.md「测试交付 Q」节已写。
|
||||
|
||||
## 验证
|
||||
- task check:通过
|
||||
- go test ./test/chaos ./test/load ./test/report:通过
|
||||
- docker build 当前架构成功;冒烟 /healthz=200,healthcheck exit=0(命名卷需先 chown 65532)
|
||||
- toxiproxy compose 可起可清;未 docker push
|
||||
|
||||
## 未完成 / 下一步
|
||||
- Q2 验收用例、Q3 弱网崩溃压测、Q4 多架构 buildx 与推送、Q5 文档
|
||||
- 压测未到 1000 连接;F01–F23 全未测
|
||||
- 给下个会话:只在 e:\\code\\NixMsg-wt\\q 工作;rebase origin/main 后再合;勿强推 main;命名卷权限坑见 DEVIATIONS 第 8 条
|
||||
+54
@@ -0,0 +1,54 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-29 22:53:35 UTC [d445e380d4]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-29-22-53-35-utc-d445e380d4
|
||||
stable_id: acc1b400-897d-43fd-a25c-2a607acdf737
|
||||
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: p-platform-p1-p4-20260930-ready
|
||||
created_at: '2026-09-29T22:53:35.227926+00:00'
|
||||
updated_at: '2026-09-29T22:53:35.227926+00:00'
|
||||
tags:
|
||||
- ready-to-merge
|
||||
- line-P
|
||||
- feat/p-platform
|
||||
- P1
|
||||
- P2
|
||||
- P3
|
||||
- P4
|
||||
---
|
||||
|
||||
# 检查点:平台线 P1–P4 ready-to-merge
|
||||
|
||||
## 完成内容
|
||||
- 分支 `feat/p-platform`(基于 origin/main `22c56d1`)完成 P1–P4 并推送。
|
||||
- 工作树:`e:\code\NixMsg-wt\p`(未改主工作区)。
|
||||
- 提交:
|
||||
- `d777a1e` feat: 实现配置校验与运维命令及优雅停机(P1)
|
||||
- `f2fe4bd` feat: 实现写入队列合并事务与 SAVEPOINT 隔离(P2)
|
||||
- `47d627c` feat: 实现 argon2 哈希池、令牌与登录锁定计数(P3)
|
||||
- `bbdd4af` feat: 注册 Prometheus 指标与 Handler(P4)
|
||||
|
||||
## 关键实现
|
||||
- P1:`internal/config.Validate`(拒 max_body_bytes>262144);命令 admin init/set-password、backup、check-config、healthcheck;slog JSON;serve 需已 init;/readyz;停机 Drain≤10s。
|
||||
- P2:写 goroutine 合并(≤256 或 2ms)、SAVEPOINT;`store.ErrBusy` + Ready。
|
||||
- P3:`auth.Pool`(argon2id 19MiB/t=2/p=1,池=CPU)、Session/API 令牌、MemoryLocks。
|
||||
- P4:`internal/metrics` 注册表与 Handler(未挂路由)。
|
||||
- 未改:protocol/listener/broker/web/sdk、wire.go、PRD;DEVIATIONS 仅「平台 P」。
|
||||
|
||||
## 验证
|
||||
- 工作树内 `task check` 通过(build/lint/test)。
|
||||
- 推送:`origin/feat/p-platform`(普通推送,未强推,未推 main)。工作区干净。
|
||||
|
||||
## 没做完 / 给下个会话
|
||||
- `wire.go` 仍用 auth Stub;真实 `NewPool` 等需接线。
|
||||
- `/metrics` 未挂 serve(A 线访问规则)。
|
||||
- 停机路径尚无 MQTT 长连接踢除(等 N 线)。
|
||||
- 写队列 commit 耗时未自动打到 metrics(字段已提供,接线时绑定)。
|
||||
|
||||
## 下一步
|
||||
- 总控审阅后 ff-merge `feat/p-platform`;各线 rebase。
|
||||
+50
@@ -0,0 +1,50 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-29 22:56:39 UTC [438ad92039]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-29-22-56-39-utc-438ad92039
|
||||
stable_id: a6940015-26eb-4705-b4e4-b6bd48aa3d73
|
||||
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: w-admin-ui-w1w2w3-20260930-dfc5ec7
|
||||
created_at: '2026-09-29T22:56:39.496737+00:00'
|
||||
updated_at: '2026-09-29T22:56:39.496737+00:00'
|
||||
tags:
|
||||
- ready-to-merge
|
||||
- line-W
|
||||
- feat/w-admin-ui
|
||||
- W1
|
||||
- W2
|
||||
- W3
|
||||
---
|
||||
|
||||
## W1–W3 完成(线 W)ready-to-merge
|
||||
|
||||
- **分支**:feat/w-admin-ui
|
||||
- **工作树**:e:\\code\\NixMsg-wt\\w(勿在 e:\\code\\NixMsg 主目录改)
|
||||
- **基线**:origin/main @ 22c56d1
|
||||
- **提交**:dfc5ec7 feat: 实现管理后台 W1-W3 假数据界面
|
||||
- **推送**:origin/feat/w-admin-ui(未推 main)
|
||||
|
||||
## 完成内容
|
||||
- W1:zhCN + size=small、message/dialog provider、页头固定+内容区滚动、登录与路由守卫、请求封装 X-Nixmsg-Request、表单 label-left、HelpTip、时间本地格式化
|
||||
- W2:端列表筛选/多选批量、开通编辑弹窗、CSV 导入、重置密码/对话密码/解锁/踢下线;密码只显示一次
|
||||
- W3:概览、注册设置、群、投递记录(无正文)、API 令牌只显示一次、改管理员密码、只读运行参数
|
||||
- 假数据集中在 web/src/api/admin.ts → mock.ts;http.ts 供 W4
|
||||
- DEVIATIONS「后台网页 W」五条
|
||||
|
||||
## 验证
|
||||
- 工作树 web/:pnpm typecheck、pnpm lint、pnpm test 均通过(6 tests)
|
||||
- 未提交 node_modules、dist
|
||||
|
||||
## 未做
|
||||
- W4 真实接口与 Playwright
|
||||
- 操作日志页(契约无查询路由)
|
||||
|
||||
## 给下个会话
|
||||
- 假登录 admin / adminpassword
|
||||
- W4 只需改 admin.ts 走 requestAdmin
|
||||
- rebase 用 --force-with-lease 只推 feat/w-admin-ui
|
||||
+48
@@ -0,0 +1,48 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-29 22:58:10 UTC [5ae4e332d0]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-29-22-58-10-utc-5ae4e332d0
|
||||
stable_id: d2c8ac5a-a55b-4bc1-bc4b-03ea06627f25
|
||||
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: s1-sdk-ready-20260930-0658
|
||||
created_at: '2026-09-29T22:58:10.073682+00:00'
|
||||
updated_at: '2026-09-29T22:58:10.073682+00:00'
|
||||
tags:
|
||||
- ready-to-merge
|
||||
- s1
|
||||
- sdk
|
||||
---
|
||||
|
||||
# S1 任务 1–3 完成(Go / JS SDK)
|
||||
|
||||
## 分支与路径
|
||||
- 分支:`feat/s1-sdk`(已推送 origin)
|
||||
- 工作树:`e:\code\NixMsg-wt\s1`
|
||||
- 提交:`3b7faed` feat: 实现 Go 与 JS/TS SDK 连接收发与其余接口
|
||||
- 基于 rebase 后的 origin/main
|
||||
|
||||
## 完成内容
|
||||
- Go:`sdk/go` 模块 `git.asio.asia/nixevol/NixMsg/sdk/go`,包名 `nixmsg`;autopaho + ConnectPacketBuilder 每次 Clean Start/会话过期 0;握手/令牌/退避;发送队列 1000/在途 100;去重再 ack;撤回/状态/回执/在线/目录/群/self/logout/注册 HTTP。
|
||||
- JS:`sdk/js` 包 `@nixevol/nixmsg`;MQTT.js;同等行为;tsup 出 ESM+CJS;license SEE LICENSE IN LICENSE。
|
||||
- `docs/DEVIATIONS.md`「SDK 一 S1」节已写。
|
||||
|
||||
## 验证
|
||||
- `go test ./...`:通过
|
||||
- `npm test`(vitest):8/8 通过
|
||||
- `npm run build`:ESM+CJS+d.ts 成功
|
||||
- 未发布 npm
|
||||
|
||||
## 未完成
|
||||
- 任务 4 真实服务器接入清单(15 条)— 留给后续波次
|
||||
- 任务 5 README/示例/正式打包试跑
|
||||
- JS 回调方法名为 `onSessionHandler` 等(见 DEVIATIONS S1.5)
|
||||
|
||||
## 给下个会话
|
||||
- 合并前可再 rebase origin/main
|
||||
- 接入清单依赖 N3/M3/I2/I4 合进 main 后用 harness 起真实服务
|
||||
- 不要改 PRD;只动 sdk/go、sdk/js 与 DEVIATIONS 本线节
|
||||
+63
@@ -0,0 +1,63 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-29 23:00:23 UTC [b7ab01a068]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-29-23-00-23-utc-b7ab01a068
|
||||
stable_id: 60b17751-9839-479d-a66e-5ba25450f505
|
||||
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: wave1-partial-merged-20260930-0655
|
||||
created_at: '2026-09-29T23:00:23.428462+00:00'
|
||||
updated_at: '2026-09-29T23:00:23.428462+00:00'
|
||||
tags:
|
||||
- wave1
|
||||
- merged
|
||||
- main
|
||||
- ready-for-wave2
|
||||
---
|
||||
|
||||
# 检查点:第一波部分合并完成(P/N/M/I/A/Q)
|
||||
|
||||
## 完成内容
|
||||
在主工作区 `e:\\code\\NixMsg` 按顺序快进合并第一波 6 个已完成分支进 `main`,并推送 `origin/main`。未开始第二波;未改动仍在开发的工作树 `w` / `s1` / `s2`。
|
||||
|
||||
## main 最终 hash
|
||||
- 起点 `origin/main`:`22c56d1`(feat: 补齐模块接口契约与管理 API 文档)
|
||||
- 最终 `origin/main`:`8dde5645178cccf3eecbf3ad74823b313614450a`(`8dde564` feat: 测试交付 Q1 混沌压测骨架与 Q4 镜像骨架)
|
||||
|
||||
## 每条分支结果
|
||||
|
||||
| 顺序 | 分支 | 原尖端 | rebase 后 | 合并 | task check | 工作树删除 | 备注 |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| 1 | feat/p-platform | bbdd4af | bbdd4af(已基于 main,无冲突) | 成功 → main `bbdd4af` | 通过 | 已删 `e:\\code\\NixMsg-wt\\p` | 无冲突 |
|
||||
| 2 | feat/n-connect | 151707b | 532ee44 | 成功 → main `532ee44` | 通过 | 已删 `e:\\code\\NixMsg-wt\\n` | go.mod/go.sum 冲突:双方依赖保留后 `go mod tidy`(保留 mochi、coder/websocket、prometheus、argon2/crypto) |
|
||||
| 3 | feat/m1-submit | cd7a7e4 | 8bcb5c6 | 成功 → main `8bcb5c6` | 通过 | 已删 `e:\\code\\NixMsg-wt\\m` | DEVIATIONS 自动合并,无手工冲突 |
|
||||
| 4 | feat/i1-register | 3f6f942 | 308b0b9 | 成功 → main `308b0b9` | 通过 | 已删 `e:\\code\\NixMsg-wt\\i` | 无冲突 |
|
||||
| 5 | feat/a1-admin-auth | e10716a | 0e068c6 | 成功 → main `0e068c6` | 通过 | 已删 `e:\\code\\NixMsg-wt\\a` | 无冲突 |
|
||||
| 6 | feat/q-infra | c3e0c6a | 8dde564 | 成功 → main `8dde564` | 通过 | 已删 `e:\\code\\NixMsg-wt\\q` | 见下 |
|
||||
|
||||
远端各 `feat/*` 分支均 force-with-lease 更新后保留;未强推、未 reset --hard main。
|
||||
|
||||
## Q 冲突处理
|
||||
- `cmd/nixmsg/main.go`:保留 P 的命令注册(admin / backup / check-config / healthcheck)及统一错误出口。
|
||||
- `cmd/nixmsg/healthcheck.go`:采用 Q 的实现(配置缺失回退 Default、resolveHealthAddr、rewriteLoopback,适配 Docker HEALTHCHECK);P 的同名命令入口保留。
|
||||
- `docs/DEVIATIONS.md`:自动合并,保留总控 L、平台 P、连接 N、消息 M、身份 I、后台接口 A、后台网页 W、SDK S1/S2、测试交付 Q 各节。
|
||||
|
||||
## 验证
|
||||
每次 ff-merge 后均在主工作区跑 `task check`(web build、embeddist build、golangci-lint 0、go test ./...),全部通过后再 `git push origin main`。
|
||||
|
||||
## 审阅要点(快速 diff)
|
||||
- 无密码明文、无 `web/dist`、无数据库文件、未改 PRD 产品行为;偏差已在 DEVIATIONS 写明并接受。
|
||||
|
||||
## 当前工作树(未动)
|
||||
- `E:/code/NixMsg-wt/w` feat/w-admin-ui
|
||||
- `E:/code/NixMsg-wt/s1` feat/s1-sdk
|
||||
- `E:/code/NixMsg-wt/s2` feat/s2-sdk
|
||||
|
||||
## 下一步 / 给下个会话
|
||||
- 第一波可合并线已全部进 main;可通知仍在开发的 W/S1/S2 rebase `origin/main`(`8dde564`)。
|
||||
- 第二波按 TASKS 派工;合入后接线:P auth/metrics、N listener/broker、M Submit、I Register、A admin Handler 进 `cmd/nixmsg`/`wire`。
|
||||
- 勿强推 main;勿动别人未提交工作树。
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-29 23:02:17 UTC [abead28971]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-29-23-02-17-utc-abead28971
|
||||
stable_id: 15b176a5-e3c1-44f1-8918-d4ebc0447fda
|
||||
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: s2-sdk-ready-20260930-0702
|
||||
created_at: '2026-09-29T23:02:17.057457+00:00'
|
||||
updated_at: '2026-09-29T23:02:17.057457+00:00'
|
||||
tags:
|
||||
- ready-to-merge
|
||||
- S2
|
||||
- sdk
|
||||
---
|
||||
|
||||
## S2 SDK 任务 1–3 完成
|
||||
|
||||
- 线:SDK 二 S2
|
||||
- 分支:`feat/s2-sdk`(已推送 `origin/feat/s2-sdk`)
|
||||
- 提交:`96f5c58` feat: 实现 Python 与 Java SDK 连接收发及其余接口
|
||||
- 工作树:`e:\code\NixMsg-wt\s2`
|
||||
- 基线:rebase 到最新 `origin/main`(含 22c56d1 之后的合并)
|
||||
|
||||
### 完成内容
|
||||
- Python `sdk/python` 包 `nixmsg`:同步 Client + AsyncClient;paho-mqtt 2.x VERSION2;假传输单测 8 通过
|
||||
- Java `sdk/java` 坐标 `asia.asio.nixmsg:nixmsg-sdk`:CompletableFuture;HiveMQ + netty-codec-http WebSocket;字节码 major 52(Java 8);JUnit 8 通过
|
||||
- 行为:Clean Start/会话过期 0、退避、令牌回调、发送队列与 rate_limited 重交、去重再 ack、其余协议接口、注册 URL 推导
|
||||
- `docs/DEVIATIONS.md` 「SDK 二 S2」已写
|
||||
|
||||
### 验证
|
||||
- Python:`pytest` 8 passed
|
||||
- Java:`mvn test` 8 passed,`javap` major version 52
|
||||
|
||||
### 未做(本波范围外)
|
||||
- 任务 4:对真实服务器的接入清单集成测试
|
||||
- 任务 5:打包试运行与正式发布(PyPI/Maven)
|
||||
|
||||
### 给下个会话
|
||||
- 合并前总控审阅 `feat/s2-sdk`;任务 4 依赖 N3/M3/I2/I4 合入后用 harness 起真服务
|
||||
- 不要发布包;不要强推 main
|
||||
+52
@@ -0,0 +1,52 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-29 23:04:24 UTC [cf294d43a1]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-29-23-04-24-utc-cf294d43a1
|
||||
stable_id: 33efdbb4-a32e-43fb-a448-01debfabc238
|
||||
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: wave1-w-s1-merged-20260930T070400Z
|
||||
created_at: '2026-09-29T23:04:24.391474+00:00'
|
||||
updated_at: '2026-09-29T23:04:24.391474+00:00'
|
||||
tags:
|
||||
- wave1
|
||||
- merged
|
||||
- w
|
||||
- s1
|
||||
- main
|
||||
---
|
||||
|
||||
# 检查点:第一波 W + S1 合并完成
|
||||
|
||||
## 完成内容
|
||||
在主工作区 `e:\\code\\NixMsg` 按顺序快进合并 `feat/w-admin-ui`、`feat/s1-sdk` 进 `main` 并推送。未开始第二波;未改动工作树 `e:\\code\\NixMsg-wt\\s2`(Python/Java SDK 仍在做)。
|
||||
|
||||
## main 最终 hash
|
||||
- 合并前 `origin/main`:`8dde5645178cccf3eecbf3ad74823b313614450a`
|
||||
- 最终 `origin/main`:`9650cbff76e51024539ab5ecdded18d8bf21b300`(`9650cbf` feat: 实现 Go 与 JS/TS SDK 连接收发与其余接口)
|
||||
|
||||
## 每条分支结果
|
||||
|
||||
| 顺序 | 分支 | 原尖端 | rebase 后 | 合并 | 验证 | 工作树删除 | 冲突 |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| 1 | feat/w-admin-ui | dfc5ec7(基线旧 22c56d1) | 1cff321 | 成功 → main `1cff321` | task check 通过 | 已删 `e:\\code\\NixMsg-wt\\w` | 无冲突(自动 rebase) |
|
||||
| 2 | feat/s1-sdk | 3b7faed(基线 bbdd4af) | 9650cbf | 成功 → main `9650cbf` | task check + sdk/go `go test ./...` + sdk/js `npm test`(8/8)通过 | 已删 `e:\\code\\NixMsg-wt\\s1` | 无冲突(自动 rebase) |
|
||||
|
||||
## 冲突处理
|
||||
两次 rebase 均无手工冲突。`docs/DEVIATIONS.md` 保留总控 L、平台 P、连接 N、消息 M、身份 I、后台接口 A、后台网页 W、SDK 一 S1、SDK 二 S2、测试交付 Q 各节。W 未动 go.mod;embed(web/embed.go、embed_dist.go、embed_stub.go、stub)保留。S1 仅增 sdk/go、sdk/js 与 DEVIATIONS S1 节。
|
||||
|
||||
## 审阅
|
||||
- 无密码明文(W 假登录 admin/adminpassword 仅为 mock UI,已写 DEVIATIONS)、无 web/dist、无 node_modules、无数据库文件入仓、未改 PRD。
|
||||
- 远端 feat 分支 force-with-lease 更新后保留;未强推、未 reset --hard main。
|
||||
|
||||
## 当前工作树
|
||||
- `E:/code/NixMsg-wt/s2` feat/s2-sdk(未动)
|
||||
|
||||
## 下一步 / 给下个会话
|
||||
- 第一波剩余可合并线(W、S1)已进 main;S2 仍在开发,勿动其工作树。
|
||||
- 可按 TASKS 开始第二波派工;合入后接线:P/N/M/I/A 进 cmd/nixmsg/wire;W4 接真实管理 API;SDK 接入清单等真实服务。
|
||||
- 勿强推 main;勿开始破坏性操作。
|
||||
+53
@@ -0,0 +1,53 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-29 23:07:55 UTC [c41d9b7642]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-29-23-07-55-utc-c41d9b7642
|
||||
stable_id: c7f3e7d6-c559-41ee-b040-b9a42a68a1b2
|
||||
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: s2-merged-20260930T070800
|
||||
created_at: '2026-09-29T23:07:55.830305+00:00'
|
||||
updated_at: '2026-09-29T23:07:55.830305+00:00'
|
||||
tags:
|
||||
- merged
|
||||
- s2
|
||||
- feat/s2-sdk
|
||||
---
|
||||
|
||||
# 检查点:feat/s2-sdk 已合并进 main
|
||||
|
||||
## 完成内容
|
||||
- 仅合并 `feat/s2-sdk`(Python/Java SDK)进 `main`,未开第二波。
|
||||
- 主工作区 `e:\\code\\NixMsg`;远端 `https://git.asio.asia/nixevol/NixMsg.git`。
|
||||
|
||||
## 合并过程
|
||||
1. `git fetch origin`:`origin/main`=9650cbf,`origin/feat/s2-sdk` 原尖端=96f5c58。
|
||||
2. 工作树 `e:\\code\\NixMsg-wt\\s2` 已存在;在其上 `git rebase origin/main`。
|
||||
3. **冲突:无。** rebase 1/1 直接成功,新 tip=`d357082`。无需手工合并 DEVIATIONS。
|
||||
4. 审核通过:未改 PRD;无密码/令牌;无构建产物/数据库;改动仅 `docs/DEVIATIONS.md` + `sdk/python` + `sdk/java`;`sdk/go`、`sdk/js`、`web` 仍在;DEVIATIONS 保留各线小节含「SDK 二 S2」。
|
||||
5. `git push --force-with-lease origin feat/s2-sdk`:96f5c58→d357082。
|
||||
6. 主工作区干净后 `git merge --ff-only feat/s2-sdk` 成功:9650cbf→d357082。
|
||||
|
||||
## 验证结果
|
||||
- `task check`:通过(web build、go build、golangci-lint 0 issues、go test 全绿)。
|
||||
- `sdk/python`:`uv venv` + `uv pip install -e ".[dev]"` 后 `pytest -q` → **8 passed**。
|
||||
- `sdk/java`:scoop Maven + Temurin 21,`mvn test` → **Tests run: 8, Failures: 0, BUILD SUCCESS**。
|
||||
|
||||
## 收尾
|
||||
- `git push origin main`:9650cbf..d357082(普通推送,未 force)。
|
||||
- `git worktree remove e:\\code\\NixMsg-wt\\s2`:成功删除。
|
||||
- 远端分支 `feat/s2-sdk` **保留**。
|
||||
- 临时清理:删除本地 `sdk/python/.venv`、`sdk/java/target`(未进仓库)。
|
||||
|
||||
## main 最终 hash
|
||||
`d357082f3dcaa494acec44419cdf34bfae060e02`
|
||||
|
||||
## 下一步 / 给下个会话
|
||||
- 本波只合 S2,不要自动开第二波。
|
||||
- 其他线若仍基于旧 main,需 `rebase origin/main`。
|
||||
- 远端 `feat/s2-sdk` 仍在,需要时再删。
|
||||
- 避开:本机默认 `python -m pytest` / `mvn` 可能不在 PATH;Python 用 uv venv,Maven 在 `D:\\Program Files\\scoop\\apps\\maven\\current\\bin`。
|
||||
+43
@@ -0,0 +1,43 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-29 23:08:05 UTC [2a0f78b49b]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-29-23-08-05-utc-2a0f78b49b
|
||||
stable_id: 72f032ce-8830-4830-b931-a171834a0439
|
||||
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: s2-merged-20260930T070830
|
||||
created_at: '2026-09-29T23:08:05.183254+00:00'
|
||||
updated_at: '2026-09-29T23:08:05.183254+00:00'
|
||||
tags:
|
||||
- merged
|
||||
- s2
|
||||
- feat/s2-sdk
|
||||
---
|
||||
|
||||
# 检查点:feat/s2-sdk 已合并进 main(更正工作树状态)
|
||||
|
||||
## 完成内容
|
||||
- 仅合并 `feat/s2-sdk`(Python/Java SDK)进 `main`,未开第二波。
|
||||
- main 最终 hash:`d357082f3dcaa494acec44419cdf34bfae060e02`(已 `git push origin main`)。
|
||||
|
||||
## 合并与验证
|
||||
- rebase 到 origin/main:**无冲突**(1/1 成功)。
|
||||
- 审核:未改 PRD;无秘密值/构建产物/数据库;DEVIATIONS 各线小节含「SDK 二 S2」保留;sdk/go、sdk/js、web 仍在。
|
||||
- feat/s2-sdk force-with-lease:96f5c58→d357082。
|
||||
- ff-only merge 成功。
|
||||
- `task check`:通过。
|
||||
- Python pytest:8 passed。
|
||||
- Java `mvn test`:8 tests, BUILD SUCCESS。
|
||||
- 远端 `feat/s2-sdk` 保留。
|
||||
|
||||
## 工作树
|
||||
- `git worktree remove e:\\code\\NixMsg-wt\\s2` 曾报 Permission denied;已重试 force/手工删除,以最终报告为准。
|
||||
|
||||
## 下一步
|
||||
- 不自动开第二波。
|
||||
- 其他线需 rebase origin/main。
|
||||
- 测试工具:Python 用 uv venv;Maven 路径 `D:\\Program Files\\scoop\\apps\\maven\\current\\bin`。
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-29 23:08:13 UTC [5f2c665ccb]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-29-23-08-13-utc-5f2c665ccb
|
||||
stable_id: 4e5866be-5e88-4b99-b473-6c72cf92c944
|
||||
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: s2-merged-20260930T070850
|
||||
created_at: '2026-09-29T23:08:13.917553+00:00'
|
||||
updated_at: '2026-09-29T23:08:13.917553+00:00'
|
||||
tags:
|
||||
- merged
|
||||
- s2
|
||||
- feat/s2-sdk
|
||||
- ready
|
||||
---
|
||||
|
||||
# 检查点:feat/s2-sdk 已成功合并进 main
|
||||
|
||||
## 结果:成功
|
||||
- main 最终 hash:`d357082f3dcaa494acec44419cdf34bfae060e02`
|
||||
- 已普通推送 `origin/main`(9650cbf..d357082)
|
||||
- 远端 `feat/s2-sdk` 保留(tip=d357082)
|
||||
- 未开第二波
|
||||
|
||||
## 冲突
|
||||
- rebase origin/main:**无冲突**,无需手工处理。DEVIATIONS 各线小节(含「SDK 二 S2」)与 sdk/go、sdk/js、web 均保留。
|
||||
|
||||
## 验证
|
||||
- task check:通过
|
||||
- sdk/python pytest:8 passed
|
||||
- sdk/java mvn test:8 passed, BUILD SUCCESS
|
||||
|
||||
## 工作树
|
||||
- git 已注销 worktree(`git worktree list` 仅剩 main)
|
||||
- 目录 `e:\\code\\NixMsg-wt\\s2` **未能删除**:Permission denied,`sdk\\java` 被占用。需人工关闭占用进程后再删目录。
|
||||
|
||||
## 给下个会话
|
||||
- 不要自动开第二波。
|
||||
- 其他线 rebase origin/main。
|
||||
- 手动清理残留目录 `e:\\code\\NixMsg-wt\\s2`。
|
||||
+48
@@ -0,0 +1,48 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-29 23:18:26 UTC [af45ce3094]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-29-23-18-26-utc-af45ce3094
|
||||
stable_id: c59fe148-2424-4117-9363-e1a2cb1bef39
|
||||
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: a2-endpoints-ready-20260930-0710
|
||||
created_at: '2026-09-29T23:18:26.441603+00:00'
|
||||
updated_at: '2026-09-29T23:18:26.441603+00:00'
|
||||
tags:
|
||||
- ready-to-merge
|
||||
- A2
|
||||
- admin
|
||||
- feat/a2-endpoints
|
||||
---
|
||||
|
||||
# 检查点:A2 端管理完成(ready-to-merge)
|
||||
|
||||
## 线 / 任务
|
||||
- 后台接口 A · A2 端管理
|
||||
- 分支:`feat/a2-endpoints`(已推送 `origin/feat/a2-endpoints`)
|
||||
- 提交:`419a641` feat: 实现管理后台端管理接口(A2)
|
||||
- 工作树:`e:\\code\\NixMsg-wt\\a2`
|
||||
- 基线:`origin/main` = `d357082`
|
||||
|
||||
## 完成内容
|
||||
- 在 A1 Handler 上将端相关 501 换成真实现:列表(source/online/enabled/query)、开通、CSV 批量开通(BOM、整批校验最多 1000)、batch 停用/启用/删除、详情、PATCH、DELETE、kick、reset-login-password、talk-password、unlock
|
||||
- `Deps.KickEndpoint` 踢连接钩子;停用立刻 enabled=0 并清 session_hash
|
||||
- 生成密码不进日志;重置密码响应只出现一次并作废会话令牌
|
||||
- `docs/DEVIATIONS.md`「后台接口 A」增补 A2 节,保留其他线各节
|
||||
|
||||
## 验证
|
||||
- `task check` 通过
|
||||
- httptest:CSV 一行重复则全部不建并指出行号;重置密码只出现一次;无 CSRF 仍 403
|
||||
|
||||
## 级联未做(留给 I5)
|
||||
- 停用/删除不作废消息与投递(endpoint_disabled/sender_disabled 等)
|
||||
- 删除不退群、不转让群主/解散、不清回执与发出记录(仅删 endpoints + talk_grants)
|
||||
|
||||
## 给下个会话
|
||||
- 总控审阅后 ff-only 合并;接线注入 KickEndpoint 到 broker
|
||||
- I5 合入后 Disable/Delete 应接管完整级联
|
||||
- 勿强推 main;本分支已 force-with-lease 非必要(普通推送新建远端分支)
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-29 23:20:35 UTC [74fd60068a]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-29-23-20-35-utc-74fd60068a
|
||||
stable_id: 9c126fa6-5665-4028-891b-dbdbcecd0658
|
||||
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: q2-accept-ready-b4a72e5-20260930
|
||||
created_at: '2026-09-29T23:20:35.596385+00:00'
|
||||
updated_at: '2026-09-29T23:20:35.596385+00:00'
|
||||
tags:
|
||||
- ready-to-merge
|
||||
- Q
|
||||
- Q2
|
||||
- feat/q2-accept
|
||||
---
|
||||
|
||||
## Q2 第一部分完成(已合并功能验收)
|
||||
|
||||
- 线:测试交付 Q
|
||||
- 任务:Q2 第一部分
|
||||
- 分支:`feat/q2-accept`(已推送 `origin/feat/q2-accept`)
|
||||
- 提交:`b4a72e5` test: 补 Q2 已有功能集成验收与 F01-F23 对照表
|
||||
- 工作树:`e:\code\NixMsg-wt\q2`
|
||||
- 基线:`origin/main` = `d357082`
|
||||
|
||||
### 完成内容
|
||||
- `test/accept`:用 harness 随机端口/临时目录起真实二进制
|
||||
- 已测通过:F22 子集(admin init + serve + /healthz + /readyz,密码不在 serve 日志)
|
||||
- 探测后未测:F17(admin 未挂 serve)、F23(注册未挂)、F01(开通端未挂);接线后同一测试会跑登录锁定/CSRF/注册/开通
|
||||
- 报告:`test/accept/ACCEPTANCE.md`、`test/report/testdata/q2_results.json`;`task q:accept` / `task q:report-q2`
|
||||
- `docs/DEVIATIONS.md`「测试交付 Q」已追加 Q2 节,保留其他节
|
||||
|
||||
### 验证
|
||||
- `task check` 通过
|
||||
- `go test ./test/...` 通过
|
||||
|
||||
### 给下个会话
|
||||
- 标签 `ready-to-merge`;总控可审阅合并
|
||||
- 勿改业务代码求绿;接线后重跑 `task q:accept` 更新对照表
|
||||
- 不推 main
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
---
|
||||
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`;启调度与清理循环
|
||||
+49
@@ -0,0 +1,49 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-29 23:25:57 UTC [a8807dc613]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-29-23-25-57-utc-a8807dc613
|
||||
stable_id: 64c5657e-8be3-4970-945a-19248fbccb79
|
||||
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: n3-ready-20260930-34e7c28
|
||||
created_at: '2026-09-29T23:25:57.146375+00:00'
|
||||
updated_at: '2026-09-29T23:25:57.146375+00:00'
|
||||
tags:
|
||||
- ready-to-merge
|
||||
- N3
|
||||
- 连接N
|
||||
- feat/n3-login
|
||||
---
|
||||
|
||||
# 检查点:连接 N · N3 ready-to-merge
|
||||
|
||||
## 完成内容
|
||||
- N3 登录/会话令牌/握手/顶号/logout/管理员踢线入口
|
||||
- `broker.Login`:nst_ 令牌 SHA-256 常量时间比较、闲置天数、密码登录+两种锁定、内部故障返回 error
|
||||
- `broker.Session`:hello(含 session_token)、30s 超时、未订 down 断开、not_ready、online/offline_since、PresenceSink、self.logout、Disable/Deleted/ResetPassword/Kick
|
||||
- 连接代号区分顶号旧连接;InlineClient OnPublish 放行修复 PublishDown
|
||||
- F02 测试覆盖;`task check` 通过
|
||||
|
||||
## 分支 / 路径
|
||||
- 分支:`feat/n3-login`(已推送 origin,未推 main)
|
||||
- 工作树:`e:\\code\\NixMsg-wt\\n3`
|
||||
- tip:`34e7c2827f0321a18768786a6904af4b3f450211`
|
||||
- 基于:`origin/main` @ `d357082`
|
||||
|
||||
## 验证
|
||||
- `task check` 通过(含 broker F02)
|
||||
|
||||
## 没做完
|
||||
- 未改 `cmd/nixmsg`/`wire.go` 接线
|
||||
- self.login_password 属 I2
|
||||
- presence MQTT 推送属 I3(仅 PresenceSink + port 回调)
|
||||
- OnPublishDropped 清推送标记属 M
|
||||
|
||||
## 给下个会话
|
||||
- 总控可审阅后 ff-merge;接线注入 Login+Session
|
||||
- session_hash 为 hex
|
||||
- 勿强推 main
|
||||
+53
@@ -0,0 +1,53 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-29 23:26:04 UTC [fbeda10e36]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-29-23-26-04-utc-fbeda10e36
|
||||
stable_id: 2d4e1cd4-1697-4ea0-aa18-f0d19b270200
|
||||
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: ckpt-i2-i4-ba6cc9f-20260930
|
||||
created_at: '2026-09-29T23:26:04.049600+00:00'
|
||||
updated_at: '2026-09-29T23:26:04.049600+00:00'
|
||||
tags:
|
||||
- ready-to-merge
|
||||
- I
|
||||
- I2
|
||||
- I3
|
||||
- I4
|
||||
- feat/i-identity
|
||||
---
|
||||
|
||||
# 检查点:身份 I I2–I4 完成(ready-to-merge)
|
||||
|
||||
## 线 / 任务
|
||||
- 线:身份 I
|
||||
- 任务:I2 自己的资料和对话密码、I3 在线与目录、I4 群
|
||||
- 分支:`feat/i-identity`(已推送 `origin/feat/i-identity`)
|
||||
- 提交:`ba6cc9f` feat: 实现身份资料、对话密码、在线目录与群管理
|
||||
- 工作树:`e:\\code\\NixMsg-wt\\i2`
|
||||
- 基线:`origin/main` = `d357082`
|
||||
|
||||
## 完成内容
|
||||
- I2:`identity.App` — self.get/update/talk_password/login_password/logout、unlock、HasTalkGrant、CheckTalkPasswordForJoin、授权表 password/reply、锁定(对+对方 5m/10、对方总数 1h/50,改密清零)
|
||||
- I3:`presence.App` — presence.get(≤200)、directory.list(编号排序/前缀或名称包含/limit≤200)、presence.watch(≤1000 或 all、覆盖、断线清空)、QoS0 通知;在线读库字段 + 可注入 ConnTable + SetOnline/SetOffline
|
||||
- I4:`group.App` — create/add/remove/leave/transfer/rename/dissolve/list/get;部分失败仍建群;进群须当次密码;停用端不可入;群主不可直接退出;退群/踢人作废 pending+revoked;解散作废 pending 与 scheduled;群事件 QoS0
|
||||
- `docs/DEVIATIONS.md`「身份 I」增补 I2/I3/I4 节,保留其他节;未改 PRD
|
||||
|
||||
## 验证
|
||||
- `task check`:通过(web build、go build、golangci-lint 0 issues、go test ./... 全绿)
|
||||
- 包测:identity / presence / group 直接调用 + 临时 SQLite,覆盖 F15、F03/F04(不拔网线)、F06/F16
|
||||
|
||||
## 未接 MQTT 的部分
|
||||
- 未改 `cmd/nixmsg` / `wire.go`;无 HandleUplink 分发
|
||||
- presence/group_event/revoked 需注入 Downlink;logout 踢线需 ConnControl
|
||||
- N3 真实连接事件未接;拔网线心跳离线未测
|
||||
- I5 停用/删除仍 ErrNotImplemented
|
||||
|
||||
## 下一步 / 给下个会话
|
||||
- 总控审阅后 ff-only 合并 `feat/i-identity`
|
||||
- 接线:注入 Hash/Locks/Sessions/Downlink/ConnTable,HandleUplink 调 Service
|
||||
- 标签:ready-to-merge
|
||||
+47
@@ -0,0 +1,47 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-29 23:34:29 UTC [524ff93de3]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-29-23-34-29-utc-524ff93de3
|
||||
stable_id: 279ee02e-5064-483c-aa98-82b9800a3a3d
|
||||
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: wave2-merged-20260930-0734
|
||||
created_at: '2026-09-29T23:34:29.357062+00:00'
|
||||
updated_at: '2026-09-29T23:34:29.357062+00:00'
|
||||
tags:
|
||||
- wave2
|
||||
- merge-stopped
|
||||
- i-identity-failed
|
||||
---
|
||||
|
||||
# 检查点:第二波合并中途停止(i-identity 失败回滚)
|
||||
|
||||
## 完成内容
|
||||
1. `feat/n3-login`:rebase 已最新 → 审阅通过 → ff 合并 → `task check` 通过 → 推送 main → 删除工作树 `e:\\code\\NixMsg-wt\\n3`。进入 main 的 tip 曾为 `34e7c28`。
|
||||
2. `feat/m-delivery`:rebase 到含 n3 的 main → `bdd1d9e` → force-with-lease 推送 feat → 审阅通过 → ff 合并 → `task check` 通过 → 推送 main → 删除工作树 `e:\\code\\NixMsg-wt\\m2`。
|
||||
|
||||
## 失败点:feat/i-identity
|
||||
- 工作树 `e:\\code\\NixMsg-wt\\i2` rebase 成功(tip `a78ab0d`),force-with-lease 已推送 `origin/feat/i-identity`。
|
||||
- ff 合并进 main 后 `task check` **失败**:`internal/app/group.TestF06GroupSendMembership` 报 `state=completed`(测试期望非 completed,疑似与已合并的 M2 消息分发行为交互导致群发消息状态变为 completed)。
|
||||
- 已按规则 `git revert` 本次合并(revert 提交 `16ece09`),`task check` 恢复通过,已普通推送 `origin/main`。
|
||||
- **未删** i2 工作树(合并未成功保留,便于修复)。远端 feat 分支仍在 `a78ab0d`。
|
||||
|
||||
## 当前 main
|
||||
- hash:`16ece09a97f0a82ffc8aa68814db1bca1ec005bb`
|
||||
- 内容:n3-login + m-delivery + i-identity 的 revert(净效果 = n3 + m)
|
||||
- `task check`:通过
|
||||
|
||||
## 未做(按规则停止)
|
||||
- `feat/a2-endpoints`、`feat/q2-accept` 未合并
|
||||
- 接线 `feat/l-wire` 未开始
|
||||
- 第三波未开始
|
||||
|
||||
## 给下个会话
|
||||
1. 修复 `feat/i-identity`:在含 m-delivery 的 main 上 rebase 后修 `TestF06GroupSendMembership`(期望/桩依赖与 M2 完成态不一致),再 `task check` → ready-to-merge。
|
||||
2. 总控按原顺序继续:i-identity → a2-endpoints → q2-accept → 接线。
|
||||
3. 勿强推 main;feat rebase 后可用 `--force-with-lease`。
|
||||
4. i2 工作树仍在 `e:\\code\\NixMsg-wt\\i2`。
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-29 23:57:11 UTC [c3b74a1afc]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-29-23-57-11-utc-c3b74a1afc
|
||||
stable_id: a123a59c-d28c-4452-b0c5-3430a6dbfeaa
|
||||
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: wave2-fixed-20260930-0757
|
||||
created_at: '2026-09-29T23:57:11.851369+00:00'
|
||||
updated_at: '2026-09-29T23:57:11.851369+00:00'
|
||||
tags:
|
||||
- wave2
|
||||
- merge-complete
|
||||
- l-wire
|
||||
---
|
||||
|
||||
# 检查点:第二波修复完成(身份 F06 + a2 + q2 + 接线)
|
||||
|
||||
## 完成内容
|
||||
1. **feat/i-identity**:根因是测试把「离线且默认不保留」群发断言成 `dispatched`;M2 完整分发下投递立即 `dropped`,消息应为 `completed`(DEVELOPMENT 7.4/7.6)。改测试期望 `completed`,另加 `TestF06GroupSendKeepOfflinePending`;setup 改用 `LimitsFromFullConfig` 保留记录天数。因 main 上曾 ff 合并后 revert,用 `git revert` 撤销 revert 再叠测试修复。`task check` 通过后 ff 进 main,删 i2。
|
||||
2. **feat/a2-endpoints**:rebase → `task check` → ff → 推送 → 删 a2。
|
||||
3. **feat/q2-accept**:rebase → `task check`(含 test/accept)→ ff → 推送 → 删 q2。未改产品代码迎合旧「未测」。
|
||||
4. **feat/l-wire**:serve 真实接线;集成测三件通(管理登录、注册、MQTT 握手 session_token)。
|
||||
|
||||
## 当前 main
|
||||
- hash:`0efcfbb8b6a5dbe2a70b0c3b80326bd01a40009c`
|
||||
- `task check`:通过
|
||||
- 含:n3-login、m-delivery、i-identity(含 F06 修复)、a2-endpoints、q2-accept、l-wire
|
||||
|
||||
## 身份线怎么改的
|
||||
- 只改测试与 DEVIATIONS「身份 I」第 10 条;不改消息分发实现。
|
||||
- 离线 keep=false → completed + dropped;离线 keep=true → dispatched + pending。
|
||||
|
||||
## 没接上的部分(DEVIATIONS 总控 L / L-WIRE)
|
||||
- HandleUplink 除 hello/logout 外仍 Stub(send/ack/group/presence 业务帧未分发)
|
||||
- A3 管理注册设置 HTTP 未挂;测试写 settings 表
|
||||
- 第三波未开始
|
||||
|
||||
## 给下个会话
|
||||
1. 实现 HandleUplink 分发到 message/identity/group/presence
|
||||
2. A3 注册设置等管理路由
|
||||
3. 勿强推 main;第三波按 TASKS 另开
|
||||
+44
@@ -0,0 +1,44 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-30 00:07:03 UTC [9a6d816aec]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-30-00-07-03-utc-9a6d816aec
|
||||
stable_id: f7c8f7b3-c37b-4dd3-a92f-a01aed5f806d
|
||||
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: i5-disable-checkpoint-20260930-0759
|
||||
created_at: '2026-09-30T00:07:03.807958+00:00'
|
||||
updated_at: '2026-09-30T00:07:03.807958+00:00'
|
||||
tags:
|
||||
- ready-to-merge
|
||||
- I
|
||||
- I5
|
||||
- feat/i5-disable
|
||||
---
|
||||
|
||||
# 检查点:身份 I I5 完成(ready-to-merge)
|
||||
|
||||
## 线 / 任务
|
||||
- 线:身份 I
|
||||
- 任务:I5 停用与删除级联
|
||||
- 分支:`feat/i5-disable`(已推送 `origin/feat/i5-disable`)
|
||||
- 提交:`23f0342` feat: 实现端停用与删除的消息作废与群主转让级联
|
||||
- 工作树:`e:\\code\\NixMsg-wt\\i5`
|
||||
- 基线:`origin/main` = `0efcfbb`
|
||||
|
||||
## 完成内容
|
||||
- `identity.App.Disable/Enable/Delete`:清令牌、作废 pending/scheduled(endpoint_* / sender_*)、已推送发 revoked、删除时退群/转让最早加入成员/无人则解散、清授权/回执/防重/发出记录
|
||||
- `admin.Deps.Identity`:停用/启用/删除委托 I5;未注入时保留 A2 行为
|
||||
- 未改 `cmd/nixmsg`、未改上行分发、未改 PRD
|
||||
- `docs/DEVIATIONS.md`「身份 I」增补 I5 节
|
||||
|
||||
## 验证
|
||||
- `task check` 通过
|
||||
- 直接调用 + httptest:停用拒新消息、作废双向未到点定时;删群主转让最早成员;删后同号重开无旧回执
|
||||
|
||||
## 下一步 / 给下个会话
|
||||
- 总控审阅后 ff-only 合并;接线时给 admin 注入 Identity + KickEndpoint/Downlink
|
||||
- 标签:ready-to-merge
|
||||
+49
@@ -0,0 +1,49 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-30 00:07:30 UTC [86a2de0566]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-30-00-07-30-utc-86a2de0566
|
||||
stable_id: 38b4e546-8628-4547-821f-445f13713994
|
||||
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: ckpt-l-uplink-b8569b0-20260930
|
||||
created_at: '2026-09-30T00:07:30.321312+00:00'
|
||||
updated_at: '2026-09-30T00:07:30.321312+00:00'
|
||||
tags:
|
||||
- ready-to-merge
|
||||
- L
|
||||
- L-UPLINK
|
||||
- feat/l-uplink
|
||||
---
|
||||
|
||||
# 检查点:总控 L-UPLINK 完成(ready-to-merge)
|
||||
|
||||
## 线 / 任务
|
||||
- 线:总控 L
|
||||
- 任务:HandleUplink 分发到 message/identity/presence/group
|
||||
- 分支:`feat/l-uplink`(已推送 origin,未推 main)
|
||||
- 工作树:`e:\\code\\NixMsg-wt\\uplink`
|
||||
- 提交:`b8569b0` feat: 接线上行帧分发到 message/identity/presence/group
|
||||
- 基线:`origin/main` = `0efcfbb`
|
||||
|
||||
## 完成内容
|
||||
- `appUplink.HandleUplink` 分发:send/ack/receipt_ack/recall/status、unlock、self.get/update/talk_password/login_password、presence.get/watch、directory.list、group.create/add/remove/leave/transfer/rename/dissolve/list/get
|
||||
- Session 仍处理 hello/logout 与未握手 not_ready;结果经 PublishDown 回 resp
|
||||
- `presence.EncodeGetData` 薄封装;serve 注入 identity/group/presence + Downlink
|
||||
- DEVIATIONS「总控 L」增补 L-UPLINK 节,保留其他节;未改 PRD
|
||||
|
||||
## 验证
|
||||
- `task check`:通过
|
||||
- 集成测 `TestUplinkDMOfflineGroupRecall`:单聊、离线 keep、群发不含发送者、延迟内撤回对方无回调
|
||||
|
||||
## 仍没接上的帧 / 未覆盖
|
||||
- 上行不处理(非请求或由 Session/下行服务发):hello、self.logout、msg、receipt、revoked、presence 通知、group_event、fatal、resp
|
||||
- A3 管理注册设置 HTTP 未挂
|
||||
- presence.watch 通知与全部 group.* 变体未在集成测穷尽
|
||||
|
||||
## 给下个会话
|
||||
- 总控可审阅后 ff-only 合并 `feat/l-uplink`
|
||||
- 勿强推 main
|
||||
+52
@@ -0,0 +1,52 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-30 00:08:17 UTC [974592113c]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-30-00-08-17-utc-974592113c
|
||||
stable_id: 818c2a11-094f-428d-abf4-f92bc1bd11a3
|
||||
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: a3-checkpoint-68e790b-20260930
|
||||
created_at: '2026-09-30T00:08:17.135370+00:00'
|
||||
updated_at: '2026-09-30T00:08:17.135370+00:00'
|
||||
tags:
|
||||
- ready-to-merge
|
||||
- A3
|
||||
- 后台接口A
|
||||
- feat/a3-admin-rest
|
||||
---
|
||||
|
||||
# 检查点:后台接口 A · A3 ready-to-merge
|
||||
|
||||
## 线 / 任务
|
||||
- 线:后台接口 A
|
||||
- 任务:A3 注册设置、群管理、记录查询、概览、只读设置、/metrics 访问规则
|
||||
- 分支:`feat/a3-admin-rest`(已推送 origin,未推 main)
|
||||
- 提交:`68e790be60fa0177868aa1236bc91122f4802562` feat: 实现管理后台 A3 注册群消息概览与 metrics 门禁
|
||||
- 工作树:`e:\\code\\NixMsg-wt\\a3`
|
||||
- 基线:`origin/main` = `0efcfbb`
|
||||
|
||||
## 完成内容
|
||||
- GET/PUT `/api/admin/registration`:开关、手填/生成 16 位安全码;明文只给已登录管理员;审计不写码
|
||||
- 群:列表/创建/改名/解散/成员增减/转让;后台加人走 AdminAddMembers(无对话密码);列表详情 SQL,变更走 group.Service
|
||||
- GET messages 筛选与详情 deliveries;不读 message_bodies;响应无 body/正文
|
||||
- overview(含 endpoints_self)、settings 只读
|
||||
- `/metrics`:`httpx.MetricsGate`;共用端口无 token→404、错 token→401;单独 admin 监听不鉴权
|
||||
- serve 注入 Groups/Config/Version;未改上行分发、未改停用/删除处理函数
|
||||
- DEVIATIONS「后台接口 A」增补 A3 节
|
||||
|
||||
## 验证
|
||||
- `task check` 通过(web build、go build、golangci-lint 0、go test ./... 全绿)
|
||||
- httptest:注册开关、记录详情无测试正文、共用端口无令牌拿不到 /metrics
|
||||
|
||||
## 没做完的路由
|
||||
- A1/A2/A3 管理 REST 路由均已实现;无 501 stub
|
||||
- 未做:自定义群 id(非空 id 返回 400)
|
||||
|
||||
## 给下个会话
|
||||
- 总控审阅后 ff-only 合并 `feat/a3-admin-rest`
|
||||
- 标签:ready-to-merge
|
||||
- 勿强推 main
|
||||
+49
@@ -0,0 +1,49 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-30 00:08:50 UTC [8da387d273]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-30-00-08-50-utc-8da387d273
|
||||
stable_id: b5fd94f2-2b3e-45d1-8209-8b95e1679745
|
||||
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: uplink-merged-20260930T080800Z
|
||||
created_at: '2026-09-30T00:08:50.228286+00:00'
|
||||
updated_at: '2026-09-30T00:08:50.228286+00:00'
|
||||
tags:
|
||||
- merge
|
||||
- l-uplink
|
||||
- main
|
||||
---
|
||||
|
||||
# Checkpoint: feat/l-uplink 已合并进 main
|
||||
|
||||
## 完成内容
|
||||
- 将 `feat/l-uplink`(尖端 b8569b0)以 fast-forward 合并进 `main` 并推送远端。
|
||||
- 审核通过:无密码/令牌、无 `web/dist`、无数据库文件、未改 `docs/PRD.md`。变更文件:`cmd/nixmsg/serve.go`、`cmd/nixmsg/uplink.go`、`cmd/nixmsg/uplink_integration_test.go`、`docs/DEVIATIONS.md`、`internal/app/presence/encode.go`。
|
||||
- `task check`(build + lint + test)通过。
|
||||
- 已删除本地工作树 `e:\\code\\NixMsg-wt\\uplink`;远端分支 `origin/feat/l-uplink` 保留。
|
||||
- 未触碰工作树 `e:\\code\\NixMsg-wt\\i5` 与 `e:\\code\\NixMsg-wt\\a3`。
|
||||
|
||||
## 原因
|
||||
- 总控合并执行:`main` 仍停在基线 `0efcfbb`,无需 rebase,直接 `git merge --ff-only`。
|
||||
|
||||
## 关键实现
|
||||
- 上行帧分发接到 message/identity/presence/group;含集成测试与 presence encode。
|
||||
|
||||
## 验证结果
|
||||
- `task check`:通过(golangci-lint 0 issues;`go test ./...` 通过,含 `cmd/nixmsg` 与 `internal/app/presence`)。
|
||||
- `origin/main` = `b8569b0708f83d84423e03754194eacbb68fab50`。
|
||||
|
||||
## 问题与解决
|
||||
- 无。main 未前进,未触发 rebase / force-with-lease。
|
||||
|
||||
## 下一步
|
||||
- 继续其他线合并;勿动 i5/a3 工作树,除非对应任务完成。
|
||||
|
||||
## 给下个会话
|
||||
- main 最新 hash:`b8569b0`。
|
||||
- 远端 `feat/l-uplink` 仍在,可按策略日后清理。
|
||||
- 合并执行者约束:禁止对 main 使用 `--force` / `reset --hard`;凭证走 GCM。
|
||||
+61
@@ -0,0 +1,61 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-30 00:13:05 UTC [d29d67a680]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-30-00-13-05-utc-d29d67a680
|
||||
stable_id: 51ddc047-b1ae-4227-b0e4-f32d201969c1
|
||||
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: i5-a3-merged-20260930-081500
|
||||
created_at: '2026-09-30T00:13:05.237790+00:00'
|
||||
updated_at: '2026-09-30T00:13:05.237790+00:00'
|
||||
tags:
|
||||
- merge
|
||||
- i5
|
||||
- a3
|
||||
- main
|
||||
---
|
||||
|
||||
# 合并完成:feat/i5-disable + feat/a3-admin-rest → main
|
||||
|
||||
## 完成内容
|
||||
- 按序将 `feat/i5-disable`、`feat/a3-admin-rest` 合入 `main` 并推送。
|
||||
- 两次 `task check`(web build / go build / lint / go test)均通过。
|
||||
- 工作树 `E:/code/NixMsg-wt/i5`、`E:/code/NixMsg-wt/a3` 已删除;远端 feat 分支保留。
|
||||
|
||||
## 原因
|
||||
总控合并执行:两分支均基于更早的 `0efcfbb`,main 已前进到含上行帧的 `b8569b0`,必须先 rebase。
|
||||
|
||||
## 关键实现 / 冲突处理
|
||||
1. **i5**:rebase 到 `origin/main` 无冲突 → tip `19a8ec9` → ff-only 合并 → `task check` 通过 → 推送 main → 删工作树。
|
||||
2. **a3**:rebase 到含 i5 的 main,冲突文件:
|
||||
- `internal/admin/handler.go`:同时保留 I5 的 `Identity` 依赖/字段与 A3 的 `Groups`/`Config`/`Version`/`startedAt` 及全部 A3 路由。
|
||||
- `cmd/nixmsg/serve.go`:保留 `uplink.identity = idApp`;admin.Deps 同时注入 `Identity: idApp` 与 A3 的 `Groups`/`Config`/`Version`。
|
||||
- `docs/DEVIATIONS.md`:自动合并,I5 与 A3 小节均在。
|
||||
- `go.mod`:无冲突;执行 `go mod tidy`。
|
||||
tip `77d2dbd` → ff-only → `task check` 通过 → 推送 main → 删工作树。
|
||||
|
||||
## 验证结果
|
||||
- i5 合并后 `task check`:通过(含 identity lifecycle 测试)。
|
||||
- a3 合并后 `task check`:通过(含 admin a3、httpx metrics、listener)。
|
||||
- 审核:无密码明文、无 web/dist、无数据库文件、未改 PRD。
|
||||
|
||||
## 最终状态
|
||||
- `main` / `origin/main`:`77d2dbd`(feat: 实现管理后台 A3 注册群消息概览与 metrics 门禁)
|
||||
- 其上含 i5:`19a8ec9`
|
||||
- 远端仍保留:`origin/feat/i5-disable`、`origin/feat/a3-admin-rest`
|
||||
|
||||
## 问题与解决
|
||||
- a3 rebase 与 I5/L-uplink 在 admin Handler 与 serve 接线处冲突;按「两边都保留」手工合并,并额外在 serve 注入 Identity,使 I5 级联在运行时生效。
|
||||
|
||||
## 下一步
|
||||
- 通知其余仍基于旧 tip 的线 rebase 到最新 `origin/main`(`77d2dbd`)。
|
||||
- 未开始 SDK 真机测试(按指令跳过)。
|
||||
|
||||
## 给下个会话
|
||||
- 主工作区干净,仅剩 main 工作树。
|
||||
- 勿对 main 强推/hard reset;feat rebase 后可用 `--force-with-lease`。
|
||||
- 未做 SDK 真机测试。
|
||||
+48
@@ -0,0 +1,48 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-30 00:26:32 UTC [bdf40ff1ec]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-30-00-26-32-utc-bdf40ff1ec
|
||||
stable_id: 5baa8aaf-3973-43a9-9139-2046915e22a4
|
||||
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: q3-accept-ready-20260930-001
|
||||
created_at: '2026-09-30T00:26:32.254448+00:00'
|
||||
updated_at: '2026-09-30T00:26:32.254448+00:00'
|
||||
tags:
|
||||
- ready-to-merge
|
||||
- Q
|
||||
- Q2
|
||||
- Q3
|
||||
- feat/q3-accept
|
||||
---
|
||||
|
||||
# 检查点:测试交付 Q · Q2 补齐 + Q3 本机弱网/崩溃/压测(ready-to-merge)
|
||||
|
||||
## 线 / 任务
|
||||
- 线:测试交付 Q
|
||||
- 任务:补齐 Q2;Q3 在本机 Windows 可做的弱网、崩溃、压测
|
||||
- 分支:`feat/q3-accept`(基于 origin/main `77d2dbd`)
|
||||
- 工作树:`e:\\code\\NixMsg-wt\\q3`
|
||||
|
||||
## 完成内容
|
||||
- Q2:重跑管理登录/CSRF/锁定、注册开关错码对码换码、开通端、单聊、延迟撤回、群发发送者不收到、离线保留、崩溃续传;对照表写入 `test/report/testdata/q2_results.json` 与 `ACCEPTANCE.md`
|
||||
- Q3:toxiproxy(`q3-chaos` / `q3-toxiproxy`)延迟+断开后离线保留送达;ManagedServer 杀进程重启续传;短时 32 连接收发
|
||||
- netem 20% 丢包:未测(Windows 限制),写入 DEVIATIONS「测试交付 Q」
|
||||
- 压测未做 1000/10min:机器限制,DEVIATIONS 与报告写明
|
||||
|
||||
## 验证
|
||||
- `task check` 通过
|
||||
- `go test ./test/accept/`、`./test/chaos/`、`./test/load/` 通过
|
||||
|
||||
## F01–F23 摘要
|
||||
- 通过:F01 F02 F05 F06 F08 F09 F12 F13 F16 F17 F20 F21 F22 F23
|
||||
- 未测:F03 F04 F07 F10 F11 F14 F15 F18 F19
|
||||
- 失败:无
|
||||
|
||||
## 给下个会话
|
||||
- 总控可审阅后 ff-only 合并;勿强推 main
|
||||
- Docker 用完已 down;容器前缀 q3
|
||||
+65
@@ -0,0 +1,65 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-30 00:35:28 UTC [1a5c5f722a]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-30-00-35-28-utc-1a5c5f722a
|
||||
stable_id: 1c6d367d-1181-4970-a0a8-7f72ed0f8382
|
||||
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: s1-itest-checkpoint-20260930-a1
|
||||
created_at: '2026-09-30T00:35:28.295496+00:00'
|
||||
updated_at: '2026-09-30T00:35:28.295496+00:00'
|
||||
tags:
|
||||
- ready-to-merge
|
||||
- S1
|
||||
- feat/s1-itest
|
||||
---
|
||||
|
||||
# 检查点:SDK 一 S1 任务 4–5 ready-to-merge
|
||||
|
||||
## 线 / 任务
|
||||
- 线:SDK 一 S1
|
||||
- 任务:Go/JS 接入清单(DEVELOPMENT §9 共 15 条)+ README/示例/打包试运行
|
||||
- 分支:`feat/s1-itest`(已推送 origin,未推 main)
|
||||
- 提交:`2f750bc` test: Go/JS SDK 接入清单集成测与 README 示例
|
||||
- 工作树:`e:\\code\\NixMsg-wt\\s1b`
|
||||
- 基线:`origin/main` = `77d2dbd`
|
||||
|
||||
## 完成内容
|
||||
- Go/JS 真实进程集成测:临时目录、`127.0.0.1:0`、admin init;注册用管理 PUT 开开关/设码
|
||||
- 修真实 MQTT 死锁:resp 同步解挂起,msg/receipt 走 downLoop
|
||||
- kick/auth 失败时 Stop 传输,避免僵尸连接
|
||||
- README + 最小示例;JS `npm pack --dry-run`;未 npm publish、未打 Go tag
|
||||
- DEVIATIONS「SDK 一 S1」增补 S1.7,保留其他节;未改 PRD
|
||||
|
||||
## 验证
|
||||
- `sdk/go` go test 通过;`sdk/js` npm test 通过;工作树 `task check` 通过
|
||||
- 已推送 `origin/feat/s1-itest`;工作区干净
|
||||
|
||||
## 清单结果(Go / JS)
|
||||
1 握手参数:通过 / 通过
|
||||
2 单聊只回调一次:通过 / 通过
|
||||
3 断线期间发送重连送达不重复:通过 / 通过
|
||||
4 同号重试 + 重推不重复回调:通过(自动再 ack 细节见 DEVIATIONS,单测覆盖)/ 通过
|
||||
5 延迟内撤回:通过 / 通过
|
||||
6 定时约 2 秒:通过 / 通过
|
||||
7 离线保留/过期回执:通过 / 通过
|
||||
8 建群两成员收到发送者不收:通过 / 通过
|
||||
9 对话密码拒绝/解锁/改密/对方先发可回:通过 / 通过
|
||||
10 第二处登录踢第一处且不重连:通过 / 通过
|
||||
11 超 256KiB 本地失败:通过 / 通过
|
||||
12 注册开关与换码:通过 / 通过
|
||||
13 改登录密码新旧与停重连:通过 / 通过
|
||||
14 跨源(仅 JS):通过(Node 模拟 Origin + 双端口)
|
||||
15 会话令牌重连与失效:通过 / 通过
|
||||
|
||||
## 打包试运行
|
||||
- Go:不打 git tag(按任务)
|
||||
- JS:`npm pack --dry-run` 成功,包名 `@nixevol/nixmsg@0.1.0`,含 LICENSE + dist ESM/CJS;未 publish
|
||||
|
||||
## 给下个会话
|
||||
- 总控可审阅后 ff-only 合并 `feat/s1-itest`
|
||||
- 勿强推 main;工作树可删
|
||||
+52
@@ -0,0 +1,52 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-30 00:51:11 UTC [fbe055ee3c]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-30-00-51-11-utc-fbe055ee3c
|
||||
stable_id: 84434892-8ee6-4c75-9e2d-5eb622548ea0
|
||||
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: s2-itest-checkpoint-20260930-0851
|
||||
created_at: '2026-09-30T00:51:11.092915+00:00'
|
||||
updated_at: '2026-09-30T00:51:11.092915+00:00'
|
||||
tags:
|
||||
- ready-to-merge
|
||||
- S2
|
||||
- feat/s2-itest
|
||||
- python
|
||||
- java
|
||||
---
|
||||
|
||||
# 检查点:SDK 二 S2 任务 4–5 ready-to-merge
|
||||
|
||||
## 线 / 任务
|
||||
- 线:SDK 二 S2
|
||||
- 任务:Python/Java 接入清单(任务 4)+ README/示例/打包试跑(任务 5)
|
||||
- 分支:`feat/s2-itest`(已推送 origin,未推 main)
|
||||
- 提交:`226cc0c` feat: Python/Java SDK 接入清单与打包文档
|
||||
- 工作树:`e:\\code\\NixMsg-wt\\s2b`(勿用残留 s2)
|
||||
- 基线:`origin/main` = `77d2dbd`
|
||||
|
||||
## 完成内容
|
||||
- 真实 nixmsg:临时目录、listen 127.0.0.1:0、admin init、管理接口开注册
|
||||
- Python/Java 接入清单集成测(跳过仅 JS 跨域第 14 条)
|
||||
- README + 最小示例;`python -m build`;`mvn package -DskipTests`(字节码 major 52)
|
||||
- 修复:Paho MQTTv5/websockets/SUBACK;下行 resp 与业务帧分流防 auto_ack 死锁;HiveMQ CONNACK/0x8E 解析;connectSync 终态等待
|
||||
- DEVIATIONS「SDK 二 S2」增补 S2-PY/JAVA 4–5,保留其他节;未改 PRD
|
||||
|
||||
## 验证
|
||||
- `pytest`:22 passed
|
||||
- `mvn test`:22 passed
|
||||
- 打包:wheel/sdist 与 nixmsg-sdk-0.1.0.jar 已出;未发布 PyPI/Maven
|
||||
|
||||
## 清单结果摘要
|
||||
- 通过:1–3、5–13、15(及 4 的同号防重/断线重交部分)
|
||||
- 部分/未测:4 的「选择性丢 ack 后重推」真机未测(原因见 DEVIATIONS);14 仅 JS 跳过
|
||||
|
||||
## 给下个会话
|
||||
- 总控可审阅后 ff-only 合并 `feat/s2-itest`
|
||||
- 标签:ready-to-merge
|
||||
- 勿强推 main
|
||||
+52
@@ -0,0 +1,52 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-30 01:00:09 UTC [50bf1ac8c7]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-30-01-00-09-utc-50bf1ac8c7
|
||||
stable_id: 52f5e6c8-1ce5-4726-a3c2-3294ef928e92
|
||||
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: sdk-accept-merged-20260930T085900
|
||||
created_at: '2026-09-30T01:00:09.724094+00:00'
|
||||
updated_at: '2026-09-30T01:00:09.724094+00:00'
|
||||
tags:
|
||||
- merge
|
||||
- sdk-accept
|
||||
- ready
|
||||
---
|
||||
|
||||
# 检查点:S1/S2/Q3 已合并进 main
|
||||
|
||||
## 完成内容
|
||||
按总控指示顺序将三条分支 ff-only 合并进 `main` 并推送;未启动后端端到端或阶段 3。
|
||||
|
||||
## 合并结果
|
||||
1. **feat/s1-itest**:成功。尖端 `2f750bc`,rebase 已在 origin/main 之上无需改写;ff-only → `2f750bc`;推送 main;删除工作树 `e:\\code\\NixMsg-wt\\s1b`。远端分支保留。
|
||||
2. **feat/s2-itest**:成功。rebase `226cc0c` → `1f715e4`(onto `2f750bc`),`--force-with-lease` 推送 feat;ff-only → `1f715e4`;推送 main;删除工作树 `e:\\code\\NixMsg-wt\\s2b`。远端分支保留。
|
||||
3. **feat/q3-accept**:成功。rebase `b5cf5d1` → `a22912d`(onto `1f715e4`),`--force-with-lease` 推送 feat;ff-only → `a22912d`;推送 main;删除工作树 `e:\\code\\NixMsg-wt\\q3`。远端分支保留。
|
||||
|
||||
## main 最终 hash
|
||||
`a22912d95a7ce1ab1f55cc48aa6628c8887a2cbd`(`origin/main` 已同步)
|
||||
|
||||
## 冲突
|
||||
三次 rebase 均无冲突(DEVIATIONS 自动合并)。合并后确认保留「SDK 一 S1」「SDK 二 S2」「测试交付 Q」及 S1.7 / S2-PY/JAVA 4–5 / Q2+Q3 小节。
|
||||
|
||||
## 审核
|
||||
三分支均无 node_modules、web/dist、jar/whl、target、密码/密钥类提交。
|
||||
|
||||
## 验证结果
|
||||
- 每次合并后 `task check`:通过(web build、go build、lint 0 issues、go test ./...)。
|
||||
- S1 后:`sdk/go` `go test ./...` ok(约 30s);`sdk/js` `npm test` 23 passed。
|
||||
- S2 后:`sdk/python` 本地 venv + `pytest` 22 passed;`mvn test` exit 0(PATH 补 maven 3.9.16)。测完已删本地 `.venv`/`target`。
|
||||
- Q 后:`go test ./test/...` 全部 ok(accept/chaos/harness/load/report)。
|
||||
|
||||
## 下一步
|
||||
未做阶段 3 与额外端到端。可继续按 TASKS 后续阶段;feat 远端分支仍在。
|
||||
|
||||
## 给下个会话
|
||||
- 主工作区仅剩余 `E:/code/NixMsg`,无 s1b/s2b/q3 工作树。
|
||||
- Maven scoop 已装但当前 shell 常需手动把 `scoop/apps/maven/.../bin` 加入 PATH;Python 系统解释器受 uv PEP668 限制,SDK 测应用 venv。
|
||||
- 勿对 main 强推;本轮无 revert。
|
||||
+48
@@ -0,0 +1,48 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-30 01:10:39 UTC [b06346abc8]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-30-01-10-39-utc-b06346abc8
|
||||
stable_id: 31c02d4f-a968-497b-9935-160833ddffdd
|
||||
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: q4-q5-checkpoint-20260930-0905
|
||||
created_at: '2026-09-30T01:10:39.558205+00:00'
|
||||
updated_at: '2026-09-30T01:10:39.558205+00:00'
|
||||
tags:
|
||||
- ready-to-merge
|
||||
- Q
|
||||
- Q4
|
||||
- Q5
|
||||
- feat/q-release-docs
|
||||
---
|
||||
|
||||
# 检查点:测试交付 Q · Q4 定稿 + Q5 文档(ready-to-merge)
|
||||
|
||||
## 线 / 任务
|
||||
- 线:测试交付 Q
|
||||
- 任务:Q4 Docker 定稿;Q5 README / OPS / SDK 链接
|
||||
- 分支:`feat/q-release-docs`(基于 origin/main `a22912d`)
|
||||
- 工作树:`e:\\code\\NixMsg-wt\\q4`
|
||||
- 提交:`d86729d` docs: 定稿 Q4 Docker 与 Q5 运维文档
|
||||
|
||||
## 完成内容
|
||||
- Dockerfile:TARGETOS/TARGETARCH;compose 对齐 11.4,容器/卷 `q4-` 前缀
|
||||
- Task:`q:docker-build` / `q:docker-push` / `q:docker-buildx` / `q:release-bins`
|
||||
- 本机 docker build linux/amd64;冒烟 admin init + serve + GET /healthz=200;容器与卷已删
|
||||
- **未** docker push、**未**打版本标签、**未**发布 SDK
|
||||
- 交叉编译三平台到 `bin/`(不提交);至少验证 windows/amd64
|
||||
- README 重写;新增 `docs/OPS.md`;SDK 链到 sdk/*/README
|
||||
- DEVIATIONS「测试交付 Q」增补 Q4/Q5;ACCEPTANCE 未测项 F03/F04/F07/F10/F11/F14/F15/F18/F19 保持未测
|
||||
|
||||
## 验证
|
||||
- `task check` 通过
|
||||
- 镜像冒烟:`http://127.0.0.1:17443/healthz` → 200 `ok`
|
||||
|
||||
## 给下个会话
|
||||
- 总控可审阅后 ff-only 合并;勿强推 main
|
||||
- 正式镜像推送与双架构 buildx 在 Z3
|
||||
- 工作树可删;本地 `bin/` 与 `web/dist` 勿提交
|
||||
+48
@@ -0,0 +1,48 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-30 01:20:13 UTC [36f606710b]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-30-01-20-13-utc-36f606710b
|
||||
stable_id: a84bbdd7-2443-4698-8b05-ce9988706fa4
|
||||
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: w4-e2e-ready-20260930-0915
|
||||
created_at: '2026-09-30T01:20:13.296593+00:00'
|
||||
updated_at: '2026-09-30T01:20:13.296593+00:00'
|
||||
tags:
|
||||
- ready-to-merge
|
||||
- W
|
||||
- W4
|
||||
- feat/w4-e2e
|
||||
---
|
||||
|
||||
# 检查点:后台网页 W4 ready-to-merge
|
||||
|
||||
## 线 / 任务
|
||||
- 线:后台网页 W
|
||||
- 任务:W4 联调与 Playwright 端到端
|
||||
- 分支:`feat/w4-e2e`(已推送 origin,未推 main)
|
||||
- 提交:`b75b679` feat: 管理后台接真实接口并加 Playwright e2e
|
||||
- 工作树:`e:\\code\\NixMsg-wt\\w4`
|
||||
- 基线:`origin/main` = `a22912d`
|
||||
|
||||
## 完成内容
|
||||
- `web/src/api/admin.ts` 改为真实 `/api/admin`(Vite `NIXMSG_PROXY_TARGET` 代理);去掉假登录提示
|
||||
- 适配 A 线:令牌 id 为 string、talk-password 用 PUT、建群省略空 id、overview 可选 endpoints_self
|
||||
- Vitest 用 `admin-mock.ts` + vi.mock,假登录 admin/adminpassword 仅测内
|
||||
- Playwright:`e2e/start-stack.mjs` 临时目录 + admin init + listen 127.0.0.1:0 + Vite;主路径登录/开通/注册安全码/建群/seedpending 造 scheduled 投递/令牌创建只显示一次与停用
|
||||
- `taskfiles/w.yml`、`Taskfile.yml` itest 追加 `w:e2e`;显式 includes.w
|
||||
- DEVIATIONS「后台网页 W」增补 W4,保留其他节;未改 PRD/服务器业务
|
||||
|
||||
## 验证
|
||||
- pnpm typecheck / lint / vitest:通过
|
||||
- Playwright e2e:1 passed
|
||||
- `task check`:通过
|
||||
|
||||
## 给下个会话
|
||||
- 总控可审阅后 ff-only 合并 `feat/w4-e2e`
|
||||
- 标签:ready-to-merge
|
||||
- 勿强推 main;工作树可删
|
||||
+59
@@ -0,0 +1,59 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-30 01:29:56 UTC [ed0ff9d0db]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-30-01-29-56-utc-ed0ff9d0db
|
||||
stable_id: ce0536fc-4868-4a93-9355-6fae2af4bacb
|
||||
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: release-0.1.0-20260930-092900
|
||||
created_at: '2026-09-30T01:29:56.874106+00:00'
|
||||
updated_at: '2026-09-30T01:29:56.874106+00:00'
|
||||
tags:
|
||||
- release
|
||||
- v0.1.0
|
||||
- merge
|
||||
- Z1
|
||||
---
|
||||
|
||||
# 检查点:0.1.0 收尾(W4/Q4 合并 + 交付说明 + 标签)
|
||||
|
||||
## 合并
|
||||
1. **feat/w4-e2e**:成功。尖端 `b75b679`,已在 `origin/main`=`a22912d` 之上无需改写;ff-only → `b75b679`;`task check` 通过;`task w:e2e` 1 passed;普通推送 main;删除工作树 `e:\\code\\NixMsg-wt\\w4`。远端 feat 保留。
|
||||
2. **feat/q-release-docs**:成功。rebase `d86729d` → `2ebcb6e`(onto `b75b679`),`--force-with-lease` 推送 feat;ff-only → `2ebcb6e`;`task check` 通过;推送 main;删除工作树 `e:\\code\\NixMsg-wt\\q4`。远端 feat 保留。
|
||||
|
||||
## main hash
|
||||
- 功能合入 tip:`2ebcb6e1b85a8997c48de2711b013c83fa0440fc`
|
||||
- 交付说明提交(标签指向):`4e3c84366f241161f2251fd5cadd4e4d26db5361`
|
||||
- `origin/main` 已同步
|
||||
|
||||
## 测试结果
|
||||
- `task check`:通过(合并后与阶段 3 各跑一次)
|
||||
- `go test ./test/...`:通过
|
||||
- W4 后 Playwright e2e:通过
|
||||
- SDK Go:`go test ./...` 通过
|
||||
- SDK JS:`npm test` 23 passed
|
||||
- SDK Python:venv + pytest 22 passed(已删 `.venv`)
|
||||
- SDK Java:`mvn test` 通过(scoop maven 3.9.16 直接调 `mvn.cmd`;已删 `target`)
|
||||
|
||||
## 未测项(ACCEPTANCE)
|
||||
F03、F04、F07、F10、F11、F14、F15、F18、F19(对照表仍标未测;本轮已另跑四套 SDK 测试)
|
||||
|
||||
## 交付说明
|
||||
`docs/RELEASE.md` 已提交并推送。
|
||||
|
||||
## 标签
|
||||
- 已新建并推送附注标签 `v0.1.0`、`sdk/go/v0.1.0` → `4e3c843`(远端原先不存在,未覆盖)
|
||||
|
||||
## 未做完的发布步骤
|
||||
- 未创建 Gitea package 令牌
|
||||
- 未 npm/PyPI/Maven 发布 SDK 包
|
||||
- 未 docker push / buildx 推镜像
|
||||
|
||||
## 给下个会话
|
||||
- 有 package 令牌后按 TASKS Z3 / README / OPS 补发布
|
||||
- 勿强推 main;feat 远端分支仍在
|
||||
- Maven scoop shim 可能坏,可用 `D:\\Program Files\\scoop\\apps\\maven\\current\\bin\\mvn.cmd`
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-30 02:21:15 UTC [7031a81869]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-30-02-21-15-utc-7031a81869
|
||||
stable_id: 0c9542fe-cb24-4cc0-a867-15d1357b2639
|
||||
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: ckpt-accept-rest-merged-20260930-1019
|
||||
created_at: '2026-09-30T02:21:15.530254+00:00'
|
||||
updated_at: '2026-09-30T02:21:15.530254+00:00'
|
||||
tags:
|
||||
- accept-rest
|
||||
- ready-to-review
|
||||
---
|
||||
|
||||
补测已合入 main `479a08e` 并推送 origin/main。分支 feat/accept-rest 仍在远端。
|
||||
|
||||
完成:F03/F04/F07/F10/F11/F14/F15/F18 短时间验收;F19 引用既有 SDK 清单。ACCEPTANCE 通过 23 / 失败 0 / 未测 0。task check 通过。
|
||||
|
||||
跳过:1000×10min、Linux netem 20%丢包、F03 1000端全表 1s、真拔网线。
|
||||
|
||||
产品修复:群 emit 异步+延迟 20ms,避免 group.create 与 InlineClient 死锁。harness MQTT 握手后清 deadline。
|
||||
|
||||
下一步:全库只读审查,真实缺陷提 Gitea issues。不要再改代码直到负责人审核 issues。
|
||||
|
||||
坑:Cursor 子 Agent 曾因未付账单中断;PowerShell Set-Content 会搞乱 UTF-8 中文。
|
||||
+65
@@ -0,0 +1,65 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-30 02:29:00 UTC [a358773621]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-30-02-29-00-utc-a358773621
|
||||
stable_id: ee053018-4631-4cdf-bc20-16daa3f0c1a8
|
||||
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-review-issues-ready-20260930-1025
|
||||
created_at: '2026-09-30T02:29:00.716731+00:00'
|
||||
updated_at: '2026-09-30T02:29:00.716731+00:00'
|
||||
tags:
|
||||
- review-issues-ready
|
||||
---
|
||||
|
||||
|
||||
# 只读审查完成 · Gitea Issues 待负责人审核
|
||||
|
||||
## 范围
|
||||
- 工作目录 `e:\\code\\NixMsg`,`origin` `https://git.asio.asia/nixevol/NixMsg.git`
|
||||
- 审查 tip:`479a08ee11296457c24b421cb9ff94cce19f768f`(`test: 补齐短时间可测验收并修复建群下行卡住`)
|
||||
- 工作树:审查前后 `git status --porcelain` 均为空,**无任何审查引起的代码/文档/配置改动**
|
||||
- 已读:PRD、DEVELOPMENT、DEVIATIONS、TASKS、OPS、RELEASE、ACCEPTANCE;关键路径 cmd/nixmsg、internal/protocol|store|auth|listener|broker|httpx、app/message|identity|group|presence、admin、web、sdk、deploy、test
|
||||
|
||||
## Gitea 已建 issues(建前 `/issues?state=all` 为空,无重复)
|
||||
账号库两条 git.asio.asia 登录密码条目重复;无独立 Gitea PAT。用 Basic 调 API。本体中文正确。
|
||||
|
||||
1. **#1 high** [管理员登录 IP 锁定会阻断已认证的 Cookie 会话和 API 令牌](https://git.asio.asia/nixevol/NixMsg/issues/1)
|
||||
- `internal/admin/auth.go` 46–50、131–133 vs D18/F02 / DEVELOPMENT 8
|
||||
2. **#2 medium** [自助注册未接入 trusted_proxies,安全码锁定按直连/代理 IP 计](https://git.asio.asia/nixevol/NixMsg/issues/2)
|
||||
- serve.go identity.New 未设 ClientIP;register.go RemoteAddr;I1.4 交付欠账
|
||||
3. **#3 medium** [上行 worker 同步 PublishDown 与 mochi InlineClient 会死锁,20ms 只绕过 group_event](https://git.asio.asia/nixevol/NixMsg/issues/3)
|
||||
- group/app.go emit 659–685;void.go publishRevokes 仍同步;DEVIATIONS Q accept-rest 第 4 条死锁根因仍在
|
||||
4. **#4 medium** [停用/删除/重置密码不发 fatal,identity 未注入 Downlink 导致 revoked 丢失](https://git.asio.asia/nixevol/NixMsg/issues/4)
|
||||
- serve.go KickEndpoint=sess.Kick;identity 无 Downlink;session.go fatalKick 未用
|
||||
5. **#5 medium** [/metrics 已开放但连接数、待投递等指标从未打点](https://git.asio.asia/nixevol/NixMsg/issues/5)
|
||||
- F22 / DEVELOPMENT 4.3 / P4 仅门禁
|
||||
6. **#6 medium** [解散群时 scheduled 消息的消息级回执 state 写成 completed,违反协议枚举](https://git.asio.asia/nixevol/NixMsg/issues/6)
|
||||
- group/void.go 141–147 vs 6.4 rejected;I5.2 已指出 I4 旧写法
|
||||
|
||||
## 看过但不建 issue(故意设计 / 已处理 / 误报 / 流程项)
|
||||
- mochi CodeSuccessIgnore / InlineClient 放行
|
||||
- websocket InsecureSkipVerify + 子协议 mqtt
|
||||
- modernc sqlite `_pragma`
|
||||
- 群发离线无 keep 为 dropped/completed
|
||||
- session 0x8E 顶号
|
||||
- nst_ session vs 密码锁
|
||||
- harness 清 SetDeadline
|
||||
- 群 emit 异步+20ms:作为「已处理工作绕过」不重建工作项;死锁根因已单独建 #3
|
||||
- 管理员自定义群 id、回执窗口、空名 self.update、无独立审计日志页:文档已写或非缺陷
|
||||
- 后台列表第 2 页:后端 offset 与前端一致,非缺陷
|
||||
- 备份 VACUUM INTO,不需 wal_checkpoint 强制
|
||||
- MQTT 优雅断开 P1 文档未完成接线,不当新缺陷
|
||||
- SDK 未 npm/PyPI/Maven 发布:发布流程,非代码缺陷
|
||||
- CSRF `X-Nixmsg-Request`、管理 trusted_proxies 已接好
|
||||
|
||||
## 给下个会话
|
||||
- 负责人先审核 6 条 issues,再决定是否改代码;**不要顺手修直到审核完**
|
||||
- 勿强推 main;feat 远端分支仍在
|
||||
- 临时脚本写在 `%TEMP%`已删除 python 文件;未动仓库
|
||||
- PowerShell 命令行过长会 `命令太长`;Gitea 建 issue 用 TEMP UTF-8 JSON + Python urllib
|
||||
- 坑:密码库 git.asio.asia 是登录密码不是 PAT;控制台 GBK 会乱码中文标题,以 API JSON 为准
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-30 02:43:38 UTC [9ac444b253]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-30-02-43-38-utc-9ac444b253
|
||||
stable_id: 9927b9f5-7b95-4e26-bdb0-39985e532384
|
||||
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: fix-issue-1-admin-lock-20260930-1045
|
||||
created_at: '2026-09-30T02:43:38.317549+00:00'
|
||||
updated_at: '2026-09-30T02:43:38.317549+00:00'
|
||||
tags:
|
||||
- ready-to-merge
|
||||
- fix-1
|
||||
- feat/fix-1-admin-lock
|
||||
---
|
||||
|
||||
# 检查点:fix issue #1 ready-to-merge
|
||||
|
||||
## 线 / 任务
|
||||
- 修复 Gitea issue #1(管理员登录 IP 锁定阻断已认证 Cookie/API 令牌)
|
||||
- 分支:`feat/fix-1-admin-lock`
|
||||
- 提交:`8b4da3dc0516fe9415ddfa6d6190d3b71ad3dac8`
|
||||
- 工作树:`e:\\code\\NixMsg-wt\\fix1`(勿改主工作区)
|
||||
- 基线:`origin/main` = `479a08e`
|
||||
|
||||
## 完成
|
||||
- 去掉 `auth()` 鉴权前的 `Check(LockAdminIP)`;登录入口与错误令牌 `authFail` 仍计入锁定
|
||||
- 测试:`TestAdminLockDoesNotBlockAuthedSession`;`go test ./internal/admin/ ./internal/auth/` 通过
|
||||
- DEVIATIONS 追加 `### fix-issue-1`
|
||||
- 已 `git push -u origin feat/fix-1-admin-lock`;**未合并 main、未关 issue**
|
||||
|
||||
## 给总控
|
||||
- 可 ff-only 合并该分支;合并后统一跑 `task check`
|
||||
- 勿强推 main
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-30 02:44:56 UTC [0aad732800]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-30-02-44-56-utc-0aad732800
|
||||
stable_id: 2734590b-d531-434a-8dce-1d6098829ae3
|
||||
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: fix2-register-ip-20260930-checkpoint
|
||||
created_at: '2026-09-30T02:44:56.888336+00:00'
|
||||
updated_at: '2026-09-30T02:44:56.888336+00:00'
|
||||
tags:
|
||||
- ready-to-merge
|
||||
- fix-2
|
||||
- feat/fix-2-register-ip
|
||||
---
|
||||
|
||||
# fix issue #2 · 自助注册接入 trusted_proxies
|
||||
|
||||
## 完成
|
||||
- 分支 `feat/fix-2-register-ip`,commit `73ee4e74c7bcd493891c655f2f9315b6e7850dea`,已推送 origin(未合 main、未关 issue)。
|
||||
- 工作树 `e:\\code\\NixMsg-wt\\fix2`,基线 `origin/main@479a08e`。
|
||||
|
||||
## 修法
|
||||
`cmd/nixmsg/serve.go` 在 `identity.New` 注入与管理接口相同的 `httpx.ClientIP(r, trustedNets)`,注册安全码锁定按真实客户端 IP 计;非信任代理不采信 XFF。不改锁定阈值与注册语义。
|
||||
|
||||
## 文件
|
||||
- `cmd/nixmsg/serve.go`
|
||||
- `internal/app/identity/register_test.go`(`TestRegisterTrustedProxyClientIPLock`)
|
||||
- `docs/DEVIATIONS.md`(追加 `### fix-issue-2`)
|
||||
|
||||
## 验证
|
||||
`go test ./internal/app/identity/ ./internal/httpx/ ./cmd/nixmsg/ -count=1` 全绿。未跑全仓 task check。
|
||||
|
||||
## 给下个会话
|
||||
- 总控可审阅后 ff-only 合 main;勿强推 main。
|
||||
- 主工作区 `e:\\code\\NixMsg` 未改。
|
||||
+41
@@ -0,0 +1,41 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-30 02:45:39 UTC [73202b31fe]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-30-02-45-39-utc-73202b31fe
|
||||
stable_id: 9a88fa0c-c6f2-41c4-9051-98da8c962c63
|
||||
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: fix6-dissolve-receipt-de2c64d-20260930
|
||||
created_at: '2026-09-30T02:45:39.614226+00:00'
|
||||
updated_at: '2026-09-30T02:45:39.614226+00:00'
|
||||
tags:
|
||||
- ready-to-merge
|
||||
- fix-issue-6
|
||||
- feat/fix-6-dissolve-receipt
|
||||
---
|
||||
|
||||
# fix-issue-6 完成 · 解散群 scheduled 回执 state
|
||||
|
||||
## 完成
|
||||
- Gitea #6:`voidGroupAllTx` 插入消息级回执时 state 从误写的 `completed` 改为协议枚举 `rejected`(DEVELOPMENT 6.4);消息行仍为 `completed`/`group_dissolved`。
|
||||
- 工作树:`e:\\code\\NixMsg-wt\\fix6`,分支 `feat/fix-6-dissolve-receipt`,基线 `origin/main`=`479a08e`。
|
||||
- Commit:`de2c64d`(`fix: 解散群作废 scheduled 时消息级回执改用 rejected`),已推送远端;**未合并 main、未关 issue**。
|
||||
|
||||
## 文件
|
||||
- `internal/app/group/void.go`(仅 INSERT receipts 的 state)
|
||||
- `internal/app/group/group_test.go`(解散后断言回执 rejected)
|
||||
- `docs/DEVIATIONS.md`(追加 `### fix-issue-6`)
|
||||
|
||||
## 验证
|
||||
- `go test ./internal/app/group/ ./internal/app/message/ -count=1`:通过
|
||||
|
||||
## 未改
|
||||
- 未动 `emit`、PublishDown、metrics、identity fatal、管理锁定、注册 IP(避让其他线)
|
||||
|
||||
## 给下个会话
|
||||
- 总控可审阅后 ff-only 合并;勿强推 main
|
||||
- issue #6 留给负责人关闭
|
||||
+44
@@ -0,0 +1,44 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-30 02:51:19 UTC [3f41c4ffa5]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-30-02-51-19-utc-3f41c4ffa5
|
||||
stable_id: 9a4c2024-f07c-47b5-9ba1-5f9de83cf6bf
|
||||
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: fix5-metrics-b4789fc-20260930
|
||||
created_at: '2026-09-30T02:51:19.017727+00:00'
|
||||
updated_at: '2026-09-30T02:51:19.017727+00:00'
|
||||
tags:
|
||||
- fix-5
|
||||
- feat/fix-5-metrics
|
||||
- ready-to-merge
|
||||
---
|
||||
|
||||
# 检查点:fix issue #5 metrics 打点(已推分支,未合 main)
|
||||
|
||||
## 范围
|
||||
- 工作树 `e:\\code\\NixMsg-wt\\fix5`
|
||||
- 分支 `feat/fix-5-metrics` → `origin/feat/fix-5-metrics`
|
||||
- 提交 `b4789fc`(基线 `479a08e`)
|
||||
- issue #5;**未**合并 main;**未**关闭 issue
|
||||
|
||||
## 完成
|
||||
- `nixmsg_connections{ws|tcp}`:broker OnSessionEstablished/OnDisconnect 末尾 Inc/Dec
|
||||
- `endpoints`/`deliveries_pending`/`messages_scheduled` + 写队列/哈希排队:messageLoops 每秒采样真实值
|
||||
- `dispatch_to_push`/`ack` 直方图:PushPending 成功推送、Ack 成功确认时 Observe
|
||||
- `write_batch_commit`:store.Queue.OnBatchCommit
|
||||
- `errors_total`:uplink replyErr
|
||||
- DEVIATIONS 追加 `### fix-issue-5`
|
||||
- 未改 group emit / 管理锁定 / 注册 IP / fatal;避开 PublishDown 与 dissolve 回执大段
|
||||
|
||||
## 验证
|
||||
- `go test ./internal/metrics/ ./internal/broker/ ./internal/app/message/ ./internal/store/ ./cmd/nixmsg/ ./internal/httpx/` 通过
|
||||
- 未跑全仓 task check
|
||||
|
||||
## 下一步
|
||||
- 总控审阅后 ff-only 合 main;本线勿合 main
|
||||
- 与 feat/fix-3-downlink-deadlock、feat/fix-6-dissolve-receipt 合并时注意 hooks 末尾与 ack 小 diff
|
||||
+41
@@ -0,0 +1,41 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-30 02:55:36 UTC [e5a6de7d9f]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-30-02-55-36-utc-e5a6de7d9f
|
||||
stable_id: a329cd35-6b6e-4616-b5b5-75d3f1b54f38
|
||||
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: fix4-checkpoint-20260930-1055
|
||||
created_at: '2026-09-30T02:55:36.536829+00:00'
|
||||
updated_at: '2026-09-30T02:55:36.536829+00:00'
|
||||
tags:
|
||||
- fix-4
|
||||
- feat/fix-4-fatal-revoked
|
||||
---
|
||||
|
||||
# 检查点:fix Gitea #4 fatal/revoked(已推送,未合 main)
|
||||
|
||||
## 线 / 任务
|
||||
- Issue:https://git.asio.asia/nixevol/NixMsg/issues/4
|
||||
- 分支:`feat/fix-4-fatal-revoked`(基于 origin/main `479a08e`)
|
||||
- 工作树:`e:\\code\\NixMsg-wt\\fix4`
|
||||
- 提交:`1d6be59` fix: 停用删除重置密码发 fatal 并注入 Downlink 发 revoked
|
||||
|
||||
## 完成
|
||||
- `serve`:`identity.New` 注入 `Downlink: brk`;`DisableKick`/`DeleteKick`/`PasswordResetKick` → `Session.Disable`/`Deleted`/`ResetPassword`;`KickEndpoint` 仍只 `Kick`
|
||||
- identity:停用/删除后 `publishRevokes`;ConnControl 异步断开兜底
|
||||
- admin:重置走 PasswordResetKick;停用/删除走 DisableKick/DeleteKick
|
||||
- DEVIATIONS 追加 `### fix-issue-4`
|
||||
- 测试:`TestDisableEmitsRevokedForPushed`;`TestUplinkDisableFatalAndRevoked`;`TestUplinkResetPasswordFatal`
|
||||
|
||||
## 验证
|
||||
- `go test ./internal/app/identity/ ./cmd/nixmsg/ ./internal/admin/` 通过
|
||||
- 未跑全仓 `task check`;未合 main;未关 issue
|
||||
|
||||
## 给下个会话
|
||||
- 总控可审阅后 ff-only 合并;勿强推 main
|
||||
- 其它 issues #1/#2/#3/#5/#6 勿混进本分支
|
||||
+43
@@ -0,0 +1,43 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-30 04:16:42 UTC [497c4361d0]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-30-04-16-42-utc-497c4361d0
|
||||
stable_id: f943532c-3ed7-4b9d-9def-63c662b522c0
|
||||
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: merge-fixes-4059a15-20260930
|
||||
created_at: '2026-09-30T04:16:42.634031+00:00'
|
||||
updated_at: '2026-09-30T04:16:42.634031+00:00'
|
||||
tags:
|
||||
- fixes-merged
|
||||
---
|
||||
|
||||
# 检查点:fix #1 #2 #4 #5 #6 已合入 main;#3 未合
|
||||
|
||||
## 完成
|
||||
- main 快进合并工作树分支 feat/merge-fixes-1-2-4-5-6 并普通推送 origin/main。
|
||||
- HEAD:4059a1576bc97879b840ec5200defd80bc9eb3f0(fix: 消除合并后的变量遮蔽以通过检查)。
|
||||
- 合入顺序:#1 8b4da3d、#6 de2c64d、#2 73ee4e7、#4 1d6be59、#5 b4789fc,用 git merge --no-ff,未 rebase 已推送分支。
|
||||
- task check 通过(build + golangci-lint 0 issues + go test ./...)。合并后修了 govet shadow(serve.go 变量名,测试里 `:=` 改为已有变量赋值),未改产品断言。
|
||||
- Gitea 已关闭 #1 #2 #4 #5 #6,评论写明合入 commit 4059a1576bc97879b840ec5200defd80bc9eb3f0。
|
||||
|
||||
## 死锁 #3
|
||||
- 未合入 feat/fix-3-downlink-deadlock,未关闭 #3。
|
||||
- 评论已发:comment id 7;issue 仍为 open。
|
||||
- 文档:docs/DEVIATIONS.md 末尾「### 死锁未修(issue #3)」,提交 7b209ce。
|
||||
- main 仍保留 group emit 的 20ms Sleep 绕过(来自 479a08e)。
|
||||
- 未提交尝试留在工作树 e:\\code\\NixMsg-wt\\fix3(分支指针仍是 479a08e,改动未提交、未验证)。勿删该工作树,勿把这套代码合入 main。
|
||||
- 合并工作树:e:\\code\\NixMsg-wt\\merge-fixes,分支 feat/merge-fixes-1-2-4-5-6。
|
||||
|
||||
## 冲突
|
||||
- DEVIATIONS.md 末尾各分支都追加 ### fix-issue-N,合并时按 1/6/2/4/5 顺序保留全部节。
|
||||
- serve.go 仅 #2 与 #4 在 identity.New 参数冲突:同时保留 ClientIP 与 Downlink;#4 的 DisableKick/DeleteKick/PasswordResetKick 自动合入;#5 的 metrics 接线自动合入且未覆盖前两者。
|
||||
|
||||
## 给下个会话
|
||||
- #3 正确方向:broker 下行 InjectPacket 与上行 worker 解耦,不要靠固定 sleep。InlineClient=true 与 OnPublish 对 InlineClient 放行保持。
|
||||
- 不要强推 main。
|
||||
- 未发 npm/PyPI/Maven,未 docker push。
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-30 04:37:44 UTC [cea96f7c13]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-30-04-37-44-utc-cea96f7c13
|
||||
stable_id: 7fd55d99-e2fa-4f59-b963-2b14d5e592b7
|
||||
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: issue3-rootcause-diag-20260930-1235
|
||||
created_at: '2026-09-30T04:37:44.082486+00:00'
|
||||
updated_at: '2026-09-30T04:37:44.082486+00:00'
|
||||
tags:
|
||||
- issue-3
|
||||
- diagnosis
|
||||
---
|
||||
|
||||
# 检查点:issue #3 根因已实证(不是服务端死锁)
|
||||
|
||||
基线 main 4059a15。诊断工作树 E:\code\NixMsg-wt\diag3(分支 diag/issue3-scratch,仅本地,完成后删除)。
|
||||
|
||||
## 结论
|
||||
TestUplinkDMOfflineGroupRecall 等"resp 回不来"是测试用 WebSocket 客户端 test/harness/mqtt.go 的两个缺陷,不是服务端死锁:
|
||||
1. wsMQTT.Recv 把一个 WS 二进制帧当作恰好一个 MQTT 包;mochi 在 outbound 有积压时把多个包放进 outbuf 一次 Write,合成一个 WS 帧(MQTT5 §6 [MQTT-6.0.0-3] 允许)。客户端只解第一个包。实证日志:`WS frame carries 3 MQTT packets: [group_event group_event resp/rid=g1]` 随后 `timeout waiting resp rid=g1`。通过的轮次里也在丢 receipt/group_event。
|
||||
2. wsMQTT.Send / writeWSClientFrame 帧头和载荷分两次 Write、无锁;读循环回 PUBACK 与测试线程发请求并发时交错,把发往服务端的 WS 流写乱,服务端卡在读一个错乱长度的包(无报错日志)。
|
||||
|
||||
## 对照实验(同步 emit,无 20ms sleep)
|
||||
- 原客户端:6 次 1 失败(合帧含 resp)。
|
||||
- 只修接收按字节流拆包:20 次 2 失败(g1、s4,无服务端报错)。
|
||||
- 再修发送加锁+整帧一次写:20/20 通过(125 个合包帧正确拆开);cmd/nixmsg、test/accept、group、broker 全绿。
|
||||
|
||||
## 解决方向
|
||||
- 修 test/harness/mqtt.go:Recv 按字节流缓冲拆包(含 continuation 帧);Send/PONG 加互斥锁并整帧一次 Write。
|
||||
- 修好后删除 internal/app/group/app.go emit 的 goroutine+20ms sleep,改回同步下发。
|
||||
- 不要合入 E:\code\NixMsg-wt\fix3 的 broker 改动(基于错误假设,改变 PUBACK 时序)。
|
||||
- 更正 docs/DEVIATIONS.md 「死锁未修(issue #3)」与 Q accept-rest 第 3/4 条的错误结论。
|
||||
|
||||
## 另发现的真实隐患(待入 issue)
|
||||
- mochi v2.7.9(最新版)inflight.go NextImmediate 先 RLock 再调 GetAll 又 RLock,递归读锁;server.go processPacket 719-728 在 sendQuota>0 且 inflight 非空时调用。客户端带 ReceiveMaximum(SDK 可能带)时,与 publishToClient 的 Inflight.Set 写锁排队可永久互等,卡死该连接读循环及所有向其下发的 goroutine(含 messageLoops)。测试客户端不带 ReceiveMaximum 所以没触发。
|
||||
- identity lifecycle.go 有 kickFlushDelay=20ms sleep(fix #4 引入),待审。
|
||||
|
||||
## 下一步
|
||||
全量审查 + 写 issue(含不冲突的解决方案与并行分组),交负责人审核后由 Grok 团队修。
|
||||
+58
@@ -0,0 +1,58 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-30 06:05:17 UTC [71e209885b]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-30-06-05-17-utc-71e209885b
|
||||
stable_id: 54a62a28-b34b-47bf-bde5-cadb6b0a012b
|
||||
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-ckpt-review-issues-20260930-a1
|
||||
created_at: '2026-09-30T06:05:17.526035+00:00'
|
||||
updated_at: '2026-09-30T06:05:17.526035+00:00'
|
||||
tags:
|
||||
- review-issues-ready
|
||||
- review-2026-09-30
|
||||
- handoff
|
||||
---
|
||||
|
||||
# 检查点:全量复审完成,58 个工作包已提交 Gitea issue,等负责人审核
|
||||
|
||||
## 完成内容
|
||||
- 基线 main 4059a15,审查全程只读,没有改仓库代码、没有推送任何分支。
|
||||
- 5 个区并行审查(A 管理后台与网页、M 消息核心、I 身份群在线、P 传输平台部署、S SDK,约 114 条原始发现),总审查人另做 mochi 配额死锁、慢消费者、#3 对照三组实证,合并成 58 个互不冲突的工作包。
|
||||
- Gitea:总览 #7(清单表、并行分工与合并顺序、跨线依赖、共享文件归属、统一取舍、故意设计清单、待核实);新建 #8–#64;T-01 复用并改写 #3(原描述用 details 保留在正文末尾,另加评论 id 203)。依赖行用半角「 (#n)」,已验证可点击。
|
||||
- 标签:P0-critical / P1-high / P2-medium / P3-low;lane/broker、listener、store、message、identity、admin、web、sdk、test-docs;review-2026-09-30;tracking。
|
||||
- 统计:critical 7(B-01 B-02 B-05 K-01 K-02 K-03 K-04),high 13(B-03 B-09 B-10 B-11 L-01..L-04 C-01..C-04 U-01),medium 29,low 9。
|
||||
- 清理:诊断工作树 diag3 与本地分支 diag/issue3-scratch 已删;已合入 main 的 fix1/2/4/5/6、merge-fixes 本地工作树和本地分支已删(远端 feat/fix-* 分支保留);E:\code\NixMsg-wt\fix3 按负责人要求保留(不合入)。E:\code\NixMsg-wt 下还有 a、m、q2、wire 等未登记到 git 的旧目录,来自更早的开发阶段,未动。
|
||||
|
||||
## 编号→issue
|
||||
总览=#7;T-01=#3;B-01..B-12=#8..#19;L-01..L-07=#20..#26;D-01..D-05=#27..#31;C-01..C-07=#32..#38;U-01..U-05=#39..#43;H-01..H-07=#44..#50;W-01..W-06=#51..#56;K-00..K-05=#57..#62;T-02=#63;T-03=#64。
|
||||
|
||||
## 建议合并顺序(待审核)
|
||||
- 测试与文档:T-01 最先合入 → T-03;T-02 随修复推进,最后定稿。
|
||||
- broker 下行:B-01 → B-02 → B-07 → B-03 → B-06 → B-04 → B-08。
|
||||
- broker 生命周期:B-05 → B-09 → B-10 → B-11 → B-12。
|
||||
- 监听:L-02 → L-01 → L-04 → L-05 → L-06 → L-07 → L-03。
|
||||
- 存储:D-01 → D-02 → D-04 → D-05 → D-03。
|
||||
- 消息:C-04 → C-05 → C-06 → C-01 → C-02 → C-03 → C-07。
|
||||
- 身份:U-01 → U-03 → U-04 → U-05 → U-02。
|
||||
- 管理后端:H-01 → H-03 → H-04 → H-05 → H-06 → H-07 → H-02。
|
||||
- 网页:U-01 界面部分 → W-01 → W-04 → W-05 → W-02 → W-03 → W-06。
|
||||
- SDK:K-00 → K-01..K-04 并行 → K-05。
|
||||
- 跨线:B-02→C-01;B-08、D-02、C-01→L-03;D-02→C-03;C-01、C-02→D-03;C-04→U-02、C-07;B-04→H-07;B-05→B-09→B-10;K-00→K-01..K-04;B-03 与 C-01 以 PublishDown 签名不变为契约并行。
|
||||
|
||||
## 统一取舍(写在总览 #7,尚未经负责人确认,确认前不当作决定)
|
||||
大帧名额按 PacketID 在 PUBACK/丢弃/断线归还、只在 broker 保留一份;broker 每连接异步下发 + 消息线每连接推送 worker;握手前推送主修 C-01、B-06 兜底;限速由 message.AllowRequest 在 uplink 分发前统一检查;presence 以 broker 已握手状态为准;fatal 后断开只留一条路径(broker 提供写出后断开原语,去掉固定 sleep);作废投递终态统一由 RejectPendingTx/TryFinalizeTx 处理;对话密码锁键 {发送方, 对方};直连 TLS 包装连接实现 ConnectionState();mochi 在 OnConnect 把发送配额置 0、不 fork;#3 按测试客户端缺陷修,不合入 fix3。
|
||||
|
||||
## 下一步
|
||||
- 等负责人审核 issue(可能调整范围、方案、优先级);审核通过后由 Grok 团队按总览 #7 的分工并行修复。审核前不改代码。
|
||||
- 负责人需确认的两点(总览「待核实」末尾):消息详情返回的 meta 是否算正文;记录保留 0 天时迟到的 ack 拿不到撤回结果,是否接受并记入 DEVIATIONS。
|
||||
|
||||
## 给下个会话
|
||||
- 审核意见如果改了某个方案,要同步检查总览 #7 的「共享文件归属」和「跨线依赖」,避免两条线改同一函数。改 issue 正文时,引用写成半角「 (#n)」才会链接。
|
||||
- 不要删除 E:\code\NixMsg-wt\fix3(负责人留给工程师)。
|
||||
- 经验已存:项目 experience「WebSocket 上的 MQTT:测试客户端拆包/写锁导致误判死锁…」;全局 experience「Windows PowerShell 5.1 脚本与中文」「Gitea 批量创建 issue 与 #n 引用链接」。
|
||||
- 生成 issue 的脚本和草稿在 %TEMP%\nixmsg-review,提交完成后已删除;以后以 Gitea 上的 issue 正文为准。
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-30 06:18:52 UTC [d3b83d9449]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-30-06-18-52-utc-d3b83d9449
|
||||
stable_id: 020c9295-88ae-4eb1-8922-a3ee8758f182
|
||||
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-ckpt-sdk-r2-supplement-20260930-a1
|
||||
created_at: '2026-09-30T06:18:52.758253+00:00'
|
||||
updated_at: '2026-09-30T06:18:52.758253+00:00'
|
||||
tags:
|
||||
- review-issues-ready
|
||||
- review-2026-09-30
|
||||
- sdk
|
||||
---
|
||||
|
||||
# 检查点:第二轮 SDK 审查结果已核实并补进 issue
|
||||
|
||||
承接上一个检查点(review-issues-ready)。基线仍是 main 4059a15,没有改代码。
|
||||
|
||||
## 第二轮审查结果
|
||||
- 身份、消息、平台三个第二轮审查子代理均出错结束,没有产出。SDK 第二轮(b01db482)完成,总审查人对照代码核实了第一轮没有的发现。
|
||||
|
||||
## 已更新的 issue(只改正文方案表与测试,工作包数量不变)
|
||||
- K-00 #57:“重连退避”改为明确算法——第 n 次等待 min(1s×2^(n-1),30s)×随机(0.7,1.3),n 为连续失败计数;仅 connect 后第一次连接可不等;断线后首次重连等约 1s;在线不足 60s 断开算一次失败;稳定 60s 后断开 n 重置为 1;只维护一个计数。原写“统一采用 Go/JS 的 S1.3 状态机”不妥(JS 双重翻倍)。“rate_limited 重交”补充每次重交重新生成 rid(消息 id、正文、send_at_ms 不变);新增“logout 请求失败要返回给应用”和“时长参数用 64 位整数”两行。
|
||||
- K-01 #58 Go:补 SendResult 缺 json 标签(SendAtMs 恒为 0)、去重顺序表重复记键(改共用 10000 条 LRU)、failAuth/failKicked 同步 Stop 白等 3s、限速重交复用 rid;S-15 与退避测试按新算法改;改动文件加 types.go。
|
||||
- K-02 #59 JS:补退避双重翻倍(mqtt.ts:41-45 + types.ts:174-215,实际 1/4/16/30s)、限速重交复用 rid。
|
||||
- K-03 #60 Python:补 logout 吞掉请求失败;S-15 改为按 K-00 算法。
|
||||
- K-04 #61 Java:补 java.util.Base64 需 API 26(D30 最低 24,内置编解码)、logout 吞掉请求失败、updateSelf 默认延迟用 Integer(改 Long);S-15 改为按 K-00 算法。
|
||||
- 总览 #7:“统一取舍”加 SDK 重连退避一条,“审查方式”说明 SDK 第二轮补充。#57–#61 各加一条说明评论。
|
||||
- 验证:19 处精确匹配替换,重跑 DryRun 全部显示已应用。
|
||||
|
||||
## 下一步
|
||||
不变:等负责人审核 issue,再由 Grok 团队按总览 #7 并行修复。
|
||||
+53
@@ -0,0 +1,53 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-30 06:59:34 UTC [3ce081c693]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-30-06-59-34-utc-3ce081c693
|
||||
stable_id: 0c39c482-f21a-4127-9d12-6febe5ba11f3
|
||||
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: t01-ws-harness-20260930-1448
|
||||
created_at: '2026-09-30T06:59:34.045814+00:00'
|
||||
updated_at: '2026-09-30T06:59:34.045814+00:00'
|
||||
tags:
|
||||
- ready-to-merge
|
||||
- T-01
|
||||
- lane-test
|
||||
---
|
||||
|
||||
# 检查点:测试线 Q · T-01(issue #3)已推送,未合入 main
|
||||
|
||||
## 线 / 任务
|
||||
- 线:测试交付 Q
|
||||
- 任务:T-01(Gitea #3)测试 WS 客户端拆包/写锁,去掉群事件 20ms 绕过
|
||||
- 分支:`feat/fix-t01-ws-harness`(已推送 origin,未推 main,未关闭 issue)
|
||||
- 提交:`14f93dcf7584acd766235053011344626b89af73` fix: 测试 WS 客户端按字节流拆包并恢复群事件同步下发
|
||||
- 工作树:`E:\code\NixMsg-wt\r2-t`
|
||||
- 基线:`origin/main` = `4059a15`
|
||||
|
||||
## 完成内容
|
||||
- `test/harness/mqtt.go`:Recv 按 MQTT 字节流缓冲拆包(含 continuation);Send/PONG 互斥锁且整帧一次 Write
|
||||
- 新增 `test/harness/mqtt_test.go`:合帧 3 包、跨帧3、双 goroutine 各 Send 1000 次
|
||||
- `internal/app/group/app.go` 仅 `emit`:去掉 goroutine+20ms,同步 PublishDown QoS0
|
||||
- F15:去掉独立短进程,同一长会话 `group.add` + 当次对话密码
|
||||
- `docs/DEVIATIONS.md`:标注 Q accept-rest 2–4 与「死锁未修」已被 T-01 取代,文末 `### 复审修复 T-01`
|
||||
- `test/accept/ACCEPTANCE.md`:更正误判死锁的结论
|
||||
- 未改 `internal/broker/`、`cmd/nixmsg/`、`sdk/`、`web/`、`internal/admin/`;未合入 `feat/fix-3-downlink-deadlock`;未删 `E:\code\NixMsg-wt\fix3`
|
||||
|
||||
## 验证
|
||||
- `go test ./test/harness/ ./internal/app/group/ ./cmd/nixmsg/ -count=1` 通过
|
||||
- `go test ./cmd/nixmsg/ -run TestUplinkDMOfflineGroupRecall -count=20` 通过(79.7s)
|
||||
- `go test ./test/accept/ -count=1` 通过
|
||||
- `task check` 通过(web build、golangci-lint 0 issues、go test ./...)
|
||||
|
||||
## 下一步
|
||||
- 总控审阅后 ff-only 合并 `feat/fix-t01-ws-harness`
|
||||
- 不修 T-02/T-03;不强推 main
|
||||
|
||||
## 给下个会话
|
||||
- issue #3 仍 open,可在评论看 commit
|
||||
- 勿删 `E:\code\NixMsg-wt\fix3`
|
||||
- 本工作树 `r2-t` 可在合并后清理
|
||||
+53
@@ -0,0 +1,53 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-30 07:06:30 UTC [8e039b35de]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-30-07-06-30-utc-8e039b35de
|
||||
stable_id: b9de5fee-70bf-43fc-b162-577d9e7d9161
|
||||
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: chk-c04-c07-20260930-r2c
|
||||
created_at: '2026-09-30T07:06:30.453834+00:00'
|
||||
updated_at: '2026-09-30T07:06:30.453834+00:00'
|
||||
tags:
|
||||
- ready-to-merge
|
||||
- lane/message
|
||||
- C-04
|
||||
- C-05
|
||||
- C-06
|
||||
- C-07
|
||||
---
|
||||
|
||||
# 检查点:消息线复审 C-04–C-07(未合 main)
|
||||
|
||||
## 线 / 任务
|
||||
- 线:消息核心 M
|
||||
- 任务:C-04(#35) C-05(#36) C-06(#37) C-07(#38)
|
||||
- 分支:`feat/fix-message-c04-c07`
|
||||
- 工作树:`E:\\code\\NixMsg-wt\\r2-c`(未改主工作区,未删 fix3)
|
||||
- 基线:`origin/main` `4059a15`
|
||||
- **未做**:C-01(#32) C-02(#33) C-03(#34);未 merge main
|
||||
|
||||
## 提交
|
||||
- `ac90495` fix: 作废投递走统一终态函数并写回执收尾(C-04)
|
||||
- `af8278d` fix: 上行分发前统一限速,send 不再单独扣桶(C-05)
|
||||
- `e95062d` fix: 推送 meta 用 UseNumber 保留超过 2^53 的整数(C-06;同文件含群分发 `joined_at <= send_at`)
|
||||
- `786fe35` fix: 补提交校验、停用检查、入群过滤与按完成时刻清理(C-07)
|
||||
|
||||
## 关键实现
|
||||
- C-04:导出 `RejectPendingTx` / `TryFinalizeTx` / `FinalizeMessageTx`;group void.go 与 identity lifecycle 作废路径改调用。不改 group emit,不改 kickFlushDelay/Disconnect。
|
||||
- C-05:导出 `AllowRequest`;`HandleUplink` 分发前检查(ack/receipt_ack 除外);Submit 不再扣桶。
|
||||
- C-06:`decodeMetaJSON` 用 `protocol.Unmarshal`。
|
||||
- C-07:ttl<=0、delay 先比上限再加法;发送方停用 `unauthorized`;清理用投递 `updated_at`/send_at 近似完成时刻(`completed_at` 列依赖 C-03 未做)。未删 message largeSem(C-01)。对话密码锁键未改(U-03)。
|
||||
|
||||
## 验证
|
||||
- `go test ./internal/app/message/ ./internal/app/group/ ./internal/app/identity/ ./cmd/nixmsg/ -count=1` 通过。
|
||||
- `TestUplinkDMOfflineGroupRecall` 曾因 #3 死锁窗口超时一次,重跑通过。
|
||||
|
||||
## 给下个会话
|
||||
- 总控可审阅后 ff-only 合 main;勿强推 main。
|
||||
- C-01/02/03 仍开放。C-07 的 completed_at 等 C-03 迁移后再改清理 SQL。
|
||||
- 标签:ready-to-merge
|
||||
+54
@@ -0,0 +1,54 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-30 07:06:56 UTC [77467fe469]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-30-07-06-56-utc-77467fe469
|
||||
stable_id: 11e3f78a-b6bf-40b2-bbe4-6090f651bc2a
|
||||
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-u01-u04-u05-checkpoint-20260930-1504
|
||||
created_at: '2026-09-30T07:06:56.604611+00:00'
|
||||
updated_at: '2026-09-30T07:06:56.604611+00:00'
|
||||
tags:
|
||||
- ready-to-merge
|
||||
- identity
|
||||
- U-01
|
||||
- U-04
|
||||
- U-05
|
||||
---
|
||||
|
||||
# 检查点:身份线 U-01/U-04/U-05 完成(ready-to-merge)
|
||||
|
||||
## 线 / 任务
|
||||
- 线:身份 / 群 / 在线
|
||||
- 任务:U-01 (#39)、U-04 (#42)、U-05 (#43)
|
||||
- 未做:U-02 (#40)、U-03 (#41)
|
||||
- 分支:`feat/fix-identity-u01-u05`(已推远端,未合并 main)
|
||||
- 工作树:`E:\code\NixMsg-wt\r2-u`
|
||||
- 基线:`origin/main` = `4059a15`
|
||||
|
||||
## 提交
|
||||
- `4852be9` fix: 开启自助注册须先有 8-64 字符安全码
|
||||
- `5dac4d8` fix: 锁定计数表过期清理并限制总量
|
||||
- `fa62c4c` fix: 目录搜索转义 LIKE 通配符并拒绝编号 inline
|
||||
- HEAD / origin/feat/fix-identity-u01-u05 = `fa62c4c97c015d5f69c62b7f40fd005be24056c7`
|
||||
|
||||
## 完成内容
|
||||
- U-01:register() 存储码非 8–64 字符时 403 registration_closed(锁定前、不计锁定);PUT registration 同一写操作末尾校验,开启且无合法码则 400 回滚;允许一次提交 enabled+code/generate;前端无已存码禁用开关;e2e 先设码再开启。
|
||||
- U-04:locks.go Fail/Check 顺手清过期条目;每 1024 次或每分钟全表扫;上限 65536,优先淘汰最旧非锁定条目。未改 memlock.go,未改对话密码锁键。
|
||||
- U-05:directory LIKE 转义 \ % _ 并 ESCAPE;注册拒绝 inline。后台开通/导入未改(禁止 endpoints.go / protocol)。
|
||||
|
||||
## 验证
|
||||
- `go test ./internal/app/identity/ ./internal/admin/ ./internal/auth/ ./internal/app/presence/ -count=1` 通过
|
||||
- web:vitest 5 files / 7 tests 通过;eslint 0
|
||||
- golangci-lint 改动包 0 issues
|
||||
- 未跑 Playwright e2e(无工作树独立 pnpm 10 安装;已改 e2e 注册流程顺序)
|
||||
|
||||
## 未做 / 给下个会话
|
||||
- 不要修 U-02(依赖 C-04,改 group)、U-03(对话密码锁键,与 admin/message/group 共享)
|
||||
- 不要合并 main;不要删 fix3
|
||||
- U-05 后台开通/导入 inline 留给后续(endpoints.go)
|
||||
- 工作树 web/node_modules 可能仍是指向主仓库的 junction,不入仓
|
||||
+48
@@ -0,0 +1,48 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-30 07:08:32 UTC [92796e1a30]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-30-07-08-32-utc-92796e1a30
|
||||
stable_id: 3381eda3-2984-448a-9d59-484c1de66791
|
||||
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: chk-fix-store-d01-d05-b6908cf-2
|
||||
created_at: '2026-09-30T07:08:32.805986+00:00'
|
||||
updated_at: '2026-09-30T07:08:32.805986+00:00'
|
||||
tags:
|
||||
- ready-to-merge
|
||||
- lane/store
|
||||
- D-01
|
||||
- D-02
|
||||
- D-04
|
||||
- D-05
|
||||
---
|
||||
|
||||
## 存储线复审修复 D-01/D-02/D-04/D-05 完成
|
||||
|
||||
- **线**:存储/配置/命令行/部署
|
||||
- **分支**:feat/fix-store-d01-d05
|
||||
- **工作树**:E:/code/NixMsg-wt/r2-d(未改主工作区,未删 fix3)
|
||||
- **基于**:origin/main @ 4059a15
|
||||
- **提交**:b6908cf fix: 修复写队列 busy 恢复、关闭安全、备份与配置构建问题
|
||||
- **已推送**:origin/feat/fix-store-d01-d05(普通推送,未推 main、未强推、未 merge)
|
||||
|
||||
### 完成
|
||||
- **D-01 (#27)**:runBatch 提交成功后 markReady,busy 后一次成功 Do 恢复 IsReady
|
||||
- **D-02 (#28)**:Close 在写锁内关 channel,并发 Do 不 panic;关闭后 ErrQueueClosed。新增 ExecOnWriter/Checkpoint/Optimize。未改 message 包,checkpoint 调用留给 C-03
|
||||
- **D-04 (#30)**:backup 库不存在报绝对路径错误、不建空库;chmod 0600;OPS 绝对路径 + 恢复须移走 db/wal/shm。未做 restore 命令
|
||||
- **D-05 (#31)**:迁移备份 pre-migrate-v{from}-to-v{to}.db 复用;Taskfile/q.yml/Dockerfile ldflags 注入 Version(K-05 为 SDK 打包,无冲突);显式 grace_seconds:0 按 0 生效;max_frame_bytes<=786432;admin set-password 清空 admin_sessions。healthcheck 在 TLS 且不允许明文时走 HTTPS
|
||||
|
||||
### 未做
|
||||
- **D-03 (#29)**:读连接池上限,依赖 C-01/C-02,按指示跳过。OpenReader 未改
|
||||
- 未改 cmd/nixmsg/serve.go 的 messageLoops,未改 broker/message/group/web/sdk/listener 业务
|
||||
|
||||
### 验证
|
||||
- go test ./internal/store/ ./internal/config/ ./cmd/nixmsg/ -count=1 通过
|
||||
|
||||
### 给下个会话
|
||||
- rebase origin/main 后由总控 ff-merge;勿在 e:/code/NixMsg 主工作区改
|
||||
- D-03 等 C-01/C-02 后再做
|
||||
+53
@@ -0,0 +1,53 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-30 07:08:42 UTC [1350492063]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-30-07-08-42-utc-1350492063
|
||||
stable_id: f1dfbda8-710b-4e9d-9239-251c0112f41f
|
||||
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: chk-c04-c07-20260930-r2c-retry
|
||||
created_at: '2026-09-30T07:08:44.328037+00:00'
|
||||
updated_at: '2026-09-30T07:08:44.328037+00:00'
|
||||
tags:
|
||||
- ready-to-merge
|
||||
- lane/message
|
||||
- C-04
|
||||
- C-05
|
||||
- C-06
|
||||
- C-07
|
||||
---
|
||||
|
||||
# 检查点:消息线复审 C-04–C-07(未合 main)
|
||||
|
||||
## 线 / 任务
|
||||
- 线:消息核心 M
|
||||
- 任务:C-04(#35) C-05(#36) C-06(#37) C-07(#38)
|
||||
- 分支:`feat/fix-message-c04-c07`(已推送 origin)
|
||||
- 工作树:`E:\\code\\NixMsg-wt\\r2-c`(未改主工作区,未删 fix3)
|
||||
- 基线:`origin/main` `4059a15`
|
||||
- **未做**:C-01(#32) C-02(#33) C-03(#34);未 merge main
|
||||
|
||||
## 提交
|
||||
- `ac90495` fix: 作废投递走统一终态函数并写回执收尾(C-04)
|
||||
- `af8278d` fix: 上行分发前统一限速,send 不再单独扣桶(C-05)
|
||||
- `e95062d` fix: 推送 meta 用 UseNumber 保留超过 2^53 的整数(C-06;同文件含群分发 `joined_at <= send_at`)
|
||||
- `786fe35` fix: 补提交校验、停用检查、入群过滤与按完成时刻清理(C-07)
|
||||
|
||||
## 关键实现
|
||||
- C-04:导出 `RejectPendingTx` / `TryFinalizeTx` / `FinalizeMessageTx`;group void.go 与 identity lifecycle 作废路径改调用。不改 group emit,不改 kickFlushDelay/Disconnect。
|
||||
- C-05:导出 `AllowRequest`;`HandleUplink` 分发前检查(ack/receipt_ack 除外);Submit 不再扣桶。
|
||||
- C-06:`decodeMetaJSON` 用 `protocol.Unmarshal`。
|
||||
- C-07:ttl<=0、delay 先比上限再加法;发送方停用 `unauthorized`;清理用投递 `updated_at`/send_at 近似完成时刻(`completed_at` 列依赖 C-03 未做)。未删 message largeSem(C-01)。对话密码锁键未改(U-03)。
|
||||
|
||||
## 验证
|
||||
- `go test ./internal/app/message/ ./internal/app/group/ ./internal/app/identity/ ./cmd/nixmsg/ -count=1` 通过。
|
||||
- `TestUplinkDMOfflineGroupRecall` 曾因 #3 死锁窗口超时一次,重跑通过。
|
||||
|
||||
## 给下个会话
|
||||
- 总控可审阅后 ff-only 合 main;勿强推 main。
|
||||
- C-01/02/03 仍开放。C-07 的 completed_at 等 C-03 迁移后再改清理 SQL。
|
||||
- 标签:ready-to-merge
|
||||
+48
@@ -0,0 +1,48 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-30 07:08:58 UTC [51a2506ee5]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-30-07-08-58-utc-51a2506ee5
|
||||
stable_id: a04c8be3-9dd8-4e67-9211-269093d351bc
|
||||
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: chk-listener-l01-l07-20260930
|
||||
created_at: '2026-09-30T07:09:01.355508+00:00'
|
||||
updated_at: '2026-09-30T07:09:01.355508+00:00'
|
||||
tags:
|
||||
- listener
|
||||
- review-fix
|
||||
---
|
||||
|
||||
## 监听线复审修复 L-02/L-01/L-04–L-07 已完成并推送(未做 L-03,未 merge main)
|
||||
|
||||
- **工作树**:`E:\code\NixMsg-wt\r2-l`
|
||||
- **分支**:`feat/fix-listener-l01-l07`(已普通推送到 origin,非 force)
|
||||
- **基于**:`origin/main` @ `4059a15`
|
||||
- **提交**:
|
||||
- `67a33ba` fix: 修复监听 accept 退避与握手前超时上限(L-02 #21、L-01 #20)
|
||||
- `9e3769f` fix: 修复 TLS ConnectionState、SPA 回退、健康检查与监听小问题(L-04 #23、L-05 #24、L-06 #25、L-07 #26)
|
||||
|
||||
## 做了什么
|
||||
- L-02:accept 非 closed 错误 5ms–1s 退避重试
|
||||
- L-01:TLS 握手/CONNECT 预读 10s;剩余长度 >64KiB 关闭;HTTP IdleTimeout 120s、MaxHeaderBytes 64KiB;握手前信号量 1024;ws.go AttachWS 前读超时
|
||||
- L-04:`tlsBufferedConn.ConnectionState()`,明文不加该方法;不靠 SecureCookies 打补丁
|
||||
- L-05:`httpx.SPA`;`serve.go` 只改 `staticFileHandler`
|
||||
- L-06:配证书且关明文时 healthcheck 走 https + InsecureSkipVerify(仅 127.0.0.1 探测);`deploy/config.docker.yaml` `allow_plaintext: false`
|
||||
- L-07:XFF 合并多行、无法解析则停;tls.Config 复用、证书检查 2 分钟;metrics SHA-256 + ConstantTimeCompare;serve 只 New 一次;WS 调 httpx.ClientIP
|
||||
|
||||
## 未做
|
||||
- **L-03 (#22) 按指令未修**(停机怼装依赖 B-08/D-02/C-01)
|
||||
- 未 merge main;未加 HSTS;未设 SecureCookies;metrics 失败未计入 LockAdminIP;未加 embeddist Playwright e2e
|
||||
|
||||
## 验证
|
||||
`go test ./internal/listener/ ./internal/httpx/ ./cmd/nixmsg/ -count=1` 全绿(listener ~11s,httpx、cmd/nixmsg 通过)。
|
||||
|
||||
## 下一步
|
||||
总控审阅后 ff-merge;L-03 等 B-08/D-02/C-01。不要删 `E:\code\NixMsg-wt\fix3`。
|
||||
|
||||
## 给下个会话
|
||||
复用工作树 `E:\code\NixMsg-wt\r2-l` 与分支 `feat/fix-listener-l01-l07`;不要在本分支做 L-03;serve.go 只动过 staticFileHandler 与 listener 装配段。
|
||||
+52
@@ -0,0 +1,52 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-30 07:20:39 UTC [fcb1dc1f6e]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-30-07-20-39-utc-fcb1dc1f6e
|
||||
stable_id: 8c2d9da1-6027-4bde-a90e-affd99f0757a
|
||||
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: t03-checkpoint-20260930-a3aa844
|
||||
created_at: '2026-09-30T07:20:39.999458+00:00'
|
||||
updated_at: '2026-09-30T07:20:39.999458+00:00'
|
||||
tags:
|
||||
- ready-to-merge
|
||||
- T-03
|
||||
- lane/test-docs
|
||||
- review-fix
|
||||
---
|
||||
|
||||
## 测试线 Q · T-03(issue #64)已推送,未合入 main
|
||||
|
||||
- **线**:测试交付 Q
|
||||
- **任务**:T-03(Gitea #64)压测工具改为 MQTT 5 认证握手并覆盖收发
|
||||
- **未做**:T-02(#63)最后定稿;未 merge main;未跑 1000 连接 / 10 分钟
|
||||
- **工作树**:`E:\\code\\NixMsg-wt\\r2-t03`
|
||||
- **分支**:`feat/fix-t03`(已普通推送 origin,非 force)
|
||||
- **基于**:`origin/feat/fix-t01-ws-harness` @ `14f93dc`
|
||||
- **提交**:`a3aa844cf0ddbbb151eb78994f2174e703d72e7e` fix: 压测客户端改为 MQTT 5 并完成 hello 与收发统计
|
||||
|
||||
## 做了什么
|
||||
- 重写 `test/load`:MQTT 5 CONNECT(ClientID=Username=端编号、CleanStart、心跳 30)、订阅 down、hello
|
||||
- 开通:管理 API CSV 批量、自助注册、`-reuse` 复用已开通端
|
||||
- 场景:N 连接保持;按速率单聊 send/ack;群发一条并统计推送排队耗时
|
||||
- 输出:提交/送达 P50/P95/P99、错误码分布、掉线数
|
||||
- `test/load/README.md` 写用法;不进 CI
|
||||
- `docs/DEVIATIONS.md` 仅追加 `### 复审修复 T-03`
|
||||
- 未改 broker/message/sdk 业务
|
||||
|
||||
## 验证
|
||||
- `go test ./test/load/ -count=1` 通过(含 TestQ3LiveShortBurst:8 连接、3 秒、群 8 人,errors none)
|
||||
- `NIXMSG_LOAD_VERIFY=1 go test ./test/load/ -run TestLocalLoadReport -count=1 -timeout 8m` 通过(62.6s):50 连接、1201 条、20.01/s、掉线 0、submit p95=9ms / p99=12ms、deliver p95=6ms / p99=7ms、50 人群 queue_ms=35、errors none
|
||||
- `go test ./test/load/cmd/mqttbench` 可编译
|
||||
|
||||
## 下一步
|
||||
总控审阅后 ff-only 合并 `feat/fix-t03`(建议在 T-01 之后)。不要强推 main。不要修 T-02。
|
||||
|
||||
## 给下个会话
|
||||
- issue #64 仍 open;勿删 `E:\\code\\NixMsg-wt\\fix3`
|
||||
- 1000×10min 仍不跑;工具已能执行(调 `-n`/`-rate`/`-duration`/`-group-size`)
|
||||
- 工作树 `r2-t03` 合并后可清理
|
||||
+64
@@ -0,0 +1,64 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-30 07:22:32 UTC [234d1ea01e]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-30-07-22-32-utc-234d1ea01e
|
||||
stable_id: 383374e2-3dfa-4d82-a6ae-8e105033d7b2
|
||||
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-r2h-admin-web-20260930-1522
|
||||
created_at: '2026-09-30T07:22:32.346374+00:00'
|
||||
updated_at: '2026-09-30T07:22:32.346374+00:00'
|
||||
tags:
|
||||
- ready-to-merge
|
||||
- lane/admin
|
||||
- lane/web
|
||||
- H-01
|
||||
- H-03
|
||||
- H-04
|
||||
- H-05
|
||||
- H-06
|
||||
- W-01
|
||||
- W-02
|
||||
- W-03
|
||||
- W-04
|
||||
- W-05
|
||||
- W-06
|
||||
---
|
||||
|
||||
## 后台接口+网页复审修复已完成并推送(未做 H-02/H-07,未 merge main)
|
||||
|
||||
- **工作树**:`E:\\code\\NixMsg-wt\\r2-h`
|
||||
- **分支**:`feat/fix-admin-web`(已普通推送到 origin,非 force,未合 main)
|
||||
- **基于**:`origin/main` @ `4059a15`
|
||||
- **HEAD**:`08c0eb0`
|
||||
|
||||
## 提交
|
||||
- `5176e04` fix: 限制管理接口请求体大小与读取时间(H-01 #44)
|
||||
- `512b8c2` fix: 端启停改为仅由 identity 执行(H-03 #46)
|
||||
- `30330ce` fix: 批量导入并发哈希并校正 CSV 行号(H-04 #47)
|
||||
- `ad7c50d` fix: 校验端默认延迟不超过调度上限(H-05 #48)
|
||||
- `eff4bd5` fix: 改密计入锁定并清理过期管理员会话(H-06 #49)
|
||||
- `898b9d2` fix: 统一管理后台 401 与加载失败处理(W-01 #51)
|
||||
- `5eb4fad` fix: 校正一次性密码展示与 CSV 下载(W-04 #54)
|
||||
- `1ec597c` fix: 修复端列表解锁、批量选择与编辑提交(W-05 #55)
|
||||
- `1448e7a` fix: 补齐投递记录时间筛选统计与分页(W-02 #52)
|
||||
- `2b68b67` fix: 群详情成员分页并与后端能力对齐(W-03 #53;含 groups.go `member_total` 与 admin-api 7.8)
|
||||
- `08c0eb0` fix: 自适应表格高度并改用中文标签(W-06 #56)
|
||||
|
||||
## 未做
|
||||
- **H-02 (#45) 审计**、**H-07 (#50) 重置踢线**按指令未修
|
||||
- 未改 `RegistrationView.vue` / `registration.go`(U-01)
|
||||
- 未跑 Playwright 双分辨率截图;Vitest 12 files / 26 tests 通过。e2e 断言已改为「定时中」
|
||||
|
||||
## 验证
|
||||
- `go test ./internal/admin/ ./internal/httpx/ -count=1` 通过
|
||||
- `cd web && pnpm test && pnpm lint` 通过
|
||||
|
||||
## 给下个会话
|
||||
- 总控可审阅后 ff-merge `feat/fix-admin-web`;不要强推 main;不要删 `E:\\code\\NixMsg-wt\\fix3`
|
||||
- 不要在本分支做 H-02/H-07
|
||||
- 标签:ready-to-merge
|
||||
+53
@@ -0,0 +1,53 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-30 07:23:04 UTC [b6fb44f08d]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-30-07-23-04-utc-b6fb44f08d
|
||||
stable_id: f0e962f7-a330-4a62-97b3-a7792744664f
|
||||
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: u02-ckpt-20260930-5aa45b4
|
||||
created_at: '2026-09-30T07:23:04.400612+00:00'
|
||||
updated_at: '2026-09-30T07:23:04.400612+00:00'
|
||||
tags:
|
||||
- ready-to-merge
|
||||
- U-02
|
||||
- lane/identity
|
||||
---
|
||||
|
||||
# 检查点:身份线复审 U-02 完成(未 merge main)
|
||||
|
||||
## 线 / 任务
|
||||
- 线:身份 / 群
|
||||
- 任务:U-02(Gitea #40)
|
||||
- 未做:U-03(对话密码锁键,等 admin 线)
|
||||
- 分支:`feat/fix-u02-group-tx`(已普通推送到 origin,未强推、未合 main)
|
||||
- 工作树:`E:\\code\\NixMsg-wt\\r2-u02`
|
||||
- 基线:`origin/feat/fix-message-c04-c07` @ `786fe35`(含 C-04 `ac90495`)
|
||||
- 提交:`5aa45b4` fix: 群写操作在事务内复核并去重建群成员
|
||||
|
||||
## 完成内容
|
||||
1. 加人/踢人/退群/转让/改名/解散在写事务内重读群主、成员关系、成员数;加人再复核目标端 enabled。argon2 仍在事务外。
|
||||
2. 建群/加人先去重、去掉自己,再按上限截断(超出 `group_full`),然后才密码校验。单请求成员数上限 `2*max_group_members`(至少 256),超出 `bad_request`。
|
||||
3. `createAdmin` 校验群主格式/存在/启用;成员去重;建成后 `emit` `member_added`(未改 emit 实现)。
|
||||
4. 迁移 `internal/store/migrations/0003_group_members_fk.sql`:`group_members` 指向 `groups(id) ON DELETE CASCADE`。当时最大号 0002,按 TASKS 4.2 取 0003。
|
||||
5. `docs/DEVIATIONS.md` 身份 I 节追加 `### 复审修复 U-02`。
|
||||
|
||||
## 验证
|
||||
- `go test ./internal/app/group/ ./internal/app/identity/ -count=1` 通过。
|
||||
- 覆盖:TalkGate 回调里解散后加人 `not_found` 且无孤儿行;重复成员建群只一条;后台群主不存在/停用失败;并发加人不超过上限;解散后直接 INSERT 成员被外键拒绝。
|
||||
|
||||
## 未做 / 注意
|
||||
- 未改 `emit`(T-01 另一分支仍是 goroutine+20ms)。
|
||||
- 未修 U-03。
|
||||
- 未改 message `RejectPendingTx`;void.go 沿用 C-04 调用。
|
||||
- 未 merge main。
|
||||
- `internal/store/db_test.go` 仍 `assertMigrationCount(..., 2)`,加 0003 后 `go test ./internal/store/` 会失败(本线不准改 store 测试)。合入前总控或 P 线改为 3。若 C-03 先占用 0003,rebase 时给本迁移改号。
|
||||
|
||||
## 给下个会话
|
||||
- 复用工作树 `E:\\code\\NixMsg-wt\\r2-u02` 与分支 `feat/fix-u02-group-tx`。
|
||||
- 不要从落后的 main 改 group 作废路径。
|
||||
- 不要删 `E:\\code\\NixMsg-wt\\fix3`。
|
||||
+67
@@ -0,0 +1,67 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-30 07:24:38 UTC [fd8b91d2c7]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-30-07-24-38-utc-fd8b91d2c7
|
||||
stable_id: 0e41749e-828a-45e2-a309-5681dd2693e9
|
||||
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: chk-broker-b01-b12-20260930-1515
|
||||
created_at: '2026-09-30T07:24:38.343182+00:00'
|
||||
updated_at: '2026-09-30T07:24:38.343182+00:00'
|
||||
tags:
|
||||
- ready-to-merge
|
||||
- lane/broker
|
||||
- B-01
|
||||
- B-02
|
||||
- B-03
|
||||
- B-04
|
||||
- B-05
|
||||
- B-06
|
||||
- B-07
|
||||
- B-08
|
||||
- B-09
|
||||
- B-10
|
||||
- B-11
|
||||
- B-12
|
||||
---
|
||||
|
||||
## broker 复审 B-01..B-12 已完成并推送(未 merge main)
|
||||
|
||||
- **工作树**:`E:\\code\\NixMsg-wt\\r2-b`
|
||||
- **分支**:`feat/fix-broker-b01-b12`(已普通推送到 origin,非 force)
|
||||
- **基于**:`origin/main` @ `4059a15`
|
||||
- **未 merge main**,未关 Gitea issues
|
||||
|
||||
## 提交
|
||||
- `da43385` fix: 在 OnConnect 把 mochi 发送配额置 0 规避死锁(B-01 #8)
|
||||
- `b5b63ed` fix: 大帧名额按 PacketID 在 PUBACK 与断线时归还(B-02 #9)
|
||||
- `4216072` fix: 认证失败不泄漏连接表并脱敏 mochi 整包日志(B-05 #12、B-07 #14)
|
||||
- `8b84584` fix: 完成 broker 复审 B-03 至 B-12
|
||||
|
||||
## 关键实现
|
||||
- B-03:每连接下行队列 256 帧/16MiB + 发送 goroutine;满则 ErrBackpressure。Publish 失败会重试以免静默抽空队列。
|
||||
- B-06:PublishDown 只发给当前连接;未订 down 返回 ErrNotSubscribed;导出 EffectivePayloadLimit;uplink.publishResp 使用它;旧连接 superseded。
|
||||
- B-04:PublishThenDisconnect 入队,OnPacketSent 后再 Disconnect。logout/fatalKick 走该原语。serve 里 identity.New ConnControl=nil。
|
||||
- B-09:broker 与 appUplink 按端加锁;uplink 握手表,仅已 hello 连接按当前连接通知消息线。未改 presence/app.go。
|
||||
- B-10:密码登录条件 UPDATE;hello TokenMatchesDB。未改 identity/self.go。
|
||||
- B-11:闲置取 used/online/offline 较新者,在线视为未闲置。
|
||||
- B-12:Authenticate 30s 超时;每端 Verify 并发 2。未改 auth 池/PHC。
|
||||
- B-08:Broker.Shutdown 发 MQTT 5 0x8B 后 Close。serve 在 listener Close 前调用。HTTP Shutdown 留给 L-03。
|
||||
|
||||
## 验证
|
||||
- `go test ./internal/broker/ -count=1` 通过(约 6.2s)
|
||||
- `go test ./cmd/nixmsg/ -count=1` 通过(约 4.9s)
|
||||
|
||||
## 跳过(按裁定)
|
||||
- 不改 identity/lifecycle.go、presence/app.go、auth pool/phc、listener L-03
|
||||
- 不关 issues,不 merge main
|
||||
|
||||
## 下一步
|
||||
总控审阅后 ff-merge;L-03 可接 B-08 Shutdown。不要删 `E:\\code\\NixMsg-wt\\fix3`。
|
||||
|
||||
## 给下个会话
|
||||
复用工作树 `E:\\code\\NixMsg-wt\\r2-b` 与已推送分支 `feat/fix-broker-b01-b12`。不要在 e:\\code\\NixMsg 主工作区改。
|
||||
+55
@@ -0,0 +1,55 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-30 07:31:26 UTC [82584f16a5]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-30-07-31-26-utc-82584f16a5
|
||||
stable_id: 189a13b3-37e9-4ec6-9169-bf720edf880a
|
||||
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: h07-checkpoint-20260930-cedd57b
|
||||
created_at: '2026-09-30T07:31:26.930787+00:00'
|
||||
updated_at: '2026-09-30T07:31:26.930787+00:00'
|
||||
tags:
|
||||
- ready-to-merge
|
||||
- lane/admin
|
||||
- H-07
|
||||
---
|
||||
|
||||
## 后台接口 H-07(Gitea #50)已完成并推送(未 merge main)
|
||||
|
||||
- **任务**:H-07 重置登录密码踢线失败被吞、审计仍记 ok
|
||||
- **工作树**:`E:\\code\\NixMsg-wt\\r2-h07`(未占用 H-02 的 `r2-h` / `feat/fix-admin-web`)
|
||||
- **分支**:`feat/fix-h07-reset-kick`(已普通推送到 origin,非 force)
|
||||
- **未 merge main**,未关 issue #50
|
||||
|
||||
## 基线与合并
|
||||
- 从 `origin/feat/fix-admin-web` @ `08c0eb0` 建分支(H-01/H-03–H-06)
|
||||
- `git merge origin/feat/fix-broker-b01-b12` → `b27f50e`(`merge: broker for KickAfterFrame`),无冲突;DEVIATIONS 自动保留双方
|
||||
- 开工后 `feat/fix-admin-web` 无新 H-02 提交,未再 merge
|
||||
- `serve.go` 无冲突,未改接线:`PasswordResetKick` 仍走 `sess.ResetPassword`(B-04 `PublishThenDisconnect`),回退仍走 `KickEndpoint`/`sess.Kick`
|
||||
|
||||
## 提交
|
||||
- `cedd57b` fix: 重置密码踢线失败时回退断开并记 ok_kick_failed
|
||||
|
||||
## 关键实现
|
||||
- `passwordResetKick`:`PasswordResetKick` 出错则回退 `KickEndpoint`,写错误日志,把原错误返回给调用方
|
||||
- 重置成功 HTTP 仍 200(密码已改);审计 `result=ok_kick_failed`
|
||||
- 停用/删除钩子出错只写日志,不改审计、不回退 KickEndpoint(identity 自有兜底)
|
||||
- 未改 H-02 审计框架,仍用现有 `audit()` slog
|
||||
- `docs/DEVIATIONS.md` 后台接口 A 追加 `### 复审修复 H-07`
|
||||
|
||||
## 验证
|
||||
- `go test ./internal/admin/ ./internal/broker/ -count=1` 通过(admin 2.6s,broker 6.2s)
|
||||
- 覆盖:注入报错的 `PasswordResetKick` → 调用 `KickEndpoint`、审计 `ok_kick_failed`、仍返回一次性密码;停用/删除钩子失败写日志且不回退 KickEndpoint
|
||||
|
||||
## 下一步
|
||||
总控审阅后 ff-merge(建议在 H-01/H-03–H-06 与 B-04 之后、H-02 之前)。不要强推 main。不要删 `E:\\code\\NixMsg-wt\\fix3`。
|
||||
|
||||
## 给下个会话
|
||||
- 复用工作树 `E:\\code\\NixMsg-wt\\r2-h07` 与已推送分支 `feat/fix-h07-reset-kick`
|
||||
- 不要在 `E:\\code\\NixMsg-wt\\r2-h` 上改 H-07(那是 H-02 的 admin-web 工作树)
|
||||
- 不要 merge main;H-02 若后合入,冲突时保留双方 DEVIATIONS,serve.go 只接踢线最小改动
|
||||
- 标签:ready-to-merge
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-30 07:31:39 UTC [24c34d156d]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-30-07-31-39-utc-24c34d156d
|
||||
stable_id: 58b096d3-7851-42cb-8706-c45e4c3026f6
|
||||
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-h02-checkpoint-20260930-afe6a77
|
||||
created_at: '2026-09-30T07:31:39.662776+00:00'
|
||||
updated_at: '2026-09-30T07:31:39.662776+00:00'
|
||||
tags:
|
||||
- H-02
|
||||
- lane/admin
|
||||
- feat/fix-admin-web
|
||||
---
|
||||
|
||||
## H-02 审计日志已完成并推送(未 merge main,未做 H-07)
|
||||
|
||||
- **工作树**:`E:\\code\\NixMsg-wt\\r2-h`
|
||||
- **分支**:`feat/fix-admin-web`(普通 push,非 force,未合 main)
|
||||
- **HEAD**:`afe6a77` `fix: 独立审计日志并补齐令牌身份与失败记录`
|
||||
- 基于第一波 HEAD `08c0eb0`
|
||||
|
||||
## 完成内容(Gitea #45 统一方案)
|
||||
1. `Deps.AuditLogger` 独立 slog,始终 Info;`cmd/nixmsg/serve.go` 只加这一行装配,未改 staticFileHandler/listener。
|
||||
2. 审计增加 `token_id`;令牌名称 1–64 字符。
|
||||
3. 不含秘密的 `detail`:enabled、code_changed、generated、members、failed、new_owner、导入前 20 个编号 + total。
|
||||
4. 批量结果 ok/partial/failed。
|
||||
5. `admin_auth_fail`:ip + reason(bad_password / rate_limited / invalid_token)。Cookie 未登录不记。
|
||||
|
||||
## 验证
|
||||
- `go test ./internal/admin/ ./cmd/nixmsg/ -count=1` 通过(admin 2.542s,cmd/nixmsg 4.972s)
|
||||
|
||||
## 未做
|
||||
- **H-07 (#50)** 等 B-04,不要修
|
||||
- 未 merge main;未关 issue
|
||||
- 未改 RegistrationView
|
||||
|
||||
## 给下个会话
|
||||
- 复用工作树 `E:\\code\\NixMsg-wt\\r2-h` 与分支 `feat/fix-admin-web`
|
||||
- 不要在 `e:\\code\\NixMsg` 主工作区改;不要删 `E:\\code\\NixMsg-wt\\fix3`
|
||||
- 总控可审阅后 ff-merge;不要强推 main
|
||||
+56
@@ -0,0 +1,56 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-30 07:33:32 UTC [01dfe35b7a]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-30-07-33-32-utc-01dfe35b7a
|
||||
stable_id: 5ad2d6bb-cc23-47b9-8520-ca169019d1b5
|
||||
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: u03-checkpoint-20260930-a0a24b2
|
||||
created_at: '2026-09-30T07:33:33.569308+00:00'
|
||||
updated_at: '2026-09-30T07:33:33.569308+00:00'
|
||||
tags:
|
||||
- ready-to-merge
|
||||
- U-03
|
||||
- lane/identity
|
||||
- review-fix
|
||||
---
|
||||
|
||||
## 检查点:身份线复审 U-03 完成(未 merge main)
|
||||
|
||||
## 线 / 任务
|
||||
- 线:身份 / 对话密码锁定
|
||||
- 任务:U-03(Gitea #41)
|
||||
- 分支:`feat/fix-u03-talk-lock`(已普通推送到 origin,未强推、未合 main)
|
||||
- 工作树:`E:\\code\\NixMsg-wt\\r2-u03`
|
||||
- **未 merge main**;未关 issue;未改 emit;未修 H-02
|
||||
|
||||
## 基线与合并
|
||||
1. `git worktree add -b feat/fix-u03-talk-lock E:\\code\\NixMsg-wt\\r2-u03 origin/feat/fix-u02-group-tx`(含 C-04/C-05 submit.go、U-02 group tx)
|
||||
2. `git merge origin/feat/fix-identity-u01-u05` → 干净(含 U-04 locks.go 过期清理)
|
||||
3. `git merge origin/feat/fix-admin-web` → 干净(H 的 endpoints.go;**未**合本地 r2-h 上可能已有的 H-02 `afe6a77`,按指令用 origin/feat/fix-admin-web)
|
||||
- 冲突:无。DEVIATIONS 自动合并双方追加;group/app.go、submit.go、endpoints.go、locks.go 无冲突,未删别人修复。
|
||||
|
||||
## 提交
|
||||
- 合并提交:`73408ab` merge: identity u01-u05;`c15e8dc` merge: admin-web
|
||||
- U-03:`a0a24b29b0f0f7a3b7e2743521b6fa8b5eac313a` fix: 统一对话密码锁键为发送方加对方不含 IP
|
||||
|
||||
## 完成内容(issue 统一方案)
|
||||
1. `LockTalkPair` 键统一为 `{Kind, 发送方, 对方}`,**不含 IP**。unlock / send / 进群 / 成功清零共用。`UnlockTalk`/`CheckTalkPasswordForJoin` 仍留 `remoteIP` 以免改接线签名。group `checkAddMember` 仍传 `DefaultRemoteIP`,identity 侧忽略。
|
||||
2. 没带密码先返回 `talk_password_required`,不计次、不因已锁改成 `rate_limited`;带错才 Fail;已锁且带密码才 `rate_limited`。
|
||||
3. 后台 `PUT talk-password`:有 Identity 时调 `SelfSetTalkPassword`(已清 `LockTalkTarget`,not_found→404);无 Identity 时改库后 `Clear(LockTalkTarget)`。
|
||||
4. `LoginLocks.ClearAllForEndpoint`:删该编号作为 EndpointID 或 PeerID 的全部锁定。`identity.Delete` 与无 Identity 的 admin 删除都会调用。`ClearEndpoint` 仍只清登录锁(admin memlock 已对齐)。
|
||||
5. `docs/DEVIATIONS.md` 身份 I 节追加 `### 复审修复 U-03`。
|
||||
|
||||
## 验证
|
||||
`go test ./internal/app/identity/ ./internal/app/group/ ./internal/app/message/ ./internal/admin/ ./internal/auth/ -count=1` 一次通过(identity 1.1s / group 0.18s / message 0.30s / admin 2.8s / auth 0.17s)。
|
||||
|
||||
## 未做 / 给下个会话
|
||||
- 不要 merge main;不要强推 main。
|
||||
- 不要改 group `emit`;不要修 H-02。
|
||||
- 总控可审阅后 ff-only 合 `feat/fix-u03-talk-lock`(建议在 U-02、identity u01-u05、admin-web 之后,因本分支已把它们 merge 进来)。
|
||||
- 不要删 `E:\\code\\NixMsg-wt\\fix3`。
|
||||
- 标签:ready-to-merge
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-30 07:39:34 UTC [06c6918237]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-30-07-39-34-utc-06c6918237
|
||||
stable_id: d97af7ae-e4e1-4cc6-9615-f7a8f0ea973a
|
||||
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: h07-merge-h02-checkpoint-22b94ec
|
||||
created_at: '2026-09-30T07:39:34.652431+00:00'
|
||||
updated_at: '2026-09-30T07:39:34.652431+00:00'
|
||||
tags:
|
||||
- ready-to-merge
|
||||
- lane/admin
|
||||
- H-07
|
||||
- H-02
|
||||
---
|
||||
|
||||
## H-07 已 merge H-02 审计并推送(未 merge main)
|
||||
|
||||
- **工作树**:`E:\\code\\NixMsg-wt\\r2-h07`
|
||||
- **分支**:`feat/fix-h07-reset-kick`
|
||||
- **HEAD**:`22b94ec` `merge: admin-web H-02 audit`(已普通推送 origin)
|
||||
- 父母:`cedd57b`(H-07)+ `afe6a77`(origin/feat/fix-admin-web H-02)
|
||||
- 未 merge main
|
||||
|
||||
## 冲突处理
|
||||
- `docs/DEVIATIONS.md`:保留 H-02 与 H-07 两节
|
||||
- `internal/admin/endpoints.go`:踢线失败仍回退 KickEndpoint;审计改用 H-02 `auditP`,result=`ok_kick_failed`
|
||||
- `endpoints_test.go`:审计断言改走独立 AuditLogger
|
||||
- serve.go 无冲突,AuditLogger + kick 钩子均保留
|
||||
|
||||
## 验证
|
||||
`go test ./internal/admin/ ./internal/broker/ -count=1` 通过(admin 2.8s,broker 6.2s)
|
||||
|
||||
## 给下个会话
|
||||
HEAD=`22b94ec`;不要合 main;不要占用 r2-h。
|
||||
+50
@@ -0,0 +1,50 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-30 07:41:46 UTC [2531a81339]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-30-07-41-46-utc-2531a81339
|
||||
stable_id: 38da5bd2-5733-473d-a413-107e03ae665a
|
||||
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: chk-sdk-k00-k05-ready-20260930-1538
|
||||
created_at: '2026-09-30T07:41:46.734141+00:00'
|
||||
updated_at: '2026-09-30T07:41:46.734141+00:00'
|
||||
tags:
|
||||
- ready-to-merge
|
||||
---
|
||||
|
||||
完成:SDK 线 K-00–K-05 全部实现并推送分支 `feat/fix-sdk-k00-k05`,HEAD `569bcd4` 已与 `origin/feat/fix-sdk-k00-k05` 一致。未 merge `main`。
|
||||
|
||||
原因:复审 issue #57–#62 要求按 K-00 统一约定修复四语言 SDK 断线重交/退避/锚误语义,并增加 `task sdk:check`。
|
||||
|
||||
关键实现:工作树 `E:\code\NixMsg-wt\r2-k`,基线 `origin/main` `4059a15`。六个 commit:
|
||||
- K-00 `0764b76` docs: 写入 K-00 SDK 行为约定附录
|
||||
- K-01 `1aa3a6f` fix: 按 K-00 约定修复 Go SDK 断线重交与退避
|
||||
- K-02 `6c20d63` fix: 按 K-00 约定修复 JS SDK 断线重交与退避
|
||||
- K-03 `24a64cc` fix: 按 K-00 约定修复 Python SDK 断线重交与退避
|
||||
- K-04 `cc47ca4` fix: 按 K-00 约定修复 Java SDK 断线重交与退避
|
||||
- K-05 `569bcd4` chore: 增加 sdk:check 并对齐 Go SDK 版本
|
||||
|
||||
验证:
|
||||
- Go/JS/Python/Java SDK 单测已过(Python 本机若无 paho-mqtt 则 skip)
|
||||
- Java `mvn -q test` 通过
|
||||
- `task sdk:check` exit 0(Python skip 无 paho-mqtt;Java mvn 静默通过)
|
||||
- 已 `git push -u origin feat/fix-sdk-k00-k05` 成功;PR 链接 https://git.asio.asia/nixevol/NixMsg/pulls/new/feat/fix-sdk-k00-k05
|
||||
- 未 merge main
|
||||
|
||||
问题与解决:
|
||||
- 首次 push 被 Windows `credential-helper-selector` 交互挂起;改用临时 credential helper + `空 credential.helper` 跳过 GCM 后推送成功。Gitea 密码库存在两条同名 `git.asio.asia` 重复项(`7ca9fa6b-...` 与 `9a97e594-...`),`secret_resolve` 会 SECRET_AMBIGUOUS,以后用 `secret_item_get` 取一条即可。
|
||||
- Taskfile 内联 PowerShell `function` 会被 Task DSL 解析;K-05 改为 `taskfiles/sdk-check.ps1` / `.sh`。
|
||||
- Java 首次连接超时后第二次 connect 卡在 CONNECTING:`runLoop` 改 `waitWake`,超时设 `stopReconnect`。
|
||||
|
||||
下一步:等总控审阅并 merge;本线不 merge main。
|
||||
|
||||
给下个会话:
|
||||
- 分支已推送,不要再改 K-00–K-05 除非复审意见。
|
||||
- 不 merge main。
|
||||
- 推送请跳过 Windows credential-helper-selector(交互挂起);两条 git.asio.asia 密码库项重复。
|
||||
- 不要 publish npm/PyPI/Maven。
|
||||
- 工作树 `E:\code\NixMsg-wt\r2-k`。
|
||||
+58
@@ -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
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-30 08:17:57 UTC [24e1fd4fc5]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-30-08-17-57-utc-24e1fd4fc5
|
||||
stable_id: d6ae3499-9c68-4bb0-af1a-d9d6dec33b8e
|
||||
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: ckpt-r2-l03-t02-20260930-1618
|
||||
created_at: '2026-09-30T08:17:58.015746+00:00'
|
||||
updated_at: '2026-09-30T08:17:58.015746+00:00'
|
||||
tags:
|
||||
- ready-to-merge
|
||||
---
|
||||
|
||||
# 检查点:L-03 / D-03 评论 / T-02 已推送,未合 main
|
||||
|
||||
## 完成内容
|
||||
- **L-03 #22**:工作树 `E:\\code\\NixMsg-wt\\r2-l03`,分支 `feat/fix-l03-shutdown` HEAD `9a17c6a26bd7b09f875d664a48c5caf59cfcb09f`。合成 origin `feat/fix-message-c01-c03` + `feat/fix-listener-l01-l07`(broker/store 已在 C-01–C-03)。listener `StopAccept`/`Wait`;serve 停机顺序 StopAccept → 等循环 → Drain 10s → Shutdown 5s → 再 Drain → Wait → db.Close;`<-ctx.Done()` 后立刻 `stop()`。未改 PublishDown。compose 30s;OPS TimeoutStopSec。DEVIATIONS `### 复审修复 L-03`。Gitea 已评论 (#22)。
|
||||
- **D-03 #29**:C-03 `a4e51ec` 已满足 MaxOpen=64 MaxIdle=16 idle 5m query_only + TestReaderPoolCapAndQueryOnly。只评论,不另开补丁。
|
||||
- **T-02 #63**:工作树 `E:\\code\\NixMsg-wt\\r2-t02`,分支 `feat/fix-t02-acceptance` HEAD `590ee0d549e77701eb1cd9ed761a3a369cfe4ea1`(基于 T-01)。对照表拆子项,通过 19 / 部分通过 4(F03/F08/F21/F22)。task check 通过。
|
||||
- **#32 #33 #34**:已补 C-01/C-02/C-03 commit 链接评论。
|
||||
|
||||
## 验证
|
||||
- L-03:TestStopAcceptDoesNotWaitForMQTT、TestServeShutdownWithLiveMQTT(WS+TCP 0x8B,15s 内返回);go test cmd/nixmsg listener broker store message。合成分支 task check 有既有 gofmt/govet,非 L-03 引入。TestQ2 在 C-01–C-03 基线即因回执超时失败。
|
||||
- T-02:task check 全绿(含 go test ./test/accept/ 约 27s)。
|
||||
|
||||
## 未合 main 的 feat
|
||||
T-01 feat/fix-t01-ws-harness;T-02 feat/fix-t02-acceptance;T-03 feat/fix-t03;message c01-c03 / c04-c07;identity u01-u05;store d01-d05;listener l01-l07;L-03 feat/fix-l03-shutdown;admin-web;U-02;U-03;H-07;broker b01-b12;SDK k00-k05。
|
||||
|
||||
## 不要做
|
||||
不合 main、不强推 main、不合 feat/fix-3-downlink-deadlock、保留 E:\\code\\NixMsg-wt\\fix3。不要在 e:\\code\\NixMsg 主工作树改代码。
|
||||
|
||||
## 给下个会话
|
||||
- L-03 合入须在 B-08、D-02、C-01 与 listener L-01–L-07 之后;合成分支含 listener merge commit 8e1d022。
|
||||
- D-03 无需再补代码。
|
||||
- T-02 只动测试与文档,可在 T-01 之后 ff。
|
||||
+63
@@ -0,0 +1,63 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-30 08:36:43 UTC [7b663314b3]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-30-08-36-43-utc-7b663314b3
|
||||
stable_id: e6e17ffc-6f9c-41a7-ae02-4e44a9d37baf
|
||||
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-r2-integrate-main-20260930-0837
|
||||
created_at: '2026-09-30T08:36:43.322040+00:00'
|
||||
updated_at: '2026-09-30T08:36:43.322040+00:00'
|
||||
tags:
|
||||
- handover
|
||||
- origin/main
|
||||
- integrate-r2
|
||||
- review-round-2
|
||||
---
|
||||
|
||||
|
||||
# 检查点:复审修复已 ff 合入 origin/main
|
||||
|
||||
## 完成内容
|
||||
- 在工作树 `E:\\code\\NixMsg-wt\\r2-merge` 建 `feat/integrate-r2`,从 origin/main `4059a15` 线性 cherry-pick 各 feat 的非 merge 独有提交(互相包含的组装枝只合一次:L-03 含 C-01–C-03+listener;H-07 含 broker+admin-web+H-02;U-03 含 u02+identity+部分 admin)。
|
||||
- **origin/main 新 HEAD**:`0c9b459fb1828e913f39d6368eda826968cfdda2`(`style: 合入后修 gofmt/govet 与 RegistrationView 类型检查`)。相对 `4059a15` 快进 44 个提交。`git push origin HEAD:main` 成功,**未 --force**。
|
||||
- 本地 `E:\\code\\NixMsg` 的 main 仍指向 `4059a15`(未改乱主工作树)。`E:\\code\\NixMsg-wt\\fix3` 仍在,分支 `feat/fix-3-downlink-deadlock` **未合入**。
|
||||
|
||||
## 合入的分支(提交已在 main,未丢)
|
||||
feat/fix-store-d01-d05;feat/fix-broker-b01-b12;feat/fix-message-c04-c07;feat/fix-identity-u01-u05;feat/fix-listener-l01-l07;feat/fix-u02-group-tx;feat/fix-message-c01-c03;feat/fix-l03-shutdown;feat/fix-admin-web;feat/fix-u03-talk-lock;feat/fix-h07-reset-kick;feat/fix-sdk-k00-k05;feat/fix-t01-ws-harness;feat/fix-t03;feat/fix-t02-acceptance。另有合入后提交 `8f2ebc7`(迁移计数=4、WakePush 回执、H-07 测试改 AuditLogger)与 `0c9b459`(gofmt/govet/vue-tsc)。
|
||||
|
||||
## 冲突怎么解
|
||||
- `docs/DEVIATIONS.md`:双方保留。
|
||||
- `healthcheck.go`:保留 store `healthcheckUseHTTPS` + listener TLS 健康检查测试。
|
||||
- `endpoints.go`:保留 U-03 `LockTalkTarget` 清理 + H-02 `auditP` + H-07 `ok_kick_failed`。
|
||||
- 迁移:U-02 的 `0003` 与 C-03 的 `0004` 都在;store `db_test` 期望条数改为 4,备份名 v1-to-v4。
|
||||
|
||||
## 验证
|
||||
- `task check` 通过(web build + golangci-lint 0 issues + `go test ./...`)。`test/accept` 约 27.6s。
|
||||
- `TestQ2AcceptAndReport`:C-01 基线因 rejectTooLarge 写回执未 `WakePush(sender)` 超时;在 `8f2ebc7` 于 rejectTooLarge / submit / ack-timeout / ExpireOnce 补唤醒后通过,非默默留红。
|
||||
|
||||
## Gitea issues(https://git.asio.asia/nixevol/NixMsg)
|
||||
- 已关并评论 main 提交(半角 ` (#n)`):#3(T-01)、#8–#64。共 58 个。
|
||||
- **#7 总览保持开放**,已评论列出合入 HEAD 与关闭清单。
|
||||
- #1 #2 #4 #5 #6 此前已关。当前仅 #7 仍 open。
|
||||
|
||||
## 未完成 / 不要做
|
||||
- F03/F08/F21/F22 验收仍为部分通过(T-02 对照表如实记录)。
|
||||
- 不要合 `feat/fix-3-downlink-deadlock`,不要删 `E:\\code\\NixMsg-wt\\fix3`。
|
||||
- 不要强推 main。不要发布 SDK/镜像(阶段 3)。
|
||||
- 阶段 3(Z1–Z3:全量回归、打标签 v0.1.0、发布)尚未做。
|
||||
|
||||
## 下一步
|
||||
- 阶段 3:全量 itest/sdk:check/弱网压测报告、偏差汇总、打标签与发布。
|
||||
- 各 feat 工作树可在确认无未推改动后清理(除 fix3)。
|
||||
- 主工作树 `E:\\code\\NixMsg` 需要时再 `git merge --ff-only origin/main`。
|
||||
|
||||
## 给下个会话
|
||||
- main 已是 `0c9b459`;复审 #8–#64 与 T-01 #3 已关。
|
||||
- 死锁分支仍独立:`feat/fix-3-downlink-deadlock` @ `E:\\code\\NixMsg-wt\\fix3` HEAD `479a08e`(相对旧 main)。
|
||||
- Gitea 用 `git credential fill`(host git.asio.asia);密码库有两条同名 `git.asio.asia`,`secret_resolve` 会歧义。
|
||||
- 推送 Windows 可能被 credential-helper-selector 挂起;本次 GCM 直接 push 成功。
|
||||
+54
@@ -0,0 +1,54 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-30 08:40:42 UTC [7c8bf112b4]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-30-08-40-42-utc-7c8bf112b4
|
||||
stable_id: 47b02a82-7845-4889-ae5b-996fdf737434
|
||||
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: chk-nixmsg-handover-close-7-20260930-0838z
|
||||
created_at: '2026-09-30T08:40:42.456614+00:00'
|
||||
updated_at: '2026-09-30T08:40:42.456614+00:00'
|
||||
tags:
|
||||
- handover
|
||||
---
|
||||
|
||||
# 检查点:总控收尾,Gitea #7 已关闭
|
||||
|
||||
## 完成内容
|
||||
- 本会话只做总控收尾,**未改代码、未打 tag、未发布 npm/pypi/maven、未强推**。
|
||||
- Gitea 总览 issue **#7 已评论并关闭**。评论(issuecomment-472):origin/main 已快进到 `0c9b459`(完整 SHA `0c9b459fb1828e913f39d6368eda826968cfdda2`);子 issue 已关闭;阶段 3 未做;F03/F08/F21/F22 仍部分通过;正文含半角 `(#7)`。关闭后 GET 确认 `state=closed`,评论数 2。
|
||||
- 此前(上一检查点)已把复审修复 **fast-forward 合入 origin/main**,HEAD 即上述 `0c9b459`;相对 `4059a15` 快进 44 提交。feat 复审分支已合;**未合** `feat/fix-3-downlink-deadlock`。
|
||||
- Gitea 子 issue:#3 与 #8–#64 已关;#1 #2 #4 #5 #6 更早已关。现 **无 open issue**。
|
||||
|
||||
## main HEAD
|
||||
- `origin/main`:`0c9b459fb1828e913f39d6368eda826968cfdda2`(`style: 合入后修 gofmt/govet 与 RegistrationView 类型检查`)
|
||||
- 仓库:https://git.asio.asia/nixevol/NixMsg
|
||||
- 未合分支:`feat/fix-3-downlink-deadlock`(工作树 `E:\\code\\NixMsg-wt\\fix3` 保留;上一检查点记 HEAD `479a08e`,相对旧 main)
|
||||
|
||||
## 验证
|
||||
- 合入后 `task check` 绿(web build + golangci-lint 0 issues + `go test ./...`;`test/accept` 约 27.6s)。本收尾会话未再跑测试、未再 merge。
|
||||
- Gitea:GET #7 先为 `open`(1 条评论),POST 评论 201(id=472,半角引用成功),PATCH `state=closed` 201,再 GET 为 `closed`(2 条评论)。
|
||||
|
||||
## 问题与解决
|
||||
- Gitea API 凭证用本机 **Git Credential Manager**:`git credential fill`(host `git.asio.asia`,`GCM_INTERACTIVE=never`),Basic auth 只在内存,**秘密未写文件**。密码库有两条同名 `git.asio.asia`(`secret_resolve` 会歧义),本次未走密码库。
|
||||
- PowerShell 评论正文放 UTF-8 JSON 再 POST,避免编码把 `#` 搞坏;issue URL 用 `/issues/7` 不用 URL fragment。
|
||||
|
||||
## 未完成(阶段 3)
|
||||
- 阶段 3 未做:Z1 全量回归(itest / 端到端 / `task sdk:check` / 弱网压测)、Z2 审核、Z3 打 `v0.1.0` 与 `sdk/go/v0.1.0`、发布 SDK 包与镜像、交付说明。
|
||||
- T-02 验收 **F03 / F08 / F21 / F22 仍为部分通过**。部分通过项**未测 1000 端 / 拔网线 / netem**,不得当成已全量验收。
|
||||
|
||||
## 下一步
|
||||
- 若继续交付:做阶段 3(Z1–Z3)。当前总控收尾**不要**自行打 tag、发布或合死锁分支。
|
||||
- 需要时给主工作树 `git fetch` 后再 `ff-only` 跟上 `origin/main`。确认无未推改动后可清理各 feat 工作树(**除 fix3**)。
|
||||
|
||||
## 给下个会话
|
||||
- **不要合** `feat/fix-3-downlink-deadlock`;**保留** `E:\\code\\NixMsg-wt\\fix3`。
|
||||
- 本地 `e:\\code\\NixMsg` **可能仍停在 `4059a15`**,先 `git fetch origin` 再看 `origin/main`=`0c9b459`,不要误以为 main 没合入。
|
||||
- F03/F08/F21/F22 部分通过;**未测 1000 端 / 拔网线 / netem**。
|
||||
- **#7 已关闭**,不要再重复合并、不要重开除非阶段 3 发现问题。
|
||||
- 不要强推 `main`,不要发布 npm/pypi/maven,不要打 tag(除非明确执行阶段 3)。
|
||||
- Gitea 操作用 `git credential fill`;密码库两条 `git.asio.asia` 重复,勿 `secret_resolve`。
|
||||
+43
@@ -0,0 +1,43 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-30 08:51:10 UTC [2c0d16c6ab]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-30-08-51-10-utc-2c0d16c6ab
|
||||
stable_id: 056e3d2e-1001-41a3-8467-1d5c431139f6
|
||||
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: checkpoint-verify-origin-main-20260930-1648
|
||||
created_at: '2026-09-30T08:51:10.227146+00:00'
|
||||
updated_at: '2026-09-30T08:51:10.227146+00:00'
|
||||
tags:
|
||||
- handover
|
||||
- origin/main
|
||||
- verify
|
||||
---
|
||||
|
||||
# 检查点:已核对 origin/main 是否为复审合入版本
|
||||
|
||||
## 完成内容
|
||||
- 只读核对,未改代码、未 push。
|
||||
- `git fetch origin` 后 `origin/main` = `0c9b459fb1828e913f39d6368eda826968cfdda2`(`style: 合入后修 gofmt/govet 与 RegistrationView 类型检查`),与交接声称一致;相对旧基线 `4059a15` 正好 44 个线性提交(该范围内无 merge commit)。
|
||||
- Gitea 公开 API 交叉验证:`GET https://git.asio.asia/api/v1/repos/nixevol/NixMsg` 的 `default_branch=main`;`GET .../branches/main` 的 `commit.id` 同为 `0c9b459...`(时间 2026-09-30T16:34:33+08:00)。`git ls-remote origin HEAD` 与 `refs/heads/main` 同 SHA。
|
||||
|
||||
## 15 条复审 feat 与 main 的关系
|
||||
- 原 feat 远端 tip **不是** `origin/main` 的 git 祖先(合入方式是 cherry-pick 到 `feat/integrate-r2` 再快进 main,不是原分支快进)。
|
||||
- 内容已在 main:store/broker/c04-c07/identity/listener/u02/c01-c03/l03/admin-web/u03/h07/sdk/t01/t03/t02。git cherry 对多数补丁显示已等价;U-03、H-07、T-02 因冲突解法 patch-id 不完全相同,但同说明提交已在 `origin/main`。
|
||||
|
||||
## 故意未合
|
||||
- `feat/fix-3-downlink-deadlock` 按交接故意未作为本轮合入目标。
|
||||
- 已提交 tip `479a08e` 已在旧 main 历史中(是 `4059a15` 的祖先),相对 `origin/main` 独有提交数为 0。远端无此分支名。
|
||||
- 工作树 `E:\\code\\NixMsg-wt\\fix3` 仍在,且有未提交改动(DEVIATIONS、group/app.go、broker 若干文件,相对 479a08e 约 +115/-16)。这些未进 origin/main。
|
||||
|
||||
## 本地主工作树
|
||||
- `e:\\code\\NixMsg` 当前 `main` HEAD=`4059a15`,落后 `origin/main` 44 提交,无超前、工作区干净。要对齐需 `git merge --ff-only origin/main`(或 pull)。
|
||||
|
||||
## 给下个会话
|
||||
- 不要把「feat tip 不是祖先」误判为修复没合进 main。
|
||||
- 不要合死锁分支;不要删 fix3 工作树(有未提交 WIP)。
|
||||
- 不要强推 main;阶段 3(打 tag/发布)仍未做。
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-30 08:57:28 UTC [6e16da3376]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-30-08-57-28-utc-6e16da3376
|
||||
stable_id: 494915a4-9b18-4408-88df-0c0fcf47b3da
|
||||
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: checkpoint-cleanup-branches-20260930-1656
|
||||
created_at: '2026-09-30T08:57:28.624663+00:00'
|
||||
updated_at: '2026-09-30T08:57:28.624663+00:00'
|
||||
tags:
|
||||
- handover
|
||||
- branches
|
||||
---
|
||||
|
||||
# 检查点:已清理已合入的旧分支
|
||||
|
||||
## 完成
|
||||
- 远端 49 条 feat/* 已删除。Gitea 现在只剩 main。
|
||||
- 本地对应分支已删;干净工作树 r2-* 已删除。
|
||||
- 本地 main 已 fast-forward 到 origin/main `0c9b459`。
|
||||
- 无打开的合并请求。
|
||||
|
||||
## 保留
|
||||
- `E:\\code\\NixMsg-wt\\fix3` 与本地分支 `feat/fix-3-downlink-deadlock`(tip `479a08e`)。工作树有未提交改动:DEVIATIONS.md、internal/app/group/app.go、broker 若干文件。远端没有这条分支。不要删这个工作树。
|
||||
|
||||
## 给下个会话
|
||||
- 仓库分支只剩 origin/main。不要把 fix3 未提交改动合进 main。
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-30 09:04:46 UTC [7eb804380e]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-30-09-04-46-utc-7eb804380e
|
||||
stable_id: dddd6289-7d0b-4857-ac3e-2293ba39a94b
|
||||
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: checkpoint-reread-no-new-bug-20260930-1705
|
||||
created_at: '2026-09-30T09:04:46.965739+00:00'
|
||||
updated_at: '2026-09-30T09:04:46.965739+00:00'
|
||||
tags:
|
||||
- handover
|
||||
- review
|
||||
---
|
||||
|
||||
# 检查点:合入后复查未发现新的必须修缺陷
|
||||
|
||||
## 完成
|
||||
- 对照 main `0c9b459` 读了停机、broker 下行、消息推送/恢复、在线离线、对话锁、迁移与读池、SDK 重连、管理端重置密码踢线审计。
|
||||
- 未发现新的必须再改的逻辑错误。上一轮复审修复已在这些路径上。
|
||||
|
||||
## 不是代码缺陷
|
||||
- 验收 F03/F08/F21/F22 仍部分通过:千端、拔网线、netem、裸 TCP 验收、Docker 全量未测。
|
||||
- 阶段 3(打 tag、发 SDK 包和镜像)未做。
|
||||
- `E:\\code\\NixMsg-wt\\fix3` 未提交实验不要合。
|
||||
- DEVIATIONS 里已接受的偏差(如 B-01 不执行客户端 Receive Maximum)保留。
|
||||
|
||||
## 给下个会话
|
||||
- 四路只读复审仍在跑;若它们给出带行号的确认缺陷,再单独处理,不要重开已关问题。
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-30 09:10:33 UTC [ad016ac6b5]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-30-09-10-33-utc-ad016ac6b5
|
||||
stable_id: a9e137cc-f3b1-4311-b8dd-b4c7b8ffbfd1
|
||||
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: checkpoint-reread-confirmed-bugs-20260930-1710
|
||||
created_at: '2026-09-30T09:10:33.311649+00:00'
|
||||
updated_at: '2026-09-30T09:10:33.311649+00:00'
|
||||
tags:
|
||||
- handover
|
||||
- review
|
||||
---
|
||||
|
||||
# 检查点:合入后复查确认还要修的缺陷
|
||||
|
||||
基线 main `0c9b459`。四路只读复查已完成。下面是对过代码或审查引用后仍成立的项,还没开修。
|
||||
|
||||
## 消息唤醒
|
||||
- 定时分发 `dispatchDueBatch` 只唤醒 pending 接收方,不唤醒发送方,空闲在线时回执不推。`internal/app/message/push.go`。
|
||||
- `too_large` 拒收后不自唤醒接收方,后面的 pending 会停。
|
||||
- `Recall` 成功后不 `WakePush` 接收方,窗口空出来不继续推。`ack.go`。
|
||||
|
||||
## broker
|
||||
- `PublishThenDisconnect` 用全局 `sentPub` 判断「本帧已写出」,有下行积压时 fatal/logout 可能还没写出就断开。`internal/broker/downlink.go`。
|
||||
- `Broker.Shutdown` 对 ctx 是非阻塞 select,有积压时 0x8B 可能发不出。`broker.go`。
|
||||
|
||||
## 存储
|
||||
- 写队列通道满时 `enqueue` 持 `sendMu.RLock` 阻塞发送,`Close` 要写锁,停机会卡死。`internal/store/queue.go`。
|
||||
|
||||
## SDK
|
||||
- Go `PublishUp` 失败且未 stopReconnect 时既不换 rid 也不 `finishSend`,`Send` 会挂。`sdk/go/send.go`。
|
||||
- JS 非协议错误的 publish 失败换了 rid 但不 `drainSendQueue`。`sdk/js/src/client.ts`。
|
||||
- Python/Java 首次握手失败时 `connect()` 已返回错误,后台仍重连。
|
||||
- Java `rate_limited` 把 inflight 减了两次(低)。
|
||||
|
||||
## 群
|
||||
- 客户端 `group.Create` 事务内不对创建者做 `endpointCheckTx`,停用竞态可留下非法群主。`internal/app/group/app.go`。
|
||||
- 低:后台加人审计把已是成员/重复编号算成功。`internal/admin/groups.go`。
|
||||
|
||||
## 不要当缺陷
|
||||
- F03/F08/F21/F22 未测项、阶段 3 发布、fix3 未提交实验、DEVIATIONS 已接受偏差。
|
||||
- 0003/0004 都会执行;读池 64 已落地;四套重连公式单测一致。
|
||||
|
||||
## 下一步
|
||||
用户问的是还有没有要修的问题。本检查点只记缺陷,未开修。若要修,按上面清单分线,不要合 fix3。
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-30 09:19:28 UTC [7fff22b983]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-30-09-19-28-utc-7fff22b983
|
||||
stable_id: f3480295-73cf-4230-935e-584990171d5f
|
||||
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: checkpoint-r3-issues-20260930-1719
|
||||
created_at: '2026-09-30T09:19:28.199026+00:00'
|
||||
updated_at: '2026-09-30T09:19:28.199026+00:00'
|
||||
tags:
|
||||
- handover
|
||||
- issues
|
||||
---
|
||||
|
||||
# 检查点:合入后复查缺陷已提交 Gitea issue
|
||||
|
||||
基线 origin/main `0c9b459`。已建并打开:
|
||||
|
||||
- #73 总览 R3-00
|
||||
- #65 R3-01 消息漏唤醒 high
|
||||
- #66 R3-02 积压时先断开 medium
|
||||
- #67 R3-03 写队列满时 Close 死锁 medium
|
||||
- #68 R3-04 Go SDK 发送挂起 high
|
||||
- #69 R3-05 JS SDK 队列不泵 high
|
||||
- #70 R3-06 Python/Java 首次握手失败仍重连 medium
|
||||
- #71 R3-07 客户端建群不复核创建者 medium
|
||||
- #72 R3-08 后台加人审计口径 low
|
||||
|
||||
还没开修。不要合 fix3。两个旧子代理(补齐可测的验收项 e63965f2、补测后只读审查并提 issue 468250be)已发停止,不要再让它们继续改验收或重提旧 issue。
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-30 09:28:10 UTC [d1cd49a4bf]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-30-09-28-10-utc-d1cd49a4bf
|
||||
stable_id: bfe277b1-e818-4021-a65a-b37aa9621304
|
||||
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: r3-68-checkpoint-20260930-0928
|
||||
created_at: '2026-09-30T09:28:11.018435+00:00'
|
||||
updated_at: '2026-09-30T09:28:11.018435+00:00'
|
||||
tags:
|
||||
- ready-to-merge
|
||||
- r3-68
|
||||
---
|
||||
|
||||
# 检查点:R3-04 / #68 Go SDK PublishUp 失败挂起已修
|
||||
|
||||
## 完成
|
||||
- 分支 `feat/fix-r3-68-go-sdk`,HEAD `9a588ce`,基线 `origin/main` `0c9b459`。
|
||||
- 工作树 `E:/code/NixMsg-wt/r3-68`(未改主工作树)。
|
||||
- `dispatchSend`:`PublishUp` 失败且未 stopReconnect 时 `regenerateSendLocked` + `drainSendQueue`;已停止重连则 `finishSend` 报错。
|
||||
- 假传输 `FailSendPublishN`;单测 `TestPublishUpFailRetriesWithNewRID`。
|
||||
- DEVIATIONS 追加「复审修复 R3-04」。
|
||||
|
||||
## 验证
|
||||
- `go test ./...`(sdk/go)通过(约 31s)。
|
||||
|
||||
## 推送
|
||||
- 已推送 `origin/feat/fix-r3-68-go-sdk`(非强推,未合 main)。
|
||||
- Gitea #68 已评论。
|
||||
|
||||
## 下一步
|
||||
- 总控审阅后 ff-only 合 main;本线不合 main。
|
||||
|
||||
## 给下个会话
|
||||
- 只改了 sdk/go + DEVIATIONS;不要动 Python/Java/JS。
|
||||
+43
@@ -0,0 +1,43 @@
|
||||
---
|
||||
title: Checkpoint 2026-09-30 09:28:54 UTC [3c19908d0f]
|
||||
type: checkpoint
|
||||
permalink: main/projects/25464650-ed5d-440e-b362-190f2852d451/checkpoint-2026-09-30-09-28-54-utc-3c19908d0f
|
||||
stable_id: 0013a18c-bf1b-40b5-a9cb-bbd3ad6e6848
|
||||
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: r3-67-queue-close-deadlock-20260930
|
||||
created_at: '2026-09-30T09:28:54.981235+00:00'
|
||||
updated_at: '2026-09-30T09:28:54.981235+00:00'
|
||||
tags:
|
||||
- ready-to-merge
|
||||
- r3-03
|
||||
- issue-67
|
||||
---
|
||||
|
||||
# 检查点:R3-03 / issue #67 写队列 Close 死锁已修
|
||||
|
||||
## 完成
|
||||
- 分支 `feat/fix-r3-67-queue`,工作树 `E:/code/NixMsg-wt/r3-67`(非主工作树)
|
||||
- HEAD `eb4cb7c655e5bb6796c2514aaa4a714d0b4c3b3e`:`fix: 写队列满时 Close 不再与 enqueue 死锁`
|
||||
- 已推送 origin;已在 Gitea #67 评论(comment 485)
|
||||
- 未合 main
|
||||
|
||||
## 关键实现
|
||||
- `Queue.closing`:Close 先 Swap(closed)+close(closing),唤醒持读锁堵在满通道上的 enqueue
|
||||
- enqueue 的 select 同时等 q.ch / closing / ctx.Done()
|
||||
- 再 sendMu.Lock 后 close(q.ch),等 loop 退出;不向已关闭 channel 发送
|
||||
- DEVIATIONS 末尾 `### 复审修复 R3-03`
|
||||
|
||||
## 验证
|
||||
- `go test ./internal/store/ -count=1 -run "Queue|WriteQueue"` 通过
|
||||
- 新增:满通道+堵住写端时 Close 能解开 enqueue;超时 Drain 短时返回
|
||||
|
||||
## 下一步
|
||||
- 总控审阅后 ff-only 合入 main
|
||||
|
||||
## 给下个会话
|
||||
- 只改了 queue.go / queue_test.go / DEVIATIONS R3-03;不改迁移
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user