ElyPDF: only content edits keep old tiles and known sizes; old tiles paint and free with their tab (R2.6)

This commit is contained in:
ZacharyZhang-NY committed 2026-10-09 05:51:44 -04:00
1 parent 1bf693f7ab
commit 03bcbab5ce
11 files changed
+108 -26

No files matched your search

+3
View File
@@ -0,0 +1,3 @@
FAIL
crates/ely-lok/src/client/tests/motion.rs:255 — 大图层分块回归仅断言像素长度,重复首块、错序等内容损坏仍被判为完整传输,属于本次范围要求检查的弱测试。具体复现:在隔离源码副本中,将 worker/slides.rs:83 的 `pixels[from..to].to_vec()` 改为 `pixels[..to - from].to_vec()`,每次返回首段像素、保持块长度与总长度;独立构建该 worker 后,现有全部 6 项 motion 测试仍通过,包括新增的单层超过 64 MiB 用例。真实 DECK 以 6000 × 4500 请求、实际 6000 × 3375 输出时,图层 4 的 81,000,000 字节被分为 5 块;原版像素 SHA-256 为 `919a1d5c78f38941cb99f339dead3a362af619c8d8c381a1665fb1236c640483`,变异版为 `67082a91680256378fa8406d2024b5c5547e8f51a8e02af10b84874ed4efadbb`,确认图像内容已损坏。修复方向:用跨越多个分块边界、各段内容有差异的图层核对完整像素或独立预期像素位置,并要求重复首块的变异使测试失败。证据:`/tmp/ely-r220-r2-mutant-motion.log`、`/tmp/ely-r220-r2-wire-baseline.log`、`/tmp/ely-r220-r2-wire-mutant.log`。上一轮两项运行时缺陷已复核修复:原版长页面与 81 MB 单层传输通过,关闭及取层失败会释放暂存批次,另一文档继续可读;移除关闭清理会使对应回归失败。独立 worker 构建、原版 6 项 motion、3 项 playlist、注释检查通过。探针副本及其独立构建目录已删除,审查范围内源码散列保持一致。
+7
View File
@@ -0,0 +1,7 @@
FAIL
apps/ely-pdf/src/edits.rs:102 — 上一轮混合尺寸缺陷仍可在第 101 页自身可见时复现:refresh() 将已测量的后续页尺寸重置为第一页尺寸,backdrop.rs:84 因尺寸不符跳过旧底图,:111 随即释放它。生成 101 页 PDF,前 100 页为 612×792,第 101 页为 612×900;等待尺寸补读完成,以单页模式显示第 101 页并等待绘制完成,然后在该页添加便签。真实 worker 探针连续两次捕获 edited=1、tiles=0、backdrop=28、当前尺寸变成 612×792,随后尺寸恢复 612×900 时 backdrop 已为 0,页面出现空白,违反 R2.6。现有新增测试只在第一页添加便签。修复方向:依据页面身份和真实几何更新尺寸,批注等保持页面结构的操作保留已知实测尺寸,并覆盖第 101 页实际可见时的编辑路径。证据:/tmp/ely-r26-r2-probes.log、/tmp/ely-r26-r2-probes-repeat.log。
apps/ely-pdf/src/view.rs:145 — retire_all() 遗漏新增的 backdrop,关闭标签时这些已绘制图像无法进入窗口的释放队列,违反 PERF-08。复现:等待单页 PDF 绘制完成,添加便签,在编辑完成、旧底图等待重绘时通过实际 release_tab() 路径关闭标签;连续两次探针均记录关闭前后 backdrop=28,丢弃 PdfView 引用并推进后续帧后,window.has_image_atlas_entry(old) 仍为 true。每次在此阶段关闭标签都会将该批旧图块留在仍打开的窗口图像缓存中。修复方向:将 backdrop 中的全部图像随其他图块一起移交关闭时的 Retired 队列,增加关闭后核对图像缓存释放的回归。证据:/tmp/ely-r26-r2-probes.log、/tmp/ely-r26-r2-probes-repeat.log。
apps/ely-pdf/src/tests/input.rs:197 — 上一轮实际绘制验证缺陷仍存在:never_bare() 仅检查 pieces() 返回列表,:234 仅检查 Arc 地址更新,无法验证旧图块被画到窗口及编辑后的画面内容。隔离副本中让 pages.rs 的 drawn_tile() 对 backdrop 图像直接跳过 window.paint_image();该漏绘分支执行 109,864 次,包含三项新增回归在内的原有 118 项测试仍全部通过,重绘等待期间旧页面图像可直接漏绘。修复方向:断言等待新图块期间实际帧中的页面覆盖及原有内容,并核对落地后的批注或可视签名区域像素,使跳过旧图块绘制的变异触发失败。证据:/tmp/ely-r26-r2-mutation.log。独立基线应用与 worker 构建、118 项测试、注释检查均通过;上一轮属性栏提交便签导致缩放变化的复现场景通过,比例 2.2026143→2.72549 全程保留可绘制底图。写入本结论前已核对原有受跟踪文件散列一致,删除探针源码副本、独立 CARGO_TARGET_DIR 和增量缓存,仅保留小型日志。
+3
View File
@@ -0,0 +1,3 @@
FAIL
crates/ely-lok/src/view/zoom.rs:51(关联 render.rs:272、view/tests/fit.rs:148)— 连续缩放读取上一帧的居中偏移,导致指针下的页面锚点漂移,违反 R2.7 与 PRD LOK-04。`self.spare` 仅由 `prepare` 更新;第一次缩放已经修改 `geom.zoom`,同帧后续事件仍减去旧偏移。复现:固定 LOK 构建打开现有 FODT,视口 1200×900、100%,指针位于 (600,400),同帧依次缩放到 125%、150%、200%,随后重绘;指针下的文档横坐标从 6404 变成 4500 twips,原锚点画到 x=853.87 px,漂移约 254 px。真实窗口连续派发三个 PinchEvent 同样复现,漂移 250.87 px,截图显示左侧多出约 38 px 灰区。每次缩放后重绘的对照通过;副本中在每次缩放前按当前几何读取 `slack()` 后,连续事件探针通过,真实窗口误差降至 0.07 px。修复方向:让每次缩放使用与当前缩放、滚动一致的居中偏移,并增加同帧连续滚轮/捏合事件的锚点回归。上一轮的按键左页边与单次指针锚定场景已修复,分别恢复旧错误时现有回归测试均失败;现有测试只覆盖重绘之间的一次指针缩放,遗漏本场景。已独立构建 worker,运行 `cargo test -p ely-lok --features view --locked --offline --lib view::tests -- --test-threads=1 --nocapture`:34 passed,其中两个剪贴板用例按开关跳过;注释与文件行数检查通过。证据:`/tmp/ely-r27-r2-probes.log`、`/tmp/ely-r27-r2-native.log`、`/tmp/ely-r27-r2-with-fresh-slack.log`、`/tmp/ely-r27-r2-pixels.log`;复现代码:`/tmp/ely-r27-r2-reproducer.log`、`/tmp/ely-r27-r2-native-reproducer.log`。审查副本、独立构建目录及增量缓存已删除,1236 个原有跟踪文件散列一致。
+3
View File
@@ -0,0 +1,3 @@
FAIL
crates/ely-lok/src/client/tests/formula.rs:365 — 新增回归仅检查 worker 的 `.uno:StateTableCell`,绕过本次修复的 `figures::label`;既有界面测试(apps/ely-table/src/figures.rs:80)仅使用整数 `21`、`42`,上一轮数值失真的回归覆盖仍缺失。具体复现:在独立源码副本中恢复上一轮的 `tidy` 函数及其调用,`selection_figures_follow_the_cells_number_format` 和 `kernel_status_takes_the_interface_language` 仍全部通过;实际调用变异后的 `label`,`8128.00` 显示为 `8128`,`0.0000000001` 显示为 `0`,`1234567890.25` 显示为 `1234567890`。补充的数值保留断言在当前实现通过、恢复旧逻辑后失败。修复方向:在 ElyTable 的界面测试中断言这些真实内核统计值经 `figures::label` 后完整保留,使恢复旧逻辑时测试失败。上一轮行为缺陷已复测修复:真实内核的两位小数、尾零、微小值和大数小数输出以及当前界面转换均通过;独立构建 worker 与 ElyTable 成功,公式测试 8/8、ElyTable 测试 43/43、注释规则检查通过。变异证据见 `/tmp/ely-r28-r2-mutant-existing.log`、`/tmp/ely-r28-r2-probe-kernel.log`、`/tmp/ely-r28-r2-mutant-regression.log`;临时源码副本、独立构建目录和增量缓存已在写入结论前清理。