MVP 工程基础:管理员建账号,学习者登录独立空间 #2

Closed
opened 2026-09-10 17:08:51 +08:00 by ila · 11 comments
Owner

来源与目标

2026-09-10 用户确认 F01–F12、原型通过,并要求按四阶段建议推进。原型验收:#1 评论 7498。阶段 1;覆盖 B01–B02、F12 登录基础。

在 LexGo 中接入固定版本 go-admin/go-admin-ui,并创建独立学习端。管理员创建两个学习账号,两人可登录、退出并访问各自空间,形成双前端—Go—MySQL 8 的首条真实路径。

验收标准

  • 固定来源提交、工具链及 MySQL 8 小版本;干净测试库完成迁移,两个前端可构建并连接同一后端;仅使用隔离测试配置。
  • 学习端与管理端均使用账号(用户名)+密码登录,不要求邮箱格式,邮箱不作为必填登录标识;用户名唯一性和大小写规则在实现前明确。管理员创建学习者;登录失败、过期、退出和账号切换有正确反馈,普通学习者不能调用管理 API。
  • 学习接口从认证上下文取得用户身份,禁止请求参数覆盖归属;设计 owner_id 等等效强制约束,不依赖可关闭的部门数据权限;A/B 身份与缓存隔离测试通过。
  • 保留本地 go-admin 源目录;引入时排除配置、数据库和运行文件;记录上游许可及差异;给出启动、测试与回退命令。

依赖与执行

前置:无;原型 #1 已验收,可开始。状态:待实施。前置尚未通过时不得标进行中;每单完成停在待验收,由用户验收后关闭。技术验证可与不依赖其结论的工作分工,但不提前冻结未验证契约。

参考模块与设计证据

SysUser、SysRole、SysMenu/SysApi、JWT/权限路由和版本迁移;UI sys-user、sys-role、登录页。

复用已验收登录原型与现有账号管理表格/弹窗,不补完整原型。先写账号角色、会话失效和归属规则;禁用/重置若保留,需明确旧会话失效,账号硬删除不纳入本单。

后端不为建表/API 单独画页面原型;先写数据、接口、状态、隔离与幂等契约。学习端采用 #1 已验收 v1,未做的 LinguaCafe 对照不标完成。

工作量、范围与风险

预计 6~9 人日(8 小时/人日),包含本单设计、前后端实现、相关测试、修正和文档;是规划估算,不是交付日期或 AI 运行时间。仅 F 范围,X 系列不纳入。数据变更先在隔离测试库验证迁移/回退,保留既有数据和原型。

文档与证据

实施时按影响更新 Architecture-and-Code-Map、Business-Rules-and-Glossary、Local-Development-and-Verification;需求变化更新 Product-Requirements-Overview,交付单补实际部署恢复文档。Wiki 先写再回读同步;结束评论记录测试、未验证内容、提交及 revision。工单正文保留基线,重要变化追加评论。

Gitea MCP 指向其他站点,沿用目标 git.ilapage.cn API 回退;凭据仅进入进程。

## 来源与目标 2026-09-10 用户确认 F01–F12、原型通过,并要求按四阶段建议推进。原型验收:#1 评论 7498。阶段 1;覆盖 B01–B02、F12 登录基础。 在 LexGo 中接入固定版本 go-admin/go-admin-ui,并创建独立学习端。管理员创建两个学习账号,两人可登录、退出并访问各自空间,形成双前端—Go—MySQL 8 的首条真实路径。 ## 验收标准 - [ ] 固定来源提交、工具链及 MySQL 8 小版本;干净测试库完成迁移,两个前端可构建并连接同一后端;仅使用隔离测试配置。 - [ ] 学习端与管理端均使用账号(用户名)+密码登录,不要求邮箱格式,邮箱不作为必填登录标识;用户名唯一性和大小写规则在实现前明确。管理员创建学习者;登录失败、过期、退出和账号切换有正确反馈,普通学习者不能调用管理 API。 - [ ] 学习接口从认证上下文取得用户身份,禁止请求参数覆盖归属;设计 owner_id 等等效强制约束,不依赖可关闭的部门数据权限;A/B 身份与缓存隔离测试通过。 - [ ] 保留本地 go-admin 源目录;引入时排除配置、数据库和运行文件;记录上游许可及差异;给出启动、测试与回退命令。 ## 依赖与执行 前置:无;原型 #1 已验收,可开始。状态:待实施。前置尚未通过时不得标进行中;每单完成停在待验收,由用户验收后关闭。技术验证可与不依赖其结论的工作分工,但不提前冻结未验证契约。 ## 参考模块与设计证据 SysUser、SysRole、SysMenu/SysApi、JWT/权限路由和版本迁移;UI sys-user、sys-role、登录页。 复用已验收登录原型与现有账号管理表格/弹窗,不补完整原型。先写账号角色、会话失效和归属规则;禁用/重置若保留,需明确旧会话失效,账号硬删除不纳入本单。 后端不为建表/API 单独画页面原型;先写数据、接口、状态、隔离与幂等契约。学习端采用 #1 已验收 v1,未做的 LinguaCafe 对照不标完成。 ## 工作量、范围与风险 预计 6~9 人日(8 小时/人日),包含本单设计、前后端实现、相关测试、修正和文档;是规划估算,不是交付日期或 AI 运行时间。仅 F 范围,X 系列不纳入。数据变更先在隔离测试库验证迁移/回退,保留既有数据和原型。 ## 文档与证据 实施时按影响更新 Architecture-and-Code-Map、Business-Rules-and-Glossary、Local-Development-and-Verification;需求变化更新 Product-Requirements-Overview,交付单补实际部署恢复文档。Wiki 先写再回读同步;结束评论记录测试、未验证内容、提交及 revision。工单正文保留基线,重要变化追加评论。 Gitea MCP 指向其他站点,沿用目标 git.ilapage.cn API 回退;凭据仅进入进程。
Author
Owner

工程基础只读预检(尚未安装或构建):本机 Go 1.24.0;指定 go-admin 的 go.mod 为 1.26.5。Node 22.22.1;本机 pnpm 10.10.0,而管理端 packageManager 声明 9.15.1。PATH 中 mysql 客户端为 5.7.38,未发现 docker 命令;这些不能证明是否存在其他可用 MySQL 8 实例。本次未连接、迁移或修改数据库。正式执行需在隔离工程固定工具链并提供 MySQL 8 测试实例,不能降级使用 MySQL 5.7 代替验收。

用户最新要求已纳入正文:学习端、管理端均使用账号(用户名)+密码,不要求邮箱。原型 v1 中虚构邮箱样例不是实现要求;登录标签、占位、校验和自动化用例均需使用普通用户名,管理员创建账号同样无需邮箱。

本次仅完成预检;账号、会话失效、接口与数据库契约及产品实现仍待执行,不记作本单验收通过。

工程基础只读预检(尚未安装或构建):本机 Go 1.24.0;指定 go-admin 的 go.mod 为 1.26.5。Node 22.22.1;本机 pnpm 10.10.0,而管理端 packageManager 声明 9.15.1。PATH 中 mysql 客户端为 5.7.38,未发现 docker 命令;这些不能证明是否存在其他可用 MySQL 8 实例。本次未连接、迁移或修改数据库。正式执行需在隔离工程固定工具链并提供 MySQL 8 测试实例,不能降级使用 MySQL 5.7 代替验收。 用户最新要求已纳入正文:学习端、管理端均使用账号(用户名)+密码,不要求邮箱。原型 v1 中虚构邮箱样例不是实现要求;登录标签、占位、校验和自动化用例均需使用普通用户名,管理员创建账号同样无需邮箱。 本次仅完成预检;账号、会话失效、接口与数据库契约及产品实现仍待执行,不记作本单验收通过。
Author
Owner

开始执行 #2:账号与独立空间基础

用户已提供本机 MySQL 8 连接并要求继续。只读核验服务端为 8.4.3,尚无 lexgo 前缀数据库;将在项目专用 lexgo_dev 和 lexgo_test_issue2 中工作,不改其他库。凭据不进入本工单。分支 feat/2-account-foundation。

实施设计:

  • 后端在 server 中按固定 go-admin 提交选择必要 SysUser/SysDept 与 common/models 代码,保留许可和来源清单;沿用 Gin/GORM 与 router/API/service/DTO 分层。未选中的部门、代码生成、任意定时任务等不开放。独立入口只注册当前 MVP 的账号和学习空间接口。
  • 管理端复用固定 go-admin-ui 的界面代码和表格/表单模式,学习端使用 create-vue 独立工程。两端使用不同前端会话存储键、同一后端账号。
  • 账号为 3~32 位 ASCII 字母开头的字母/数字/下划线/点/连字符,去首尾空白并转小写,数据库唯一约束;密码 10~72 字节,使用 bcrypt,不要求邮箱。管理员创建的账号默认 learner,不允许请求自选 admin。
  • 本阶段采用服务端可撤销的随机 Bearer 会话(数据库仅保存 SHA-256 摘要,8 小时过期),不直接使用上游开发模式超长 JWT。每次验证有效会话与当前账号状态;退出撤销当前会话,禁用/重置撤销该用户所有会话。管理员不能通过页面禁用或重置自己,账号删除本单不提供。
  • /api/v1/login、/me、/logout 供两端;/accounts 仅管理员列表/创建/禁用/重置;/space 返回认证用户自己的英语空间。归属查询不依赖 go-admin EnableDP,不接受用户字段覆盖身份。先验证 A/B 越权、会话过期/撤销和用户名规则,再实现界面集成。
  • 显式版本迁移、幂等初始化;只在空专用库或已识别版本的库迁移,服务启动不偷偷修改表。回退先停止服务,保留数据,通过前一代码版本和已验证备份恢复,避免自动破坏性 down。

计划顺序:固定可用工具链/数据契约 → 后端失败测试与实现 → 两端接入 → MySQL 集成与浏览器验证 → Wiki/镜像/提交/PR 和工单证据。技能要求使用子代理时按目录分工两端,后端和集成由主代理处理。当前状态进行中;完成后待用户验收,不自动关闭。

延续目标站点 API 回退原因:现有 Gitea MCP 指向其他站点。

## 开始执行 #2:账号与独立空间基础 用户已提供本机 MySQL 8 连接并要求继续。只读核验服务端为 8.4.3,尚无 lexgo 前缀数据库;将在项目专用 lexgo_dev 和 lexgo_test_issue2 中工作,不改其他库。凭据不进入本工单。分支 feat/2-account-foundation。 实施设计: - 后端在 server 中按固定 go-admin 提交选择必要 SysUser/SysDept 与 common/models 代码,保留许可和来源清单;沿用 Gin/GORM 与 router/API/service/DTO 分层。未选中的部门、代码生成、任意定时任务等不开放。独立入口只注册当前 MVP 的账号和学习空间接口。 - 管理端复用固定 go-admin-ui 的界面代码和表格/表单模式,学习端使用 create-vue 独立工程。两端使用不同前端会话存储键、同一后端账号。 - 账号为 3~32 位 ASCII 字母开头的字母/数字/下划线/点/连字符,去首尾空白并转小写,数据库唯一约束;密码 10~72 字节,使用 bcrypt,不要求邮箱。管理员创建的账号默认 learner,不允许请求自选 admin。 - 本阶段采用服务端可撤销的随机 Bearer 会话(数据库仅保存 SHA-256 摘要,8 小时过期),不直接使用上游开发模式超长 JWT。每次验证有效会话与当前账号状态;退出撤销当前会话,禁用/重置撤销该用户所有会话。管理员不能通过页面禁用或重置自己,账号删除本单不提供。 - /api/v1/login、/me、/logout 供两端;/accounts 仅管理员列表/创建/禁用/重置;/space 返回认证用户自己的英语空间。归属查询不依赖 go-admin EnableDP,不接受用户字段覆盖身份。先验证 A/B 越权、会话过期/撤销和用户名规则,再实现界面集成。 - 显式版本迁移、幂等初始化;只在空专用库或已识别版本的库迁移,服务启动不偷偷修改表。回退先停止服务,保留数据,通过前一代码版本和已验证备份恢复,避免自动破坏性 down。 计划顺序:固定可用工具链/数据契约 → 后端失败测试与实现 → 两端接入 → MySQL 集成与浏览器验证 → Wiki/镜像/提交/PR 和工单证据。技能要求使用子代理时按目录分工两端,后端和集成由主代理处理。当前状态进行中;完成后待用户验收,不自动关闭。 延续目标站点 API 回退原因:现有 Gitea MCP 指向其他站点。
Author
Owner

#2 已实现,待用户验收

交付:学习端/管理端用户名+密码登录;管理员创建、启停、重置学习账号;学习者访问本人英语空空间;可撤销的8小时会话、401/退出/账号切换清理与迟到响应隔离。后端复用固定 go-admin 选用模型,管理端复用固定 go-admin-ui 布局/表格/组件;来源清单和MIT许可均保留,原始源工作区无改动。

实际环境:MySQL 8.4.3(本机3308),专用 lexgo_dev/lexgo_test_issue2;Go1.26.5、Node22.22.1、pnpm9.15.1。只新增项目库及虚构账号,没有改其他库。凭据和浏览器测试口令在忽略的本机配置,提交候选文件逐项检查无实际凭据。

验证证据

  • 后端先观察无登录路由/无迁移的失败测试,再实现;真实MySQL完整验证通过。6个顶层测试含4个迁移拒绝子例,覆盖A/B归属、禁止客户端角色/身份覆盖、并发重复账号、退出/禁用/重置/到期失效、部分迁移失败重试和bootstrap不覆盖。python scripts/server.py test-integration、build 及 go vet ./... 通过。
  • 管理端17项Node测试、lint、生产构建通过;学习端9项Vitest、2项Playwright模拟API用例、类型检查和构建通过。两端依赖锁定,首次安装成功;生产构建仍有原Sass弃用/vendor体积警告。
  • 主代理真实浏览器:管理员登录→创建learner_a/learner_b→学习端A登录→退出切B→管理员停用B→学习端刷新显示登录失效→恢复B;另一个管理页使用learner_a登录显示无管理权限。手机检查实际DOM为390×844,scrollWidth=clientWidth=390;窗口已恢复。截图检查管理端账号表和手机登录正常。
  • 规格/质量审查发现并修复迁移误认领空marker/负版本,以及管理端HTTP503注销误报成功;均有失败→通过回归。最终复核无剩余阻断项。
  • sync --verify 全部20页与严格检查通过,治理测试56项通过,Git staged diff检查通过。

边界与交付

此基础仅证明账号/空空间授权,不证明尚未实现的书籍、词汇、文件、处理任务及复习隔离。手机为浏览器390×844模拟视口,非真机触摸划词。未部署公网、未执行破坏性回退、未完成#3~#15。

开发入口:http://127.0.0.1:5173(学习端)、http://127.0.0.1:5174(管理端),API8000;当前本机服务保留供验收。admin的初始密码请从本机.env.local读取,不在工单中传递;其他环境自行初始化。

提交:2c8e9b3ca02f88a8d6499de7dd3e49271bec9af2;PR:#17。已推送分支并核对远端。Wiki主源更新后回读并同步到同一提交;分支保持待审,未合并main。确认人/确认时间:待用户验收;#2保持打开,#16子项不勾完成。

Wiki revisions:

  • Home:5ff3348f14ba1ffa810be3996b9340526a689529
  • Project-Profile:80cd91be7e64552b0205f45c59a2234934760b0e
  • Architecture-and-Code-Map:51d40a6d4f7d0bcc0882bcd7d9c544aae964afa8
  • Business-Rules-and-Glossary:3f2294d5f038cc6f3c3e707a44f528c697c01b38
  • Local-Development-and-Verification:a0c03d3474ef610a4c842298db8c3df2f91054c7
  • Troubleshooting:139b4b3c61a26143577a8450a6abf53965737534
  • Product-Requirements-Overview:e506edcf2487b3d0faf035bf0a6826332bccd994
  • Workload-Estimate:de8fcf81b07bd7e96df1c68e5a63914139c62b6c
## #2 已实现,待用户验收 交付:学习端/管理端用户名+密码登录;管理员创建、启停、重置学习账号;学习者访问本人英语空空间;可撤销的8小时会话、401/退出/账号切换清理与迟到响应隔离。后端复用固定 go-admin 选用模型,管理端复用固定 go-admin-ui 布局/表格/组件;来源清单和MIT许可均保留,原始源工作区无改动。 实际环境:MySQL 8.4.3(本机3308),专用 lexgo_dev/lexgo_test_issue2;Go1.26.5、Node22.22.1、pnpm9.15.1。只新增项目库及虚构账号,没有改其他库。凭据和浏览器测试口令在忽略的本机配置,提交候选文件逐项检查无实际凭据。 ### 验证证据 - 后端先观察无登录路由/无迁移的失败测试,再实现;真实MySQL完整验证通过。6个顶层测试含4个迁移拒绝子例,覆盖A/B归属、禁止客户端角色/身份覆盖、并发重复账号、退出/禁用/重置/到期失效、部分迁移失败重试和bootstrap不覆盖。`python scripts/server.py test-integration`、`build` 及 `go vet ./...` 通过。 - 管理端17项Node测试、lint、生产构建通过;学习端9项Vitest、2项Playwright模拟API用例、类型检查和构建通过。两端依赖锁定,首次安装成功;生产构建仍有原Sass弃用/vendor体积警告。 - 主代理真实浏览器:管理员登录→创建learner_a/learner_b→学习端A登录→退出切B→管理员停用B→学习端刷新显示登录失效→恢复B;另一个管理页使用learner_a登录显示无管理权限。手机检查实际DOM为390×844,scrollWidth=clientWidth=390;窗口已恢复。截图检查管理端账号表和手机登录正常。 - 规格/质量审查发现并修复迁移误认领空marker/负版本,以及管理端HTTP503注销误报成功;均有失败→通过回归。最终复核无剩余阻断项。 - `sync --verify` 全部20页与严格检查通过,治理测试56项通过,Git staged diff检查通过。 ### 边界与交付 此基础仅证明账号/空空间授权,不证明尚未实现的书籍、词汇、文件、处理任务及复习隔离。手机为浏览器390×844模拟视口,非真机触摸划词。未部署公网、未执行破坏性回退、未完成#3~#15。 开发入口:http://127.0.0.1:5173(学习端)、http://127.0.0.1:5174(管理端),API8000;当前本机服务保留供验收。admin的初始密码请从本机.env.local读取,不在工单中传递;其他环境自行初始化。 提交:2c8e9b3ca02f88a8d6499de7dd3e49271bec9af2;PR:https://git.ilapage.cn/OPC/lexgo/pulls/17。已推送分支并核对远端。Wiki主源更新后回读并同步到同一提交;分支保持待审,未合并main。确认人/确认时间:待用户验收;#2保持打开,#16子项不勾完成。 Wiki revisions: - Home:`5ff3348f14ba1ffa810be3996b9340526a689529` - Project-Profile:`80cd91be7e64552b0205f45c59a2234934760b0e` - Architecture-and-Code-Map:`51d40a6d4f7d0bcc0882bcd7d9c544aae964afa8` - Business-Rules-and-Glossary:`3f2294d5f038cc6f3c3e707a44f528c697c01b38` - Local-Development-and-Verification:`a0c03d3474ef610a4c842298db8c3df2f91054c7` - Troubleshooting:`139b4b3c61a26143577a8450a6abf53965737534` - Product-Requirements-Overview:`e506edcf2487b3d0faf035bf0a6826332bccd994` - Workload-Estimate:`de8fcf81b07bd7e96df1c68e5a63914139c62b6c`
Author
Owner

按用户要求,在 D:/supervisord/supervisord.conf 新增 lexgo-learner(5173)、lexgo-admin(5174)开发启动实例,配置自动启动、异常重启和独立日志,已交接原手动进程。后端仍按原方式运行于 8000。

验证:两个实例均 Running,进程父级均为现有 supervisor;两端首页均 HTTP 200,/api/v1/me 均返回预期 401;已有 9 个实例状态及 PID 不变。管理端 pnpm --version 自动切换卡住的问题通过实例环境变量 npm_config_manage_package_manager_versions=false 解决,没有改动全局设置。

Local-Development-and-Verification、Troubleshooting 已更新并回读,20 页 Wiki 镜像 sync --verify 通过。文档提交 d7b6c6d609 已推送到 PR #17。此操作是本机开发服务托管,未验证 Windows 开机启动,也不代表生产部署交付;#2 继续待用户验收。Gitea MCP 仍指向其他站点,本次沿用目标站点 API。

按用户要求,在 D:/supervisord/supervisord.conf 新增 lexgo-learner(5173)、lexgo-admin(5174)开发启动实例,配置自动启动、异常重启和独立日志,已交接原手动进程。后端仍按原方式运行于 8000。 验证:两个实例均 Running,进程父级均为现有 supervisor;两端首页均 HTTP 200,/api/v1/me 均返回预期 401;已有 9 个实例状态及 PID 不变。管理端 pnpm --version 自动切换卡住的问题通过实例环境变量 npm_config_manage_package_manager_versions=false 解决,没有改动全局设置。 Local-Development-and-Verification、Troubleshooting 已更新并回读,20 页 Wiki 镜像 sync --verify 通过。文档提交 d7b6c6d6092ed9923322a31f626ab7735af091df 已推送到 PR #17。此操作是本机开发服务托管,未验证 Windows 开机启动,也不代表生产部署交付;#2 继续待用户验收。Gitea MCP 仍指向其他站点,本次沿用目标站点 API。
Author
Owner

用户明确要求更新本机 admin 和 dev 的登录凭据(不在工单记录密码)。现有登录复用了创建账号的 10 字节下限,需拆开:登录接受非空且不超过 72 字节的密码以验证已有哈希;创建/常规重置继续要求 10~72 字节。只对本机 lexgo_dev 的两个指定账号执行管理员维护,dev 不存在则创建普通学习账号及独立英语空间,修改密码与撤销该账号会话同一事务完成。先补真实 MySQL 回归测试,再构建并重启 lexgo-api,验证两端登录、权限和旧会话失效。更新业务规则及本地开发 Wiki。沿用目标站点 API,原因仍为 MCP 指向其他站点。

用户明确要求更新本机 admin 和 dev 的登录凭据(不在工单记录密码)。现有登录复用了创建账号的 10 字节下限,需拆开:登录接受非空且不超过 72 字节的密码以验证已有哈希;创建/常规重置继续要求 10~72 字节。只对本机 lexgo_dev 的两个指定账号执行管理员维护,dev 不存在则创建普通学习账号及独立英语空间,修改密码与撤销该账号会话同一事务完成。先补真实 MySQL 回归测试,再构建并重启 lexgo-api,验证两端登录、权限和旧会话失效。更新业务规则及本地开发 Wiki。沿用目标站点 API,原因仍为 MCP 指向其他站点。
Author
Owner

已完成用户指定的本机账号维护:更新 admin 密码,创建普通学习账号 dev 与独立英语空间,密码哈希更新和旧会话撤销在同一事务内完成;其他学习账号未改动。密码仅保存在本机忽略配置,未写入代码、Git、Wiki 或工单。

登录已与新密码规则分开:已有非空且不超过 72 字节的密码可进入 bcrypt 验证;创建、bootstrap、常规重置仍要求 10~72 字节。新增 MySQL 集成测试先复现登录 400,再验证修复后成功,错误短密码 401,创建/重置短密码 400。全部后端集成测试与构建通过。

supervisor 重启后,两端指定账号真实登录成功;dev 的英语空间归属正确且管理接口返回 403,退出后 token 返回 401;三个 LexGo 实例均 Running。业务规则及本地开发 Wiki 已回读,20 页镜像 sync --verify 通过。提交:722ae152ca184385dc717cde3bb8b76dc7ba786b。#2 仍待用户验收,未合并 PR。

已完成用户指定的本机账号维护:更新 admin 密码,创建普通学习账号 dev 与独立英语空间,密码哈希更新和旧会话撤销在同一事务内完成;其他学习账号未改动。密码仅保存在本机忽略配置,未写入代码、Git、Wiki 或工单。 登录已与新密码规则分开:已有非空且不超过 72 字节的密码可进入 bcrypt 验证;创建、bootstrap、常规重置仍要求 10~72 字节。新增 MySQL 集成测试先复现登录 400,再验证修复后成功,错误短密码 401,创建/重置短密码 400。全部后端集成测试与构建通过。 supervisor 重启后,两端指定账号真实登录成功;dev 的英语空间归属正确且管理接口返回 403,退出后 token 返回 401;三个 LexGo 实例均 Running。业务规则及本地开发 Wiki 已回读,20 页镜像 sync --verify 通过。提交:722ae152ca184385dc717cde3bb8b76dc7ba786b。#2 仍待用户验收,未合并 PR。
Author
Owner

User approved: admin-created learner accounts accept passwords of 6-72 UTF-8 bytes. Update frontend validation/hint and POST /accounts backend validation, test 5-byte rejection and 6-byte creation/login. Existing reset/bootstrap policy remains 10-72 bytes; login still verifies stored credentials. Update Wiki and rebuild/restart lexgo-api. Target Gitea API fallback remains necessary because MCP points to another site.

User approved: admin-created learner accounts accept passwords of 6-72 UTF-8 bytes. Update frontend validation/hint and POST /accounts backend validation, test 5-byte rejection and 6-byte creation/login. Existing reset/bootstrap policy remains 10-72 bytes; login still verifies stored credentials. Update Wiki and rebuild/restart lexgo-api. Target Gitea API fallback remains necessary because MCP points to another site.
Author
Owner

管理端新增学习账号密码规则已改为 6~72 UTF-8 字节,页面提示及 POST /accounts 同步;重置密码和 bootstrap 仍为 10~72 字节。前后端测试先复现 6 字节被拒绝,再验证 5/73 字节拒绝、6/72 字节及多字节字符创建成功,新账号可登录。管理端 18 项测试、lint、生产构建、后端集成测试与构建均通过。lexgo-api 已重启,三个实例 Running、管理首页与 API 健康检查 200。业务规则、本地开发 Wiki 已回读,20 页 sync --verify 通过。提交 b7768c10dedee22bfc91b776ceb44346d378667a;#2 继续待用户验收。

管理端新增学习账号密码规则已改为 6~72 UTF-8 字节,页面提示及 POST /accounts 同步;重置密码和 bootstrap 仍为 10~72 字节。前后端测试先复现 6 字节被拒绝,再验证 5/73 字节拒绝、6/72 字节及多字节字符创建成功,新账号可登录。管理端 18 项测试、lint、生产构建、后端集成测试与构建均通过。lexgo-api 已重启,三个实例 Running、管理首页与 API 健康检查 200。业务规则、本地开发 Wiki 已回读,20 页 sync --verify 通过。提交 b7768c10dedee22bfc91b776ceb44346d378667a;#2 继续待用户验收。
Author
Owner

用户确认重置密码最小长度也改为 6。统一新增与重置的前后端校验及提示为 6~72 UTF-8 字节,bootstrap 保持原规则。已补充并观察失败的回归测试:6 字节重置应成功、5/73 字节拒绝、新密码可登录且旧密码/会话失效。测试通过后更新 supervisor 后端和 Wiki;不修改现有用户密码。沿用目标站点 API(MCP 指向其他站点)。

用户确认重置密码最小长度也改为 6。统一新增与重置的前后端校验及提示为 6~72 UTF-8 字节,bootstrap 保持原规则。已补充并观察失败的回归测试:6 字节重置应成功、5/73 字节拒绝、新密码可登录且旧密码/会话失效。测试通过后更新 supervisor 后端和 Wiki;不修改现有用户密码。沿用目标站点 API(MCP 指向其他站点)。
Author
Owner

已按用户确认将重置密码同步为 6~72 UTF-8 字节,新增与重置共用前后端校验,页面提示一致。现有用户密码不变,bootstrap 保留 10 字节下限。新增重置回归断言先失败再通过:5/73 字节拒绝,6/72 字节及多字节密码可重置并登录,旧密码和全部旧会话失效。管理端 18 项测试、lint、生产构建、完整 MySQL 集成测试及后端构建通过。supervisor 后端已重启,三个实例 Running;API 健康及管理首页 200。Wiki 两页已更新回读,20 页 sync --verify 通过。提交 1e77f1026b0b11d5d4dbc967532f793fbfbb784b;PR #17 未合并,#2 仍待用户验收。

已按用户确认将重置密码同步为 6~72 UTF-8 字节,新增与重置共用前后端校验,页面提示一致。现有用户密码不变,bootstrap 保留 10 字节下限。新增重置回归断言先失败再通过:5/73 字节拒绝,6/72 字节及多字节密码可重置并登录,旧密码和全部旧会话失效。管理端 18 项测试、lint、生产构建、完整 MySQL 集成测试及后端构建通过。supervisor 后端已重启,三个实例 Running;API 健康及管理首页 200。Wiki 两页已更新回读,20 页 sync --verify 通过。提交 1e77f1026b0b11d5d4dbc967532f793fbfbb784b;PR #17 未合并,#2 仍待用户验收。
Author
Owner

人工验收通过

2026-09-10T20:18:28+08:00

用户在当前会话确认:“#2通过验收”。据此关闭 #2,同步 #16 完成标记。

实现与测试证据见评论 7574,提交 1e77f1026b0b11d5d4dbc967532f793fbfbb784b。本次未重新运行测试。

PR #17 仍未合并,未发布生产。

Gitea MCP 指向其他站点,本次回退使用目标 git.ilapage.cn API。

## 人工验收通过 2026-09-10T20:18:28+08:00 用户在当前会话确认:“#2通过验收”。据此关闭 #2,同步 #16 完成标记。 实现与测试证据见评论 7574,提交 `1e77f1026b0b11d5d4dbc967532f793fbfbb784b`。本次未重新运行测试。 PR #17 仍未合并,未发布生产。 Gitea MCP 指向其他站点,本次回退使用目标 git.ilapage.cn API。
ila closed this issue 2026-09-10 20:18:32 +08:00
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/lexgo#2