Files
ElyOffice/tasks/reviews/C11.2-r1.md
T

4.3 KiB
Raw Blame History

FAIL

crates/ely-pdf-engine/shim/ely_pages.c:450 — 提取在原文档 journal 上建立临时删除步骤,覆盖已有重做分支;worker 的 Doc::sync 仍保留旧位置的编辑 ID,导致历史标记与内容错配(PDF-02、FILE-03)。复现:三页 PDF 旋转第一页、保存、撤销、提取第一页、重做;真实 worker 和应用探针均得到一页未旋转的文档,应用却显示已保存(pages=1, dirty=false),关闭可直接丢掉这个状态。方向:在独立副本中提取,完整保留源文档的撤销、重做及编辑 ID 绑定;增加保存后撤销再提取、拆分的回归测试。

apps/ely-pdf/src/edits.rs:101 — 结构编辑只过滤 picked,anchor 仍指向旧页号(PDF-02)。复现:三页文档点选第三页、删除、Shift 点选第一页,chosen_pages 得到 [0,1,2],此时页数为 2;选择 Insert Blank Page 在 organize.rs:138 越界 panic。隔离应用测试复现,macOS 真窗口同样以 abort 退出。方向:结构编辑后清理或重新映射选择锚点及页身份,保证所有选择都属于当前页集;修正锚点的副本通过相同探针。

apps/ely-pdf/src/edits.rs:78 — 编辑失败只发送 Failed 与 notify,外壳等待队列由 Reported 才释放(FILE-02、FILE-04)。复现:发起超过页面尺寸的裁剪,在其落地前保存;裁剪已报错且 view.settled() 为 true,core.waiting 仍有一条保存,保存一直挂起。应用探针得到 waiting=1;失败分支补发落定通知后同一探针得到 waiting=0。方向:成功、拒绝与失败均发布队列落定状态,使保存、关闭、提取等等待操作得到完成或明确失败。

crates/ely-office/src/close.rs:150 — 窗口关闭回调通过 dirty_now 同步读取历史,close_tab:176 又在界面线程持 worker 锁关闭文档,违反 PERF-02 与 agents.md 的界面线程约束。复现:干净 PDF 的后台渲染或导出占用 worker 锁时点击窗口关闭;隔离测试模拟后台持锁 500 ms,should_close 在界面线程耗时 514–522 ms。方向:将历史检查与引擎关闭排入后台,回到窗口时核对标签身份并完成关闭,界面回调即时返回。

crates/ely-pdf-engine/shim/ely_pages.c:385 — 从文件插入仅调用 pdf_graft_mapped_page,源页的链接、批注、字段等页面引用随合并被静默丢弃(PDF-02)。复现:向三页 PDF 末尾插入另一份三页 PDF,源文件第一页含指向源第二页的 /Link;保存的六页文件中 /Link 数量由源文件的 1 变为 0。方向:嫁接页面时同时迁移相关对象,并通过源页到目标页的映射重绑引用;测试读取合并后保存文件的链接目标及字段。

crates/ely-pdf-engine/shim/ely_pages.c:124 — 删除字段仅按 widget 的 /P 判定归属;省略可选 /P 的 widget 即使由已删页的 /Annots 持有,也被保留(PDF-02,R-02 的字段移除声明)。复现:第二页 /Annots 引用一个 /FT /Tx widget,AcroForm/Fields 引用同一对象,widget 无 /P;删除第二页并紧缩保存后,gone-field 及其值 value-on-deleted-page 仍在 AcroForm 与文件中。真实 worker 探针确认。方向:从被删页的 /Annots 收集 widget 身份,再清理字段树及相关引用;覆盖省略 /P 与共享字段的样本。

apps/ely-pdf/src/ask.rs:66 — 裁剪的上右下左边距直接发送给内核,忽略当前视图的显示旋转,裁剪方向与所见页面错位(PDF-02、agents.md 的按所见裁剪声明)。复现:Letter 页面用 View 菜单旋转显示 90°,裁剪顶部 25.4 mm;实际内核尺寸为 612×720 pt,所见顶部裁剪应得到 540×792 pt 的内核尺寸。应用探针失败;按显示旋转换算边距的副本通过相同探针。方向:将所见边距转换到页面自身的方向,并覆盖显示旋转与页面 /Rotate 叠加的测试。

crates/ely-pdf-engine/shim/ely_pages.c:318 — 裁剪将物理 point 边距直接减到 PDF 用户坐标,忽略 /UserUnit,毫米裁剪量随文件比例变化(PDF-02)。复现:MediaBox 为 612×792、UserUnit=2 的页面,真实 worker 初始边界为 1224×1584 pt;裁剪顶部 72 pt(25.4 mm)后高度变成 1440 pt,实际裁掉 144 pt,正确高度为 1512 pt。方向:按每页 UserUnit 将物理边距转换为用户坐标,验证保存、重开和撤销后的实际尺寸。