--- 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,不入仓