8 lines
2.8 KiB
Markdown
8 lines
2.8 KiB
Markdown
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 回归覆盖了原因不同的同提交事件。修复方向:为当前快照中的重复事件保留独立行身份,刷新时按日志序列追踪原事件,身份有歧义时清除选择;增加同秒同原因重复事件的选中、详情和刷新回归。
|