# 4-47 [process] Batch A3 Local Folder Trash Final Smoke Checklist v1

> 创建时间：2026-05-21
>
> 上位入口：`design/01-tree-first-graph-kernel/process/1-8-mvp-post-process-execution-order-v1.md`
>
> 阶段：Batch A / P0 剩余 local folder trash smoke 收口
>
> 当前状态：`DONE`

## 1. 目标

关闭 `4-34` 和 `4-46` 中 Batch A 剩余的 local folder 垃圾箱验证缺口：

- local folder empty-trash UI smoke。
- local folder Markdown 页面自身的 archive / restore / purge smoke。
- 根据真实 smoke 结果判断 `4-34` / `4-46` 是否可归档到 `done/`。

本阶段不改 delete 默认进入垃圾箱的语义，不把 reload 型刷新伪装成 no-refresh，不扩新产品面。

## 2. 当前剩余缺口

- `4-34` 中 local folder 非 md 资源 empty-trash 已由 `task474` 覆盖。
- `4-34` 中 local folder Markdown 自身 trash lifecycle 已由 `task475` 覆盖。
- `4-46` Batch A 执行总 checklist 已满足归档条件。

## 3. Reasonix Worker 拆分

### Worker A：local folder empty-trash UI smoke

Owner：

- 可新增 `scripts/task474-local-folder-empty-trash-ui-smoke.js`
- `design/04-tree-domain/process/4-34-filetree-trash-dual-browser-no-refresh-v1.md`
- `.codex/reasonix-tasks/results/batch-a3-worker-a-empty-trash.md`

目标：

- 构造 local folder 临时 root，同时放入 markdown 页面和非 md 资源。
- 通过 tree command 或 UI 将它们移动到 `.mnote/trash`。
- 打开 `/trash?sourceKind=local_folder&rootUri=...`，分别点击“清空页面垃圾箱”和“清空资源垃圾箱”。
- 断言对应行消失、文件系统 trash 文件消失、`trash-index.json` 对应 entry 清理。
- 记录点击清空期间无非预期 browser navigation。

验收：

```bash
node --check scripts/task474-local-folder-empty-trash-ui-smoke.js
MNOTE_WEB_SMOKE_BASE_URL=http://127.0.0.1:<port> PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH=/usr/bin/google-chrome-stable node scripts/task474-local-folder-empty-trash-ui-smoke.js
```

### Worker B：local folder Markdown trash lifecycle smoke

Owner：

- 可新增 `scripts/task475-local-folder-markdown-trash-lifecycle-smoke.js`
- `design/04-tree-domain/process/4-34-filetree-trash-dual-browser-no-refresh-v1.md`
- `.codex/reasonix-tasks/results/batch-a3-worker-b-markdown-lifecycle.md`

目标：

- 构造 loose Markdown 和/或 bundled Markdown 页面。
- 通过 `/api/tree/commands` 验证 Markdown 页面的 `delete` / `restore` / `purge`。
- 断言 canonical command、源路径、trash 路径、`trash-index.json` 和恢复后的 documentId 与文件系统一致。
- 这是生命周期 smoke，不要求 UI 截图；浏览器可见性由 Worker A 和后续 Browser Worker 覆盖。

验收：

```bash
node --check scripts/task475-local-folder-markdown-trash-lifecycle-smoke.js
MNOTE_WEB_SMOKE_BASE_URL=http://127.0.0.1:<port> node scripts/task475-local-folder-markdown-trash-lifecycle-smoke.js
```

### Worker C：文档归档审查

Owner：

- `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`
- 如条件满足，可移动到 `design/04-tree-domain/done/`
- `.codex/reasonix-tasks/results/batch-a3-worker-c-doc-archive.md`

目标：

- 在 Worker A/B smoke 结果可复核后，判断 `4-34` 是否满足归档条件。
- 判断 `4-46` 是否已经完成 Batch A P0，是否可以归档。
- 若仍有缺口，必须写明 blocker 与下一步，不得强行移动。

验收：

```bash
git diff --name-status
```

## 4. Codex 复核项

- [x] 读取 Worker A/B 输出；Worker C 由 Codex 本地完成归档审查。
- [x] 独立审查 diff，确认无越权修改。
- [x] 运行新增脚本 `node --check`。
- [x] 在最新 mnote-web 临时端口 `3014` 上实跑新增 smoke。
- [x] 完成后拆 Browser Worker 复测关键 UI smoke 并核验截图。
- [ ] `git diff --check`、`codegraph sync .` 后提交。

## 5. 完成条件

- `task474` 或等价 smoke 覆盖 local folder empty-trash UI。
- `task475` 或等价 smoke 覆盖 local folder Markdown archive / restore / purge。
- `4-34` / `4-46` 状态与真实证据一致。
- 浏览器 worker 输出截图和 `result.json` 已由 Codex 复核。
- 本阶段完成后由 Codex 提交 git。

## 6. 执行结果

- `task474-local-folder-empty-trash-ui-smoke.js` 新增并通过：local folder 页面垃圾箱与资源垃圾箱清空 UI、confirm、无导航、trash-index 清理、文件删除。
- `task475-local-folder-markdown-trash-lifecycle-smoke.js` 新增并通过：loose Markdown 页面 delete / restore / purge 生命周期与文件系统一致。
- Codex 复核命令：
  - `node --check scripts/task474-local-folder-empty-trash-ui-smoke.js`
  - `node --check scripts/task475-local-folder-markdown-trash-lifecycle-smoke.js`
  - `MNOTE_WEB_SMOKE_BASE_URL=http://127.0.0.1:3014 PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH=/usr/bin/google-chrome-stable node scripts/task474-local-folder-empty-trash-ui-smoke.js`
  - `MNOTE_WEB_SMOKE_BASE_URL=http://127.0.0.1:3014 node scripts/task475-local-folder-markdown-trash-lifecycle-smoke.js`
- Reasonix Browser Worker 复测输出：`tmp/reasonix-batch-a3-browser-task474-empty-trash-2026-05-21/`，核心截图 `trash-workbench-empty.png` 已由 Codex 查看。
