2.3 KiB
FAIL
apps/ely-pdf/src/edits.rs:102 — 编辑后的尺寸表只含前 100 页的实测值,其余页由 sizes() 填成第一页尺寸;这里将它与后台补读完整的 self.sizes 比较,混合纸张文档会进入 retire_tiles(),立即清空整屏旧图块。复现:生成 101 页 PDF,前 100 页为 612×792,第 101 页为 612×900;等尺寸补读与第一页绘制完成,在第一页添加便签。真实 worker 探针连续两次捕获 edited == 1 且 tiles.is_empty(),违反 R2.6。修复方向:保留已测量的尺寸,根据真实页面结构和几何变化决定失效,覆盖超过 100 页的混合尺寸文档。证据:/tmp/ely-r26-probes-repeat.log。
apps/ely-pdf/src/pages.rs:196 — stale 图块仍按当前布局的完整 TileKey 淘汰,scale 变化会让保留机制失效。复现:单页 PDF 使用默认适合宽度,点击便签工具,在页面点击并等右侧属性栏和图块稳定,再提交便签。refresh() 清掉 aim,属性栏收起,显示比例从 2.2026143 变为 2.72549;旧比例图块被 tiles.retain() 和 stale.retain() 淘汰,探针捕获 painting == true、tiles 为空、stale 为空的状态,页面继续闪白。加入布局稳定等待后仍复现,违反 R2.6。修复方向:处理编辑落地引起的布局变化,保留可绘制的旧页面图块直到新布局图块到达,并覆盖属性栏提交便签的实际路径。证据:/tmp/ely-r26-probes-repeat.log。
apps/ely-pdf/src/tests/input.rs:210 — 新增回归只观察缓存是否为空及 Arc 地址是否更换,无法验证旧图块实际进入绘制,也无法验证新画面的内容。隔离副本中将 pages.rs 的 Some(image) 绘制分支加上 !self.stale.contains(&key) 条件,对 stale 图块直接跳过绘制;日志确认该分支反复执行,原测试 an_edit_keeps_the_page_drawn_until_its_repaint_lands 仍通过。这个变异会在重绘期间显示纸张背景,直接破坏 R2.6。修复方向:验证重绘等待期间每帧的实际页面绘制,以及更新后批注或可视签名区域的像素;让跳过旧图块绘制的变异触发失败。基线应用和 worker 构建通过,ely-pdf 原有 115 项测试及注释检查通过;变异证据:/tmp/ely-r26-mutation.log。探针源码副本及独立 CARGO_TARGET_DIR 已在写入结论前删除。