Commit Graph
90 Commits
Author SHA1 Message Date
ila a412e000c0 docs: 记录英汉词典与规范音标的架构、规则与验证 (#40) 2026-09-16 13:27:17 +08:00
ila b1b2e6c6fe feat: 英汉词典与规范音标、多词典并存 (#40)
- ECDICT 常用子集(82,721 条,含中文释义)与 CMUdict ARPAbet→IPA 转写音标,
  由 scripts/dict_prepare.py 从 sha256 pin 的源显式准备,运行时不联网。
- schema v12:放开 lexgo_dictionaries 单行约束并增加 provider 列,英英与英汉词典
  可分别启用;查词合并时中文释义在前、英英释义随后。
- 音标只取可验证来源:优先 CMUdict 转写,否则保留 ECDICT 记法并标注来源,
  两者都不可靠时不显示;含 ^ 等丢失首音的记法整条丢弃。
- 屈折形经 WordNet lemma 解析后回查中文词典,但不把词目音标复制到屈折形上。
- 管理端可区分两种词典并分别启停;学习端查词面板显示音标与中文释义。
2026-09-16 13:17:26 +08:00
ila c293a41714 docs: record issue 37 acceptance and merge (#37)
- #37 已由用户验收;PR #38 已 fast-forward-only 合入 main,merge commit 728f7d6
- Wiki:Architecture 与 Product-Requirements 标记 #37 已验收,Local-Development 追加验收后
  最终状态(schema v11、未实现的两项作者显示),Home 替换为已验收文案,Project-Profile
  追加当前工程状态
- README 与项目档案记录最终 schema 版本、作者语义、未实现项与对话框样式教训
- docs/ 由 harness.py sync 导出,revision:Architecture 3cf18f98、Product-Requirements daf31e0d、
  Local-Development 7c41d62a、Home 3af7d779、Project-Profile 39adde48
2026-09-16 10:26:38 +08:00
ila 728f7d6c1e feat: 书籍页精简封面、可编辑书名与作者、标题旁显示作者 (#37)
- schema v11:lexgo_books 增加 author VARCHAR(120) NOT NULL DEFAULT '',复用 v10 的条件加列
  助手(改名 addAuthorColumn,表名取自本文件常量),保持迁移可重放;新建库 v3 语句也带该列
- PATCH /api/v1/books/:id 接受可选 author(省略保留、空串清空、trim、≤120),BookSummary 与
  BookRef 返回它;「编辑书名」改为「编辑书籍」,对话框同行编辑书名与作者
- 书籍页封面压成一行紧凑控件(预览+上传/替换/移除),去掉「封面」「书籍封面」规格与
  「音频与插图按章节设置」等文字,把高度让给章节列表;书名右侧显示书级作者(未设置不显示)
- 测试:Go 91 项(新增书级作者往返与 v10→v11 迁移用例)、学习端 157 单测与 26 项 E2E
- 真实链路:封面行高 68px、删掉的四段文字不再出现、作者显示在书名同一行右侧且刷新后保留
- 文档:Architecture / Business-Rules / Local-Development / Requirements / Home 同步
2026-09-15 23:10:36 +08:00
ila 3fe9bcb058 feat: 章节增加可选作者字段,编辑对话框更紧凑 (#37)
- schema v10:lexgo_chapters 增加 author VARCHAR(120) NOT NULL DEFAULT '';由 Go 条件步骤
  addChapterAuthorColumn(先查 information_schema 再 ALTER)在语句列表之后执行,保持
  「部分迁移可重试 / 回退标记后可重新升级」,新建库的 v3 语句也带该列
- 章节编辑接受 author(可选、trim、≤120 字符、空串清空),仅改作者不重新处理章节;
  ChapterSummary 与 ChapterSource 都返回它,阅读页在标题下显示非空作者
- 对话框:标题与作者改成「标签在左、输入框在右」的同行排版,正文编辑框加高到 18 行,
  插图与音频压缩为各一两行(规格写在下方),时机说明合并为一行
- 测试:Go 89 项(新增作者往返与 v9→v10 迁移用例)、学习端 157 单测与 26 项 E2E
- 真实链路:标签同行偏差 <8px、正文高度 415px、保存作者后阅读页显示、清空后消失
- 文档:Architecture / Business-Rules / Local-Development / Requirements / Home 同步
2026-09-15 22:49:56 +08:00
ila c22f9c3f06 fix: 导入 Element Plus 对话框与确认框样式,弹窗不再是文档流块 (#37)
- main.ts 补上 dialog 与 message-box 的样式导入:自 #10 起 ElDialog/ElMessageBox 一直
  缺少样式,退化成列表后面的普通块(用户报告「编辑区显示在章节列表下面」)
- 新增 e2e/overlay.ts:expectModalOverlay / expectMessageBoxOverlay 断言弹窗位于
  .el-overlay(position: fixed)、在视口内且横向不溢出
- attachments.spec.ts(章节编辑对话框、插图弹窗)与 edit.spec.ts(书名对话框、删除确认)
  都改用该断言,堵住「只看可见性、不看是否浮层」的验证盲区
- 真实链路确认:对话框遮罩为 rgba(0,0,0,0.5)、居中于视口;确认框同样为固定浮层
- 文档:Local-Development 记录缺陷、根因、修复与新增回归断言
2026-09-15 22:22:50 +08:00
ila 771c3df976 feat: 章节附件并入章节编辑对话框 (#37)
- 章节列表每行只保留「编辑」;移除「附件」按钮与独立的附件对话框
- 章节编辑对话框同时编辑标题、正文、本章插图与本章音频,并明确写出生效时机:
  标题与正文点「保存章节」后生效,插图与音频在选中文件后立即上传、取消不撤销
- 无插图/音频的章节仍显示「未设置」,后端口与 schema 无变化(仍 v9)
- 测试:157 单测与 26 项 E2E 通过(新断言:章节行只有一个按钮、对话框含四类控件与时机说明、
  对话框内上传后仍可用保存按钮提交文本);真实链路确认按钮数为 1、上传即时生效、取消后阅读页正常
- 文档:Architecture / Business-Rules / Local-Development / Requirements / Home 同步
2026-09-15 22:14:21 +08:00
ila 3ab26afe4a feat: 章节插图改为阅读页缩略图与弹窗看原图 (#37)
- 书籍页章节列表去掉插图列,并不再为列表预取图片(省掉每章一次请求)
- 阅读页把插图换成高 120px 的缩略图按钮(可 Tab、回车/Space 打开),点击后在对话框里
  按原图显示(最大 min(88vw,1200px) × 78vh,保持比例),Esc 关闭后正文位置不变
- 无插图的章节仍不显示占位;后端与 schema 无变化(仍 v9)
- 测试:157 单测与 26 项 E2E 通过(新断言:列表无 <img> 且不请求 /illustration、缩略图是按钮、
  弹窗内为对象 URL 图片);真实链路验证列表无图、缩略图 ≤130px、弹窗原图 naturalWidth>0
- 文档:Architecture / Business-Rules / Local-Development / Requirements / Home 同步修订
2026-09-15 21:36:00 +08:00
ila 0fd661e061 feat: 音频与插图改为章节级,封面维持书级 (#37)
- schema v9:lexgo_chapter_attachments(chapter_id+kind 唯一,MEDIUMBLOB)与
  lexgo_chapter_playback_positions(owner_id+chapter_id),并用幂等语句清空书级音频历史行
- 书级音频与播放位置接口下线(路由不再注册);封面仍是书级且行为不变
- 章节级接口:POST/DELETE/GET /chapters/:id/{audio,illustration}、PUT /chapters/:id/playback;
  章节列表与阅读器响应带 illustrationVersion/audioVersion/playbackSeconds(始终存在)
- 复用 #21 的类型嗅探、尺寸校验、ServeContent Range/ETag 包装与“先校验后写入”流程
- 学习端:封面区块收窄、章节行新增缩略图与「附件」入口、独立的章节附件对话框、
  阅读页正文上方插图与章级播放器(audioChapterId 防止复用上一章音频)、切换章节上报位置
- 测试:Go 87 项(含 v8→v9 迁移与回退、书级接口已下线、章级附件集成)、学习端 157 单测与
  26 项 E2E、真实 API 52 项、#15 恢复演练第三次 22 项
- 文档:Architecture / Business-Rules / Local-Development / Requirements / Home /
  Deployment 改为章级口径
2026-09-15 21:08:43 +08:00
ila 8a25b7be8b docs: record issue 15 and 21 acceptance and merge (#15, #21)
- 两个 PR 已按顺序 fast-forward-only 合入 main:#35(#15 自托管交付)、#36(#21 附件)
- Wiki:Architecture 合并重复的 #15 段落并标记 #15/#21 已验收,Requirements 与 Home 同步,
  Project-Profile 追加当前工程状态
- README 反映验收结果,并记录章级音频与插图的新工单
- docs/ 由 harness.py sync 导出,revision:Architecture 08472d2c、Product-Requirements 2d656357、
  Home eef77f39、Project-Profile 2599afbb
2026-09-15 20:25:44 +08:00
ila ab23ff60e5 feat: 书籍封面与音频附件、播放器与播放位置 (#21)
- schema v8:lexgo_book_attachments(按 book_id+kind 唯一,bytes MEDIUMBLOB)与
  lexgo_playback_positions(owner_id+book_id 主键),只用可重放 DDL,外键级联删书
- 后端:按文件头 magic bytes 判定类型(MP3 / JPG / PNG / WebP,含 WebP 维度解析),
  音频 ≤20 MiB、封面 ≤2 MiB 且 ≤4096²;上传/替换/移除;binaryResponse 交给
  http.ServeContent 提供 Range 206、416、ETag 与 304;播放位置 upsert,替换音频时重置
- 学习端:带凭据的 fetch + 对象 URL(令牌不进 URL),书库封面、书籍页「音频与封面」
  区块、阅读页常驻播放器(播放/暂停、进度、0.75–1.5 倍速、错误重试、位置上报)
- 测试:Go 86 项(新增附件单测/集成与 v7→v8 迁移)、学习端 157 单测与 26 项 E2E
- 顺带修掉 e2e/phrase.spec.ts 的偶发失败:重试条件改为断言期望词数、重读坐标、关面板后重试
- 文档:Architecture / Business-Rules / Local-Development / Requirements / Home /
  Deployment-and-Operations(备份范围含附件与体积提示)
2026-09-15 18:39:56 +08:00
ila dde2ac127a docs: 同步 #15 交付页与本地开发页镜像 (#15)
docs/04 与线上 Wiki 的纯二进制安装与交叉验证记录保持一致,revision fa4c663fabf5db418104fc53b7ce00f41f5ba910。
2026-09-15 17:12:02 +08:00
ila 420365fc6b feat: 备份、恢复与校验提供 Go 子命令,交付支持纯二进制安装 (#15)
- server/cmd/lexgo 增加 backup / restore / verify 子命令,与既有 migrate/bootstrap/serve
  同一入口;备份仍调用 mysqldump,dump 与 manifest 格式和工具通道完全一致、可互相读取
- server/app/lexgo/ops.go:manifest、库名校验、版本解析、dump 库名切换检测、表行数与
  内容校验和、目标库准备、恢复前后源库校验、完整性校验(客户不选 schema,SQL 显式限定库名)
- ops_test.go:7 项无库规则测试与 1 项 MySQL 备份→恢复→校验集成用例
- 部署页补充纯二进制路径(lexgo migrate/bootstrap/backup/restore/verify)、两条通道的关系
  与「接口级两账号闭环仍在工具通道」的边界;Architecture/LocalDev/Home/README/AGENTS 同步
- gofmt 修正 #13 遗留的 library.go 字段对齐
2026-09-15 17:11:26 +08:00
ila 38d8975325 feat: 自托管交付的安装、备份与恢复工具及部署文档 (#15)
- scripts/ops.py:install-check(依赖与资源版本、客户端不得低于服务端)、init-database(建空库
  并提示最小权限)、backup(全库 dump + manifest,不含凭据)、restore(默认只写空库、
  --confirm 必需、覆盖需 --force、拒绝系统库与带 CREATE DATABASE/USE 的 dump、比对源库校验和)、
  verify(完整性 + 可选两账号接口闭环)、smoke(干净实例上建两个演练账号走通学习闭环)
- scripts/bench.py:写明规模的人造数据集性能测量,记录数据量、机器与 p50/p95
- tests/test_lexgo_ops.py:版本解析、库名白名单、dump 安全性、manifest 字段白名单等无库测试
- Wiki 新增 Deployment-and-Operations 页面与 wiki-docs.json 映射(含升级回滚与已知限制)
- 更新 Architecture、Business-Rules、Local-Development、Product-Requirements、Home 与
  README/AGENTS;本单无 schema 与接口变化
2026-09-15 16:30:23 +08:00
ila bdb38970e0 docs: 新增部署与运维页面映射 (#15)
从 docs/templates/deployment.md 建立 Deployment-and-Operations 页面映射,由 harness.py sync 导出核心镜像。
2026-09-15 16:27:36 +08:00
ila 20e13e909b docs: record issue 14 acceptance and merge (#14)
- Wiki:Home、Architecture、Product-Requirements 与 Project-Profile 标记 #14 已验收并合入 main
- README 同步当前进度,剩余 #15、#21、#24 与缺陷 #32
- docs/ 由 harness.py sync 导出,revision:Architecture b61d9e1b、Home 9f648520、
  Product-Requirements 358d7720、Project-Profile 5cf8e02e
2026-09-15 15:45:09 +08:00
ila e069894c4e feat: 补齐桌面与手机体验、显示偏好与键盘操作 (#14)
- 主题(浅色/深色/跟随系统)与正文字号(标准/大/特大)按账号存在本机,
  账号切换不串、退出回默认;深色走 html[data-theme] 与 Element Plus 的 html.dark
- style.css 收敛为语义调色板::root 的 53 个变量是文件内仅有的颜色字面量,
  其余规则全部走 var(),暗色只覆盖变量
- 字号经 --reader-font-scale 只作用于阅读面,不做全局缩放
- 阅读位置按账号+章节保存滚动比例与该章 content_sha256,正文换版本后不恢复
- 复习页键盘:空格/Enter 显示答案、1/2/3 评分;输入控件与聚焦按钮的按键不被劫持
- 站点头部新增「显示」控件,七个学习页面共用
- Playwright 新增 390×844 hasTouch 的 mobile 项目与移动用例(无溢出、可返回、
  触摸滑动不误开面板、深色与字号持久化、账号隔离);新增主题变量回归用例
- Wiki 记录 Architecture、Business-Rules、Local-Development 与需求更新
2026-09-15 15:11:30 +08:00
ila 5f86f17ac4 docs: record issue 13 acceptance and merge (#13)
- Wiki:Home、Architecture、Product-Requirements 与 Project-Profile 标记 #13 已验收并合入 main
- README 同步当前进度,剩余工作为 #14、#15、#21、#24 与缺陷 #32
- docs/ 由 harness.py sync 导出,revision:Architecture 2cfb6d79、Home d40a8f10、
  Product-Requirements f1f5f972、Project-Profile 0c035449
2026-09-15 14:31:18 +08:00
ila a9952b3516 feat: 完成章节并查看个人基础进度 (#13)
- schema v7 新增 lexgo_chapter_progress(chapter_id 主键、read_sha256 内容版本门控、
  外键级联到章节/书籍/账号),仍然只用可重放的 CREATE TABLE IF NOT EXISTS
- POST /api/v1/chapters/:id/complete:只记已读、不改词语状态;只有 ready 章节可标记;
  重复调用返回同一行并带 duplicate,不移动已读时间也不重复计数;正文新版本后该章
  回到未读但保留记录,重新标记更新同一行
- GET /api/v1/progress:已读/可阅读章节、已知/学习中/新词/忽略、已保存词条、待复习
  与每本书的已读进度;到期数量与复习队列共用 dueTermsQuery 与同一时钟
- ChapterSummary 增加 readAt,书籍列表、阅读器与编辑响应都会解析
- 学习端新增 /progress 页面与导航、stores/progress.ts,阅读器新增显式「标记本章已读」
  区块,书籍页显示已读标记
- Wiki 记录 Architecture、Business-Rules、Local-Development 与需求更新
2026-09-15 12:31:53 +08:00
ila f2de395cd9 docs: record issue 12 acceptance and merge (#12)
- Wiki:Home、Architecture、Product-Requirements 与 Project-Profile 标记 #12 已验收
- README 与项目档案反映 #12 已通过验收,
2026-09-15 11:52:15 +08:00
ila 000d7e0dbf docs: 记录 #12 已确认的词汇库口径 (#12) 2026-09-14 23:48:25 +08:00
ila 3ebec5b11b feat: 词汇库搜索、筛选与编辑 (#12)
- GET /api/v1/terms 列表:查询键白名单、page/limit 边界(默认 20、上限 100)、
  排序 updated_at DESC;搜索同时匹配身份键、显示原文与个人释义,转小写后比较(term 为
  二进制排序规则),%/_/\ 按字面值转义;status 与 kind 可组合
- PATCH /api/v1/terms/:id 编辑:复用释义/例句与状态/等级校验,身份不可编辑;
  只有状态或等级变化才重排复习时间,历史作答记录与计数保留
- 学习端新增 /vocab 路由与导航、stores/vocabulary.ts、VocabView.vue(搜索、筛选、
  分页、空态与无结果清除、编辑对话框含 1~7 等级选择器、筛选与页码写入 URL)
- 释义/例句/状态/等级抽成 TermFormFields.vue,与阅读器面板共用,避免规则漂移
- Wiki 记录 Architecture、Business-Rules、Local-Development 与需求更新
2026-09-14 23:46:42 +08:00
ila 329ea7336a docs: record issue 11 acceptance and merge (#11)
- Home、Project-Profile、Architecture-and-Code-Map、Product-Requirements-Overview
  记录 #11 于 2026-09-14 通过用户验收,PR #30 已 fast-forward-only 合入 main
- 用户确认的 D3 存储方式(身份键派生 kind/词数、不新增列)随之记入长期文档;
  功能提交 bd77aa0 与审核整改提交 a658fa6 均与用户验收版本一致
2026-09-14 23:00:02 +08:00
ila a658fa6fd1 fix: 按审核结论补强短语实现与测试 (#11)
- adjustRange 改变范围时同时清空短语链接与已加载条目:调整端点后不再声称「已保存」,
  已输入文本保留,保存按当前范围确定的身份写入(可能更新另一条,但绝不重复)
- 新增 TestWordKeysNeverContainSpaces:显式锁定「词片段不含空白」这一不变量,
  termKind/termWordCount 完全依赖它,此前只有间接覆盖
- e2e 断言超时提高到 15s:11 个用例共用开发服务器并行运行时,首屏模块加载可能超过
  默认 5s 造成偶发失败(产品行为未变,连续两次并行全量运行均通过)
2026-09-14 22:47:14 +08:00
ila b1b76cfb7c docs: 记录 #11 已确认的短语口径 (#11) 2026-09-14 22:23:13 +08:00
ila bd77aa0a46 feat: 选择连续短语,保存并加入到期复习 (#11)
- 短语与单词共用 lexgo_terms:身份键为按序规范化词形以空格连接,单词键不含空格,
  因此 kind 与词数由身份键派生,不需要新列或第二套复习逻辑
- POST /api/v1/phrases 由服务端从本人 ready 章节推导词序列与身份,切进单词的范围 400;
  章节 tokens 增加 phrases 区间,队列项增加 kind/wordCount
- 跨章节匹配按连续词形比对,重叠取最左最长;短语高亮覆盖内部单词但不修改单词数据
- 学习端新增 readerRange 纯函数层与 useTextSelection(原生拖选 + 手机手柄,不拦截
  touchmove),面板提供短语标题与按词调整端点的按钮,复习卡把整段短语挖成一个空
- Wiki 记录 Architecture、Business-Rules、Local-Development 与需求更新
2026-09-14 22:21:51 +08:00
ila 1319c56cf8 docs: record issue 10 acceptance and merge (#10)
- Home、Project-Profile、Architecture-and-Code-Map、Product-Requirements-Overview
  记录 #10 于 2026-09-14 通过用户验收,PR #29 已 fast-forward-only 合入 main
- 功能提交 35ed692 与用户验收版本一致;本单没有数据库结构变化,schema 仍为 v6
2026-09-14 21:38:22 +08:00
ila 1d19b2b92f docs: 记录 #10 已确认的编辑与删除口径 (#10) 2026-09-13 23:21:55 +08:00
ila 35ed692c4b feat: 编辑和删除本人书籍与章节 (#10)
- PATCH /books/:id 改名、GET /chapters/:id/source 读取编辑用原文(任意状态)、
  PATCH /chapters/:id 改标题与正文、DELETE /books/:id 与 DELETE /chapters/:id
- 版本门控:任务只在 job.content_sha256 与章节版本一致时才能影响章节;过期版本任务
  被标为 superseded 且完全不触碰章节,认领与恢复扫描跳过并作废它们,重试旧版本任务 409
- 只有正文变化才重新处理:重复保存或改回原内容不新建任务;只改标题不改状态
- 删除在事务内硬删除并沿用外键级联,章节删除后重排序号;个人词条、复习排期与作答记录保留
- 处理中删除章节后,在途任务不再发布也不报错;并发删除同一章由书籍行锁序列化
- 学习端:书名与章节编辑对话框、删除确认弹窗、章节行编辑入口、书库删除提示
- Wiki 记录 Architecture、Business-Rules、Local-Development 与需求更新
2026-09-13 23:20:52 +08:00
ila 65b50d5038 docs: record issue 9 acceptance and merge (#9)
- Home、Project-Profile、Architecture-and-Code-Map、Product-Requirements-Overview
  记录 #9 于 2026-09-13 通过用户验收,PR #28 已 fast-forward-only 合入 main
- 功能提交 61d3f63 与用户验收版本一致;本单没有数据库结构变化,schema 仍为 v6
2026-09-13 22:36:46 +08:00
ila fb256d4916 docs: 记录 #9 已确认的 TXT 导入口径 (#9) 2026-09-11 23:38:38 +08:00
ila 61d3f63c69 feat: 上传 TXT 文件,校验编码后导入本人书库 (#9)
- POST /api/v1/books/upload 与 /api/v1/books/:id/chapters/upload:multipart 上传,
  字段白名单、未知或重复字段拒绝、非 multipart 拒绝、单槽并发门忙时 429
- 只接受 UTF-8(可选 BOM 剥离且不进入原文),UTF-16 按 BOM 识别并给出针对性提示,
  非法字节整体拒绝、不使用替换字符;2 MiB 字节上限之后仍套用单章 100000 码点上限
- 文件只在内存中解码,不创建临时文件;客户端文件名不参与任何路径也不入库
- 解码后交给现有 PasteBook/PasteChapter,分章、任务幂等与崩溃恢复与粘贴完全一致
- 学习端导入页新增「粘贴文本 / TXT 文件」来源切换与客户端预检,session.request 支持 FormData
- gofmt 整理 #8 引入的 import 顺序与空行
- 同步 Architecture-and-Code-Map、Business-Rules-and-Glossary、
  Local-Development-and-Verification、Product-Requirements-Overview 与 Home
2026-09-11 23:37:13 +08:00
ila cd2b893bba docs: record issue 8 acceptance and merge (#8)
- Home、Project-Profile、Architecture-and-Code-Map、Product-Requirements-Overview
  记录 #8 于 2026-09-11 通过用户验收,PR #27 已 fast-forward-only 合入 main
- 功能提交 0328505 与审核整改提交 3258498 均与用户验收版本一致;本次只更新
  验收状态文档与镜像
2026-09-11 22:55:57 +08:00
ila 85b8e24429 docs: 记录 #8 审核整改后的复习口径 (#8) 2026-09-11 22:48:14 +08:00
ila 325849816e fix: 整改 #8 审核问题 R1~R3 (#8)
- R2 并发同键作答:取得词条行锁后加锁复查答案键,stale 插入遇到唯一键冲突转为返回
  已记录结果,不再返回 500;新增两个 goroutine 同键提交的集成用例
- R3 排期:只有新建或状态/等级实际变化才移动 due_at,编辑释义与例句保留原排期,
  逾期词条不会被挤出当天队列
- R3 附带发现:保存未提及等级时保留已获得的等级,阅读器面板不再把 4 级词重置为 1 级
- R1 契约:作答响应 result 只取 applied/stale,另加 duplicate 标记,重放返回首次结果;
  客户端按首次结果计数,本轮只解决卡片而没有新计分时显示完成页而不是空队列
- R4/R5:stale 与重放分别给出角色为 status 的提示,answerId 作用域注释与实现一致
- Wiki 更新 Business-Rules-and-Glossary、Architecture-and-Code-Map、
  Local-Development-and-Verification 并同步镜像
2026-09-11 22:46:23 +08:00
ila ec5ec2db35 docs: 记录 #8 已确认的复习决策口径 (#8) 2026-09-11 20:54:55 +08:00
ila 0328505b77 feat: 完成到期单词复习与幂等答题 (#8)
- schema v6 新增 lexgo_term_reviews 与 lexgo_review_answers:语句都是可重试的加法迁移,
  既有已保存词汇按 created_at 立即进入队列;旧二进制回到 v5 仍可写入个人词条
- 固定间隔表 1/2/4/7/15/30/60 天:答对升级封顶 7、答错降级最低 1、再学一次不改等级,
  答错与再学立即回到本轮;已知与忽略不入队
- GET /api/v1/reviews/queue 与 POST /api/v1/reviews/:termId/answers:按 answerId 去重、
  按 expectedDueAt 判定过期标签页,重复提交与并发都不重复更新次数和间隔
- 学习端新增 /review 路由与到期复习入口,正面挖空例句、答案面评分、完成页与空队列页
- 同步 Architecture-and-Code-Map、Business-Rules-and-Glossary、
  Local-Development-and-Verification、Product-Requirements-Overview 与 Home
2026-09-11 20:54:17 +08:00
ila 527d8af0c4 docs: record issue 7 acceptance and merge (#7)
- Home、Project-Profile、Architecture-and-Code-Map、Product-Requirements-Overview
  记录 #7 于 2026-09-11 通过用户验收,PR #26 已 fast-forward-only 合入 main
- 功能提交 8c0946a 与用户验收版本一致;本次只更新验收状态文档与镜像
2026-09-11 20:29:33 +08:00
ila a5a8c3c72d docs: 记录 #7 已确认的个人词条决策 (#7) 2026-09-11 16:34:54 +08:00
ila 8c0946af9f feat: 保存个人词义与状态,并在其他章节同步显示 (#7)
- schema v5 新增 lexgo_terms:身份为学习者+语言+规范化词形,唯一键保证
  重复保存只更新同一条记录,不产生冲突副本
- POST /api/v1/terms 幂等保存并返回 created,GET /api/v1/terms/:id 仅本人可读,
  章节 tokens 为 word 片段附带 term:{id,status,level}
- 状态与等级边界:新词/学习中/已知/忽略,只有学习中带 1~7 级,其余必须为 0,
  并由数据库检查约束守住
- 学习端面板可编辑释义、例句与学习状态,正文按状态高亮;打开已保存词先读取原内容,
  读取失败时禁用保存,切换账号或退出后清理表单、状态与高亮
- 同步 Architecture-and-Code-Map、Business-Rules-and-Glossary、
  Local-Development-and-Verification、Product-Requirements-Overview 与 Home
2026-09-11 16:32:04 +08:00
ila 33182e584b docs: record issue 6 acceptance and merge (#6) 2026-09-11 14:47:22 +08:00
ila ad31ea4225 feat: Go-only WordNet resources and reader lookup (#6) 2026-09-11 11:59:51 +08:00
ila 8310438bee docs: confirm Go-only NLP implementation scope (#6) 2026-09-11 11:51:18 +08:00
ila b18f9cc4a5 fix: 整改 #5 审核问题 R1~R4 (#5)
R1 追加契约:学习端把新建与追加拆成两个请求体,追加不再发送 language(后端严格
解码会拒绝未知字段,此前真实追加返回 400);补充断言真实请求格式的回归测试。
R2 运行期恢复:启动恢复与运行期清扫合并为一处,worker 每秒把停留超过 15 秒的
processing 任务重新入队,超过 5 次尝试的任务置为 failed(attempts_exhausted);
人工重试重置尝试次数;日志如实区分“已入队”与“等待下一次清扫”。
R3 离页作废在途请求:closeBook/closeChapter 推进请求序号并清理 loading,导入页
在卸载后的成功响应不再触发跳转。
R4 重试自愈:重试被接受后先应用返回的 pending 状态并继续轮询,静默刷新失败不再
让页面停在处理失败。

测试:Go 20 个顶层用例通过(新增 2 项);学习端 38 项通过,其中 7 项在整改前代码
上实际失败;真实联调验证追加可用、被中断任务约 0.5 秒内在运行中自动恢复、重试在
首次刷新失败后自动显示最终结果。

文档:Wiki 先写后回读(架构、业务规则、本地验证),导出核心镜像。
2026-09-11 11:02:32 +08:00
ila a55708cd37 feat: 粘贴英语文本、章节处理与本人阅读 (#5)
schema v3 新增 lexgo_books、lexgo_chapters、lexgo_ingest_jobs;一次粘贴生成一个章节,
原文按收到的字符串逐字保存;处理任务具备持久状态机、启动恢复与 requestId 幂等。
新增书籍/章节/任务 API 一律按认证身份过滤归属,他人编号返回 404,后台任务不使用
客户端用户编号;学习端补齐粘贴导入、书库、章节状态与失败重试、原文阅读与章节切换。

测试:MySQL 集成测试覆盖导入→处理中→就绪→阅读完整路径、失败重试、幂等、越权与
Unicode 原文保真;学习端 Vitest 31 项、Playwright 3 项与构建通过;lexgo_dev 已显式
迁移到 v3,迁移前后既有数据指纹不变。

文档:Wiki 先写后回读(架构、业务规则、本地验证、需求总览、Home),导出核心镜像。
2026-09-11 00:36:23 +08:00
ila ed5da31888 docs: 记录阅读选择验证验收通过 (#4) 2026-09-10 22:52:52 +08:00
ila 8d4a095590 feat: 验证阅读连续选择与范围调整 (#4) 2026-09-10 22:38:44 +08:00
ila 2b6aa90813 docs: 记录英语技术验证验收通过 (#3) 2026-09-10 21:51:21 +08:00
ila b7c976eb75 feat: 验证英语分词、原文定位与离线词典 (#3) 2026-09-10 20:59:18 +08:00
ila 96ac5eb618 docs: 记录日志审计验收通过 (#18) 2026-09-10 20:43:50 +08:00
ila 850c78e2aa feat: 管理端登录日志与操作审计 (#18) 2026-09-10 20:37:46 +08:00
ila 1e77f1026b fix: 重置密码最少六字节并统一账号校验 (#2) 2026-09-10 20:13:38 +08:00
ila b7768c10de fix: 新增学习账号密码最少六字节 (#2) 2026-09-10 20:10:14 +08:00
ila 722ae152ca fix: 登录验证已有密码并保留新密码规则 (#2) 2026-09-10 20:02:49 +08:00
ila cc17d1cce7 docs: 记录 Go 后端 supervisor 托管 (#2) 2026-09-10 19:55:14 +08:00
ila d7b6c6d609 docs: 记录两端 supervisor 启动实例 (#2) 2026-09-10 19:38:14 +08:00
ila 2c8e9b3ca0 feat: 接入两端用户名登录和独立学习空间 (#2) 2026-09-10 17:39:57 +08:00
ila 596543b0e2 docs: 拆分 MVP 四阶段工单并明确用户名登录 (#16) 2026-09-10 17:12:29 +08:00
ila f8260b89ba docs: 校准原型审核状态与验证边界 (#1) 2026-09-10 16:21:29 +08:00
ila 893302c5f8 docs: 确认 MVP 范围并登记 Quant-UX 原型 (#1) 2026-09-10 16:11:38 +08:00
ila ee03bff8b0 docs: confirm multi-user positioning and draft MVP selection catalog 2026-09-10 14:59:20 +08:00
ila 691c93be58 docs: record learner frontend architecture and reuse boundaries 2026-09-10 14:50:37 +08:00
ila be34c402f7 docs: select local go-admin management baseline 2026-09-10 14:39:58 +08:00
ila 20de5e7e4c docs: complete LexGo governance and Windows verification guidance
Validated 20 Wiki pages with sync --verify; all 56 governance tests pass. Product implementation remains pending.
2026-09-10 14:29:24 +08:00
ila ffa81901cf docs: import verified LexGo Wiki baseline
Online sync and strict structure checks pass. Full governance tests identify two documentation gaps; follow-up will add lightweight exemptions and verified Windows shell guidance.
2026-09-10 14:28:41 +08:00
ila 3c161363e1 docs: configure LexGo light governance and preserve research sources 2026-09-10 14:27:28 +08:00
ila ecab899502 docs: 新项目默认采用轻量治理模式 (#33) 2026-09-04 14:14:12 +08:00
ila 8615a4048d docs: 明确人工授权后的执行边界 (#32) 2026-09-04 10:58:14 +08:00
ila 40b99387ad docs: 补充 Windows PowerShell 命令约束 (#28) 2026-09-02 15:21:04 +08:00
ila 90938be380 docs: 统一 Agent 中英文交流规范 (#31) 2026-09-02 15:10:20 +08:00
ila c13f6adb76 docs: 清理轻量治理冲突门禁 (#30) 2026-09-02 10:15:20 +08:00
ila fe795c4367 docs: 增加轻量项目治理模式 (#30) 2026-09-02 10:13:47 +08:00
ila cbdd27d861 perf: 优化 Wiki 镜像增量同步 (#29) 2026-09-02 09:38:09 +08:00
ila 4bbacf4d7f docs: 规范 PowerShell UTF-8 与执行策略 (#28) 2026-08-27 15:01:43 +08:00
ila 0b6ec7675d docs: 记录 #27 验收通过 2026-08-26 16:11:48 +08:00
ila a75a7783dc docs: 明确外部原型仅按需保存快照 (#27) 2026-08-26 16:07:08 +08:00
ila c65e06b7ab docs: 登记线上原型按需导出 (#27) 2026-08-26 16:05:47 +08:00
ila 68cf1f3705 docs: 原型改为线上审核与按需导出 (#27) 2026-08-26 16:03:49 +08:00
ila 19fb64b2ce docs: 记录 #11 #16 #18 #25 #26 验收通过 2026-08-25 10:23:17 +08:00
ila c0b8013aa8 docs: 登记 Gitea 交互优化工单 (#26) 2026-08-25 10:15:00 +08:00
ila 384bf0191b docs: 统一 Gitea MCP 与工单读取规则 (#26) 2026-08-25 10:13:25 +08:00
ila eb2949c969 docs: 登记 #25 迁移边界快照 2026-08-25 08:46:42 +08:00
ila 3b707a0a9a docs: 同步任务事实来源最终措辞 (#25) 2026-08-25 08:41:11 +08:00
ila 5821ea0d08 docs: 精简单人任务事实来源并分级工程基线 (#25) 2026-08-25 08:39:52 +08:00
ilaandClaude Opus 5 3696663781 docs: 需求总览登记服务部署文档 (#24)
#24 验收通过,在当前需求索引增加「服务部署文档」一行并同步核心镜像。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-19 10:06:47 +08:00
ilaandClaude Opus 5 65c20611fa docs: 新增部署文档模板与位置约定 (#24)
新增 Deployment-Template 模板页及镜像,固化 nginx 反代 + supervisor
托管的 Python 服务部署做法;明确部署文档在有无常驻服务两种情况下的
落点,并在新项目初始化加入部署页判定。模板文件纳入 REQUIRED_FILES,
部署实例页不进入 CORE_DOCUMENT_REQUIREMENTS 强制检查。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-19 09:53:33 +08:00
ilaandClaude Opus 5 bfdf648962 docs: 同步命令入口变更的核心 Wiki 镜像 (#23)
Wiki 侧已更新 7 个核心页面的命令入口,本提交只导出对应只读镜像。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-18 21:36:15 +08:00
ilaandClaude Opus 5 bfc0726c33 refactor: 合并 dev_scripts 入口为单一 harness.py (#23)
原有 4 个命令行入口(check_harness、sync_wiki_docs、new_task_archive、
export_task_archives)需要在多处文档分别描述,同步核心镜像还要按顺序跑 3 条命令。

合并为 dev_scripts/harness.py,提供 check / sync / archive / export 四个子命令,
各命令实现逻辑逐字取自原脚本,行为未改变;新增 sync --verify 一次完成
导出 → check --strict → 一致性校验。wiki_docs.py 作为库保持不变。

破坏性变更:4 个旧入口已删除,不保留兼容转发。已采用 DevHarness 的业务项目
升级基线时必须同步修改自己的命令与文档。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-18 21:36:15 +08:00
ilaandClaude Opus 5 65ead42f36 refactor: 项目档案改为按需读取并内联常用命令 (#22)
原规则要求每次任务开始前无条件阅读 docs/00-project-profile.md(约 2100 tokens,
不命中 prompt cache),但实际高频使用的只有常用命令表。

改为:无条件只读任务涉及目录的 AGENTS.md;项目档案按明确触发条件按需读取;
常用命令内联到 AGENTS.md,与项目档案保持一致。项目档案内容未改动。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-18 21:26:29 +08:00
ilaandClaude Opus 5 a59dd1905e chore: 统一文本文件行尾为 LF
Windows/WSL 混用导致 43 个文件出现纯行尾的全量差异(5005 增 / 5005 删,
--ignore-all-space 后为 0),真实改动被淹没;同样的 CRLF 也让 gitea.env
在 bash 中被读成带 \r 的值,导致 token 认证失败。

只新增 .gitattributes 并对已跟踪文件执行 --renormalize,文件内容零变化。
按 AGENTS.md 第 2 节,纯格式化改动免工单。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-18 21:20:32 +08:00