# 4-45 FileTree / Open Editors Lifecycle Link Checklist v1

> 状态：done
>
> 日期：2026-05-21
>
> Owner：filetree action smoke / resource lifecycle observability

## 1. 目标

参考 Sidex Explorer + Open Editors 联动，补 MNote filetree action 与 open editor state 的可观测测试。当前优先修 smoke 缺口和文档状态，不直接改核心业务。

## 2. 允许修改范围

- `scripts/task430-vscode-explorer-stage7-smoke.js`
- `scripts/task471-local-folder-bulk-resource-trash-smoke.js`
- `design/04-tree-domain/process/4-44-filetree-action-layer-paste-drop-delete-v1.md`
- 如发现 checklist 已全部完成，可建议移动到 `done/`，但不要直接移动未验证文件。

## 3. 禁止事项

- 不修改 `layout.rs` / `web_shell.rs` / `local_folder_source.rs`。
- 不改变 delete 默认到垃圾箱的语义。
- 不把环境准备失败伪装成通过。

## 4. Checklist

- [x] 跑或修复 `task430` / `task471` 的可复现前置条件。
- [x] 明确哪些 smoke 已过、哪些因环境阻塞。
- [x] 补充 open editor / filetree active row / lifecycle 状态断言建议。
- [x] 更新 4-44 checklist 执行记录。

## 5. 验收

- `node --check scripts/task430-vscode-explorer-stage7-smoke.js`
- `node --check scripts/task471-local-folder-bulk-resource-trash-smoke.js`
- `node scripts/task430-vscode-explorer-stage7-smoke.js`
- `node scripts/task471-local-folder-bulk-resource-trash-smoke.js`

## 6. 非目标

- 不实现完整 undo stack。
- 不改 cloud storage drop executor。

## 7. 本轮执行记录

- 2026-05-21：Reasonix Worker D 识别到 `task430` 的前置问题：新注册用户在 `workspaces:fetchWorkspaceSummaries` 前可能还没有 workspace，需要先通过 `/api/tree/commands` create action 触发 workspace bootstrap。
- 2026-05-21：Worker D 还建议将 `task471` 的验证记录同步到 `4-44`，并补 open editor / lifecycle 状态断言。
- 2026-05-21：Worker D 进程停留在计划提交阶段，没有生成 `final.md`，也没有实际修改 smoke 或 checklist；本轮不把 4-45 checklist 标记为完成。
- **2026-05-22：Worker A 实际修改：**
  - 给 `task430` 的 workspace bootstrap 添加 fallback：当 `workspaces:fetchWorkspaceSummaries` 无返回时，通过 `/api/tree/commands` create（不带 workspaceId）触发 Rust 端 `workspaces:ensureDefaultWorkspace` 自举 workspace。
  - 添加 `result.phases` 阶段追踪（auth-signin → auth-navigate → workspace-bootstrap），让失败可区分环境阻塞 vs 业务回归。
  - 添加 `filetree-active-row` 断言：检查当前打开页对应的 FileTree row 是否有 `[data-active="true"]`。
  - 添加 `filetree-selected-row` 记录：记录选中行 ID（不做强制断言，因选中语义随点击变化）。
  - 添加 `open-editors-section` 记录：确认 MNote 当前无 Open Editors DOM section（VS Code 对比的已知缺口），只记录不报错。
  - 所有新增断言均使用 `runOptional` 包装，环境缺口标记为 skipped 而不阻塞整体结果。
- 2026-05-21：Codex 独立复跑 `node --check scripts/task430-vscode-explorer-stage7-smoke.js` / `node scripts/task430-vscode-explorer-stage7-smoke.js`，结果 `ok:true`。`result.phases` 中 `auth-signin`、`auth-navigate`、`workspace-bootstrap` 均通过；`f2-inline-rename-doc`、`f2-inline-rename-asset`、`cut-paste-move`、`dnd-preflight-guard` 均通过。
- 2026-05-21：Reasonix Browser Worker 复跑 task430，输出目录 `tmp/reasonix-batch-a-browser-task430-2026-05-21/`，结论 `PASS_WITH_KNOWN_GAPS`。已知缺口保留为：FileTree row 未同步 `data-active="true"`、Open Editors section 未实现、右键菜单缺 `Paste Into`、DnD readonly/重名冲突仍需后续端到端矩阵。
- 2026-05-21：Codex 独立复跑 `node --check scripts/task471-local-folder-bulk-resource-trash-smoke.js` / `node scripts/task471-local-folder-bulk-resource-trash-smoke.js`，结果 `ok:true`。Reasonix Browser Worker 输出目录 `tmp/reasonix-batch-a-browser-task471-2026-05-21/`，确认两个 local folder 资源行可 Ctrl 多选、确认文案含 `2 个附件`、DOM 状态写入 `bulk-delete` / `archived`，`.mnote/trash-index.json` 包含两项。
