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

2.7 KiB
Raw Blame History

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_JSuploadFileToMediaAsset(file, plan, options) 的编排壳同构迁入 rust/crates/mnote-web/browser/local-upload-runtime.jslayout.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 可复用现有外置 helperuploadLocalFolderAssetuploadMediaAssetinsertUploadedAssetIntoEditor
  • 通过 deps 注入仍属于 shell 的依赖:
    • currentSourceKind
    • currentRootUri
    • currentDocumentId
    • editorRootFromUploadOptions
    • appendUploadedAssetRow
    • refreshLocalFolderSidebarSnapshot
    • 需要时注入 dispatchEvent / CustomEvent
  • 保持事件不变:
    • local folderwolai:local-assets-changed
    • non-local mediawolai: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。

验收命令

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