# Batch A2 Worker C：task473 语义与 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/delete（no-reload） | task435 | ✅ |
| API archive（delete → trash） | task437 | ✅ |
| API restore（trash → 原路径） | task437 | ✅ |
| API purge（从 trash 彻底删除） | task437 | ✅ |
| Trash UI delete → 可见 | task464 | ✅ |
| Trash UI restore → 文件恢复 | task464 | ✅ |
| Trash UI purge → 文件消失 | task464 | ✅ |
| Trash workbench restore no-refresh（fetch 型，无导航） | 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 复核时误判为越权删除；已在结果中说明。
