fix: 修复本地文件夹垃圾箱恢复聚焦

This commit is contained in:
lix-2026
2026-05-21 14:39:38 +08:00
parent b0fa1e53d8
commit 83ad32dd67
17 changed files with 680 additions and 39 deletions
@@ -0,0 +1,100 @@
# Batch A2 Worker Ctask473 语义与 4-34/4-46 文档收口 — 执行结果
## 执行人
Reasonix Worker C (Batch A2)
## 环境
| 检查项 | 状态 |
|--------|------|
| 项目根 | `/mnt/Data1T/mnote` |
| Node.js | 可用 |
| `node --check` | 通过,无语法错误 |
| 修改文件数 | 3(见下) |
| 未触及 Rust | ✅ |
| 未提交 git | ✅ |
| 未撤销/覆盖已有改动 | ✅ |
## 修改文件
| 文件 | 改动说明 |
|------|----------|
| `scripts/task473-local-folder-trash-restore-no-refresh-focus-gap-smoke.js` | `evidence.ok = true``evidence.ok = hasFocusEvidence` |
| `design/04-tree-domain/process/4-34-filetree-trash-dual-browser-no-refresh-v1.md` | 5 处更新:验收矩阵非 md 行写实、3.5 审计结论更新、5 边界更新、6 完成标准更新 |
| `design/04-tree-domain/process/4-46-batch-a-filetree-action-trash-smoke-execution-checklist-v1.md` | 追加 Batch A2 执行记录 |
## Smoke 语义变化
**改动前**task473 步骤 9 正确记录 `ok: false` 和 focus 缺口,但末尾无条件设置 `evidence.ok = true`,整体结果为 `ok: true`。脚本作为回归测试时无法区分"所有功能正常"和"已知缺口但其他正常"。
**改动后**`evidence.ok = hasFocusEvidence`。当 focus 缺口存在时 `evidence.ok = false`;如果后续实现了 restore focus`selectSidebarFileTreeDocument` 被调用、`data-selected="true"` 出现),`hasFocusEvidence` 变为 `true`,整体通过。各步骤诊断数据照常记录到 `result.json`
这一改变意味着:
- **Batch A2 目标达成**task473 现在是一个**可检测的回归测试** — restore focus 修复后 smoke 自动变绿;回归时自动变红。
- **false-positive 消除**:不再把"已知缺口但其他功能正常"混淆为 `ok: true`
- **诊断不丢**:所有 `steps``focusAfterRestore``navEventsAfterRestore``fileReappearsInFiletree` 仍写入 `result.json`
## 文档状态变化
### 4-34 `design/04-tree-domain/process/4-34-filetree-trash-dual-browser-no-refresh-v1.md`
| 位置 | 旧内容 → 新内容 |
|------|----------------|
| §2 验收矩阵(local folder 非 md 行) | `待定/待定/待定/待定``✅ task435/✅ task437+464/✅ task437+473/✅ task437+464`empty-trash 标记 ❌ 未覆盖 |
| §3.5 审计结论(task163 行) | `尚未覆盖 Markdown 重命名/删除、非 md rename、非 md trash/restore/purge``task435 覆盖 Markdown+非 md create/rename/delete;非 md trash/restore/purge 由 task437+464 覆盖;local folder Markdown 自身 trash lifecycle 仍未编写` |
| §5 边界(非 md bullet | `非 md 本地资源文件 watcher/trash/restore/purge 仍单列为待补``已由 task435/437/464/473 分项覆盖;local folder Markdown trash lifecycle 仍未编写` |
| §6 完成标准 | `task436 或等价 smoke 证据``task435/437/464/473 或等价 smoke 证据`;追加 restore focus 缺口不视为完成的约束 |
### 4-46 `design/04-tree-domain/process/4-46-batch-a-filetree-action-trash-smoke-execution-checklist-v1.md`
| 位置 | 旧内容 → 新内容 |
|------|----------------|
| §8 执行记录尾 | 追加 Batch A2 Worker C 执行记录,说明本轮目标是关闭 task473 的 focus gap 作为可检测回归测试 |
## 验收命令结果
```bash
$ node --check scripts/task473-local-folder-trash-restore-no-refresh-focus-gap-smoke.js
SYNTAX_OK
$ git -C /mnt/Data1T/mnote diff --name-status design/04-tree-domain/process/4-34-filetree-trash-dual-browser-no-refresh-v1.md \
design/04-tree-domain/process/4-46-batch-a-filetree-action-trash-smoke-execution-checklist-v1.md \
scripts/task473-local-folder-trash-restore-no-refresh-focus-gap-smoke.js
M design/04-tree-domain/process/4-34-filetree-trash-dual-browser-no-refresh-v1.md
M design/04-tree-domain/process/4-46-batch-a-filetree-action-trash-smoke-execution-checklist-v1.md
M scripts/task473-local-folder-trash-restore-no-refresh-focus-gap-smoke.js
```
注:`git diff` 中出现的 `D design/04-tree-domain/process/4-44-*.md``D design/04-tree-domain/process/4-45-*.md` 是先前已有更改,非本 worker 引入。
## 仍未覆盖项
### 仍在 open 状态、不视为完成
1. **Restore focus / reveal 完全未实现**task473 step 9 `hasFocusEvidence===false`)。`selectSidebarFileTreeDocument` 从未在 restore 路径调用,且不支持 `local-file:` 行 ID。`4-28` §5.3 已给出短/中/长三条实现路径。
2. **local folder empty-trash smoke 未编写** — 验收矩阵中标记 ❌。
3. **local folder Markdown 自身的 trash lifecycle**(通过 tree command archive/restore/purge `.md` 文件)**未编写独立 smoke**。
### local folder 非 md 资源覆盖率(本轮已写实的覆盖)
| 子项 | 覆盖 Smoke | 状态 |
|------|-----------|------|
| 外部 create/rename/deleteno-reload | task435 | ✅ |
| API archivedelete → trash | task437 | ✅ |
| API restoretrash → 原路径) | task437 | ✅ |
| API purge(从 trash 彻底删除) | task437 | ✅ |
| Trash UI delete → 可见 | task464 | ✅ |
| Trash UI restore → 文件恢复 | task464 | ✅ |
| Trash UI purge → 文件消失 | task464 | ✅ |
| Trash workbench restore no-refreshfetch 型,无导航) | task473 | ✅ |
| Restore 后 filetree 行重现(轮询 1200ms | task473 | ✅ |
| Restore 后 filetree focus/reveal | task473 | ❌ **open** |
| empty-trash smoke | — | ❌ **open** |
## 风险评估
- 无 Rust 修改,回归风险低。
- `task473` smoke 语义从"永远 ok:true"变为"有 focus 才 ok:true",可能影响依赖其 `ok` 字段的外部脚本。但 task473 的消费者只有 Codex 复核流程(`4-46` §5),该流程应优先查看 `result.json` 全量字段而非仅 `ok`
- 4-44 / 4-45 文件缺失(非本 worker 引入)可能导致 Codex 复核时误判为越权删除;已在结果中说明。