# Reasonix Batch A / Worker D：3-20 local upload / filetree 下一刀只读审计

Project root：由 runner 传入的独立 worktree。

## 目标

只读审计 `3-20` 后续切片：local upload 主流程、filetree keyboard / clipboard / DND / context menu DOM。基于已落地的 `filetree-runtime.js`、`filetree-selection-runtime.js`、`filetree-context-menu-runtime.js` 和 `local-upload-runtime.js`，给出下一刀最小实现建议。

## 只读范围

可以读取：

- `rust/crates/mnote-web/src/ssr/pages/layout.rs`
- `rust/crates/mnote-web/browser/filetree-runtime.js`
- `rust/crates/mnote-web/browser/filetree-selection-runtime.js`
- `rust/crates/mnote-web/browser/filetree-context-menu-runtime.js`
- `rust/crates/mnote-web/browser/local-upload-runtime.js`
- `scripts/task479-local-folder-markdown-resource-lifecycle-smoke.js`
- `scripts/task487-local-folder-tree-live-consumer-smoke.js`

## 禁止事项

- 严格只读，禁止修改任何源码、文档、脚本、生成产物或 git 状态。
- 不改变资源归属语义、tree command 语义或 upload API 合同。
- 不把 editor internal selection / history 迁入 `mnote-web` browser runtime。

## 审计问题

请回答：

1. local upload 剩余函数中，哪些可迁到 `local-upload-runtime.js`，哪些仍应留在 inline 直到 API / editor 插入边界更清楚？
2. filetree keyboard / clipboard / DND / context menu DOM 中，下一刀应优先迁纯 helper 还是 DOM listener？
3. 哪个实现切片风险最低，允许文件范围是什么？
4. 对应最小测试和浏览器 smoke 是什么？
5. 哪些现有 runtime helper 可复用，避免新增第二套 filetree selection 真相？

## 输出要求

最终 handoff 必须包含：

- local upload 函数归属表。
- filetree 下一刀建议。
- 明确禁止迁移项。
- 推荐 Worker 实现任务书草案和验收命令。
