--- 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