# Reasonix Batch A3 Worker B：local folder Markdown trash lifecycle smoke

Project root: `/mnt/Data1T/mnote`

## 目标

补齐 `4-34` 中 local folder Markdown 自身 trash lifecycle 独立 smoke：Markdown 页面通过 `/api/tree/commands` 完成 archive / restore / purge，文件系统与 trash index 均一致。

## Ownership

允许修改：

- 新增 `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`

禁止：

- 不修改 Rust 源码。
- 不修改 `4-46` 或移动任何 design 文件。
- 不提交 git。
- 不把非 md 资源生命周期代替 Markdown 页面生命周期。

## 要求

1. 新增 API smoke，可参考 `task437-local-folder-asset-trash-lifecycle-smoke.js`。
2. 构造临时 local folder root 和 `.mnote/workspace.json`。
3. 至少覆盖 loose Markdown 页面：
   - `delete` 后 canonical command 应是页面或资源 lifecycle 中当前实现返回的真实值。
   - 源 `.md` 消失，`.mnote/trash` 中出现对应文件，`trash-index.json` 记录 `local-md:*`。
   - `restore` 后 `.md` 回原路径，trash 文件消失，index 清理。
   - 再次 `delete` 后 `purge`，源路径与 trash 路径均不存在，index 清理。
4. 如 bundled Markdown 页面当前实现也容易覆盖，可加一个 bundled case；否则在结果中说明只覆盖 loose Markdown，bundled 由 Rust 单测覆盖或待后续。
5. 结果写入 `tmp/task475-local-folder-markdown-trash-lifecycle-smoke/result.json`。
6. 更新 `4-34` 对 local folder Markdown trash lifecycle 覆盖状态，但不要移动文件。

## 验收命令

```bash
node --check scripts/task475-local-folder-markdown-trash-lifecycle-smoke.js
node scripts/task475-local-folder-markdown-trash-lifecycle-smoke.js
```

## 最终输出

写入 `.codex/reasonix-tasks/results/batch-a3-worker-b-markdown-lifecycle.md`，包含：

- 修改文件
- smoke 覆盖内容
- 验证命令和结果
- 未完成项 / 风险
