Files
ElyOffice/tasks/reviews/C10.6-r1.md
T

14 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
FAIL
apps/ely-show/src/output.rs:156 — [P1] 在 GPUI 的窗口/实体更新回调中同步调用系统打印的 `NSPrintOperation::runOperation()`,模态事件循环重入仍持有借用的 GPUI App。复现:macOS 真窗口中新建空白文稿,Cmd+P,点击 Print…,系统打印面板出现后读取应用 AX 树及菜单;两次独立运行均在 `gpui/src/platform/app_menu.rs:336` 报 `RefCell already borrowed`,继而在 `menu_will_open` 中触发不可展开的 panic,以 134 退出。幻灯片打印和讲义打印均复现,堆栈包含本行、`write_pdf` 回调和 `NSPrintOperation::runOperation`,违反 SHOW-13。修复方向:在 GPUI App、窗口和 Deck 的借用结束后进入系统打印面板,打印结果再通过安全的应用更新回传;增加真实系统面板的打开、AX/菜单交互、取消回归。证据:`/var/folders/g4/sj7njkr93jz0rgmg0b_zqnvr0000gn/T/ely-c106-r1-1hmvpkc_/print-repro-stderr.log` 与 `ui-stderr.log`。
apps/ely-show/src/output.rs:246 — [P1] 图片导出仅在界面线程用 `Path::exists()` 预检查,随后 `picture()` 的 `image.save()` 按覆盖方式打开目标。失效符号链接会通过检查;检查到写入之间出现的文件也会被覆盖,违反本任务“任一目标已存在即整体不写”的约定。复现一:输出文件夹里预放 `deck-1.png -> ../unrelated.png`,链接目标尚不存在,导出后实际在所选文件夹外创建了 `unrelated.png`。复现二:让 worker 暂时忙碌,调用导出后在排队期间写入 `deck-1.png`,释放 worker 后文件内容从 `EXISTING USER FILE` 变成 PNG。隔离副本的 `probe_picture_existing_dangling_symlink` 和 `probe_picture_file_created_after_preflight` 均失败,现有图片导出测试通过。修复方向:按目录项检查并暴露检查错误,以排他创建的文件句柄写出;在整批目标完成排他占用前保持实际输出为空,任一冲突时释放本次占用并报错;覆盖上述两个回归场景。
apps/ely-show/src/output.rs:123 — [P2] 导出范围取 `tab.extra.slides`,该列表在母版视图里保存母版;写出副本中的 `paint_part(..., false)` 和 PDF 导出则处理标准幻灯片,造成范围与实际对象错配。复现:创建三张幻灯片,隐藏第三张,进入只有一个母版的母版视图,Cmd+E 选择全部图片,实际只写 `deck-1.png`,第二张可见幻灯片漏出;`probe_picture_export_from_master_view` 实测 `count=1`、文件数 1,预期 2。真窗口另建三张可见幻灯片后进入母版视图,From–To 的结束页输入 3 被钳制回 1。违反 SHOW-13 的范围选择和全部输出。修复方向:统一从标准幻灯片取得输出数量、当前页、可见性与尺寸;明确约束母版视图的输出入口,使对话框范围和实际写出对象一致;增加母版视图下全部、当前和指定范围的回归。
patches/libreoffice/0038-lok-impress-slide-check.patch:83 — [P2] 无法显示的图片仅由 `GetGraphicType() == GraphicType::NONE` 判定,漏掉实际解码失败后的内核占位状态。复现:将 `trouble.fodp` 第二张的图片 URL 指向确实存在、内容为 `not a valid image` 的 `broken.png`,读取 `.uno:SlideCheck` 得到该链接 `missing:false` 且该页 `broken:[]`;对象 Gone 的“无法显示”问题被漏报。`probe_existing_unreadable_link_is_broken` 在实际 LOK 上失败,原夹具测试通过,违反 SHOW-14,也与 agents.md 的“读不出的图片”声明冲突。修复方向:依据图片实际解码/可渲染状态判定 broken,覆盖错误占位状态,并用存在但损坏的链接图片及嵌入图片验证。
patches/libreoffice/0038-lok-impress-slide-check.patch:90 — [P2] OLE 外部链接的缺失标志硬编码为 false。复现:创建 `linked.odt`,以其 URL 替换 `trouble.fodp` 第三张的 `draw:object` 引用并载入,随后删除 `linked.odt`,再次读取 `.uno:SlideCheck`;删除前后均返回同一个 OLE 链接的 `missing:false`、`broken:[]`,界面仍把已丢失源文件显示为普通链接。实际 LOK 探针 `probe_missing_ole_source_is_marked_missing` 失败。违反演示准备的文件检查约定,也与 agents.md 所称“链接图片与 OLE 链接及是否缺失”冲突。修复方向:读取并检查 OLE 链接的实际源文件状态,正确返回 missing 并暴露读取错误,增加带缓存对象的源文件删除回归。
apps/ely-show/src/check.rs:127 — [P2] 检查完成时只核对活动标签,随后直接覆盖 `deck.dialog`,丢失用户在等待期间打开的后续对话框。复现:暂时延迟当前文稿的 worker,点击“检查演示…”,在检查尚未返回时按 Cmd+E 打开导出对话框;恢复 worker 后该对话框被检查结果替换。隔离副本的 `probe_delayed_check_keeps_newer_output_dialog` 失败;真窗口通过暂停自己的 worker 独立复现,AX 窗口标题从 Export 变为 Presentation Check。修复方向:记录检查请求及其对话框交互身份,后续操作使旧请求失效,回调只安装仍有效的检查结果;增加延迟检查与导出/打印/取消竞争的回归。证据:`/var/folders/g4/sj7njkr93jz0rgmg0b_zqnvr0000gn/T/ely-c106-r1-1hmvpkc_/ui-ax-race-before.txt`、`ui-ax-race-after.txt`。独立构建 worker、`cargo check --workspace`、`cargo test --workspace`(509 通过、1 忽略)及 `tests/scripts/lo-patches.sh` 均通过,上述失败由额外实际内核/原生窗口探针复现。