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

18 lines
4.9 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/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 竞争、移除锁后重试和锁文件保留的测试。