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

30 lines
7.5 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-pdf/src/pages.rs:192 — 测量视口的绝对定位 canvas 缺少位置约束,其静态位置落在页面栈之后,`room.origin` 因此指向文档底部;`page_at` 用这个原点换算鼠标位置,文字选择失效,违反 PDF-01。复现:真窗口打开三页 Letter PDF,在第一页拖选文字;实测鼠标窗口坐标为 `(356,179)`,测量原点为 `(240,3349.5)`,拖选始终没有高亮,复制保留测试剪贴板标记。独立构建和原有 17 项测试均通过;跨页复制测试直接设置 Selection,遗漏真实命中路径。修复方向:从实际滚动视口测量固定原点与尺寸,使测量层位置明确绑定视口,并以真实鼠标拖选验证。
apps/ely-pdf/src/select.rs:98 — 文字尚未缓存时,首次按下只发起后台读取并将 selection 清空;读取完成只缓存字符,拖选起点永久丢失。复现:校正上述视口坐标后,首次按下文字、等字符读取完成、继续拖动并松开,selection 仍为空;第二次拖动才出现高亮。隔离探针 `review_first_drag_keeps_its_anchor_after_text_arrives` 失败,原有复制测试绕过这条输入路径。修复方向:保留发起标签、页、按下位置和拖动状态,在字符到达后完成仍有效的选择操作,并覆盖首次拖选与跨页迟到读取。
apps/ely-pdf/src/search.rs:151 — 跳转将目标页顶部向下留出两倍 GAP,露出上一页底部;`pages.rs:107` 随后把第一张可见页设为 current,导致当前页回退,违反 PDF-01 和 agents.md 中视图变化保持当前页的声明。复现:三页 PDF 连续模式下从第一页按 PageDown,真窗口显示第二页正文,状态栏仍为 `Page 1 of 3`,再次 PageDown 继续计算同一个目标。隔离探针在 `show(1,0)` 后实际执行 page_view,current 为 0,预期为 1。修复方向:协调跳转位置与当前页判定,使目标页在绘制后仍为当前页;通过真实翻页、缩放和旋转后的帧验证。
apps/ely-pdf/src/search.rs:98 — 搜索回调只核对局部 round;新 Find 从零计数,旧查询的批次可以进入另一个查找实例,污染命中和已搜索页数。复现:A 有三页和三处 alpha 命中,启动 alpha 搜索后立即切到只有一处 zzz 的单页 B 并查找 zzz,两次查询 round 均为 1;隔离探针实际得到四处命中,页号为 `[0,2,2,0]`,预期只有 B 的 `[0]`。修复方向:结果绑定发起标签和独立查找实例,再核对查询代次;关闭、重开与换标签均使旧实例结果失效,增加延迟批次回归。
apps/ely-pdf/src/search.rs:134 — 查找状态属于 find.tab,命中跳转却经 show 修改当前活动标签;后台自动选择首个命中会改变用户已经切换到的文档。复现:在三页 A 搜索只出现于第三页的 two,批次返回前切到单页 B,保留 A 的查找状态;隔离探针由真实搜索回调自动跳转,B 的 current 从 0 变成 2。修复方向:跳转核对并作用于查找所属标签,活动标签改变时延后该实例的自动跳转;覆盖后台搜索期间切换标签。
apps/ely-pdf/src/pages.rs:222 — 渲染失败只发提示,随后无条件 notify;图块仍缺失,下一帧继续请求相同图块,形成持续失败与重绘循环,违反空闲无重绘规则。复现:真窗口打开 PDF,终止它的 worker,再点 Zoom In;原始应用在之后两秒空闲期间记录 240 次 `drawing a page` 失败,并不断生成错误提示。修复方向:记录图块或 worker 的失败状态,停止自动调度失败请求,在明确重试或重新打开时恢复,并验证故障后的空闲行为。
crates/ely-pdf-engine/src/bin/ely-pdf-worker/ffi.rs:196 — 页内搜索固定使用 512 个 quad 的容量,结果饱和时直接返回成功,遗漏后续命中,违反 PDF-01 全文搜索。复现:一张 612×792 pt 页面放置 50 行、每行 12 个独立 alpha,共 600 处;真实 worker 搜索仅返回 512 处,应用据此报告完整结果。修复方向:使用能够取得全部命中的搜索接口或完整遍历策略,并覆盖单页超过 512 处命中。
crates/ely-pdf-engine/shim/ely_mupdf.c:218 — 搜索丢弃 MuPDF 的命中分组信息,应用将每个 quad 计为一处命中;跨行短语的一处匹配因此被拆成多处。复现:单页只有两行 hello 和 world,查询 `hello world`;真实 worker 返回两个 quad,真窗口显示 `1 of 2`,下一处在同一短语的两行之间跳转。修复方向:保留一个逻辑命中与其全部四边形的关系,计数、跳转与高亮按逻辑命中处理,并增加跨行短语回归。
apps/ely-pdf/src/viewer.rs:217 — 第二个加密文件直接覆盖第一个密码对话框,前一个已经打开的 worker 文档失去界面入口和关闭路径。复现:依次打开两个 AES-256 PDF,在输入密码前让第二个密码框出现,再取消第二个;隔离探针仍能用正确密码解锁第一个 Doc,证明该文档遗留在 worker。启动参数和多选打开均可进入此路径。修复方向:串行处理待授权打开,或在替换密码请求时显式关闭被替换文档;保证每个待授权 Doc 都有可达的完成或取消路径。
apps/ely-pdf/src/pages.rs:138 — 图块淘汰仅核对页号、缩放、旋转和主题;同一张页内已经滚出屏幕的图块持续保留,违背 agents.md 的 C11.1“屏外与旧缩放的块即丢”声明。复现:612×14400 pt 长页在固定缩放下向下滚动 1500 px,隔离探针确认屏外 `ty=0` 图块仍在缓存;沿长页继续滚动会累积整页像素。修复方向:按实际可见图块集合淘汰缓存,并在后台结果到达时核对该图块是否仍可见;覆盖长页内滚动。
apps/ely-pdf/src/viewer.rs:387 — 有文档时始终分配左侧书签栏,即使书签列表为空,也只显示 No bookmarks 并常驻占用 240 px,违反 PRD §5.2“无内容的侧栏不占位”。复现:真窗口打开没有书签的普通 PDF,左栏占位且中央适合宽度的页面随之缩小。修复方向:按当前标签实际书签内容决定是否提供左栏,覆盖空书签文件与有书签文件之间切换。
apps/ely-pdf/src/viewer.rs:82 — 空白窗口也立即启动 worker,worker 初始化 MuPDF,违反 PERF-01“无文件冷启动……不预加载未使用内核”。复现:以零文件参数启动 ElyPDF,实测空白窗口已有一个 ely-pdf-worker 子进程,日志显示 worker up。修复方向:首个打开请求时再启动 worker,在后台完成初始化并显示打开状态,验证无文件启动时的子进程。
crates/ely-ipc/src/lib.rs:23 — 长度头已经读入部分字节时的 UnexpectedEof 被当作正常流结束,截断帧错误被吞掉。复现:输入只有 1、2 或 3 个长度字节后关闭,read_frame 返回 `Ok(None)`;真实 PDF worker 收到一个长度字节后以 0 退出,输出和错误均为空。原有测试只覆盖空流 EOF;新增隔离截断头探针失败。修复方向:区分尚未开始新帧的干净 EOF 和部分长度头的截断,后者返回错误,覆盖三个截断长度。
crates/ely-pdf-engine/shim/ely_mupdf.c:100 — 三处注释超过十词:第 100 行 11 词、第 108 行 12 词、第 244 行 11 词,违反 agents.md 的注释长度规则。复现:逐条按空白分词即可得到上述计数;现有 comments.py 检查通过,因为其 C 文件范围只包含 tests/engines,遗漏该垫片。修复方向:缩短三处注释,并让现有注释检查覆盖该项目 C 源文件。