#32 修复:编辑正文回到曾经用过的版本不再返回 500 #39

Merged
ila merged 3 commits from fix/32-edit-version-reuse into main 2026-09-16 21:50:25 +08:00
3 Commits
Author SHA1 Message Date
ila 2d17231b42 docs: 将核心镜像与 main 保持一致,镜像更新统一在验收提交中完成 (#32) 2026-09-16 21:50:03 +08:00
ila 7396c037a1 docs: 按线上 Wiki 重新导出核心镜像,消除与 main 的镜像冲突 (#32) 2026-09-16 21:43:24 +08:00
ila cbb48407cd fix: 编辑回到曾经用过的正文版本复用该版本的任务 (#32)
- 根因:编辑任务键按「章节+内容摘要」派生,与 uq_job_request 唯一键相撞,
  改回曾经用过的正文时 Create 触发 MySQL 1062,整笔事务回滚并冒泡为通用 500
- 修复:新增 stageEditJob,先按 (owner_id, chapter_id, content_sha256) 锁定查询该版本的任务行,
  找到就复用并重置为 pending/attempts=0/清空失败原因,找不到才用派生键创建;
  粘贴版本的任务行同样可被复用,因此一章一个内容版本只保留一行
- 不变的门控:旧版本任务仍不能把新版本章节拉回处理(RetryIngestJob 409)、
  未改动的正文不产生新版本、同一版本重复处理幂等
- 无 schema 变化,无需迁移
- 测试:新增 TestMySQLChapterEditBackToAPreviousVersion(A→B→A→B 此前第三步 500、
  一章一版本一行、复用行干净重启、失败版本再次成为当前版本时复活、读者返回最后正文);
  Go 顶层用例 92 项;真实 API+MySQL 21 项检查通过
- 文档:Architecture / Business-Rules / Local-Development 记录规则与验证
2026-09-16 11:02:50 +08:00