Files
ElyOffice/tasks/reviews/C07.4-r1.md
T

3.3 KiB
Raw Blame History

FAIL

crates/ely-lok/src/ffi/document.rs:85 — 命令执行失败被当成成功,违反 LOK-02 和“出错就暴露”。postUnoCommand 关闭完成通知,events.rs 也过滤 UNO_COMMAND_RESULT,worker/input.rs:99 随即返回 OK。实测 Worker::run(&doc, "format.style", &["ElyMissingStyle_034859", "ParagraphStyles"]) 返回 Ok(()),样式仍是 Default Paragraph Style;LokView 的 LokError 订阅者也收到零个错误。在临时副本中仅开启完成通知,同一内核明确报告 .uno:StyleApply 的 success=false。修复方向:接入并关联命令完成结果,将执行失败传至 client 和 LokError,加入失败命令的真实内核回归。

crates/ely-lok/src/commands.rs:77 — typed arguments 只检查数量,数值内容直接作为字符串转发,允许内核静默转换为兜底值。实测 run("format.size", &["junk"]) 返回 Ok(()),内核随后报告 FontHeight=0、ModifiedStatus=true、Undo=enabled;错误输入已改变编辑状态。修复方向:按映射中的参数类型校验数值及有效范围,client/view 排队前和 worker 执行前拒绝非法参数;回归断言错误可见且文档状态保持原值。

crates/ely-lok/src/worker.rs:226 — 启用 a11y 后遗漏初始段落快照,首次打开文档时文本桥为空,违反 §7 尾段。载入现有 FODT、聚焦 LokView 并等待布局后,Events.a11y.text 仍为 "";在真窗口中连续四次读取系统 AX 树均得到 textarea value=。同一内核的 getA11yFocusedParagraph 已返回 content="Hello 世界"、position="0"。现有 AX 测试先编辑到 Z,掩盖了此路径。修复方向:启用后读取并发布初始内核文本状态,加入打开已有文档、直接聚焦和读取 AX 的回归。

crates/ely-lok/src/events.rs:82 — 事件过滤器丢弃 a11y 的单元格和对象文本回调(67–69),使正常导航中的文本桥缺失。载入现有 FODS,方向键从 A1 移至 B1 再返回 A1,内核发送 callback 69:cell="1"、action="create"、name="A1"、text="Hello 世界",poll_events 返回的 a11y.text 仍为空;render.rs:27 将此空值交给辅助技术。修复方向:显式处理这些回调中的 text、paragraph 和移除语义,把当前单元格或对象的内核文本传到视图;增加无需编辑的单元格导航回归。

crates/ely-lok/src/events/parse.rs:87 — a11y 位置使用无符号解析,内核的 -1 哨兵被忽略,取消选区后公开状态保留旧范围。实测输入 a 后全选得到 A11y.selection=(0,9),右方向键取消选区时内核发送 start="-1"、end="-1";同批次的 selection 矩形已为空,A11y.selection 仍为 (0,9)。该错误位于已导出的内核状态字段。修复方向:按 LOK 的有符号位置及 -1 语义建模,明确清理取消后的范围;加入全选→取消和段落切换回归。

crates/ely-lok/src/client/tests/commands.rs:27 — 命令状态用 contains(want) 验证,错误字号仍能通过核心映射测试,削弱 LOK-05/12 的交付证据。在临时副本中仅把 worker 收到的 FontHeight 参数 "18" 改成 "118",真实内核报告 FontHeight="118",every_mapped_command_reaches_the_kernel_and_reports_state 仍通过(1 passed);保存结果的现有断言也接受此错误。修复方向:按回调的实际格式精确比较状态值,使 18→118 变异触发测试失败。