后端先观察无登录路由/无迁移的失败测试,再实现;真实MySQL完整验证通过。6个顶层测试含4个迁移拒绝子例,覆盖A/B归属、禁止客户端角色/身份覆盖、并发重复账号、退出/禁用/重置/到期失效、部分迁移失败重试和bootstrap不覆盖。python scripts/server.py test-integration、build 及 go vet ./... 通过。
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.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
来源与目标
2026-09-10 用户确认 F01–F12、原型通过,并要求按四阶段建议推进。原型验收:#1 评论 7498。阶段 1;覆盖 B01–B02、F12 登录基础。
在 LexGo 中接入固定版本 go-admin/go-admin-ui,并创建独立学习端。管理员创建两个学习账号,两人可登录、退出并访问各自空间,形成双前端—Go—MySQL 8 的首条真实路径。
验收标准
依赖与执行
前置:无;原型 #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 回退;凭据仅进入进程。
工程基础只读预检(尚未安装或构建):本机 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 中虚构邮箱样例不是实现要求;登录标签、占位、校验和自动化用例均需使用普通用户名,管理员创建账号同样无需邮箱。
本次仅完成预检;账号、会话失效、接口与数据库契约及产品实现仍待执行,不记作本单验收通过。
开始执行 #2:账号与独立空间基础
用户已提供本机 MySQL 8 连接并要求继续。只读核验服务端为 8.4.3,尚无 lexgo 前缀数据库;将在项目专用 lexgo_dev 和 lexgo_test_issue2 中工作,不改其他库。凭据不进入本工单。分支 feat/2-account-foundation。
实施设计:
计划顺序:固定可用工具链/数据契约 → 后端失败测试与实现 → 两端接入 → MySQL 集成与浏览器验证 → Wiki/镜像/提交/PR 和工单证据。技能要求使用子代理时按目录分工两端,后端和集成由主代理处理。当前状态进行中;完成后待用户验收,不自动关闭。
延续目标站点 API 回退原因:现有 Gitea MCP 指向其他站点。
#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。只新增项目库及虚构账号,没有改其他库。凭据和浏览器测试口令在忽略的本机配置,提交候选文件逐项检查无实际凭据。
验证证据
python scripts/server.py test-integration、build及go vet ./...通过。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:
5ff3348f14ba1ffa810be3996b9340526a68952980cd91be7e64552b0205f45c59a2234934760b0e51d40a6d4f7d0bcc0882bcd7d9c544aae964afa83f2294d5f038cc6f3c3e707a44f528c697c01b38a0c03d3474ef610a4c842298db8c3df2f91054c7139b4b3c61a26143577a8450a6abf53965737534e506edcf2487b3d0faf035bf0a6826332bccd994de8fcf81b07bd7e96df1c68e5a63914139c62b6c按用户要求,在 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。用户明确要求更新本机 admin 和 dev 的登录凭据(不在工单记录密码)。现有登录复用了创建账号的 10 字节下限,需拆开:登录接受非空且不超过 72 字节的密码以验证已有哈希;创建/常规重置继续要求 10~72 字节。只对本机 lexgo_dev 的两个指定账号执行管理员维护,dev 不存在则创建普通学习账号及独立英语空间,修改密码与撤销该账号会话同一事务完成。先补真实 MySQL 回归测试,再构建并重启 lexgo-api,验证两端登录、权限和旧会话失效。更新业务规则及本地开发 Wiki。沿用目标站点 API,原因仍为 MCP 指向其他站点。
已完成用户指定的本机账号维护:更新 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。
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.
管理端新增学习账号密码规则已改为 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。统一新增与重置的前后端校验及提示为 6~72 UTF-8 字节,bootstrap 保持原规则。已补充并观察失败的回归测试:6 字节重置应成功、5/73 字节拒绝、新密码可登录且旧密码/会话失效。测试通过后更新 supervisor 后端和 Wiki;不修改现有用户密码。沿用目标站点 API(MCP 指向其他站点)。
已按用户确认将重置密码同步为 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 仍待用户验收。
人工验收通过
2026-09-10T20:18:28+08:00
用户在当前会话确认:“#2通过验收”。据此关闭 #2,同步 #16 完成标记。
实现与测试证据见评论 7574,提交
1e77f1026b0b11d5d4dbc967532f793fbfbb784b。本次未重新运行测试。PR #17 仍未合并,未发布生产。
Gitea MCP 指向其他站点,本次回退使用目标 git.ilapage.cn API。