feat/11-phrases
main
#11 实现完成,待用户验收。契约见评论 7893,实施、测试与真实链路见工单最新评论。
本地验证:Go 集成测试(lexgo_test_issue9,64 项)、学习端 106 单测与 11 项 E2E、管理端 31 单测、治理 56 测试全部通过;真实 API+MySQL 30 项检查与真实浏览器闭环通过。已知限制:Playwright 合成拖拽在真实页面不扩展选区,真实链路改用真实点击 + Shift 点击,连续拖选由 mock E2E 覆盖。
- 短语与单词共用 lexgo_terms:身份键为按序规范化词形以空格连接,单词键不含空格, 因此 kind 与词数由身份键派生,不需要新列或第二套复习逻辑 - POST /api/v1/phrases 由服务端从本人 ready 章节推导词序列与身份,切进单词的范围 400; 章节 tokens 增加 phrases 区间,队列项增加 kind/wordCount - 跨章节匹配按连续词形比对,重叠取最左最长;短语高亮覆盖内部单词但不修改单词数据 - 学习端新增 readerRange 纯函数层与 useTextSelection(原生拖选 + 手机手柄,不拦截 touchmove),面板提供短语标题与按词调整端点的按钮,复习卡把整段短语挖成一个空 - Wiki 记录 Architecture、Business-Rules、Local-Development 与需求更新
- adjustRange 改变范围时同时清空短语链接与已加载条目:调整端点后不再声称「已保存」, 已输入文本保留,保存按当前范围确定的身份写入(可能更新另一条,但绝不重复) - 新增 TestWordKeysNeverContainSpaces:显式锁定「词片段不含空白」这一不变量, termKind/termWordCount 完全依赖它,此前只有间接覆盖 - e2e 断言超时提高到 15s:11 个用例共用开发服务器并行运行时,首屏模块加载可能超过 默认 5s 造成偶发失败(产品行为未变,连续两次并行全量运行均通过)
No dependencies set.
The note is not visible to the blocked user.
#11 实现完成,待用户验收。契约见评论 7893,实施、测试与真实链路见工单最新评论。
本地验证:Go 集成测试(lexgo_test_issue9,64 项)、学习端 106 单测与 11 项 E2E、管理端 31 单测、治理 56 测试全部通过;真实 API+MySQL 30 项检查与真实浏览器闭环通过。已知限制:Playwright 合成拖拽在真实页面不扩展选区,真实链路改用真实点击 + Shift 点击,连续拖选由 mock E2E 覆盖。