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

4.9 KiB
Raw Blame History

FAIL

apps/ely-tree/src/recovering.rs:93:清理把预览中的目录作为递归 pathspec 交给 clean -f -d,删除范围包含确认前新增的子文件,违反 TREE-13 的危险操作预览,也与 agents.md C13.6 的“预览后新出现的文件不动”声明冲突。独立探针复现:先有 out/early.txt,预览得到 ["out/"],随后创建 out/late.txt,执行确认参数后两个文件都被删除。现有 tests/recovery.rs:87 只覆盖仓库根目录新增文件。修复方向:固定实际删除文件清单,或在写队列中核对目录内容,变化时重新预览并确认;覆盖预览目录内新增文件的测试。

apps/ely-tree/src/work.rs:107:reset --keep 会重置索引,确认框所承诺的“工作区与暂存的改动保留”与执行结果冲突,独立暂存内容会丢失。独立探针复现:两个提交中 a.txt 都为 base,把 staged 暂存,再把工作区改成 unstaged,确认移回前一提交;执行成功后索引恢复成 base,工作区仍为 unstaged,原先独立暂存的 staged 消失。现有移动测试只检查未暂存改动。修复方向:采用能够同时保留暂存和未暂存差异的恢复流程,遇到冲突先拒绝;用独立 Git 命令核对移动前后的索引内容和工作区内容。

apps/ely-tree/src/work.rs:207:移动操作只核对 HEAD 的 OID,recovering.rs:228 构造写操作时丢掉了预览中的分支身份,确认可能移动另一条分支,违反 TREE-13 的预览要求。独立探针复现:main 和 other 指向同一个第二提交,在 main 预览移回第一提交;确认前从终端切到 other,原操作成功,other 被移回而 main 留在第二提交。修复方向:携带完整分支引用或游离状态,在写队列执行前同时核对身份与 OID,变化后重新预览确认;覆盖同 OID 分支切换以及转为游离 HEAD 的测试。

apps/ely-tree/src/recover.rs:42:引用日志的时间取 %ct,这是提交的 committer 时间;界面将它标为“移动于”,导致 checkout、reset 等移动的时间错误。独立探针复现:提交的 committer 时间设为 2000-01-01,当前执行 checkout;独立 Git 的 reflog show -1 --date=raw --format=%gD 给出 HEAD@{1791363853 -0400},recover::reflog 回报的时间仍为 946684800。修复方向:读取 reflog 记录自身的事件时间,保留位置、原因与该事件的对应关系;增加提交时间与移动时间不同的测试。

apps/ely-tree/src/side_places.rs:284:引用日志选择仅以提交 OID 标识;places_pane.rs:126 也按 OID 取第一条记录,同一提交的多次移动会一起被选中,并显示另一条记录的位置、原因和时间。独立探针复现:在初始提交创建 other 后切过去,HEAD@{0} 的 checkout 和 HEAD@{1} 的初始提交具有同一 OID;点击初始提交记录时两行都满足 selected,详情取最新 checkout 的原因。修复方向:让选择保留具体 reflog 记录身份,详情使用所选记录;提交详情读取继续使用该记录的 OID,刷新时核对记录身份。增加同一 OID 多条日志的选择测试。

apps/ely-tree/src/tools.rs:46:编辑器配置只验证 JSON 语法,错误类型经 as_str() 静默变成“尚未选择编辑器”,随后允许覆盖损坏文件,违反错误暴露规则及 agents.md C13.6 的损坏配置保护声明。独立探针复现:tools.json 写入 {"editor":42},Tools::load 得到 editor=None、broken=None;再次选择编辑器后原文件被覆盖成新配置。现有测试仅使用非法 JSON 文本。修复方向:验证配置结构和字段类型,结构错误进入 broken 状态并保留原文件;覆盖合法 JSON 中错误字段类型的测试。

apps/ely-tree/src/tools.rs:160:macOS 的 .app 启动只检查 open 是否成功 spawn,启动助手随后返回的错误被丢掉,GUI 无法显示编辑器打开失败。独立探针复现:已保存的编辑器为随后删除的 DeletedEditor.app;实际 open -a <path> <file> 成功 spawn,随后退出 1 并报告应用不存在,当前错误分支始终跳过。修复方向:在后台收集启动助手的退出状态与诊断,将失败显示在界面;增加已保存 app 被删除或失效后的打开测试。

apps/ely-tree/src/work.rs:222:锁竞争识别只匹配 .lock': File exists,真实的配置锁失败进入普通错误提示,缺少 C13.6 声明的锁对话框和原操作重试。独立探针复现:保留 .git/config.lock 后执行身份设置对应的 Write::Config;随附 Git 返回 git config (exit status: 255): error: could not lock config file .git/config: File exists,locked 判定为 false。现有锁测试仅覆盖 index.lock。修复方向:覆盖各写命令实际的锁失败诊断,统一进入保留原写操作的锁重试流程;增加 config.lock 竞争、移除锁后重试和锁文件保留的测试。