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

6.0 KiB
Raw Blame History

FAIL

crates/ely-pdf-engine/shim/ely_write.c:349:预览与缺字失败会清除重做分支。复现:把 “Hello world” 改成 “Hi world”,撤销,再调用 put_text(..., scale=2) 预览并取消,或尝试用 Helvetica 写入“你好”;两种情况随后 undo(..., redo=true) 都返回 “nothing to redo”。单独读取 text_blocks 后重做正常。pdf_begin_operation 后的实际内容/资源改写截断 journal,pdf_abandon_operation 仅回滚当前改写,原重做分支已经丢失;清资源缓存也无法恢复它。违反 §11.1 的统一撤销规则及预览/失败保留原状态的契约。修复方向:预览在独立文档副本执行,正式改写前完成字形和字体校验,并保证失败事务保留已有 journal 分支。实测证据:/tmp/ely-c113-r1/crates/ely-pdf-engine/tests/review_probe.rs 中 preview_preserves_redo_history、missing_font_preserves_redo_history 均失败,block_read_alone_keeps_redo 通过;日志 /tmp/ely-c113-r1-engine-probes.log。

crates/ely-pdf-engine/shim/ely_write.c:320;apps/ely-pdf/src/writes.rs:96:字号增大越出原框时会直接提交,跳过用户预览确认。复现:选中样本中的 18pt “Hello world / Second line”,保持“文档自带字体”,把文字改为 “Hi”、字号设为 72pt 后应用。字号扩大四倍,worker 仍给 grew=false,应用实际得到 edited=1、preview=false。判定只比较行数和新框宽,遗漏字号、垂直边界及原文字实际边界的变化,违反 §11.3“替换可能改变布局时提供预览”。修复方向:根据原/新排版的实际区域和字号等布局属性决定确认,确认前保持文档原样;补充同字体、行数减少但字形变大的回归。实测证据:enlarged_single_line_requires_preview、review_enlarging_glyphs_waits_for_confirmation 失败;副本修复判定后分别通过,日志 /tmp/ely-c113-r1-engine-probes.log、/tmp/ely-c113-r1-app-probes.log、/tmp/ely-c113-r1-repair-app.log。

crates/ely-pdf-engine/shim/ely_text.c:249:直接用前两个 stext line 的基线差作为行距,允许行距为零,导致新文字各行重叠。复现:有效 PDF 内容为 “BT /F1 18 Tf 1 0 0 1 72 720 Tm (Hello) Tj 1 0 0 1 160 720 Tm (world) Tj ET”;MuPDF 将其识别为一个 editable=true、text="Hello\nworld" 的块,两段基线相同。把块改为 “One two three four five”、框宽设为 50pt,写入成功,但全部 19 个字符顶部都为 52.65,各个折行叠在同一位置。违反 PDF-03 的文本框局部重排契约。修复方向:区分同一基线上的片段与纵向行,依据有效纵向间隔或单行排版规则生成正行距;补充同基线多片段的渲染/字符位置回归。实测证据:wrapped_text_uses_distinct_baselines 失败;副本修复后字符顶部变为 52.65、74.24998、95.85001 等并通过,日志 /tmp/ely-c113-r1-engine-probes.log、/tmp/ely-c113-r1-repair-engine.log。

apps/ely-pdf/src/writes.rs:153:图片选择器返回后重新取 active_view,将发起文档的页号和对象序号用于另一份文档;添加图片在 :167、:175 同样重新取活动文档和当前页。复现:在 A 选中图片并发起 Replace Image,选择器待返回期间打开 B,随后确认一张方形图片。真实 worker 修改了 B,A/B 的编辑计数为 (0, 1),A 原对象保留。违反 PDF-04 与 §11.1 的统一文档选择/状态规则。修复方向:打开选择器时绑定发起标签、文档版本、页及对象身份,回调核验后只修改该目标;添加图片也绑定发起页。实测证据:review_replace_image_stays_with_initiating_tab 失败;副本绑定发起视图并核验版本后计数为 (1, 0),日志 /tmp/ely-c113-r1-app-probes.log、/tmp/ely-c113-r1-repair-app.log。

apps/ely-pdf/src/content.rs:96:图层读取的清理回调会被 PdfView::read 的版本守卫整体丢弃,reading_layer 永久保留 true,后续每页的对象与文字读取都被阻止。复现:打开两页 PDF,在阅读模式排入真实页面旋转,立即切到编辑工具并请求第一页图层。旋转完成使 version 增加,旧读取回调被丢弃;继续刷新 100 轮后 reading_layer=true、layers 中仍无第一页,无法点选编辑,重新切换工具也保留该状态。修复方向:异步完成时总是清理该请求的读取状态,再按版本决定接纳数据;旧结果清理后允许当前版本重读。实测证据:review_layer_read_recovers_after_overlapping_edit 使用真实 worker 和工具切换失败;副本将清理移到版本判定前后得到 (false, true) 并通过,日志 /tmp/ely-c113-r1-layer-probe.log、/tmp/ely-c113-r1-repair-app.log。

apps/ely-pdf/src/writes.rs:24;apps/ely-pdf/src/view.rs:249:Esc 绑定仅覆盖页面视图的 PdfEditing 上下文,右侧编辑面板是页面视图的兄弟元素;在文本输入框获得焦点后,Esc 无法退出工具。复现:开启编辑、点选文字块、聚焦右侧 TextInput,再发送真实键盘 escape,tool 仍为 Edit;现有 escape_leaves_the_edit_tool 只聚焦页面视图。违背 agents.md:174 的“Esc 退出”和 C11.3 的已验证声明。修复方向:使编辑快捷键上下文覆盖页面与编辑面板,并验证字段焦点下的退出行为。实测证据:review_escape_leaves_tool_from_text_field 失败;副本将上下文放到共同窗口根后得到 Read 并通过,日志 /tmp/ely-c113-r1-escape-probe.log、/tmp/ely-c113-r1-repair-app.log。

crates/ely-pdf-engine/shim/ely_write.c:294、:330;crates/ely-pdf-engine/shim/ely_place.c:239;crates/ely-pdf-engine/shim/ely_shim.h:18:新增注释违反 agents.md 的“一行、十词以内”。:294 与 ely_shim.h:18 均为 11 词;ely_write.c:330 为两行 21 词,ely_place.c:239 为两行 20 词。运行 python3 tests/scripts/comments.py 即以 FAIL 退出并报告 ely_write.c:294;独立 C 注释扫描另确认其余三处。修复方向:将这些注释压缩到单行十词以内,补充检查器对多行 C 注释和 .h 文件的覆盖。