Skip to content

iPaper 1.13.4 — 笔记保存去重与定时器隔离

Choose a tag to compare

@ifzzh ifzzh released this 23 Sep 03:46
· 9 commits to main since this release

用已发布镜像自带的前端复跑 V1/V2 镜像验收(逐步记录状态)后定位到三处与"重复保存/定时器互相取消"有关的问题,它们只在真实时序下暴露:

  1. 成功保存取消了待发的防抖:为取消"决定之后的重试"而在成功分支清掉的其实是同一个定时器,新文本的防抖被取消 → 新文本不再自动保存。
  2. 相同正文的重复/迟到提交被当成冲突:面板重挂载后再提交一次服务器已持有的正文时,旧基准让后端生成"两边内容相同"的冲突,界面停在"待选择"。
  3. 客户端去重在正文与服务器一致时仍会排一次保存。

修复

  • 定时器拆分:防抖与重试改为两个独立引用;成功保存只清重试、不再取消新文本的防抖;决定与切换论文时两者都取消。
  • 后端按内容幂等:笔记 PUT 提交的正文与服务器当前正文完全相同时(无论基准是否过期)直接返回当前笔记(duplicate: true),不制造冲突、不改写正文;正文不同且基准过期仍 409 并保留副本。
  • 客户端去重:记录服务器已知正文,恢复/重试在正文已一致时不再排保存,只标记「已保存」。

验证

  • 后端 tests/test_paper_notes.py 25 项(新增"重复确认当前正文不是冲突");全量 Docker 非集成套件通过(一次 arXiv 外部接口用例为网络抖动,单独复跑通过)。
  • 浏览器:复核 5 个复现全部通过;隔离笔记套件 19 项全部通过(含被本补丁修复的慢保存用例)。
  • 安全门禁:4×pip-audit 0、Trivy 源码 0、三镜像 0 HIGH/CRITICAL、SBOM、dev/main CI success。
  • 镜像验收:对本补丁镜像跑 V1/V2/V3/V5(真实容器自带静态前端 + owner 作用域维护会话,用后撤销,只创建可识别记录)。

组件

仓库 版本 Registry 摘要
ifzzh520/ipaper 1.13.4 sha256:e44a4986447565758ad29b69e1d742a3d37e462aed89db5f594d9a8c570d0b91
ifzzh520/ipaper-translation-worker 1.2.0 sha256:a5fa3b4316802c15e99a7387baa49604166fb6092a1aca34b8c5e34de3d52003
ifzzh520/ipaper-document-worker 1.2.0 sha256:2c501ad68bdfc2e282518a813c46e548f598b1af85acc1069058741a45587298

源码提交 1ad8797。

限制与回退

  • 回退基线 Web 1.13.3 + Workers 1.2.0(依次 1.13.2/1.13.1);笔记/冲突/来源记录不因回退丢失。
  • 不含跨论文笔记工作区、Agent、RAG、图谱与带批注 PDF 导出。