258 Commits
Author SHA1 Message Date
memrelay 65065042af create: Checkpoint 2026-10-03 20:17:09 UTC [0bd15b7cb7]
MemRelay-Operation: checkpoint-save:checkpoint-phase3-20261004
MemRelay-Resource: 3ac8d56c-3d33-44a4-bb40-acf647604373
2026-10-04 04:17:14 +08:00
memrelay d2044a2337 create: Checkpoint 2026-10-03 08:15:50 UTC [47f60e656e]
MemRelay-Operation: checkpoint-save:nixmsg-readonly-familiarization-2026-09-30
MemRelay-Resource: 2043a55a-09e5-4ca4-9676-496343ec1947
2026-10-03 16:15:52 +08:00
memrelay 069a122c9b create: Checkpoint 2026-10-01 04:15:48 UTC [66857be8d8]
MemRelay-Operation: checkpoint-save:deploy-clash-lan-20261001
MemRelay-Resource: 4bdaa04c-6a19-49fb-8879-c119d54d4c98
2026-10-01 12:15:50 +08:00
memrelay 1ef3dc2b00 create: Checkpoint 2026-09-30 11:32:33 UTC [8dfdc28ecd]
MemRelay-Operation: checkpoint-save:checkpoint-r3-rereview-done-20260930-1935
MemRelay-Resource: eff60c2a-5845-423b-bb9f-c8da4fd538ee
2026-09-30 19:32:36 +08:00
memrelay bd332c0804 create: origin/main HEAD 为 a7a6e34(#65–#72 已合)
MemRelay-Operation: memory-save:fact-main-a7a6e34-20260930
MemRelay-Resource: 0c32d10a-09f2-4d70-bf91-202f2be0f447
2026-09-30 19:23:29 +08:00
memrelay d1d4155754 create: Checkpoint 2026-09-30 11:23:19 UTC [6827d69aef]
MemRelay-Operation: checkpoint-save:ckpt-r3-66-merged-20260930-a7a6e34
MemRelay-Resource: e45e5626-5bcf-4177-b009-46333045b8f6
2026-09-30 19:23:22 +08:00
memrelay 8b75c486d1 create: origin/main HEAD 为 2d1dfd7(R3 七修复已合)
MemRelay-Operation: memory-save:r3-merge-main-head-2d1dfd7-20260930
MemRelay-Resource: 0fbbccf3-55bd-4009-abbb-74230f1d981a
2026-09-30 19:21:27 +08:00
memrelay 9f9b943959 create: Checkpoint 2026-09-30 11:20:45 UTC [d43d623f2c]
MemRelay-Operation: checkpoint-save:ckpt-r3-66-a14ca0d-20260930
MemRelay-Resource: 6fb237f4-e609-44b3-8921-7e33816b6a19
2026-09-30 19:20:47 +08:00
memrelay 63c1d78fb1 create: Checkpoint 2026-09-30 09:34:14 UTC [50c64a0194]
MemRelay-Operation: checkpoint-save:r3-70-checkpoint-20260930-1735
MemRelay-Resource: 3b6620d0-df54-4a2d-ae65-54674a66ac75
2026-09-30 17:34:16 +08:00
memrelay a94cc5775e create: Checkpoint 2026-09-30 09:32:09 UTC [5809fab911]
MemRelay-Operation: checkpoint-save:r3-72-fix-audit-20260930-1732
MemRelay-Resource: fa886ca0-3cb8-460e-ae3e-2b712c3ca4c1
2026-09-30 17:32:23 +08:00
memrelay f6b7b57915 create: Checkpoint 2026-09-30 09:30:53 UTC [3433e4ca0b]
MemRelay-Operation: checkpoint-save:r3-71-checkpoint-20260930-b6f3baf
MemRelay-Resource: b446536e-2c52-47fa-960b-e5e99b0d0cfa
2026-09-30 17:31:07 +08:00
memrelay b768ee1c98 create: Checkpoint 2026-09-30 09:29:41 UTC [e122096b4f]
MemRelay-Operation: checkpoint-save:r3-65-wake-done-20260930-b79bba3
MemRelay-Resource: cd51c57a-f8f5-4443-92f0-8496a76d3ae4
2026-09-30 17:29:59 +08:00
memrelay d9804b5542 create: Checkpoint 2026-09-30 09:29:14 UTC [ce498b4309]
MemRelay-Operation: checkpoint-save:r3-05-69-checkpoint-20260930-1728
MemRelay-Resource: 8110c799-85d5-4650-b90c-af249f43e64e
2026-09-30 17:29:36 +08:00
memrelay 3e760e8af5 create: Checkpoint 2026-09-30 09:28:54 UTC [3c19908d0f]
MemRelay-Operation: checkpoint-save:r3-67-queue-close-deadlock-20260930
MemRelay-Resource: 0013a18c-bf1b-40b5-a9cb-bbd3ad6e6848
2026-09-30 17:29:11 +08:00
memrelay 86ca7db467 create: Checkpoint 2026-09-30 09:28:10 UTC [d1cd49a4bf]
MemRelay-Operation: checkpoint-save:r3-68-checkpoint-20260930-0928
MemRelay-Resource: bfe277b1-e818-4021-a65a-b37aa9621304
2026-09-30 17:28:26 +08:00
memrelay 12afc3b549 create: Checkpoint 2026-09-30 09:19:28 UTC [7fff22b983]
MemRelay-Operation: checkpoint-save:checkpoint-r3-issues-20260930-1719
MemRelay-Resource: f3480295-73cf-4230-935e-584990171d5f
2026-09-30 17:19:30 +08:00
memrelay 66e342c173 create: Checkpoint 2026-09-30 09:10:33 UTC [ad016ac6b5]
MemRelay-Operation: checkpoint-save:checkpoint-reread-confirmed-bugs-20260930-1710
MemRelay-Resource: a9e137cc-f3b1-4311-b8dd-b4c7b8ffbfd1
2026-09-30 17:10:35 +08:00
memrelay 0fd418a2ba create: Checkpoint 2026-09-30 09:04:46 UTC [7eb804380e]
MemRelay-Operation: checkpoint-save:checkpoint-reread-no-new-bug-20260930-1705
MemRelay-Resource: dddd6289-7d0b-4857-ac3e-2293ba39a94b
2026-09-30 17:04:50 +08:00
memrelay f75062b445 create: Checkpoint 2026-09-30 08:57:28 UTC [6e16da3376]
MemRelay-Operation: checkpoint-save:checkpoint-cleanup-branches-20260930-1656
MemRelay-Resource: 494915a4-9b18-4408-88df-0c0fcf47b3da
2026-09-30 16:57:32 +08:00
memrelay a86c54ec2f create: Checkpoint 2026-09-30 08:51:10 UTC [2c0d16c6ab]
MemRelay-Operation: checkpoint-save:checkpoint-verify-origin-main-20260930-1648
MemRelay-Resource: 056e3d2e-1001-41a3-8467-1d5c431139f6
2026-09-30 16:51:13 +08:00
memrelay a8d7fac956 update: origin/main HEAD 为 0c9b459(#7 已关)
MemRelay-Operation: memory-save:fact-nixmsg-issue7-closed-20260930-0841z
MemRelay-Resource: b922debd-c7de-41ff-a691-2c613b89c6f4
2026-09-30 16:41:17 +08:00
memrelay 90e46c6ee8 create: Checkpoint 2026-09-30 08:40:42 UTC [7c8bf112b4]
MemRelay-Operation: checkpoint-save:chk-nixmsg-handover-close-7-20260930-0838z
MemRelay-Resource: 47b02a82-7845-4889-ae5b-996fdf737434
2026-09-30 16:40:45 +08:00
memrelay a7f40aa8e3 create: origin/main HEAD 为 0c9b459(复审合入)
MemRelay-Operation: memory-save:nixmsg-fact-main-head-0c9b459-20260930
MemRelay-Resource: b922debd-c7de-41ff-a691-2c613b89c6f4
2026-09-30 16:36:52 +08:00
memrelay cdbea5b773 create: Checkpoint 2026-09-30 08:36:43 UTC [7b663314b3]
MemRelay-Operation: checkpoint-save:nixmsg-r2-integrate-main-20260930-0837
MemRelay-Resource: e6e17ffc-6f9c-41a7-ae02-4e44a9d37baf
2026-09-30 16:36:46 +08:00
memrelay 7547bb7211 create: Checkpoint 2026-09-30 08:17:57 UTC [24e1fd4fc5]
MemRelay-Operation: checkpoint-save:ckpt-r2-l03-t02-20260930-1618
MemRelay-Resource: d6ae3499-9c68-4bb0-af1a-d9d6dec33b8e
2026-09-30 16:18:00 +08:00
memrelay f5941cdba3 create: Checkpoint 2026-09-30 07:48:01 UTC [74b75a5315]
MemRelay-Operation: checkpoint-save:nixmsg-c01-c03-a4e51ec-20260930
MemRelay-Resource: fc447801-da3d-43d2-a272-6048861a19b4
2026-09-30 15:48:06 +08:00
memrelay f2eb46d217 create: Checkpoint 2026-09-30 07:41:46 UTC [2531a81339]
MemRelay-Operation: checkpoint-save:chk-sdk-k00-k05-ready-20260930-1538
MemRelay-Resource: 38da5bd2-5733-473d-a413-107e03ae665a
2026-09-30 15:41:49 +08:00
memrelay c8de7be73e create: Checkpoint 2026-09-30 07:39:34 UTC [06c6918237]
MemRelay-Operation: checkpoint-save:h07-merge-h02-checkpoint-22b94ec
MemRelay-Resource: d97af7ae-e4e1-4cc6-9615-f7a8f0ea973a
2026-09-30 15:39:37 +08:00
memrelay a0b156b3c7 create: U-03 对话密码锁键不含 IP
MemRelay-Operation: memory-save:u03-decision-talk-lock-key-20260930
MemRelay-Resource: f6893f51-1f95-480c-9038-84eab43afb72
2026-09-30 15:33:35 +08:00
memrelay fc7e97517b create: Checkpoint 2026-09-30 07:31:39 UTC [24c34d156d]
MemRelay-Operation: checkpoint-save:nixmsg-h02-checkpoint-20260930-afe6a77
MemRelay-Resource: 58b096d3-7851-42cb-8706-c45e4c3026f6
2026-09-30 15:31:42 +08:00
memrelay 3e09a5f2cc create: Checkpoint 2026-09-30 07:31:26 UTC [82584f16a5]
MemRelay-Operation: checkpoint-save:h07-checkpoint-20260930-cedd57b
MemRelay-Resource: 189a13b3-37e9-4ec6-9169-bf720edf880a
2026-09-30 15:31:29 +08:00
memrelay 978cebb291 create: Checkpoint 2026-09-30 07:24:38 UTC [fd8b91d2c7]
MemRelay-Operation: checkpoint-save:chk-broker-b01-b12-20260930-1515
MemRelay-Resource: 0e41749e-828a-45e2-a309-5681dd2693e9
2026-09-30 15:24:40 +08:00
memrelay 55eacd66b3 create: Checkpoint 2026-09-30 07:23:04 UTC [b6fb44f08d]
MemRelay-Operation: checkpoint-save:u02-ckpt-20260930-5aa45b4
MemRelay-Resource: f0e962f7-a330-4a62-97b3-a7792744664f
2026-09-30 15:23:08 +08:00
memrelay b41307bc8d create: U-02 群事务复核已推送 feat/fix-u02-group-tx
MemRelay-Operation: memory-save:u02-fact-20260930-5aa45b4
MemRelay-Resource: 949ccacc-545e-4a1e-8f6d-3d93cb123548
2026-09-30 15:23:03 +08:00
memrelay 2b1329d0e5 create: Checkpoint 2026-09-30 07:22:32 UTC [234d1ea01e]
MemRelay-Operation: checkpoint-save:nixmsg-r2h-admin-web-20260930-1522
MemRelay-Resource: 383374e2-3dfa-4d82-a6ae-8e105033d7b2
2026-09-30 15:22:34 +08:00
memrelay 194032ddaa create: Checkpoint 2026-09-30 07:20:39 UTC [fcb1dc1f6e]
MemRelay-Operation: checkpoint-save:t03-checkpoint-20260930-a3aa844
MemRelay-Resource: 8c2d9da1-6027-4bde-a90e-affd99f0757a
2026-09-30 15:20:42 +08:00
memrelay 6aea8a35b5 create: Checkpoint 2026-09-30 07:08:58 UTC [51a2506ee5]
MemRelay-Operation: checkpoint-save:chk-listener-l01-l07-20260930
MemRelay-Resource: a04c8be3-9dd8-4e67-9211-269093d351bc
2026-09-30 15:09:07 +08:00
memrelay 30bf0b0ccc create: 监听线 L-02/L-01/L-04–L-07 已推送,L-03 未做
MemRelay-Operation: memory-save:mem-listener-l01-l07-20260930
MemRelay-Resource: d734634c-3ae6-4cc8-a3f5-23ea0b910f81
2026-09-30 15:09:01 +08:00
memrelay 93c7713489 create: Checkpoint 2026-09-30 07:08:42 UTC [1350492063]
MemRelay-Operation: checkpoint-save:chk-c04-c07-20260930-r2c-retry
MemRelay-Resource: f1dfbda8-710b-4e9d-9239-251c0112f41f
2026-09-30 15:08:53 +08:00
memrelay d467526b14 create: grace_seconds 显式 0 按 0 生效
MemRelay-Operation: memory-save:mem-d05-grace-zero-20260930-2
MemRelay-Resource: df6c1e06-5f56-40e2-ad14-4913eb0b2d19
2026-09-30 15:08:45 +08:00
memrelay c66b576bc1 create: Checkpoint 2026-09-30 07:08:32 UTC [92796e1a30]
MemRelay-Operation: checkpoint-save:chk-fix-store-d01-d05-b6908cf-2
MemRelay-Resource: 3381eda3-2984-448a-9d59-484c1de66791
2026-09-30 15:08:39 +08:00
memrelay 80964c5035 create: Checkpoint 2026-09-30 07:06:56 UTC [77467fe469]
MemRelay-Operation: checkpoint-save:nixmsg-u01-u04-u05-checkpoint-20260930-1504
MemRelay-Resource: 11e3f78a-b6bf-40b2-bbe4-6090f651bc2a
2026-09-30 15:07:21 +08:00
memrelay be26e34ea8 create: Checkpoint 2026-09-30 07:06:30 UTC [8e039b35de]
MemRelay-Operation: checkpoint-save:chk-c04-c07-20260930-r2c
MemRelay-Resource: b9de5fee-70bf-43fc-b162-577d9e7d9161
2026-09-30 15:06:55 +08:00
memrelay b8fa264b98 create: Checkpoint 2026-09-30 06:59:34 UTC [3ce081c693]
MemRelay-Operation: checkpoint-save:t01-ws-harness-20260930-1448
MemRelay-Resource: 0c39c482-f21a-4127-9d12-6febe5ba11f3
2026-09-30 15:00:08 +08:00
memrelay 7770ae74cd create: Checkpoint 2026-09-30 06:18:52 UTC [d3b83d9449]
MemRelay-Operation: checkpoint-save:nixmsg-ckpt-sdk-r2-supplement-20260930-a1
MemRelay-Resource: 020c9295-88ae-4eb1-8922-a3ee8758f182
2026-09-30 14:18:54 +08:00
memrelay ae532aed3a create: Checkpoint 2026-09-30 06:05:17 UTC [71e209885b]
MemRelay-Operation: checkpoint-save:nixmsg-ckpt-review-issues-20260930-a1
MemRelay-Resource: 54a62a28-b34b-47bf-bde5-cadb6b0a012b
2026-09-30 14:05:20 +08:00
memrelay fa50be02dc create: Gitea 批量创建 issue 与 #n 引用链接
MemRelay-Operation: memory-save:global-exp-gitea-bulk-issues-20260930-a1
MemRelay-Resource: 7bf4d88e-2e2d-48bf-9d0c-9f85cf89c60d
2026-09-30 14:04:15 +08:00
memrelay 55b8317579 create: Windows PowerShell 5.1 脚本与中文:脚本保持纯 ASCII,中文放 UTF-8 文件
MemRelay-Operation: memory-save:global-exp-ps51-encoding-20260930-a1
MemRelay-Resource: b1d6b466-629c-45dc-b041-652e2c2925ae
2026-09-30 14:04:09 +08:00
memrelay bc46d5f8bd create: WebSocket 上的 MQTT:测试客户端拆包/写锁导致误判死锁,以及 mochi 配额递归读锁真死锁(2026-09-30 实证)
MemRelay-Operation: memory-save:nixmsg-exp-ws-mqtt-mochi-20260930-a1
MemRelay-Resource: f5fa2d41-41c6-4399-ac35-b46679d94b97
2026-09-30 14:04:02 +08:00
memrelay b73900b969 create: Checkpoint 2026-09-30 04:37:44 UTC [cea96f7c13]
MemRelay-Operation: checkpoint-save:issue3-rootcause-diag-20260930-1235
MemRelay-Resource: 7fd55d99-e2fa-4f59-b963-2b14d5e592b7
2026-09-30 12:37:47 +08:00
memrelay 731605068d create: Checkpoint 2026-09-30 04:16:42 UTC [497c4361d0]
MemRelay-Operation: checkpoint-save:merge-fixes-4059a15-20260930
MemRelay-Resource: f943532c-3ed7-4b9d-9def-63c662b522c0
2026-09-30 12:16:46 +08:00
memrelay 6bb1f282fb create: Checkpoint 2026-09-30 02:55:36 UTC [e5a6de7d9f]
MemRelay-Operation: checkpoint-save:fix4-checkpoint-20260930-1055
MemRelay-Resource: a329cd35-6b6e-4616-b5b5-75d3f1b54f38
2026-09-30 10:55:39 +08:00
memrelay 325b99b157 create: Checkpoint 2026-09-30 02:51:19 UTC [3f41c4ffa5]
MemRelay-Operation: checkpoint-save:fix5-metrics-b4789fc-20260930
MemRelay-Resource: 9a4c2024-f07c-47b5-9ba1-5f9de83cf6bf
2026-09-30 10:51:21 +08:00
memrelay c4c6b5b37a create: Checkpoint 2026-09-30 02:45:39 UTC [73202b31fe]
MemRelay-Operation: checkpoint-save:fix6-dissolve-receipt-de2c64d-20260930
MemRelay-Resource: 9a88fa0c-c6f2-41c4-9051-98da8c962c63
2026-09-30 10:45:53 +08:00
memrelay 68b355fe24 create: Checkpoint 2026-09-30 02:44:56 UTC [0aad732800]
MemRelay-Operation: checkpoint-save:fix2-register-ip-20260930-checkpoint
MemRelay-Resource: 2734590b-d531-434a-8dce-1d6098829ae3
2026-09-30 10:45:14 +08:00
memrelay 2dd4d20aab create: Checkpoint 2026-09-30 02:43:38 UTC [9ac444b253]
MemRelay-Operation: checkpoint-save:fix-issue-1-admin-lock-20260930-1045
MemRelay-Resource: 9927b9f5-7b95-4e26-bdb0-39985e532384
2026-09-30 10:43:56 +08:00
memrelay 126a47fd0c create: Checkpoint 2026-09-30 02:29:00 UTC [a358773621]
MemRelay-Operation: checkpoint-save:nixmsg-review-issues-ready-20260930-1025
MemRelay-Resource: ee053018-4631-4cdf-bc20-16daa3f0c1a8
2026-09-30 10:29:03 +08:00
memrelay ce517001b1 create: Checkpoint 2026-09-30 02:21:15 UTC [7031a81869]
MemRelay-Operation: checkpoint-save:ckpt-accept-rest-merged-20260930-1019
MemRelay-Resource: 0c9542fe-cb24-4cc0-a867-15d1357b2639
2026-09-30 10:21:18 +08:00
memrelay d1af7b1bf2 create: Checkpoint 2026-09-30 01:29:56 UTC [ed0ff9d0db]
MemRelay-Operation: checkpoint-save:release-0.1.0-20260930-092900
MemRelay-Resource: ce0536fc-4868-4a93-9355-6fae2af4bacb
2026-09-30 09:29:59 +08:00
memrelay 09d8f6fe12 create: Checkpoint 2026-09-30 01:20:13 UTC [36f606710b]
MemRelay-Operation: checkpoint-save:w4-e2e-ready-20260930-0915
MemRelay-Resource: a84bbdd7-2443-4698-8b05-ce9988706fa4
2026-09-30 09:20:17 +08:00
memrelay 1d0a0bf2e8 create: Checkpoint 2026-09-30 01:10:39 UTC [b06346abc8]
MemRelay-Operation: checkpoint-save:q4-q5-checkpoint-20260930-0905
MemRelay-Resource: 31c02d4f-a968-497b-9935-160833ddffdd
2026-09-30 09:10:42 +08:00
memrelay 7855239b0c create: Checkpoint 2026-09-30 01:00:09 UTC [50bf1ac8c7]
MemRelay-Operation: checkpoint-save:sdk-accept-merged-20260930T085900
MemRelay-Resource: 52f5e6c8-1ce5-4726-a3c2-3294ef928e92
2026-09-30 09:00:13 +08:00
memrelay f4080d9d3e create: Checkpoint 2026-09-30 00:51:11 UTC [fbe055ee3c]
MemRelay-Operation: checkpoint-save:s2-itest-checkpoint-20260930-0851
MemRelay-Resource: 84434892-8ee6-4c75-9e2d-5eb622548ea0
2026-09-30 08:51:14 +08:00
memrelay 9975e37df5 create: Checkpoint 2026-09-30 00:35:28 UTC [1a5c5f722a]
MemRelay-Operation: checkpoint-save:s1-itest-checkpoint-20260930-a1
MemRelay-Resource: 1c6d367d-1181-4970-a0a8-7f72ed0f8382
2026-09-30 08:35:31 +08:00
memrelay f75177e8b2 create: Checkpoint 2026-09-30 00:26:32 UTC [bdf40ff1ec]
MemRelay-Operation: checkpoint-save:q3-accept-ready-20260930-001
MemRelay-Resource: 5baa8aaf-3973-43a9-9139-2046915e22a4
2026-09-30 08:26:34 +08:00
memrelay 75db2061f6 create: Checkpoint 2026-09-30 00:13:05 UTC [d29d67a680]
MemRelay-Operation: checkpoint-save:i5-a3-merged-20260930-081500
MemRelay-Resource: 51ddc047-b1ae-4227-b0e4-f32d201969c1
2026-09-30 08:13:08 +08:00
memrelay 48f5169d1e create: Checkpoint 2026-09-30 00:08:50 UTC [8da387d273]
MemRelay-Operation: checkpoint-save:uplink-merged-20260930T080800Z
MemRelay-Resource: b5fd94f2-2b3e-45d1-8209-8b95e1679745
2026-09-30 08:08:53 +08:00
memrelay 73af6725e1 create: Checkpoint 2026-09-30 00:08:17 UTC [974592113c]
MemRelay-Operation: checkpoint-save:a3-checkpoint-68e790b-20260930
MemRelay-Resource: 818c2a11-094f-428d-abf4-f92bc1bd11a3
2026-09-30 08:08:19 +08:00
memrelay f93b407c03 create: Checkpoint 2026-09-30 00:07:30 UTC [86a2de0566]
MemRelay-Operation: checkpoint-save:ckpt-l-uplink-b8569b0-20260930
MemRelay-Resource: 38b4e546-8628-4547-821f-445f13713994
2026-09-30 08:07:33 +08:00
memrelay ef3699ab53 create: Checkpoint 2026-09-30 00:07:03 UTC [9a6d816aec]
MemRelay-Operation: checkpoint-save:i5-disable-checkpoint-20260930-0759
MemRelay-Resource: f7c8f7b3-c37b-4dd3-a92f-a01aed5f806d
2026-09-30 08:07:05 +08:00
memrelay 12b314af81 create: Checkpoint 2026-09-29 23:57:11 UTC [c3b74a1afc]
MemRelay-Operation: checkpoint-save:wave2-fixed-20260930-0757
MemRelay-Resource: a123a59c-d28c-4452-b0c5-3430a6dbfeaa
2026-09-30 07:57:14 +08:00
memrelay d5b85ba6ca create: Checkpoint 2026-09-29 23:34:29 UTC [524ff93de3]
MemRelay-Operation: checkpoint-save:wave2-merged-20260930-0734
MemRelay-Resource: 279ee02e-5064-483c-aa98-82b9800a3a3d
2026-09-30 07:34:32 +08:00
memrelay 35a1aebf8a create: Checkpoint 2026-09-29 23:26:04 UTC [fbeda10e36]
MemRelay-Operation: checkpoint-save:ckpt-i2-i4-ba6cc9f-20260930
MemRelay-Resource: 2d4e1cd4-1697-4ea0-aa18-f0d19b270200
2026-09-30 07:26:06 +08:00
memrelay 753637e91c create: Checkpoint 2026-09-29 23:25:57 UTC [a8807dc613]
MemRelay-Operation: checkpoint-save:n3-ready-20260930-34e7c28
MemRelay-Resource: 64c5657e-8be3-4970-945a-19248fbccb79
2026-09-30 07:26:00 +08:00
memrelay dbe4b1bf81 create: Checkpoint 2026-09-29 23:24:00 UTC [1c873d5e0b]
MemRelay-Operation: checkpoint-save:m-delivery-m2m3m4-20260930-ready
MemRelay-Resource: c42e5f81-e06a-432b-b9be-64f7f9ec4d5c
2026-09-30 07:24:04 +08:00
memrelay 8c797bfb87 create: Checkpoint 2026-09-29 23:20:35 UTC [74fd60068a]
MemRelay-Operation: checkpoint-save:q2-accept-ready-b4a72e5-20260930
MemRelay-Resource: 9c126fa6-5665-4028-891b-dbdbcecd0658
2026-09-30 07:20:39 +08:00
memrelay 6e4d78c2f9 create: Checkpoint 2026-09-29 23:18:26 UTC [af45ce3094]
MemRelay-Operation: checkpoint-save:a2-endpoints-ready-20260930-0710
MemRelay-Resource: c59fe148-2424-4117-9363-e1a2cb1bef39
2026-09-30 07:18:29 +08:00
memrelay d6c89020fe create: Checkpoint 2026-09-29 23:08:13 UTC [5f2c665ccb]
MemRelay-Operation: checkpoint-save:s2-merged-20260930T070850
MemRelay-Resource: 4e5866be-5e88-4b99-b473-6c72cf92c944
2026-09-30 07:08:17 +08:00
memrelay ff7a40d5d3 create: Checkpoint 2026-09-29 23:08:05 UTC [2a0f78b49b]
MemRelay-Operation: checkpoint-save:s2-merged-20260930T070830
MemRelay-Resource: 72f032ce-8830-4830-b931-a171834a0439
2026-09-30 07:08:07 +08:00
memrelay a65f36f4e2 create: Checkpoint 2026-09-29 23:07:55 UTC [c41d9b7642]
MemRelay-Operation: checkpoint-save:s2-merged-20260930T070800
MemRelay-Resource: c7f3e7d6-c559-41ee-b040-b9a42a68a1b2
2026-09-30 07:07:58 +08:00
memrelay 8dfc19d9e9 create: Checkpoint 2026-09-29 23:04:24 UTC [cf294d43a1]
MemRelay-Operation: checkpoint-save:wave1-w-s1-merged-20260930T070400Z
MemRelay-Resource: 33efdbb4-a32e-43fb-a448-01debfabc238
2026-09-30 07:04:26 +08:00
memrelay 6c4d30960d create: Checkpoint 2026-09-29 23:02:17 UTC [abead28971]
MemRelay-Operation: checkpoint-save:s2-sdk-ready-20260930-0702
MemRelay-Resource: 15b176a5-e3c1-44f1-8918-d4ebc0447fda
2026-09-30 07:02:21 +08:00
memrelay 7bd50740fb create: Checkpoint 2026-09-29 23:00:23 UTC [b7ab01a068]
MemRelay-Operation: checkpoint-save:wave1-partial-merged-20260930-0655
MemRelay-Resource: 60b17751-9839-479d-a66e-5ba25450f505
2026-09-30 07:00:26 +08:00
memrelay 98e2155103 create: Checkpoint 2026-09-29 22:58:10 UTC [5ae4e332d0]
MemRelay-Operation: checkpoint-save:s1-sdk-ready-20260930-0658
MemRelay-Resource: d2c8ac5a-a55b-4bc1-bc4b-03ea06627f25
2026-09-30 06:58:13 +08:00
memrelay 610151bd58 create: Checkpoint 2026-09-29 22:56:39 UTC [438ad92039]
MemRelay-Operation: checkpoint-save:w-admin-ui-w1w2w3-20260930-dfc5ec7
MemRelay-Resource: a6940015-26eb-4705-b4e4-b6bd48aa3d73
2026-09-30 06:56:41 +08:00
memrelay 2e24907e1b create: Checkpoint 2026-09-29 22:53:35 UTC [d445e380d4]
MemRelay-Operation: checkpoint-save:p-platform-p1-p4-20260930-ready
MemRelay-Resource: acc1b400-897d-43fd-a25c-2a607acdf737
2026-09-30 06:53:37 +08:00
memrelay 400fc8cbce create: Checkpoint 2026-09-29 22:52:03 UTC [6d051fd286]
MemRelay-Operation: checkpoint-save:q-infra-20260930-checkpoint-1
MemRelay-Resource: 6fbac592-c59a-403f-8146-5e8cdc4d617a
2026-09-30 06:52:05 +08:00
memrelay d34ebb5623 create: Checkpoint 2026-09-29 22:51:28 UTC [2fdc51067a]
MemRelay-Operation: checkpoint-save:n-connect-n1n2-20260930-ready
MemRelay-Resource: 27de0ed5-9250-4b4c-8a65-bbca569181ac
2026-09-30 06:51:38 +08:00
memrelay b538ee30d1 create: Checkpoint 2026-09-29 22:50:54 UTC [06e1b6eb09]
MemRelay-Operation: checkpoint-save:m1-submit-ready-20260930-cd7a7e4
MemRelay-Resource: 766540ee-5b26-4fd8-be52-1782fd515a3d
2026-09-30 06:51:06 +08:00
memrelay 89deaa8ee2 create: Checkpoint 2026-09-29 22:50:21 UTC [6c1785ad56]
MemRelay-Operation: checkpoint-save:a1-admin-auth-e10716a-20260930
MemRelay-Resource: ea17e326-a067-4528-a017-7acb5d9473d5
2026-09-30 06:50:36 +08:00
memrelay bbfc987165 create: Checkpoint 2026-09-29 22:47:58 UTC [99329660b1]
MemRelay-Operation: checkpoint-save:i1-register-ready-20260930-064800
MemRelay-Resource: ff8132b0-d7c6-429a-998e-dc3ebc8645ab
2026-09-30 06:48:19 +08:00
memrelay 8773d1291e create: Checkpoint 2026-09-29 22:38:40 UTC [de149dc3e6]
MemRelay-Operation: checkpoint-save:t04-merged-20260930T0637
MemRelay-Resource: 3de8e5c6-511c-4f26-a8e0-4829c4f214bb
2026-09-30 06:38:43 +08:00
memrelay c357a01cea create: T0.4 broker↔app 契约放在 internal/app/port
MemRelay-Operation: memory-save:t04-decision-port-pkg-20260930
MemRelay-Resource: c21e8947-fefb-4701-90a9-e378158f8e8b
2026-09-30 06:36:47 +08:00
memrelay f88cf18944 create: Checkpoint 2026-09-29 22:36:38 UTC [de7d2eb653]
MemRelay-Operation: checkpoint-save:t04-checkpoint-20260930-ready
MemRelay-Resource: c28f8d69-d185-4df0-9803-c4b0c11850f0
2026-09-30 06:36:40 +08:00
memrelay 4818cea38c create: Checkpoint 2026-09-29 22:30:38 UTC [177f6c558d]
MemRelay-Operation: checkpoint-save:t03-t05-merged-20260930T0628Z
MemRelay-Resource: 61afe52a-e79b-485b-8ccb-dd95e194825d
2026-09-30 06:30:41 +08:00
memrelay d595a1b7c8 create: Checkpoint 2026-09-29 22:03:59 UTC [1be04b8c63]
MemRelay-Operation: checkpoint-save:t05-harness-checkpoint-rebased-20260930
MemRelay-Resource: 5eed215b-3893-450b-96c3-fcd07e2c1df4
2026-09-30 06:04:02 +08:00
memrelay 9b0436dce8 create: Checkpoint 2026-09-29 22:02:34 UTC [aede789577]
MemRelay-Operation: checkpoint-save:t02-merged-20260930T0601
MemRelay-Resource: 750f14c0-ecc9-43ea-bf32-4e5c9784fc9c
2026-09-30 06:02:38 +08:00
memrelay c48ad0e26b create: Checkpoint 2026-09-29 22:02:30 UTC [65673db73f]
MemRelay-Operation: checkpoint-save:t05-harness-checkpoint-20260930-0556
MemRelay-Resource: 889272ca-6a6b-4ab3-bde7-c0ae2ee700d0
2026-09-30 06:02:32 +08:00
memrelay 6707eaec56 create: T0.2 请求指纹规范化格式决定
MemRelay-Operation: memory-save:t02-decision-fingerprint-20260930
MemRelay-Resource: e073d725-6d82-4461-9ff6-094dd8ecb578
2026-09-30 06:01:29 +08:00
memrelay de8e6f2391 create: Checkpoint 2026-09-29 22:01:20 UTC [b12c120b2c]
MemRelay-Operation: checkpoint-save:t02-checkpoint-20260930-ready
MemRelay-Resource: e7becf00-932c-44df-a1ad-ba9c4d07f1f4
2026-09-30 06:01:23 +08:00
memrelay 93f42aa588 create: T0.3:完整表用 0002,写入队列暂不合并
MemRelay-Operation: memory-save:nixmsg-t03-decision-0002-20260930
MemRelay-Resource: bcb76405-24ef-4daf-b346-f02f06d8dda7
2026-09-30 06:00:15 +08:00
memrelay 8e64dbe91f create: Checkpoint 2026-09-29 22:00:06 UTC [0a3e2dc9c1]
MemRelay-Operation: checkpoint-save:nixmsg-t03-checkpoint-20260930-l
MemRelay-Resource: ef3be336-00c6-40d7-ae47-77e7994e5e93
2026-09-30 06:00:10 +08:00
memrelay c81ddeefab create: Checkpoint 2026-09-29 21:54:09 UTC [8de54ff3fa]
MemRelay-Operation: checkpoint-save:t01-merged-20260930-0555
MemRelay-Resource: a8218cf4-1c09-474b-9d62-9b493d26e6e3
2026-09-30 05:54:11 +08:00
memrelay 355f0d49fb create: Checkpoint 2026-09-29 21:50:45 UTC [a584145af7]
MemRelay-Operation: checkpoint-save:t01-checkpoint-20260930-0530
MemRelay-Resource: b00ef735-8716-4395-b784-8b3acfa81925
2026-09-30 05:50:48 +08:00
memrelay 8696aa34a5 create: Checkpoint 2026-09-29 21:32:05 UTC [0a1edb4277]
MemRelay-Operation: checkpoint-save:nixmsg-20260930-0554-checkpoint-autonomous
MemRelay-Resource: e3334cc3-93ab-41ff-bde0-fdb61e8ffdc1
2026-09-30 05:32:08 +08:00
memrelay da04e4cc94 update: NixMsg 阶段分工:设计已完成,开发由 Grok 多 Agent 按 TASKS.md 全程自动进行
MemRelay-Operation: memory-save:nixmsg-20260930-0552-rule-autonomous
MemRelay-Resource: 63748f00-9f1c-4df4-94a3-2ce0f2f5b105
2026-09-30 05:31:43 +08:00
memrelay 422a672174 create: Checkpoint 2026-09-29 21:26:40 UTC [bda5f2d7fe]
MemRelay-Operation: checkpoint-save:nixmsg-20260930-0547-checkpoint-multitask
MemRelay-Resource: a9447797-1c08-4260-8327-d775c1915d8a
2026-09-30 05:26:42 +08:00
memrelay 5eda644630 update: NixMsg 开发阶段的仓库与多 Agent 协作决定(2026-09-30)
MemRelay-Operation: memory-save:nixmsg-20260930-0545-dev-workflow-multitask
MemRelay-Resource: a7727313-15dc-459d-8323-6f8c48192773
2026-09-30 05:26:25 +08:00
memrelay 6cc9f92c33 create: Checkpoint 2026-09-29 21:22:38 UTC [973538971d]
MemRelay-Operation: checkpoint-save:nixmsg-20260930-0540-checkpoint-ready-for-dev
MemRelay-Resource: 8825fba6-41ab-46a5-b76f-523f8744daa5
2026-09-30 05:22:40 +08:00
memrelay de29a14504 update: NixMsg 设备通讯需求
MemRelay-Operation: memory-save:nixmsg-20260930-0537-prd-rev12
MemRelay-Resource: 9cea62eb-5435-4fb1-af51-9699bb182b1a
2026-09-30 05:22:05 +08:00
memrelay 950183d97b update: NixMsg PRD 默认规则确认(2026-09-30)
MemRelay-Operation: memory-save:nixmsg-20260930-0536-defaults-all-confirmed
MemRelay-Resource: 16e34a58-6fb1-4437-a48c-8a9c24b16bc9
2026-09-30 05:21:56 +08:00
memrelay c8a7e99395 create: NixMsg 发布、CI、许可证与可见性决定(2026-09-30)
MemRelay-Operation: memory-save:nixmsg-20260930-0535-release-decisions
MemRelay-Resource: 2048048d-b26f-4f25-85d2-ce87930451a5
2026-09-30 05:21:49 +08:00
memrelay 2d47e25cc5 create: Checkpoint 2026-09-29 21:12:14 UTC [f10cd71c01]
MemRelay-Operation: checkpoint-save:nixmsg-20260930-0527-checkpoint-repo-init
MemRelay-Resource: f0caec01-3c5e-4c7a-99e4-f90b3b995fbb
2026-09-30 05:12:17 +08:00
memrelay 2687dc1465 update: NixMsg 设备通讯需求
MemRelay-Operation: memory-save:nixmsg-20260930-0526-prd-rev11
MemRelay-Resource: 9cea62eb-5435-4fb1-af51-9699bb182b1a
2026-09-30 05:12:04 +08:00
memrelay 90398a984a update: NixMsg 阶段分工:设计已完成,开发由 Grok 多 Agent 按 TASKS.md 进行
MemRelay-Operation: memory-save:nixmsg-20260930-0522-rule-phase-update
MemRelay-Resource: 63748f00-9f1c-4df4-94a3-2ce0f2f5b105
2026-09-30 05:11:11 +08:00
memrelay 3a7f226115 create: NixMsg 开发阶段的仓库与多 Agent 协作决定(2026-09-30)
MemRelay-Operation: memory-save:nixmsg-20260930-0520-dev-workflow
MemRelay-Resource: a7727313-15dc-459d-8323-6f8c48192773
2026-09-30 05:10:48 +08:00
memrelay 873e01e8d1 create: Checkpoint 2026-09-29 20:54:58 UTC [3449427cae]
MemRelay-Operation: checkpoint-save:nixmsg-20260930-0508-checkpoint-v03
MemRelay-Resource: fcde0b5d-7443-42ff-9448-3c4ff1c839a7
2026-09-30 04:55:00 +08:00
memrelay 445c5d3c25 update: NixMsg 设备通讯需求
MemRelay-Operation: memory-save:nixmsg-20260930-0507-prd-rev10
MemRelay-Resource: 9cea62eb-5435-4fb1-af51-9699bb182b1a
2026-09-30 04:54:51 +08:00
memrelay a1595a0a64 update: NixMsg PRD 默认规则确认(2026-09-30)
MemRelay-Operation: memory-save:nixmsg-20260930-0506-defaults-confirmed-rev2
MemRelay-Resource: 16e34a58-6fb1-4437-a48c-8a9c24b16bc9
2026-09-30 04:54:42 +08:00
memrelay b0a4eb5d3a create: NixMsg 系统技术栈选型(2026-09-30)
MemRelay-Operation: memory-save:nixmsg-20260930-0505-techstack
MemRelay-Resource: bc650d0d-5329-4212-bec2-c091db37278f
2026-09-30 04:54:35 +08:00
memrelay b26a0fbd86 create: NixMsg PRD 默认规则确认(2026-09-30)
MemRelay-Operation: memory-save:nixmsg-20260930-0437-defaults-confirmed
MemRelay-Resource: 16e34a58-6fb1-4437-a48c-8a9c24b16bc9
2026-09-30 04:38:00 +08:00
memrelay d17bccd61e create: Checkpoint 2026-09-29 20:36:13 UTC [ffdc9966d6]
MemRelay-Operation: checkpoint-save:nixmsg-20260930-0445-checkpoint-review2
MemRelay-Resource: 3a168129-ef93-487a-a8f6-f516398db8a4
2026-09-30 04:36:16 +08:00
memrelay e0cee30e63 create: Checkpoint 2026-09-29 20:29:18 UTC [b354dd06b7]
MemRelay-Operation: checkpoint-save:nixmsg-20260930-0505-checkpoint-v02
MemRelay-Resource: 3724d016-1752-40b0-80a4-ce4405595505
2026-09-30 04:29:20 +08:00
memrelay 06a5c1c208 create: NixMsg 依赖库行为核对结论(审核开发成果时用)
MemRelay-Operation: memory-save:nixmsg-20260930-0500-exp-libs
MemRelay-Resource: 27e87e23-608c-4cae-8346-98e4fb300717
2026-09-30 04:28:59 +08:00
memrelay e629f2bae6 update: NixMsg 设备通讯需求
MemRelay-Operation: memory-save:nixmsg-20260930-0500-prd-rev9
MemRelay-Resource: 9cea62eb-5435-4fb1-af51-9699bb182b1a
2026-09-30 04:28:48 +08:00
memrelay f9d633c4f9 update: NixMsg 产品边界确认
MemRelay-Operation: memory-save:nixmsg-20260930-0412-boundary-rev7
MemRelay-Resource: de0503ed-3d77-400d-a0bb-bbe44371f906
2026-09-30 04:17:32 +08:00
memrelay a265959441 update: NixMsg 设备通讯需求
MemRelay-Operation: memory-save:nixmsg-prd-20260930-docs-r8
MemRelay-Resource: 9cea62eb-5435-4fb1-af51-9699bb182b1a
2026-09-30 03:45:20 +08:00
memrelay 60074a0050 create: Checkpoint 2026-09-29 19:44:39 UTC [63a4deb4cf]
MemRelay-Operation: checkpoint-save:nixmsg-ckpt-20260930-docs-done
MemRelay-Resource: 5a6ff1ec-0640-48b2-b183-e260a07b57de
2026-09-30 03:44:42 +08:00
memrelay 650f46b1ae create: Checkpoint 2026-09-29 19:39:50 UTC [7606d37caa]
MemRelay-Operation: checkpoint-save:nixmsg-ckpt-20260930-docs-start
MemRelay-Resource: d1e16266-bff0-4672-ac87-c677895e2783
2026-09-30 03:39:53 +08:00
memrelay 0a83e60dc6 update: NixMsg 产品边界确认
MemRelay-Operation: memory-save:nixmsg-boundary-20260930-r6
MemRelay-Resource: de0503ed-3d77-400d-a0bb-bbe44371f906
2026-09-30 02:25:57 +08:00
memrelay 888fff2894 update: NixMsg 产品边界确认
MemRelay-Operation: memory-save:nixmsg-boundary-20260930-r5
MemRelay-Resource: de0503ed-3d77-400d-a0bb-bbe44371f906
2026-09-30 02:23:53 +08:00
memrelay f2783a5300 update: NixMsg 产品边界确认
MemRelay-Operation: memory-save:nixmsg-boundary-20260930-r4
MemRelay-Resource: de0503ed-3d77-400d-a0bb-bbe44371f906
2026-09-30 02:14:59 +08:00
memrelay 06e933d0aa update: NixMsg 产品边界确认
MemRelay-Operation: memory-save:nixmsg-boundary-20260930-r3
MemRelay-Resource: de0503ed-3d77-400d-a0bb-bbe44371f906
2026-09-30 02:12:57 +08:00
memrelay c88e7bd9d9 create: Checkpoint 2026-09-29 18:08:46 UTC [8e22c33c2c]
MemRelay-Operation: checkpoint-save:nixmsg-ckpt-20260930-0208
MemRelay-Resource: 66798f1b-3270-4902-917d-539d9c68fb76
2026-09-30 02:08:48 +08:00
memrelay e485fec733 update: NixMsg 产品边界确认
MemRelay-Operation: memory-save:nixmsg-boundary-20260930-r2
MemRelay-Resource: de0503ed-3d77-400d-a0bb-bbe44371f906
2026-09-30 02:08:21 +08:00
memrelay 953985ed64 create: NixMsg 产品边界确认
MemRelay-Operation: memory-save:nixmsg-boundary-20260930-r1
MemRelay-Resource: de0503ed-3d77-400d-a0bb-bbe44371f906
2026-09-30 02:07:20 +08:00
memrelay ad1b9582aa update: NixMsg 设备通讯需求
MemRelay-Operation: memory-save:nixmsg-prd-20260930-0110
MemRelay-Resource: 9cea62eb-5435-4fb1-af51-9699bb182b1a
2026-09-30 01:15:59 +08:00
memrelay fba18d5148 update: NixMsg 设备通讯需求
MemRelay-Operation: memory-save:nixmsg-prd-20260930-0100
MemRelay-Resource: 9cea62eb-5435-4fb1-af51-9699bb182b1a
2026-09-30 01:10:39 +08:00
memrelay d6b9d3d77e create: Checkpoint 2026-09-29 16:06:29 UTC [08073ae1eb]
MemRelay-Operation: checkpoint-save:nixmsg-ckpt-20260930-0006
MemRelay-Resource: 65eabb18-364f-417f-8fe6-af9ba0db2cb6
2026-09-30 00:06:35 +08:00
memrelay 5ae2ae717c update: NixMsg 设备通讯需求
MemRelay-Operation: memory-save:nixmsg-prd-20260930-0006
MemRelay-Resource: 9cea62eb-5435-4fb1-af51-9699bb182b1a
2026-09-30 00:06:30 +08:00
memrelay 73d075e18e update: NixMsg 设备通讯需求
MemRelay-Operation: memory-save:nixmsg-prd-20260930-0005
MemRelay-Resource: 9cea62eb-5435-4fb1-af51-9699bb182b1a
2026-09-30 00:06:21 +08:00
memrelay b5f77e3170 create: Checkpoint 2026-09-29 16:02:32 UTC [3077498558]
MemRelay-Operation: checkpoint-save:nixmsg-ckpt-20260930-0002
MemRelay-Resource: c8d1788e-e33a-46b2-a2f6-49dacaf90bb6
2026-09-30 00:02:34 +08:00
memrelay 7f71e66ac8 update: NixMsg 设备通讯需求
MemRelay-Operation: memory-save:nixmsg-prd-20260930-0001
MemRelay-Resource: 9cea62eb-5435-4fb1-af51-9699bb182b1a
2026-09-30 00:02:21 +08:00
memrelay 8123b442b5 create: Checkpoint 2026-09-29 15:55:01 UTC [a883cdb54c]
MemRelay-Operation: checkpoint-save:nixmsg-ckpt-20260929-1555
MemRelay-Resource: 4b8a0222-20d3-4531-98b1-4b735b3ef70e
2026-09-29 23:55:03 +08:00
memrelay 6dedb796eb create: Checkpoint 2026-09-29 15:52:48 UTC [2365e8d4b5]
MemRelay-Operation: checkpoint-save:nixmsg-ckpt-20260929-1552b
MemRelay-Resource: de804d80-c991-45b0-ae0b-9b07f573f022
2026-09-29 23:52:51 +08:00
memrelay e08ae1d9b4 update: NixMsg 设备通讯需求
MemRelay-Operation: memory-save:nixmsg-prd-20260929-1550
MemRelay-Resource: 9cea62eb-5435-4fb1-af51-9699bb182b1a
2026-09-29 23:52:08 +08:00
memrelay da0d978d32 create: Checkpoint 2026-09-29 15:44:11 UTC [6720a64a9c]
MemRelay-Operation: checkpoint-save:nixmsg-ckpt-20260929-1544
MemRelay-Resource: 890af45e-b976-40a1-964d-a388cfc1b89f
2026-09-29 23:44:14 +08:00
memrelay 42b844dea3 create: NixMsg 设备通讯需求
MemRelay-Operation: memory-save:nixmsg-prd-20260929-1542
MemRelay-Resource: 9cea62eb-5435-4fb1-af51-9699bb182b1a
2026-09-29 23:43:57 +08:00
memrelay a1a5f7ac51 chore: 建立MemRelay记忆基线 2026-09-29 23:42:27 +08:00
memrelay e0da50bb27 create: Cloudflare Worker proxy-worker 部署完成并通过 WebSocket 全链路验证
MemRelay-Operation: memory-save:cf-worker-vless-sub-20260929-1
MemRelay-Resource: 4d0456e2-c1e6-49c5-b079-a7f7e0fc3654
2026-09-29 11:50:27 +08:00
memrelay a92b3f30cc chore: 建立MemRelay记忆基线 2026-09-29 11:49:25 +08:00
memrelay 31a1b16c8a update: mitmweb 已停,系统证书下次开机再删
MemRelay-Operation: memory-save:rapt-mitmweb-off-20260928
MemRelay-Resource: 8b672234-7b1d-45b2-8361-5c0017e5e6a8
2026-09-28 03:05:49 +08:00
memrelay 936b74719c create: mitmweb 抓包正在开着,看完要收尾
MemRelay-Operation: memory-save:rapt-mitmweb-on-20260928
MemRelay-Resource: 8b672234-7b1d-45b2-8361-5c0017e5e6a8
2026-09-28 02:56:40 +08:00
memrelay fa76e96da3 create: Checkpoint 2026-09-27 18:38:59 UTC [dbf3c648c6]
MemRelay-Operation: checkpoint-save:rapt-ckpt-packaging-done-20260928
MemRelay-Resource: f14a46d9-2474-4dbe-ba03-c63b7315b1fd
2026-09-28 02:39:02 +08:00
memrelay 4748c74663 update: 如何抓到 App 的 HTTPS 请求
MemRelay-Operation: memory-save:rapt-capture-method-fix-apasstk-20260928
MemRelay-Resource: 88370fe7-bd1b-4184-8b84-afe72a7541e5
2026-09-28 02:37:37 +08:00
memrelay fbcd116ca8 create: 如何抓到 App 的 HTTPS 请求
MemRelay-Operation: memory-save:rapt-capture-method-20260928
MemRelay-Resource: 88370fe7-bd1b-4184-8b84-afe72a7541e5
2026-09-28 02:37:21 +08:00
memrelay 3e665a9b94 create: Checkpoint 2026-09-27 18:36:10 UTC [16b1147219]
MemRelay-Operation: checkpoint-save:rapt-ckpt-pushed-fe37a84
MemRelay-Resource: fd4ce074-88fa-42ac-9e05-5d65667a5701
2026-09-28 02:36:12 +08:00
memrelay df10209989 create: Checkpoint 2026-09-27 18:35:46 UTC [40d9de3304]
MemRelay-Operation: checkpoint-save:rapt-ckpt-before-push-20260928
MemRelay-Resource: 231b718f-edff-41f7-bb6c-4757ac6f48df
2026-09-28 02:35:49 +08:00
memrelay 65c18760e6 create: 下载列表在列表内部滚动
MemRelay-Operation: memory-save:rapt-progress-list-scroll-20260927
MemRelay-Resource: 2608b81e-32e3-4951-bcda-f4ffeec55687
2026-09-27 23:04:26 +08:00
memrelay 9b4144e0c0 create: ADB 页可探测本机 MuMu
MemRelay-Operation: memory-save:rapt-probe-mumu-20260927
MemRelay-Resource: 4040e5a7-e66d-4ae8-ac10-06797e6e133d
2026-09-27 16:34:21 +08:00
memrelay 98b8612a28 create: 不把开发机路径写进分发包
MemRelay-Operation: memory-save:rapt-no-hardcoded-paths-20260927
MemRelay-Resource: c9120bb1-e23b-4e9f-9674-ee88be2f3940
2026-09-27 15:47:12 +08:00
memrelay 78ec6b785f create: 分发包只带服务端字节码
MemRelay-Operation: memory-save:rapt-package-pyc-20260927
MemRelay-Resource: 9ee1d156-6878-4d9c-a267-95779d5078df
2026-09-27 15:42:32 +08:00
memrelay 14bf879358 update: 下载目录放封面和说明,清单可取消选择
MemRelay-Operation: memory-save:rapt-intro-txt-20260927
MemRelay-Resource: fe70762f-0d81-4e53-beca-246b4e270b8c
2026-09-27 15:23:56 +08:00
memrelay f83b71bb56 create: 下载目录放封面和说明,清单可取消选择
MemRelay-Operation: memory-save:rapt-cover-note-clear-20260927
MemRelay-Resource: fe70762f-0d81-4e53-beca-246b4e270b8c
2026-09-27 15:19:15 +08:00
memrelay 59124d48e0 create: 下载 fMP4 时要带上 init.mp4
MemRelay-Operation: memory-save:rapt-hls-init-mp4-20260927
MemRelay-Resource: 39637cf5-8f58-487f-aea2-6a11244396d3
2026-09-27 15:11:51 +08:00
memrelay 4c0c87fd76 create: 同时下载不设上限,默认 6
MemRelay-Operation: memory-save:rapt-workers-unlimited-default-6-20260927
MemRelay-Resource: 41e603c8-a142-4629-972b-4ba067b5472c
2026-09-27 14:57:07 +08:00
memrelay dd391a92cd update: 热门与 Recommend 同时保留
MemRelay-Operation: memory-save:rapt-keep-recommend-20260927
MemRelay-Resource: 3d3bfecf-f204-4197-a9b0-082856e7102c
2026-09-27 14:35:52 +08:00
memrelay c9f33ccd66 create: Checkpoint 2026-09-27 06:30:29 UTC [14d09ab8c8]
MemRelay-Operation: checkpoint-save:rapt-ckpt-api-align-20260927
MemRelay-Resource: 4f7af527-3f82-4e1b-90ef-dc25b000e497
2026-09-27 14:30:30 +08:00
memrelay 6ab8337bc0 update: App 与桌面端接口头和参数差异
MemRelay-Operation: memory-save:rapt-api-align-20260927
MemRelay-Resource: 3d3bfecf-f204-4197-a9b0-082856e7102c
2026-09-27 14:30:24 +08:00
memrelay 3537a4732a create: Checkpoint 2026-09-26 23:16:33 UTC [683234447d]
MemRelay-Operation: checkpoint-save:rapt-ckpt-api-compare-20260927
MemRelay-Resource: 04426e42-a303-4ec4-8544-e0482c776242
2026-09-27 07:16:36 +08:00
memrelay 52f42483be create: App 与桌面端接口头和参数差异
MemRelay-Operation: memory-save:rapt-api-capture-compare-20260927
MemRelay-Resource: 3d3bfecf-f204-4197-a9b0-082856e7102c
2026-09-27 07:16:27 +08:00
memrelay bc320c46e4 create: Checkpoint 2026-09-26 23:07:13 UTC [39aaffceeb]
MemRelay-Operation: checkpoint-save:rapt-ckpt-vendor-copy-20260927
MemRelay-Resource: 0647e39a-d305-4ba0-af7b-1ef83f215533
2026-09-27 07:07:16 +08:00
memrelay 969bee8aea update: 打包拷贝 vendor 里的 adb 和 WebView2
MemRelay-Operation: memory-save:rapt-package-copy-vendor-20260927
MemRelay-Resource: c8015de9-c56c-478b-a0b9-2e77f00d6dd2
2026-09-27 07:07:05 +08:00
memrelay 035d6023f8 create: Checkpoint 2026-09-26 22:48:33 UTC [9dc9ed7db8]
MemRelay-Operation: checkpoint-save:rapt-ckpt-package-zip-20260927
MemRelay-Resource: 56699ffc-fe2a-470c-aca7-0e95b585db13
2026-09-27 06:48:36 +08:00
memrelay 76e8f4f7a4 create: 用 Python 脚本打 Windows 分发 zip
MemRelay-Operation: memory-save:rapt-package-py-20260927
MemRelay-Resource: c8015de9-c56c-478b-a0b9-2e77f00d6dd2
2026-09-27 06:48:25 +08:00
memrelay 5e926bd737 update: 窗口标题图标与关闭确认
MemRelay-Operation: memory-save:raptd-window-dark-theme-20260927
MemRelay-Resource: 4639e589-eb61-4d1e-a5d2-7faf3494155b
2026-09-27 06:16:41 +08:00
memrelay e786158d94 create: 窗口标题图标与关闭确认
MemRelay-Operation: memory-save:raptd-window-title-icon-close-20260927
MemRelay-Resource: 4639e589-eb61-4d1e-a5d2-7faf3494155b
2026-09-27 06:15:48 +08:00
memrelay f3bfab3516 create: 播放页使用分集缓存
MemRelay-Operation: memory-save:raptd-player-cache-20260927
MemRelay-Resource: ef8f4526-3016-4a9b-8ebd-d6bf155bd42c
2026-09-27 05:58:51 +08:00
memrelay 3d05da226b update: 设备信息可设置并在登录后固定
MemRelay-Operation: memory-save:raptd-login-settings-button-detail-20260927
MemRelay-Resource: 6b2508be-b94e-44ad-91a5-8d8d5f924a54
2026-09-27 05:43:29 +08:00
memrelay ca70266c9c update: 设备信息可设置并在登录后固定
MemRelay-Operation: memory-save:raptd-login-settings-button-20260927
MemRelay-Resource: 6b2508be-b94e-44ad-91a5-8d8d5f924a54
2026-09-27 05:43:20 +08:00
memrelay 134644ab41 create: 目录取消不提示,浏览器快捷键不在 JSON
MemRelay-Operation: memory-save:raptd-folder-cancel-and-devtools-20260927
MemRelay-Resource: 09f1bd33-58d5-41d0-96f4-8b0e36900141
2026-09-27 05:40:58 +08:00
memrelay 1770cf498a create: Checkpoint 2026-09-26 21:33:24 UTC [a182b8fc1c]
MemRelay-Operation: checkpoint-save:raptd-checkpoint-settings-page-20260927
MemRelay-Resource: 9d5082fe-3936-4c20-b949-f90e54530976
2026-09-27 05:33:26 +08:00
memrelay ef6c63deef update: 设备信息可设置并在登录后固定
MemRelay-Operation: memory-save:raptd-settings-page-20260927
MemRelay-Resource: 6b2508be-b94e-44ad-91a5-8d8d5f924a54
2026-09-27 05:29:48 +08:00
memrelay fd0cc0b201 create: Checkpoint 2026-09-26 21:21:14 UTC [c61193eeb7]
MemRelay-Operation: checkpoint-save:raptd-checkpoint-scrollbar-20260927
MemRelay-Resource: 9247dc0d-4dca-4cfd-8b44-574b0ec1acf1
2026-09-27 05:21:17 +08:00
memrelay 547a185a96 create: 滚动条配色跟深色界面
MemRelay-Operation: memory-save:raptd-scrollbar-dark-20260927
MemRelay-Resource: ef50d571-904d-46c9-8fe5-9ec89752c6fe
2026-09-27 05:20:30 +08:00
memrelay c9f6811f05 create: Checkpoint 2026-09-26 19:28:21 UTC [6e08be9ef0]
MemRelay-Operation: checkpoint-save:checkpoint-profile-poller-20260927
MemRelay-Resource: 1b76566d-5609-4789-a6c9-6dea45488783
2026-09-27 03:28:24 +08:00
memrelay abb312adce create: 桌面后端独立于抓取脚本并按模块拆分
MemRelay-Operation: memory-save:rapt-decision-server-modules-20260927
MemRelay-Resource: ea989646-c7e6-400e-96a9-a61931e879e1
2026-09-27 02:34:35 +08:00
memrelay af65bf6f5d create: Checkpoint 2026-09-26 18:30:04 UTC [1f4ac8f6d5]
MemRelay-Operation: checkpoint-save:rapt-checkpoint-httpx-proxy-20260927
MemRelay-Resource: 88cf5ef2-f89e-4270-8dda-d1743b3facf1
2026-09-27 02:30:06 +08:00
memrelay 4cc7b8721b create: 对外 HTTP 统一使用 httpx,设置分页含代理
MemRelay-Operation: memory-save:rapt-decision-httpx-proxy-20260927
MemRelay-Resource: c841420f-bd73-46fe-b0b6-9f64596d8a01
2026-09-27 02:29:51 +08:00
memrelay 85a5ff20db create: 设备信息可设置并在登录后固定
MemRelay-Operation: memory-save:rapt-decision-device-settings-20260927
MemRelay-Resource: 6b2508be-b94e-44ad-91a5-8d8d5f924a54
2026-09-27 02:07:31 +08:00
memrelay 90660e5b59 update: 桌面登录后显示个人信息
MemRelay-Operation: memory-save:rapt-fact-dynamic-port-20260927
MemRelay-Resource: 866c509b-6ee3-4c79-aaab-620debf40e66
2026-09-27 01:10:27 +08:00
memrelay 7d89a83c61 create: Tauri 动态分配单一端口
MemRelay-Operation: memory-save:rapt-decision-dynamic-port-20260927
MemRelay-Resource: 2e7e1895-f1ab-453d-ba93-29bfdfdd22fa
2026-09-27 01:10:18 +08:00
memrelay e5290b7f80 create: ADB 登录先检查 App 是否安装
MemRelay-Operation: memory-save:rapt-decision-adb-check-app-20260927
MemRelay-Resource: 63048f65-3139-4ae4-b639-658d80fb6801
2026-09-27 00:51:14 +08:00
memrelay dbf9591e29 update: 桌面登录后显示个人信息
MemRelay-Operation: memory-save:rapt-fact-drop-token-login-20260927
MemRelay-Resource: 866c509b-6ee3-4c79-aaab-620debf40e66
2026-09-27 00:47:25 +08:00
memrelay 67d153496a create: 去掉 Token 登录
MemRelay-Operation: memory-save:rapt-decision-drop-token-login-20260927
MemRelay-Resource: ae69c4a0-7797-49e3-8374-a7f6866a3c74
2026-09-27 00:47:16 +08:00
memrelay a651f20424 update: 桌面登录后显示个人信息
MemRelay-Operation: memory-save:rapt-fact-web-port-8799-20260927
MemRelay-Resource: 866c509b-6ee3-4c79-aaab-620debf40e66
2026-09-27 00:41:09 +08:00
memrelay 85fd8d535e create: 网页开发端口 8799
MemRelay-Operation: memory-save:rapt-decision-web-port-8799-20260927
MemRelay-Resource: c61009f4-f7f1-4f61-8727-7f0cb57dbb7a
2026-09-27 00:41:03 +08:00
memrelay 04e3dbf5c8 create: 桌面界面使用 Naive UI
MemRelay-Operation: memory-save:rapt-decision-naive-ui-20260927
MemRelay-Resource: 78b5bdbf-b410-41ec-87ac-5ec555440648
2026-09-27 00:38:16 +08:00
memrelay a33c40d48c update: 桌面登录后显示个人信息
MemRelay-Operation: memory-save:rapt-adb-device-list-merge-20260927
MemRelay-Resource: 866c509b-6ee3-4c79-aaab-620debf40e66
2026-09-27 00:28:51 +08:00
memrelay 0b15eeee96 update: 桌面登录后显示个人信息
MemRelay-Operation: memory-save:rapt-adb-device-list-20260927
MemRelay-Resource: 866c509b-6ee3-4c79-aaab-620debf40e66
2026-09-27 00:28:44 +08:00
memrelay 7b0f7b6e39 create: 登录接口默认端口 8798
MemRelay-Operation: memory-save:rapt-decision-port-8798-20260927
MemRelay-Resource: 403b483a-f338-4308-a967-8caaaa035b78
2026-09-27 00:24:19 +08:00
memrelay ee008e93a5 update: 桌面登录后显示个人信息
MemRelay-Operation: memory-save:rapt-port-8798-20260927
MemRelay-Resource: 866c509b-6ee3-4c79-aaab-620debf40e66
2026-09-27 00:24:13 +08:00
memrelay 2a77aaf6a2 create: Checkpoint 2026-09-26 16:22:13 UTC [d8449b4f71]
MemRelay-Operation: checkpoint-save:rapt-checkpoint-login-profile-20260927
MemRelay-Resource: 7d98e9db-4f0a-4084-889f-fb99c95c83da
2026-09-27 00:22:16 +08:00
memrelay 612ac92d8b create: 桌面登录后显示个人信息
MemRelay-Operation: memory-save:rapt-login-profile-20260927
MemRelay-Resource: 866c509b-6ee3-4c79-aaab-620debf40e66
2026-09-27 00:22:09 +08:00
memrelay e2b34e17a4 create: WebView2 离线安装包已放在 vendor
MemRelay-Operation: memory-save:rapt-webview2-offline-20260927
MemRelay-Resource: ee65b88e-70f2-43c1-807e-c9f4516a5ae7
2026-09-27 00:12:44 +08:00
memrelay e85b4620c9 create: 编译产物统一放到 dist
MemRelay-Operation: memory-save:rapt-dist-output-20260927
MemRelay-Resource: 2bc31ddd-2daa-4587-8e72-33d40a3e01fd
2026-09-27 00:11:02 +08:00
memrelay 111518447f create: 已初始化 Tauri 外壳和 Vue 目录
MemRelay-Operation: memory-save:rapt-tauri-init-20260927
MemRelay-Resource: 7b048643-f5d1-4078-8ee9-1c8fcbcb9bbd
2026-09-27 00:10:09 +08:00
memrelay 91986e2974 create: Checkpoint 2026-09-26 15:18:05 UTC [409312c888]
MemRelay-Operation: checkpoint-save:ckpt-pause-capture-20260926
MemRelay-Resource: 66554a2d-3515-4141-9be4-ba6cb75e0b13
2026-09-26 23:18:07 +08:00
memrelay 366d2b239e create: 通用抓包用现成中间人工具,不为单个 App 写界面
MemRelay-Operation: memory-save:rapt-generic-capture-20260926
MemRelay-Resource: 47d3601f-fc04-48e9-9202-06b6a3a6c8a5
2026-09-26 23:13:58 +08:00
memrelay 857c80a4f2 create: MuMu 上用 Frida 扫内存能拿到 Dart 明文请求
MemRelay-Operation: memory-save:rapt-frida-plaintext-20260926
MemRelay-Resource: 18f5eefe-31e7-4e2c-ba29-1c778a1f7fd1
2026-09-26 23:07:57 +08:00
memrelay fa15eb7c6b create: 已提交独立 Swagger 调试台
MemRelay-Operation: memory-save:rapt-commit-swagger-20260926
MemRelay-Resource: 7b2a37d1-10e3-4b9e-9690-db4b19229c1b
2026-09-26 22:59:40 +08:00
memrelay 0db1a25f71 create: 独立 Swagger 调试台在 swagger 目录
MemRelay-Operation: memory-save:rapt-swagger-20260926
MemRelay-Resource: e2a4f391-ab92-4761-89a5-a390b170d4a9
2026-09-26 22:54:41 +08:00
memrelay 57d38c3c9b create: master 已推到 git.asio.asia
MemRelay-Operation: memory-save:rapt-push-remote-20260926
MemRelay-Resource: c0d38ae5-a8a7-4572-8601-20d05ce4fcce
2026-09-26 22:49:13 +08:00
memrelay 179dd4ce6a create: 已提交首页目录扩展
MemRelay-Operation: memory-save:rapt-commit-home-20260926
MemRelay-Resource: 6cd03e21-8e00-43e9-900f-9ffa468c6ebf
2026-09-26 22:44:38 +08:00
memrelay 4f5e68347a create: Checkpoint 2026-09-25 16:43:59 UTC [cfbfed06d4]
MemRelay-Operation: checkpoint-save:rapt-home-feed-checkpoint-20260926
MemRelay-Resource: d321fdf2-f97c-4d80-b8d5-b5264e75ce35
2026-09-26 00:44:02 +08:00
memrelay c84227da52 create: 首页区块和接口的对应
MemRelay-Operation: memory-save:rapt-home-feed-20260926
MemRelay-Resource: 04ed60d3-6073-42ac-ac9a-dab9503f4d8a
2026-09-26 00:43:48 +08:00
memrelay c476769e0d create: Checkpoint 2026-09-25 16:38:12 UTC [d7e7952d04]
MemRelay-Operation: checkpoint-save:rapdrama-v2-compare-checkpoint-2026-09-26
MemRelay-Resource: c7937fbe-ccc5-4b9e-9b6c-83af8e202497
2026-09-26 00:38:16 +08:00
memrelay 00dc848861 create: 去掉 v2 后的接口对照
MemRelay-Operation: memory-save:rapdrama-v2-compare-2026-09-26
MemRelay-Resource: ee4b3dd0-4c44-4be4-89ec-983d7a769102
2026-09-26 00:38:11 +08:00
memrelay 0d007b969e create: 拉完目录后询问再按剧名下载视频
MemRelay-Operation: memory-save:rapt-download-prompt-20260925
MemRelay-Resource: ff9405b3-8f89-416d-9b17-dab003e44f2a
2026-09-25 23:57:24 +08:00
memrelay 8c8a3ff37d create: 已提交 playlist 优先逻辑和接口清单
MemRelay-Operation: memory-save:rapt-commit-playlist-20260925
MemRelay-Resource: 6ec4776e-9f6a-4c42-9d5e-9c8027388728
2026-09-25 23:49:29 +08:00
memrelay 28037b6b4a create: 播放地址优先 playlist,失败再回落 playlistv2
MemRelay-Operation: memory-save:rapt-playlist-fallback-20260925
MemRelay-Resource: cf54d6db-03a3-4df5-ab0e-6f3e49f70f9a
2026-09-25 23:46:15 +08:00
memrelay 048945bf16 create: playlist 一次返回全部分集,没有 playlistv1
MemRelay-Operation: memory-save:rapt-playlist-v1-20260925
MemRelay-Resource: 7b5efa81-ab4a-43fb-bc77-0014472b3d36
2026-09-25 23:43:13 +08:00
memrelay 32ed152a16 create: m3u8 分片可以直接按签名地址下载
MemRelay-Operation: memory-save:rapt-sample-ts-20260925
MemRelay-Resource: a6d4d12e-94bc-4b31-a0bc-fb1e413c28a2
2026-09-25 23:40:43 +08:00
memrelay a6f612d31c update: RaptDrama 完整 API 接口列表
MemRelay-Operation: memory-save:rapt-api-doc-20260925
MemRelay-Resource: 86d08da7-ca42-449f-adaf-436d89a506cc
2026-09-25 23:39:21 +08:00
memrelay 11af2d430f create: 本地 Git 已初始化且未设置远端
MemRelay-Operation: memory-save:rapt-git-init-20260925
MemRelay-Resource: fad8b3b8-06a7-45c0-85f6-b3d887a6482f
2026-09-25 23:33:54 +08:00
memrelay 0530892b73 create: 邮箱密码可换 apasstk,账号会保持同一个
MemRelay-Operation: memory-save:rapt-email-login-20260925
MemRelay-Resource: 2707df53-0e3c-4994-b25c-e976e048b39c
2026-09-25 23:30:31 +08:00
memrelay 3b7e043dbb create: 旁加载的 RaptDrama 会被 Play 要求改从商店安装
MemRelay-Operation: memory-save:rapt-sideload-play-prompt-20260925
MemRelay-Resource: 864e1c86-80ae-4f31-8211-32ef8211f618
2026-09-25 23:20:35 +08:00
memrelay 6db6ecf49c create: 关掉 Charles 后要清掉模拟器全局代理
MemRelay-Operation: memory-save:rapt-clear-proxy-play-20260925
MemRelay-Resource: fcf797bd-c07e-4f02-8bb5-9ce5f00beaed
2026-09-25 23:18:01 +08:00
memrelay 7ac3289356 update: playlistv2 用 apasstk 和 JSON 按剧分页
MemRelay-Operation: memory-save:rapt-playlist-revise-20260925
MemRelay-Resource: f2a9f710-4c97-46ed-963b-7f0e5f8484d4
2026-09-25 23:15:35 +08:00
memrelay 9e5b59010f update: 可用 --from-device 读取设备上的登录凭证
MemRelay-Operation: memory-save:rapt-from-device-revise-20260925
MemRelay-Resource: 5d3a2663-0be5-4b96-846e-988700b468bb
2026-09-25 23:15:16 +08:00
memrelay 345079b00a update: 免费集播放后内存里有完整 BunnyCDN m3u8
MemRelay-Operation: memory-save:rapt-cdn-heap-revise-20260925
MemRelay-Resource: 19447a9a-2d0a-42d9-a258-ad9046bd1505
2026-09-25 23:15:12 +08:00
memrelay def18de1b8 create: 脚本游客每次新建账号,App 内游客会一直保留
MemRelay-Operation: memory-save:rapt-guest-persist-20260925
MemRelay-Resource: 1d93e87b-913c-47f1-b401-752892afde01
2026-09-25 23:15:01 +08:00
memrelay 6e65683833 create: Checkpoint 2026-09-25 15:04:03 UTC [04ac1f0cb3]
MemRelay-Operation: checkpoint-save:ckpt-bundled-adb-20260925
MemRelay-Resource: 8ad84899-5a71-4739-a9bb-eb90da6b72d1
2026-09-25 23:04:05 +08:00
memrelay 3dc4512844 create: 项目内置通用 platform-tools adb
MemRelay-Operation: memory-save:rapt-bundled-adb-20260925
MemRelay-Resource: cadc1c97-0b89-4812-ab49-db15c56ffda3
2026-09-25 23:04:00 +08:00
memrelay faf39271c4 create: 可用 --from-device 读取设备上的登录凭证
MemRelay-Operation: memory-save:rapt-from-device-20260925
MemRelay-Resource: 5d3a2663-0be5-4b96-846e-988700b468bb
2026-09-25 07:28:43 +08:00
memrelay 5977d3b18d create: Checkpoint 2026-09-24 23:23:11 UTC [3d9c52a54a]
MemRelay-Operation: checkpoint-save:ckpt-guest-scrape-20260925
MemRelay-Resource: f164e0d1-6c08-454a-a138-0b84f614a4bb
2026-09-25 07:23:14 +08:00
memrelay 5dcba770a0 create: 游客 token 用 apasstk 可拿免费集 CDN
MemRelay-Operation: memory-save:rapt-guest-apasstk-20260925
MemRelay-Resource: cc5cfb48-8fc0-4941-9b65-3e9a339a7ef1
2026-09-25 07:17:49 +08:00
memrelay 640218fcfb create: playlistv2 用 apasstk 和 JSON 按剧分页
MemRelay-Operation: memory-save:rapt-batch-api-20260925
MemRelay-Resource: f2a9f710-4c97-46ed-963b-7f0e5f8484d4
2026-09-25 07:14:00 +08:00
memrelay 23a84f02b2 create: Checkpoint 2026-09-24 23:13:52 UTC [4093ff9de9]
MemRelay-Operation: checkpoint-save:ckpt-batch-scrape-20260925
MemRelay-Resource: 9cfe6b3f-e931-44ab-b856-c74d799c486c
2026-09-25 07:13:55 +08:00
memrelay 7212d53a23 create: 免费集播放后内存里有完整 BunnyCDN m3u8
MemRelay-Operation: memory-save:rapt-cdn-heap-20260925
MemRelay-Resource: 19447a9a-2d0a-42d9-a258-ad9046bd1505
2026-09-25 06:41:33 +08:00
memrelay 5efe7691ca create: Checkpoint 2026-09-24 22:41:25 UTC [c21a23ed25]
MemRelay-Operation: checkpoint-save:ckpt-cdn-heap-20260925
MemRelay-Resource: b09c2f86-e435-4a5b-a105-bbedcaabe8ae
2026-09-25 06:41:28 +08:00
memrelay 494df8efe0 create: RaptDrama 完整 API 接口列表
MemRelay-Operation: memory-save:rapdrama-fact-api-structure-20260925-0610
MemRelay-Resource: 86d08da7-ca42-449f-adaf-436d89a506cc
2026-09-25 06:08:38 +08:00
memrelay 4bd7a7ed37 create: reFlutter 对此 App 无效(snapshot hash 不兼容)
MemRelay-Operation: memory-save:rapdrama-exp-reflutter-fail-20260925-0605
MemRelay-Resource: 09fa2312-2d68-47d8-afe2-fe9c362ebb8b
2026-09-25 06:04:45 +08:00
memrelay cab6ca46cc create: Checkpoint 2026-09-24 21:43:10 UTC [b75a954194]
MemRelay-Operation: checkpoint-save:rapdrama-checkpoint-final-20260925-0543
MemRelay-Resource: 41e563f5-5766-412f-ae1a-f0a0546e31a3
2026-09-25 05:43:13 +08:00
memrelay 9992baf0a5 create: Drony VPN 对 Flutter Dart 直连无效
MemRelay-Operation: memory-save:rapdrama-exp-drony-fail-20260925-0542
MemRelay-Resource: fa6a737e-dbd5-445e-b8ff-c43f5940a91c
2026-09-25 05:42:32 +08:00
memrelay 4fb256c5d5 create: Drony + Charles + Frida 拦截 Flutter API 流量方案
MemRelay-Operation: memory-save:rapdrama-exp-drony-plan-20260925-0530
MemRelay-Resource: 55f17fe5-35ee-4f9c-91dc-e9162310beaf
2026-09-25 05:32:43 +08:00
memrelay bc464fed47 create: MuMu x86_64 上 Frida 无法 hook libc syscall wrapper
MemRelay-Operation: memory-save:rapdrama-exp-frida-libc-fail-20260925-0518
MemRelay-Resource: 52c0da1c-424b-4a77-8146-ed1190b4f20f
2026-09-25 05:30:25 +08:00
memrelay cede49eee2 create: Frida 拦截 Flutter 流量的进展与卡点
MemRelay-Operation: memory-save:rapdrama-exp-frida-progress-20260925-0420
MemRelay-Resource: 3857b23e-1823-4ee9-a368-ec9161d4fd72
2026-09-25 04:34:21 +08:00
memrelay c1c9021d8e create: 从安装包提取证书不能用于抓包
MemRelay-Operation: memory-save:rapdrama-exp-cert-extract-no-20260925-0351
MemRelay-Resource: a6b4d959-cae2-48d3-8aad-d8e43b785aee
2026-09-25 03:51:46 +08:00
memrelay 3a86fd5cfb create: Checkpoint 2026-09-24 19:49:06 UTC [ac6cf5e1b2]
MemRelay-Operation: checkpoint-save:rapdrama-checkpoint-capture-baseline-20260925-0349
MemRelay-Resource: 8ba8158f-a00e-4df1-89ab-593f0d3a000c
2026-09-25 03:49:08 +08:00
memrelay b801a6452a create: 如何修改 Charles 以解密模拟器 HTTPS
MemRelay-Operation: memory-save:rapdrama-exp-charles-20260925-0346
MemRelay-Resource: 120e75c2-feea-450c-b525-5623768b318f
2026-09-25 03:48:56 +08:00
memrelay 25a0089975 delete: 暂不启用MemRelay AI自动整理
MemRelay-Operation: memory-delete:57d22ec2-5a66-441e-b012-829a8f9c5cd9:2
MemRelay-Resource: 57d22ec2-5a66-441e-b012-829a8f9c5cd9
2026-09-25 03:48:50 +08:00
memrelay ae244f5cf8 create: 抓包使用 MuMu 12 加 Charles,不用 IDEA 模拟器
MemRelay-Operation: memory-save:rapdrama-decision-mumu-charles-20260925-0346
MemRelay-Resource: 2085df6c-5b96-479e-b42f-6af5e9469d44
2026-09-25 03:48:40 +08:00
memrelay 3f3a466a73 archive: 暂不启用MemRelay AI自动整理
MemRelay-Operation: memory-archive:57d22ec2-5a66-441e-b012-829a8f9c5cd9:2
MemRelay-Resource: 57d22ec2-5a66-441e-b012-829a8f9c5cd9
2026-09-25 03:48:34 +08:00
memrelay a87a2601fd create: RaptDrama 抓包环境与模拟器路径
MemRelay-Operation: memory-save:rapdrama-fact-capture-env-20260925-0346
MemRelay-Resource: 9f0c0e0c-1a6b-4b15-ae0f-497caefdc059
2026-09-25 03:48:28 +08:00
memrelay 63a751d312 create: RapDrama
MemRelay-Operation: project-create:280dd2a0-d23d-4a71-91e1-dce4353163be
MemRelay-Resource: 280dd2a0-d23d-4a71-91e1-dce4353163be
2026-09-25 02:06:19 +08:00
memrelay 32b9b15954 create: Checkpoint 2026-09-23 22:17:28 UTC [1af50c9873]
MemRelay-Operation: checkpoint-save:interferenceetl-initial-push-20260924
MemRelay-Resource: e217cdb2-4485-41ad-9fcf-4373d6bfc7a8
2026-09-24 06:17:32 +08:00
memrelay 6d76f19dcb create: Checkpoint 2026-09-23 22:17:22 UTC [f164eaea6c]
MemRelay-Operation: checkpoint-save:capacityreport-initial-push-20260924
MemRelay-Resource: 5e5bcdee-aee0-43ba-b65a-00d923bbd1cd
2026-09-24 06:17:25 +08:00
216 changed files with 7480 additions and 17 deletions
@@ -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自动整理保持关闭,未经用户后续明确要求不启用;普通记忆读写继续使用。
+116
View File
@@ -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",
@@ -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 主仓已以子模块引用本提交。
@@ -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 集群或规则引擎。
@@ -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,仓库仍为空。
@@ -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。
@@ -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,仓库仍为空。
@@ -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,仓库仍为空。
@@ -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。不要重复问用户已经回答过的问题。
@@ -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。
@@ -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。
@@ -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 节。
@@ -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 的主要改动。
@@ -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,不要再改回;用户对“像在写代码”敏感,只改文档。
@@ -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,属正常。
@@ -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 节审核清单。
@@ -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 节的提示词。
给下个会话:总控会话中断时重发同一段提示词即可续跑;设计会话只维护文档和审核。
@@ -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 和交付说明里总控自己拿的主意。
@@ -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 备份;不要在主工作区改文件。
@@ -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 除非总控明确派发
@@ -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 内
@@ -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`
@@ -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;勿在主工作区改
@@ -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
@@ -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;勿改主工作区
@@ -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 全部条目
@@ -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
@@ -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 合并,未启动第一波开发。
@@ -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
@@ -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
@@ -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
@@ -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` 勿动。
@@ -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 条
@@ -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。
@@ -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
@@ -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 本线节
@@ -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;勿动别人未提交工作树。
@@ -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
@@ -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;勿开始破坏性操作。
@@ -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`。
@@ -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`。
@@ -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`。
@@ -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 非必要(普通推送新建远端分支)
@@ -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
@@ -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`;启调度与清理循环
@@ -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
@@ -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
@@ -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`。
@@ -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 另开
@@ -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
@@ -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
@@ -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
@@ -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。
@@ -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 真机测试。
@@ -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
@@ -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;工作树可删
@@ -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
@@ -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。
@@ -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` 勿提交
@@ -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;工作树可删
@@ -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`
@@ -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 中文。
@@ -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 为准
@@ -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
@@ -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` 未改。
@@ -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 留给负责人关闭
@@ -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
@@ -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 勿混进本分支
@@ -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。
@@ -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 团队修。
@@ -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 正文为准。
@@ -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 并行修复。
@@ -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` 可在合并后清理
@@ -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
@@ -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,不入仓
@@ -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 后再做
@@ -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
@@ -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 装配段。
@@ -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` 合并后可清理
@@ -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
@@ -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`。
@@ -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 主工作区改。
@@ -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
@@ -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
@@ -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
@@ -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。
@@ -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`。
@@ -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
@@ -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。
@@ -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 成功。
@@ -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`。
@@ -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/发布)仍未做。
@@ -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。
@@ -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)保留。
## 给下个会话
- 四路只读复审仍在跑;若它们给出带行号的确认缺陷,再单独处理,不要重开已关问题。
@@ -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。
@@ -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。
@@ -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。
@@ -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