Repository navigation
iPaper 1.13.2 — 笔记可靠性与写入限流补丁(V1–V6)
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.py24 项(含限流节奏/有界/owner 隔离、修订矩阵、决定正文、单条批注读取);受影响回归与全量 Docker 非集成套件;复核 2 个后端复现通过。 - 浏览器
frontend/unified-tests/notes.spec.ts19 项(复核 5 个复现 + 429/Retry-After 等待并保存最新文本 + 既有持久高亮/笔记/回答/结构译文/双页面/页级记录等)。 - 安全门禁:4×pip-audit 0、Trivy 源码 0、三镜像 0 HIGH/CRITICAL、SBOM、
dev/mainCI 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 缺陷。