Files
mnote/.codex/reasonix-tasks/2026-05-25-batch-d-worker-b-3-20-upload-file-orchestrator.md
T

64 lines
2.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Reasonix Batch D / Worker B3-20 uploadFileToMediaAsset 编排壳外置候选
Project root`/mnt/Data1T/mnote-worktrees/0525-d-worker-b-3-20-upload-file-orchestrator`
## 目标
在独立 worktree 中产出候选 patch:把 `SIDEBAR_TREE_JS``uploadFileToMediaAsset(file, plan, options)` 的编排壳同构迁入 `rust/crates/mnote-web/browser/local-upload-runtime.js``layout.rs` 只保留委托 wrapper 和完整 inline fallback。不得改变本地 Markdown 资源归属、非本地 media upload、editor 插入、sidebar refresh 或事件分发行为。
## 允许修改
- `rust/crates/mnote-web/browser/local-upload-runtime.js`
- `rust/crates/mnote-web/src/ssr/pages/layout.rs`
必要时只更新同文件内字符串断言测试。
## 实现要求
- `local-upload-runtime.js` 新增并导出 `uploadFileToMediaAsset(file, plan, options, deps)`
- `layout.rs` 中原 `uploadFileToMediaAsset(file, plan, options)` 优先委托 `localUploadRuntimeFunction('uploadFileToMediaAsset')`runtime 不存在时执行原 inline fallback。
- runtime 可复用现有外置 helper`uploadLocalFolderAsset``uploadMediaAsset``insertUploadedAssetIntoEditor`
- 通过 `deps` 注入仍属于 shell 的依赖:
- `currentSourceKind`
- `currentRootUri`
- `currentDocumentId`
- `editorRootFromUploadOptions`
- `appendUploadedAssetRow`
- `refreshLocalFolderSidebarSnapshot`
- 需要时注入 `dispatchEvent` / `CustomEvent`
- 保持事件不变:
- local folder`wolai:local-assets-changed`
- non-local media`wolai:assets-changed`
- 保持 `data-mnote-last-upload-*` 由 editor 插入 helper 维护,不新增第二套状态。
## 禁止事项
- 不迁 `resolveFileTreeUploadTarget`
- 不改 `/api/local-folder/assets/upload``/api/media/upload` 合同。
- 不改 OnlyOffice URL / resource open 语义。
- 不修改 editor island、document conflict runtime、AGENTS、design、bugs 或 git 状态。
- 不提交 git。
## 验收命令
```bash
node --check rust/crates/mnote-web/browser/local-upload-runtime.js
cargo fmt --manifest-path rust/Cargo.toml --all --check
cargo check --manifest-path rust/Cargo.toml -p mnote-web
cargo test --manifest-path rust/Cargo.toml -p mnote-web local_upload_runtime_contains_editor_upload_context_helpers -- --test-threads=1
cargo test --manifest-path rust/Cargo.toml -p mnote-web sidebar_upload_runtime_routes_local_markdown_assets_to_local_folder -- --test-threads=1
NODE_PATH=/mnt/Data1T/mnote/node_modules node scripts/task479-local-folder-markdown-resource-lifecycle-smoke.js
```
## 输出要求
handoff 必须列出:
- 修改文件。
- 委托 deps 清单。
- 是否保留 fallback。
- 验收命令和结果。
- 浏览器 smoke 证据路径。
- 未覆盖风险。
- `git diff --stat`