Files
ElyOffice/tasks/reviews/C13.6-r3.md
T

8 lines
2.8 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-tree/src/work.rs:236:清理改为直接 `remove_file` 后,执行前只检查文件类型,遗漏当前索引状态,会删除已成为跟踪文件的工作区内容,违反 TREE-13 的“清理未跟踪文件”。独立构建成功,108 项应用测试通过,R2 文件变目录和日志前插场景均通过;新增执行函数探针复现:创建 `new.txt` 并预览,随后从外部 Git 执行 `git add new.txt`,再写入尚未暂存的新内容,确认清理返回 `Ok(())`,文件消失,独立 `git status --porcelain` 显示 `AD new.txt`,索引仍保留旧内容,新工作区内容丢失。同场景直接执行 `git clean -f -- new.txt` 会保留文件。修复方向:删除前重新核对预览路径的 Git 状态,已跟踪的路径应拒绝并重新预览;补上预览后外部暂存且继续编辑的回归。副本中增加索引核对后,该探针与 R2 回归通过。
apps/ely-tree/src/work.rs:228:`symlink_metadata(root.join(file))` 只检查末级对象,路径的父目录仍会跟随符号链接;随后删除可越过仓库边界,违反 TREE-13 的危险操作预览和 agents.md C13.6 的“只删所列”。执行函数探针复现:预览 `out/early.txt`,确认前把 `out` 改名为 `saved-out`,创建仓库外的 `outside/early.txt`,再把 `out` 换成指向 `outside` 的符号链接;确认返回 `Ok(())`,仓库外文件被删,原预览文件仍留在 `saved-out/early.txt`。同场景独立执行 `git clean -f -- out/early.txt` 会保留仓库外文件。修复方向:验证父路径身份,并以禁止跟随父路径链接的删除方式绑定仓库内预览对象;路径身份变化时拒绝并重新预览。补上父目录被链接替换的回归;副本中增加父链接核对后,该探针与 R2 回归通过。
apps/ely-tree/src/recover.rs:41:以提交、原因和秒级时间判定 reflog 事件身份,多个真实事件可以具有相同三元组;`side_places.rs:284` 会同时选中它们,`places_pane.rs:137` 会将详情定位到首个匹配事件,违反 TREE-13 的 reflog 查看和 agents.md C13.6 的“详情显示所选那一条”。随附 Git 与实际 `reflog`、`Moved::same` 探针复现:在同一秒连续执行两次 `git reset --keep HEAD`,两条记录分别为 `HEAD@{0}`、`HEAD@{1}`,提交、`reset: moving to HEAD` 和时间完全相同;选中 `HEAD@{1}` 时,两条记录均满足选中条件,详情取 `HEAD@{0}`。探针固定 `GIT_COMMITTER_DATE` 重现秒级碰撞,唯一选中断言得到 2,预期为 1。现有 R2 回归覆盖了原因不同的同提交事件。修复方向:为当前快照中的重复事件保留独立行身份,刷新时按日志序列追踪原事件,身份有歧义时清除选择;增加同秒同原因重复事件的选中、详情和刷新回归。