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

Merged
ila merged 3 commits from fix/32-edit-version-reuse into main 2026-09-16 21:50:25 +08:00
Owner

#32 缺陷修复:编辑正文回到曾经用过的版本会返回 500。方案见评论 8210。

  • 根因:编辑任务键按「章节+内容摘要」派生,撞上 uq_job_request 唯一键,整笔事务回滚并冒泡为通用 500
  • 修复:stageEditJob 按 (owner_id, chapter_id, content_sha256) 查询该版本的任务行,找到就复用并重置为
    pending/attempts=0/清空失败原因,找不到才创建;粘贴版本的任务行同样可复用,一章一个版本只保留一行
  • 不变的门控:旧版本任务仍不能把新版本章节拉回处理(409)、未改动正文不产生新版本、同版本重复处理幂等
  • 无 schema 变化,无需迁移;Go 顶层用例 92 项(新增 A→B→A→B 回归用例);真实 API+MySQL 21 项检查通过
#32 缺陷修复:编辑正文回到曾经用过的版本会返回 500。方案见评论 8210。 - 根因:编辑任务键按「章节+内容摘要」派生,撞上 `uq_job_request` 唯一键,整笔事务回滚并冒泡为通用 500 - 修复:`stageEditJob` 按 `(owner_id, chapter_id, content_sha256)` 查询该版本的任务行,找到就复用并重置为 pending/attempts=0/清空失败原因,找不到才创建;粘贴版本的任务行同样可复用,一章一个版本只保留一行 - 不变的门控:旧版本任务仍不能把新版本章节拉回处理(409)、未改动正文不产生新版本、同版本重复处理幂等 - 无 schema 变化,无需迁移;Go 顶层用例 92 项(新增 A→B→A→B 回归用例);真实 API+MySQL 21 项检查通过
ila added 1 commit 2026-09-16 11:03:33 +08:00
- 根因:编辑任务键按「章节+内容摘要」派生,与 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 记录规则与验证
ila added 1 commit 2026-09-16 21:43:26 +08:00
ila added 1 commit 2026-09-16 21:50:06 +08:00
ila merged commit f565c1ca26 into main 2026-09-16 21:50:25 +08:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/lexgo#39