feat/5-paste-chapter-reading
main
工单 #5 的实现与证据见 #5 。
基准分支为已验收的 feat/4-reading-selection-spike,与既有 PR 链一致;不合并既有 PR。
整改提交 b18f9cc 已追加到本分支(R1 追加请求契约、R2 运行期任务恢复与尝试上限、R3 离页作废在途请求、R4 重试自愈)。逐条修复方式、回归测试与真实联调证据见工单 #5 评论(R1~R4 整改回报)。两条“后续优化建议”另建 #24,未纳入本 PR。
b18f9cc
schema v3 新增 lexgo_books、lexgo_chapters、lexgo_ingest_jobs;一次粘贴生成一个章节, 原文按收到的字符串逐字保存;处理任务具备持久状态机、启动恢复与 requestId 幂等。 新增书籍/章节/任务 API 一律按认证身份过滤归属,他人编号返回 404,后台任务不使用 客户端用户编号;学习端补齐粘贴导入、书库、章节状态与失败重试、原文阅读与章节切换。 测试:MySQL 集成测试覆盖导入→处理中→就绪→阅读完整路径、失败重试、幂等、越权与 Unicode 原文保真;学习端 Vitest 31 项、Playwright 3 项与构建通过;lexgo_dev 已显式 迁移到 v3,迁移前后既有数据指纹不变。 文档:Wiki 先写后回读(架构、业务规则、本地验证、需求总览、Home),导出核心镜像。
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 先写后回读(架构、业务规则、本地验证),导出核心镜像。
用户在 #5 验收结单后明确指示“合并”。已按依赖顺序将 PR #17 → #19 → #20 → #22 → #23 合入 main;后续 PR 在其前置合入后将目标分支调整为 main。全部使用 fast-forward-only,指定已核对的 head_commit_id,不强制合并、不改写提交、不删除来源分支。
远端 main 与本地 main 均为 b18f9cc4a54dfb7ef4fe9f882a1b4d6a10c27997,与独立复审版本完全相同。每个 PR 合并后已回读 merged 状态并核对 main SHA,本地工作区干净。
沿用同一提交的已执行验证:Go 20 项顶层测试、前端 38 项单测与类型检查/Vite 构建通过(#5 评论 7686)。快进未产生新的代码组合,因此没有重复运行相同测试。未新增部署、迁移或服务重启;未启动 #6/#21/#24。未验证说明继续保留,不因合并宣称已补齐。
此记录为最新合并状态,历史评论中的“PR 未合并”保留作为当时事实。Gitea MCP 指向不同站点,本次继续按既有记录回退至目标 git.ilapage.cn API。
No dependencies set.
The note is not visible to the blocked user.
工单 #5 的实现与证据见 #5 。
基准分支为已验收的 feat/4-reading-selection-spike,与既有 PR 链一致;不合并既有 PR。
整改提交
b18f9cc已追加到本分支(R1 追加请求契约、R2 运行期任务恢复与尝试上限、R3 离页作废在途请求、R4 重试自愈)。逐条修复方式、回归测试与真实联调证据见工单 #5 评论(R1~R4 整改回报)。两条“后续优化建议”另建 #24,未纳入本 PR。用户授权合并完成(2026-09-11)
用户在 #5 验收结单后明确指示“合并”。已按依赖顺序将 PR #17 → #19 → #20 → #22 → #23 合入 main;后续 PR 在其前置合入后将目标分支调整为 main。全部使用 fast-forward-only,指定已核对的 head_commit_id,不强制合并、不改写提交、不删除来源分支。
远端 main 与本地 main 均为 b18f9cc4a54dfb7ef4fe9f882a1b4d6a10c27997,与独立复审版本完全相同。每个 PR 合并后已回读 merged 状态并核对 main SHA,本地工作区干净。
沿用同一提交的已执行验证:Go 20 项顶层测试、前端 38 项单测与类型检查/Vite 构建通过(#5 评论 7686)。快进未产生新的代码组合,因此没有重复运行相同测试。未新增部署、迁移或服务重启;未启动 #6/#21/#24。未验证说明继续保留,不因合并宣称已补齐。
此记录为最新合并状态,历史评论中的“PR 未合并”保留作为当时事实。Gitea MCP 指向不同站点,本次继续按既有记录回退至目标 git.ilapage.cn API。