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

5.4 KiB
Raw Blame History

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 均通过,上述失败由额外实际内核/原生窗口探针复现。