2.1 KiB
FAIL
crates/ely-lok/src/client.rs:263 — 上一轮第二项的 LOK 部分仍缺少预期修订:run 只发送文档号、命令与参数,worker 直接针对当前内核状态执行,违反 PRD §17.2。真实 LOK 探针打开 A、B、C 三个工作表,保留当时针对 B 的序号 2 与 Doc clone;执行 sheet.delete("1") 删除 A 后,以旧句柄提交 sheet.rename("Renamed B", "2") 返回 Ok,实际将 C 改名,最终工作表为 B、Renamed B。修复方向:为依赖文档状态的 LOK 请求携带预期修订,并在执行内核操作前校验;加入结构编辑之后提交旧请求的真实 worker 回归测试。证据:/tmp/ely-c171-r2-probes.log。
crates/ely-lok/src/worker.rs:315 — 每个 worker 的文档会话号均从 1 开始,client.rs:57 的 Doc 仅保存该数字,跨 worker 句柄可访问、关闭另一会话的文档,违反 PRD §17.2 的会话隔离。真实探针分别在 worker A、B 载入首份文档:A 的 Doc.size(&mut B) 返回 B 文档尺寸;B.close_doc(A 的 Doc clone) 返回 Ok;随后 B 的有效 Doc.size 报 "no such document"。每次 load 自增只覆盖同一 worker 内的指针复用。修复方向:将 Doc 与唯一 worker 会话绑定,发送前与 worker 接收时校验会话,并让事件订阅遵循相同归属;补充跨 worker 与重启后的旧句柄回归测试。证据:/tmp/ely-c171-r2-probes.log。
crates/ely-pdf-engine/src/structure.rs:209 — detach 使用 whole 将预期修订写成 ANY,导致依赖已读取附件身份的删除跳过 current 校验;第 199 行的附件读取同样跳过该校验,违反 PRD §17.2。真实 PDF worker 探针在修订 1 添加 report.txt 并记录 key=n:report.txt;删除后在修订 3 添加同名的新附件,再以修订 1 的 Doc 和旧 key 提交 detach,返回成功标记 "4",修订 3 的新附件被删除,附件列表变为空。修复方向:附件按 key 读取、删除等依赖文档状态的请求使用 Doc 的预期修订,在读取或修改前拒绝过期请求;加入同名附件替换后旧读取、旧删除均被拒绝且新附件字节保留的回归测试。证据:/tmp/ely-c171-r2-probes.log。