Skip to content

iPaper 1.13.2 — 笔记可靠性与写入限流补丁(V1–V6)

Choose a tag to compare

@ifzzh ifzzh released this 22 Sep 09:10
· 14 commits to main since this release

iPaper 1.13.2 逐项修复 1.13.1 独立复核的 V1–V6,并把复核的 2 个后端 + 5 个浏览器复现纳入常驻回归;没有放宽任何修订校验。仅 Web 变化,Worker 复用 1.2.0。

V1 保存期间继续输入/切换面板不再丢字

  • 成功、失败、冲突与"未知结果"四条路径都只把最新文本写入草稿(不再用请求快照覆盖更新的输入):较早请求成功时若已有更新输入,草稿不删除而是以新修订为基准继续保存;失败时也不会把 A 写回覆盖 B。
  • 草稿按 owner+paper 隔离并跨问答/批注/笔记、侧栏、原文/译文与论文切换存续;重新挂载自动恢复并继续保存。每请求带论文/账号纪元,迟到/重复响应不能改写新编辑器。

V2 冲突决定真正生效且可操作

  • 409 与重试对账发现的远端变更进入同一状态:并排对比服务器版本与我的草稿 + 「保留服务器版本 / 保留我的草稿」,不再只有文案没有按钮。
  • 保留服务器版本会同步编辑器、基准修订、草稿与状态;保留我的草稿提交当前确认的正文(随决定发送),被替换的服务器版本另存副本。
  • 决定期间暂停防抖/blur 自动提交并防重复;未决定前不推进基准,普通保存无法绕过冲突;决定后第三次写入时拒绝旧决定并展示新冲突;面板入口与编辑器入口等价。

V3 笔记写入的独立 owner 级限流与退避

  • 新增 note_writes(120 次 / 60 秒,owner 级)覆盖笔记 PUT、批注增删改、摘录插入、回答复制与冲突决定,不再消耗通用 mutation(60 次/小时);复核的"每十秒保存一次、连续十分钟"61 次全部成功,远超人类速度的爆发仍被拒。
  • 前端遵循 Retry-After:显示等待时长、保留最新草稿、等待期间继续输入并于到期保存最新文本;手动重试同样遵循;畸形/缺失头用 ≤60 秒有界后备。其他敏感入口阈值不变。

V4 冲突决定的修订比较严格化

  • revision 缺失/类型错误 → 400;null 只匹配真正不存在的当前版本;空字符串、旧字符串、错误字符串一律 409 并保留未见副本。修订矩阵进入常驻测试;旧删除修订的撤销仍 409。

V5 摘录从笔记回到来源

  • 笔记「来源」中的摘录带「回到来源」入口,复用批注自身的受控来源定位(四类内容各自的页/块/译文修订),不新建另一套导航;批注被删除时保留摘录并提示"来源批注已被删除,定位仅供参考",来源失效按既有规则降级。

V6 发布边界

ac82ea1..9f83967 之后的运行行为改动(409 后先重取再展示冲突、组件纪元校验、内容类型标注)与 V1–V5 一并纳入本补丁;验收使用本补丁确切产物与发布后固定摘要容器。

验证

  • 后端 tests/test_paper_notes.py 24 项(含限流节奏/有界/owner 隔离、修订矩阵、决定正文、单条批注读取);受影响回归与全量 Docker 非集成套件;复核 2 个后端复现通过。
  • 浏览器 frontend/unified-tests/notes.spec.ts 19 项(复核 5 个复现 + 429/Retry-After 等待并保存最新文本 + 既有持久高亮/笔记/回答/结构译文/双页面/页级记录等)。
  • 安全门禁:4×pip-audit 0、Trivy 源码 0、三镜像 0 HIGH/CRITICAL、SBOM、dev/main CI success。

组件

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

源码提交 7f9173e。

限制与回退

  • 不含跨论文笔记工作区、Agent、RAG、图谱与带批注 PDF 导出。
  • 结构摘录回访仍以存下的范围与完整摘录校验为准,无法匹配时只显示块级来源与说明。
  • 回退基线 Web 1.13.1 + Workers 1.2.0:不丢失已保存的笔记/冲突/来源记录(schema 只有兼容增量),但会重新暴露 1.13.1 的 V1–V5 缺陷。