Files
ElyOffice/tasks/reviews/C08.1-r1.md
T

5.0 KiB
Raw Blame History

FAIL

crates/ely-ui/src/shell/root.rs:61:document_root 聚焦 Root 自己的句柄,带文档的渲染树实际注册的是 Docs 与 LokView 的句柄,初始焦点无法路由文件动作。真实 ElyDoc 窗口加载完成后,快捷键 New 与菜单 New 均未打开模板对话框;探针记录 docs_focus=false、startup_new_dialog=false、startup_menu_dialog=false,聚焦 Docs 后相同快捷键得到 docs_focused_new_dialog=true。修复方向:文档根节点聚焦实际渲染的文档焦点范围,验证启动后直接使用快捷键和原生菜单的实际动作结果。

apps/ely-doc/src/actions.rs:188、apps/ely-doc/src/docs.rs:254:保存与关闭直接读取内核和回调更新后的 dirty 状态,遗漏 LokView 已接收、仍在异步输入队列中的编辑。真实 LOK 探针先调用 replace_text_in_range 提交 PendingText,随后立即调用 write_as,重新打开保存的 DOCX 并转为 FODT 后内容缺少该文本;同样顺序下调用 request_close 会直接把标签数从 1 降到 0,跳过未保存询问,违反 FILE-01、FILE-08。现有 type_into 总是等待 dirty,保存断言主要检查 ZIP 头,覆盖不到这条失败路径。修复方向:保存快照与关闭判定等待先前输入完成,待处理编辑立即进入未保存状态,并用实际保存内容和连续输入/关闭顺序建立回归。

crates/ely-files/src/save.rs:304:save_as 直接进入 write_ticketed,跳过普通保存的 external_changed 检查。探针新建并保存 own.docx,修改文档,再由外部写入 EXTERNAL REVISION,随后 write_as 到 own.docx;外部内容被 DOCX 覆盖,违反 FILE-05。修复方向:目标与当前会话文件相同时执行外部修改检查,覆盖必须经过明确的冲突处理,并覆盖路径别名场景。

crates/ely-files/src/save.rs:318:另存独立文件复用了原会话 begin_save 的未解决冲突守卫,阻断 FILE-05 要求的保留本地副本。探针修改已保存文档,由外部改变源文件,再执行普通保存使状态进入 ExternalModified;随后 write_as 到全新的 local-copy.docx,被 Refused(ExternalModified) 拒绝,目标始终不存在。界面冲突分支也只显示 toast。修复方向:冲突后提供可执行的处理入口,使写入独立目标能够保留本地版本,同时保持源文件的冲突保护。

apps/ely-doc/src/actions.rs:249:格式取自用户所选路径的扩展名,目标写入时解析符号链接;对当前会话原文件缺少转换保护。探针先保存 source.odt,再创建 alias.docx 指向 source.odt,随后 write_as(alias.docx);source.odt 被 DOCX 内容替换,会话路径仍成为 source.odt,后续普通保存又按 ODT 写入,违反 §8.1 格式规则及 §8.3 转换另存新文件的要求。修复方向:按实际目标身份判定是否覆盖原文件,格式转换要求独立目标,并让保存后的路径与格式一致。

apps/ely-doc/src/docs.rs:225:打开流程统一创建 Session::load 并提供可编辑 LokView,遗漏 §8.3 的宏文件只读或风险状态。用固定 LOK 实际生成 macro.docm 后经 open_file 打开,探针得到 SaveState::Saved,文档进入普通编辑路径;应用中也没有对应风险状态或提示。修复方向:加载时识别无法保证往返保存的输入,进入可见的只读或风险状态,转换操作写入独立 DOCX/ODT,并验证风险文件的打开和保存流程。

apps/ely-doc/src/docs.rs:335:ElyDoc 的 Shell 只接入标签与中央画布,left、right 始终为空,遗漏 §8.1 的左侧大纲/搜索/页面导航区域和右侧上下文属性区域。实际启动 ElyDoc 并等待文档加载后的窗口截图只有标题、标签和页面,两侧均为画布背景;shell.sh 验证的是 gallery 的布局。修复方向:按 §8.1 在应用壳接入左右区域,并针对真实 ElyDoc 验证布局。

apps/ely-doc/src/docs.rs:305:界面把所有会话状态压成 EditorTab::dirty 的布尔标记,Shell 没有接入保存状态显示;加载任务完成前也没有 Loading 会话或加载反馈。打开较大的文件时,界面继续显示旧文档或“没有打开的文档”;外部冲突、保存失败只留下相同的 dirty 标记与短暂 toast,用户无法持续识别 FILE-02 指定的状态。修复方向:把加载和保存生命周期接入可见的会话状态,分别显示加载、保存、外部修改、只读和失败,并验证状态转换的真实界面结果。

apps/ely-doc/src/actions.rs:231、apps/ely-doc/src/actions.rs:83:原生路径面板错误被当作取消。save_as 的 chosen.await 仅处理 Ok(Ok(Some(path))),平台 Err 与接收通道 Err 均直接成功返回;pick_file 的平台错误只写日志,通道错误直接丢弃。具体场景:系统面板创建或路径选择返回错误时,用户点击打开/保存后没有任何失败提示;关闭流程中的保存面板错误也会无反馈地中断后续关闭。修复方向:分别处理用户取消、平台失败和通道失败,将失败通过现有 toast 暴露并保留文档状态。