ila
f2fdf405a9
style: 放大章节阅读区与编辑区,使其随窗口宽度自适应
...
阅读区:正文列上限由固定 820px 改为 min(1040px, 92vw);打开查词面板时的容器由 1120px 改为
min(1240px, 96vw),大屏上正文列不再比不开面板时更窄。编辑区:章节编辑对话框由固定 620px 改为
min(1180px, 94vw),正文输入框最小高度改为 62vh(行数仅作初始值),书籍对话框 460px 改为 560px。
新增验证:reading 用例检查 768/1024/1280 三档宽度不横向溢出,并在 1280 下断言正文列宽 > 820px;
edit 用例断言章节对话框宽 > 900px、正文输入框高 > 400px 且不溢出。手机(≤760px)的底部抽屉样式未改动。
测试:学习端 159 单测、26 项 e2e、vue-tsc、build 全部通过。无长期文档影响(仅样式数值)。
2026-09-16 23:33:50 +08:00
ila
42945dec0a
docs: 记录 #32、#40、#42 的验收结果与镜像 ( #32 #40 #42 )
...
- #40 与 #42 已由用户验收;PR #41 与 #43 以 rebase-ff 合入 main,#32 因分支携带仅改镜像的
过程提交改以 squash 合入(f565c1c),三者均未改写分支历史。
- Wiki:Home 的两处"尚未验收"改为已验收文案,Project-Profile 追加三条已确认决策;
会话规则数字、英汉词典与音标规则此前已发布。
- README 与 AGENTS 记录最终 schema v12、音标来源分层、30 天会话代价与 #32 的合并方式。
- docs/ 由 harness.py sync 导出,已通过 sync --check 与 harness check --strict。
2026-09-16 21:51:53 +08:00
ila and ila
f565c1ca26
fix: 编辑回到曾经用过的正文版本复用该版本的任务 ( #32 )
...
编辑正文回到曾经用过的版本时,复用该内容版本已有的处理任务行(按 owner_id + chapter_id + content_sha256 匹配),避免重复插入触发唯一键错误。测试:Go 集成测试 A→B→A→B 全链路通过。
Co-authored-by: QiuSW <ila2002@qq.com >
2026-09-16 21:50:25 +08:00
ila and ila
4e4fb85d2f
fix: 登录有效期由 8 小时改为 30 天 ( #42 )
...
- 有效期提取为具名常量 SessionLifetime(绝对有效期,不滑动续期),学习端与管理端共用
同一登录接口,一处生效;数据库结构与接口字段不变,旧会话按各自 expires_at 自然过渡。
- 过期断言改为按常量计算(临期仍可用、超过后被拒),新增测试锁定 30 天常量、
登录响应与库内 expires_at 一致、库内只存 SHA-256 摘要。
- 撤销规则不变:退出撤销当前会话,改密码/停用/重置撤销该账号全部会话。
- Wiki 已在线上更新(会话规则数字、验证说明、Home/Project-Profile 记录);镜像导出留到
验收时执行,避免把尚未合入的 #40 段落带进本分支。
2026-09-16 21:42:38 +08:00
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
ila and Claude Opus 5
3696663781
docs: 需求总览登记服务部署文档 ( #24 )
...
#24 验收通过,在当前需求索引增加「服务部署文档」一行并同步核心镜像。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-08-19 10:06:47 +08:00
ila and Claude 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
ila and Claude 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
ila and Claude 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
ila and Claude 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
ila and Claude 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