# Reasonix Worker A：Local Folder Tree Live 后端事件流

Project root：`/mnt/Data1T/mnote`

你不是唯一 worker。不要回滚、覆盖或清理他人的改动；只修改本任务 ownership 范围内的文件。不要提交 git。

## 背景

`design/01-tree-first-graph-kernel/process/1-8-mvp-post-process-execution-order-v1.md` 仍未整体完成，当前阻塞在 `3-3`：local_folder 默认路径的 Sidebar / FileTree 仍通过 `startLocalFolderSidebarWatch()` 轮询 `/api/tree/local-folder-watch` 后补拉 projection，没有进入统一 tree live consumer。

新 checklist：`design/03-rust-web/process/3-18-local-folder-tree-live-consumer-convergence-checklist-v1.md`

## Ownership

允许修改：

- `rust/crates/mnote-web/src/routes/local_folder_events.rs`
- `rust/crates/mnote-web/src/routes/stream_support.rs`
- `rust/crates/mnote-web/src/routes/mod.rs`
- 同文件测试

只读参考：

- `rust/crates/mnote-web/src/local_folder_watcher_registry.rs`
- `rust/crates/mnote-web/src/routes/local_folder_source.rs`
- `rust/crates/mnote-web/src/routes/kernel.rs`

禁止修改：

- `rust/crates/mnote-web/src/ssr/pages/layout.rs`
- `scripts/*.js`
- 其他 design 文档

## 目标

1. 给 local_folder 提供 tree live 事件形状，至少支持 snapshot / resync。
2. payload 中必须携带：
   - `kind: "snapshot"` 或 `kind: "resync"`
   - `stream: "workspace"`
   - `projection: "sidebar_tree"`
   - `sourceKind: "local_folder"`
   - `rootUri`
   - `workspaceId`
   - `revision`
   - `data.dataset.kernel_sidebar_projection`
   - `data.dataset.kernel_file_tree_projection`
3. 复用 `LocalFolderWatcherRegistry`，不要新增第二套 watcher。
4. 如果不能可靠生成细粒度 delta，本阶段允许 watcher change 后发 resync snapshot。
5. 不把 local_folder 变化写回 Convex command log。

## 建议实现

- 可以扩展 `/api/local-folder/events`，让它在 query 中带 `treeLive=1` 或 `scope=tree` 时输出 `snapshot` / `resync` 事件；保留原有 `ready` / `change` 给 web_shell 编辑器外部变更使用。
- snapshot 可复用 `load_local_folder_page_tree_snapshot(rootUri)` 和 `load_local_folder_file_tree_snapshot(rootUri)` 组装 dataset。
- 事件 id 可继续使用 revision。

## 验收命令

```bash
cargo test --manifest-path rust/Cargo.toml -p mnote-web local_folder_events -- --test-threads=1
cargo test --manifest-path rust/Cargo.toml -p mnote-web stream_support -- --test-threads=1
git diff --check
```

## 最终回复格式

- 修改文件列表
- 新增/变更的 API 行为
- 运行过的命令和结果
- 未完成项或风险
