Files
ElyOffice/tasks/reviews/P-08-r1.md
T
2026-10-09 23:26:40 -04:00

1.9 KiB
Raw Blame History

FAIL

apps/ely-pdf/src/annotate.rs:109 — 批次中一个页面读取失败,就把整批页面写入 Unread::Notes;collect 的短路还会丢掉此前成功读取的页面,并封住尚未读取的健康页面,破坏 PDF-05、PDF-06、PDF-07。复现:两页 PDF,第一页含 /Rect [0 0 <50 个连续的 9> 100] 的 Square 批注,第二页含正常 Text 批注;真实 worker 的 marks(0) 失败、marks(1) 成功。视图执行 ask_notes([0, 1]) 后再执行 ask_notes([1]),第二页仍无数据且被标记失败;仅移除第二页的失败标记后即可正常读出。重建后的探针记录 healthy page cached=false, marked failed=true(/tmp/ely-p08-r1-batch-confirmed.log)。修复方向:逐页保留读取结果,缓存成功页,仅记录实际失败页,并继续处理其他页;补充混合成功与失败页面的回归测试。

apps/ely-pdf/src/sign.rs:71 — 签名失败回调缺少保存代次校验,会在 saved() 清理失败记录后重新插入旧请求的 Unread::Signatures;第 50 行的全局 guard 随即封住新文件的签名读取,破坏 PDF-12。复现:打开 old.pdf 后把原文件改名,发起另存为 saved.pdf,并在保存进行中请求旧路径的签名。另存为成功、标签路径已指向 saved.pdf 后,旧路径失败回复写回标记;再次请求 saved.pdf 的签名,reading_signatures 保持 false、signatures 保持 None。真实另存为探针在明确等待异步操作结束后重复复现 saved path blocked=true, failure marker=true(/tmp/ely-p08-r1-save-race-confirmed.log、/tmp/ely-p08-r1-save-race-repeat.log、/tmp/ely-p08-r1-save-race-rebuilt.log);清除标记后同一 worker 可读取有效文件。修复方向:将签名读取绑定到磁盘文件的保存代次,保存完成使旧请求失效,旧回调清理进行中状态并丢弃过期结果及失败记录;补充保存与失败读取交错的回归测试。