Files
mnote/design/03-rust-web/process/3-20-browser-runtime-followup-checklist-v1.md
T

26 KiB
Raw Blame History

3-20 Browser Runtime 后续收口 Checklist v1

创建时间:2026-05-25 状态:process 来源:承接 design/03-rust-web/done/3-19-rust-web-browser-runtime-module-extraction-v1.md 的后续未专项完成项。

1. 目标

3-19 已归档的基础上,继续把仍留在 Rust inline / 主壳大 runtime 中的浏览器行为切成可审计模块。Codex 维护本文件作为事实源,Reasonix 只承接短批次审计、窄范围实现或浏览器 smoke;每批最多 2 个 worker。

2. 本轮边界

本轮优先处理:

  • 主壳 filetree keyboard / clipboard / DND / context menu DOM 后续切片。
  • document pane host adapter / document session / conflict panel runtime 只读审计。
  • 本地上传主流程剩余边界审计,包括 uploadFileToMediaAssetuploadFilesWithResolvedTargetinsertUploadedAssetIntoEditor
  • WS / SSE tree live 浏览器回归 smoke。

本轮不处理:

  • Tiptap 编辑器内部命令、history、selection overlay;这些归 5-29
  • Rust kernel tree command 语义重写。
  • Page AI panel 外置化;需要另起 07-ai 设计。

3. Batch A 候选任务

  • Worker A:只读审计 document pane host adapter。
    • 目标:列出 web_shell.rs 中 document pane host / session / conflict panel 可迁模块、风险和 smoke。
    • 输出:候选模块表、禁止迁入 editor runtime 的边界、下一刀建议。
  • Worker B:只读审计 local upload 主流程。
    • 目标:复核上传主流程剩余函数是否可从 SIDEBAR_TREE_JS 拆入 local-upload-runtime.js,不得改变资源归属语义。
    • 输出:函数归属表、不可迁项、必须保留的 smoke。
  • Worker C:只读审计 filetree keyboard / clipboard / DND。
    • 目标:基于已落地 filetree-runtime.js / filetree-selection-runtime.js / filetree-context-menu-runtime.js,给出下一刀最小实现范围。
    • 输出:建议只迁纯 helper 还是 DOM listener,列出冲突文件。
  • Worker D:浏览器 smoke 审计 WS / SSE tree live。
    • 目标:只读验证主壳 tree live 外置 runtime 在浏览器中仍加载,记录 WS 正常路径和 SSE fallback 的可测性。
    • 输出:截图、console/network、result.json;不修改源码。

4. 验收命令

按具体切片选择:

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 filetree
cargo test --manifest-path rust/Cargo.toml -p mnote-web runtime
node scripts/task487-local-folder-tree-live-consumer-smoke.js
node scripts/task479-local-folder-markdown-resource-lifecycle-smoke.js

UI / 浏览器可见项必须有真实浏览器截图或结构化 smoke 证据。

5. 采纳规则

  • Reasonix 结果必须先查 Hindsight reasonix recall,再读 process-handoff.md/jsonresult.json、diff 和验证证据。
  • 只采纳限定文件范围内的最小 diff;越界重构、回滚用户改动、修改 git 状态的一律拒绝。
  • browser smoke worker 必须 modified_files=[]
  • 本文件只记录真实完成项;未验证项保持未勾选。

6. 本轮执行记录

  • 2026-05-25Codex 创建本续跑事实源。
  • 2026-05-25:修正执行约束:本文件遵循当前 goal 的“每批最多 2 个 worker”;实现 worker 必须在独立 worktree 产出候选 patchCodex 复核后再选择性合入。
  • 2026-05-25:下一批只派发 Worker Blocal upload / filetree 下一刀只读审计);Worker A/C/D 暂缓。
  • 2026-05-25Reasonix local upload / filetree 只读审计尝试未产生 result.json / process-handoff,且运行期间出现额外 Batch A2 runner,主控已终止进程;该结果不作为正式 handoff 采纳。
    • 可参考的 transcript 结论:fetchWithTimeout 是低风险纯工具函数,可先迁入 local-upload-runtime.jsuploadFileToMediaAsset / uploadFilesWithResolvedTarget / insertUploadedAssetIntoEditor 仍与 API、editor 插入和 snapshot refresh 耦合,暂不迁。
  • 2026-05-25Codex 主控直接完成低风险切片:local-upload-runtime.js 新增并导出 fetchWithTimeoutlayout.rs 的 inline fetchWithTimeout 先委托 runtime,保留原 fallback。
    • 修改:rust/crates/mnote-web/browser/local-upload-runtime.jsrust/crates/mnote-web/src/ssr/pages/layout.rs
    • 已验证:node --check rust/crates/mnote-web/browser/local-upload-runtime.jscargo fmt --manifest-path rust/Cargo.toml --all --checkcargo check --manifest-path rust/Cargo.toml -p mnote-webcargo test --manifest-path rust/Cargo.toml -p mnote-web mnote_browser_runtime_assets_are_explicitly_mounted -- --test-threads=1cargo test --manifest-path rust/Cargo.toml -p mnote-web local_upload_runtime_contains_editor_upload_context_helpers -- --test-threads=1
    • 未完成:insertUploadedAssetIntoEditoruploadFileToMediaAssetuploadFilesWithResolvedTarget 仍未迁出。
  • 2026-05-25Codex 主控继续完成 local upload API 小切片:local-upload-runtime.js 新增并导出 uploadLocalFolderAsset,承接本地上传 FormData 构造、/api/local-folder/assets/upload 请求和响应解析;layout.rs 仍负责 editor 插入、sidebar snapshot refresh 和 wolai:local-assets-changed 事件。
    • 修改:rust/crates/mnote-web/browser/local-upload-runtime.jsrust/crates/mnote-web/src/ssr/pages/layout.rs
    • 已验证:node --check rust/crates/mnote-web/browser/local-upload-runtime.jscargo fmt --manifest-path rust/Cargo.toml --all --checkcargo check --manifest-path rust/Cargo.toml -p mnote-webcargo test --manifest-path rust/Cargo.toml -p mnote-web local_upload_runtime_contains_editor_upload_context_helpers -- --test-threads=1cargo test --manifest-path rust/Cargo.toml -p mnote-web sidebar_upload_runtime_routes_local_markdown_assets_to_local_folder -- --test-threads=1node scripts/task479-local-folder-markdown-resource-lifecycle-smoke.js
    • 未完成:insertUploadedAssetIntoEditoruploadFileToMediaAsset 编排壳、uploadFilesWithResolvedTarget 仍未迁出。
  • 2026-05-25:采纳并复核额外 Reasonix 候选 patch:新增 document-conflict-panel-runtime.js,把 document session conflict panel 的纯 DOM 清理 helper clearSessionConflictSurface 外置;inline adapter 保留 fallback。
    • 修改:rust/crates/mnote-web/browser/document-conflict-panel-runtime.jsrust/crates/mnote-web/src/routes/web_shell.rsrust/crates/mnote-web/src/routes/mod.rs
    • 已验证:node --check rust/crates/mnote-web/browser/document-conflict-panel-runtime.jscargo fmt --manifest-path rust/Cargo.toml --all --checkcargo check --manifest-path rust/Cargo.toml -p mnote-webcargo test --manifest-path rust/Cargo.toml -p mnote-web mnote_browser_runtime_assets_are_explicitly_mounted -- --test-threads=1
    • 未完成:conflict merge / accept / keep 业务逻辑、document session lifecycle、secondary pane conflict smoke 仍未迁出。
  • 2026-05-25Worker DinsertUploadedAssetIntoEditor 外置)两次在独立 worktree /mnt/Data1T/mnote-worktrees/0525-a2-upload-insert-current 重新派发,均未产出可采纳 diff。
    • reasonix-2026-05-24T17-07-59-638Z-29274a46 产生 handoff,但内容串到 Worker B 的 block menu 任务,worktree 无 diff,拒绝采纳。
    • reasonix-2026-05-24T17-12-41-044Z-25b9d5d7 仅产生 prompt.md / memory-recall.json / reasonix-transcript.jsonl,无 final.mdresult.jsonprocess-handoff.md/jsonworktree 无 diff,拒绝采纳。
    • 该项保持未完成;下一刀应进一步缩窄为只迁 editor 插入 DOM 拼接中的一个纯 helper,或由 Codex 本地实现后再交 Reasonix 做浏览器 smoke。
  • 2026-05-25Codex 主控完成 insertUploadedAssetIntoEditor 外置切片:local-upload-runtime.js 新增并导出 insertUploadedAssetIntoEditor(asset, targetRoot, deps)layout.rs 优先委托 runtime,保留完整 inline fallback。
    • 修改:rust/crates/mnote-web/browser/local-upload-runtime.jsrust/crates/mnote-web/src/ssr/pages/layout.rs
    • 已验证:node --check rust/crates/mnote-web/browser/local-upload-runtime.jscargo fmt --manifest-path rust/Cargo.toml --all --checkcargo check --manifest-path rust/Cargo.toml -p mnote-webcargo test --manifest-path rust/Cargo.toml -p mnote-web local_upload_runtime_contains_editor_upload_context_helpers -- --test-threads=1cargo test --manifest-path rust/Cargo.toml -p mnote-web sidebar_upload_runtime_routes_local_markdown_assets_to_local_folder -- --test-threads=1node scripts/task479-local-folder-markdown-resource-lifecycle-smoke.js
    • 未完成:uploadFileToMediaAsset 编排壳、uploadFilesWithResolvedTarget、conflict merge / accept / keep 业务逻辑、secondary pane conflict smoke 仍未迁出。
    • 过程说明:Worker D3reasonix-2026-05-24T17-22-29-925Z-9b7b6dd4)未产出可采纳 handoff 或 diff;最终由 Codex 独立实现、验证通过后合入。
  • 2026-05-25Codex 主控完成 document conflict panel 第二刀:document-conflict-panel-runtime.js 新增并导出 createSessionConflictPanel(session, message, deps),只负责冲突面板 DOM 创建和按钮回调 wiring;web_shell.rs 仍持有 acceptDiskVersionkeepCurrentEditorVersionopenConflictDiffPanel 等业务逻辑,并保留完整 inline fallback。
    • 修改:rust/crates/mnote-web/browser/document-conflict-panel-runtime.jsrust/crates/mnote-web/src/routes/web_shell.rs
    • 已验证:node --check rust/crates/mnote-web/browser/document-conflict-panel-runtime.jscargo fmt --manifest-path rust/Cargo.toml --all --checkcargo check --manifest-path rust/Cargo.toml -p mnote-webcargo test --manifest-path rust/Cargo.toml -p mnote-web document_conflict_panel_runtime_contains_dom_helpers -- --test-threads=1cargo test --manifest-path rust/Cargo.toml -p mnote-web mnote_browser_runtime_assets_are_explicitly_mounted -- --test-threads=1
    • 未完成:conflict merge / accept / keep 业务逻辑、document session lifecycle、secondary pane conflict smoke 仍未迁出;本轮未声称真实冲突 UI 全链路完成。
  • 2026-05-25:根据用户纠正,后续实现 worker 不能在主工作区直接修改;每批最多 2 个 worker,且必须采用独立 worktree 候选 patch 或明确只读任务。Codex 读取 Hindsight recall、process-handoff.md/jsonresult.json、diff 与验证证据后再选择性合入。
  • 2026-05-25Codex 主控完成非本地 media upload API 小切片:local-upload-runtime.js 新增并导出 uploadMediaAsset(file, plan, context),承接 /api/media/upload 的 FormData 构造、fetch 和响应解析;layout.rsuploadFileToMediaAsset 仍负责 appendUploadedAssetRow、editor 插入和 wolai:assets-changed 事件分发,并保留完整 inline fallback。
    • 修改:rust/crates/mnote-web/browser/local-upload-runtime.jsrust/crates/mnote-web/src/ssr/pages/layout.rs
    • 已验证:node --check rust/crates/mnote-web/browser/local-upload-runtime.jscargo fmt --manifest-path rust/Cargo.toml --all --checkcargo check --manifest-path rust/Cargo.toml -p mnote-webcargo test --manifest-path rust/Cargo.toml -p mnote-web local_upload_runtime_contains_editor_upload_context_helpers -- --test-threads=1cargo test --manifest-path rust/Cargo.toml -p mnote-web sidebar_upload_runtime_routes_local_markdown_assets_to_local_folder -- --test-threads=1node scripts/task479-local-folder-markdown-resource-lifecycle-smoke.js
    • 未完成:uploadFileToMediaAsset / uploadFilesWithResolvedTarget 编排壳、conflict merge / accept / keep 业务逻辑、secondary pane conflict smoke 仍未迁出;本轮未改资源归属语义。
  • 2026-05-25Batch C 按用户要求同时派发 3 个独立 worktree 实现 workerB 修复 5-29 block delete undoC 迁 uploadFileToMediaAssetD 收口 conflict action boundary3 个 Reasonix runner 均未产出 final.mdresult.jsonprocess-handoff.md/json,对应 worktree diff 为空,按采纳规则全部拒绝。Codex 后续只采纳独立复核后的候选 patch。
  • 2026-05-25Codex 主控完成 upload files orchestration 小切片:local-upload-runtime.js 新增并导出 uploadFilesWithResolvedTarget(files, detail, options, deps),承接文件列表归一化、逐个上传、错误聚合和 alert 提示;layout.rs 仍注入 resolveFileTreeUploadTarget / uploadFileToMediaAsset,保留目标解析、单文件上传和完整 inline fallback。
    • 修改:rust/crates/mnote-web/browser/local-upload-runtime.jsrust/crates/mnote-web/src/ssr/pages/layout.rs
    • 已验证:node --check rust/crates/mnote-web/browser/local-upload-runtime.jscargo fmt --manifest-path rust/Cargo.toml --all --checkcargo check --manifest-path rust/Cargo.toml -p mnote-webcargo test --manifest-path rust/Cargo.toml -p mnote-web local_upload_runtime_contains_editor_upload_context_helpers -- --test-threads=1cargo test --manifest-path rust/Cargo.toml -p mnote-web sidebar_upload_runtime_routes_local_markdown_assets_to_local_folder -- --test-threads=1node scripts/task479-local-folder-markdown-resource-lifecycle-smoke.js
    • 未完成:uploadFileToMediaAsset 编排壳、conflict merge / accept / keep 业务逻辑、secondary pane conflict smoke 仍未迁出;本轮未改资源归属语义。
  • 2026-05-25Reasonix 只读审计 uploadFileToMediaAsset 剩余边界,使用独立 worktree /mnt/Data1T/mnote-worktrees/0525-e-3-20-uploadfile-readonlyrun id reasonix-2026-05-24T18-04-44-852Z-2c2d5ce9
    • Codex 已读取 Hindsight recall、process-handoff.md/jsonresult.json,并核对 worktree git status --short / git diff --stat 为空;runner 已产出 completed handoff 但进程未自行退出,主控已终止残留 runner。
    • 审计结论:uploadFileToMediaAsset 的 API 调用、editor 插入、多文件循环等纯 helper 已外置;剩余主要是 source 判定、sidebar refresh / append、事件分发等 shell 编排职责,不适合继续整体迁入 runtime。
    • 下一刀建议:不要盲迁整个 uploadFileToMediaAsset;若继续 3-20,应转向 filetree DOM runtime 的 refreshLocalFolderSidebarSnapshot / appendUploadedAssetRow 依赖拆分,或只做 fallback 精简但需重新评估是否仍要保留 inline fallback 策略。
  • 2026-05-25Codex 独立复核并采纳 3-20 候选 patch:local-upload-runtime.js 新增并导出 uploadFileToMediaAsset(file, plan, options, deps)layout.rs 的同名 wrapper 优先委托 runtime,仍保留完整 inline fallbackresolveFileTreeUploadTarget 未迁出,资源归属、上传 API、editor 插入状态和事件名保持不变。
    • Reasonix 协作证据:只读审计 run reasonix-2026-05-24T18-04-44-852Z-2c2d5ce9 已有 Hindsight recall 与 process-handoff.md/json,指出剩余职责主要是 shell 编排;实现 run reasonix-2026-05-24T18-07-08-227Z-1358f36b 仅产出 prompt.md / memory-recall.json / reasonix-transcript.jsonl,无 final.mdresult.jsonprocess-handoff.md/json,因此不作为完整 Reasonix handoff 采纳。
    • 候选 worktree/mnt/Data1T/mnote-worktrees/0525-d-worker-b-3-20-upload-file-orchestratorCodex 已核对 git diff --statgit diff --check 和修改范围,并按“runtime 委托 + shell deps 注入 + fallback 保留”的较窄边界采纳。
    • 修改:rust/crates/mnote-web/browser/local-upload-runtime.jsrust/crates/mnote-web/src/ssr/pages/layout.rs
    • 已验证:node --check rust/crates/mnote-web/browser/local-upload-runtime.jscargo fmt --manifest-path rust/Cargo.toml --all --checkcargo check --manifest-path rust/Cargo.toml -p mnote-webcargo test --manifest-path rust/Cargo.toml -p mnote-web local_upload_runtime_contains_editor_upload_context_helpers -- --test-threads=1cargo test --manifest-path rust/Cargo.toml -p mnote-web sidebar_upload_runtime_routes_local_markdown_assets_to_local_folder -- --test-threads=1NODE_PATH=/mnt/Data1T/mnote/node_modules node scripts/task479-local-folder-markdown-resource-lifecycle-smoke.js
    • 过程说明:Worker B 在独立 worktree 中复跑 task479 时曾出现 broken-link-after-real-file-delete 等待超时且 JSON ok:false;Codex 在主工作区移植后复跑同一 smoke,结果 ok:true,截图证据位于该 smoke 输出的临时目录。
    • 未完成:resolveFileTreeUploadTarget、filetree DOM runtime 的 refreshLocalFolderSidebarSnapshot / appendUploadedAssetRow 更细拆分、conflict merge / accept / keep 业务逻辑、secondary pane conflict smoke 仍未迁出。
  • 2026-05-25Batch E 计划继续采用独立 worktree 候选 patchWorker B 负责把 document conflict diff / merge 区域的纯 DOM 构建和按钮 wiring 外置到 document-conflict-panel-runtime.jsweb_shell.rs 仍持有 fetch、plain text 计算、status 和 persist 业务逻辑,避免和当前 local upload 写集冲突。
  • 2026-05-25Codex 独立复核、修正并移植 Batch E Worker B 候选 diffdocument-conflict-panel-runtime.js 新增并导出 populateSessionConflictDiffPanel(panel, context, deps),只负责 current/disk/merge DOM 构建和按钮 wiringweb_shell.rsopenConflictDiffPanel 仍负责 fetch 最新快照、plain text 计算、错误显示和 writeMergedConflictResult 持久化回调,inline fallback 保持完整。Codex 修正了候选 diff 中“展示占位文案可能被 Use Current / Use Disk 写回 merge textarea”的语义偏差,新增 currentMergeText / diskMergeText 和可选 onUseCurrent / onUseDisk
    • Reasonix 协作证据:runner reasonix-2026-05-24T18-25-26-844Z-33ea4d58 / reasonix-2026-05-24T18-26-04-453Z-5ff62e40 均仅产出 prompt.md / memory-recall.json / reasonix-transcript.jsonl,无 final.mdresult.jsonprocess-handoff.md/json;因此不作为完整 handoff 采纳。Codex 已查 Hindsight recall、核对 worktree diff 与修改范围后移植。
    • 候选 worktree/mnt/Data1T/mnote-worktrees/0525-e-worker-b-3-20-conflict-diff-dom
    • 修改:rust/crates/mnote-web/browser/document-conflict-panel-runtime.jsrust/crates/mnote-web/src/routes/web_shell.rs
    • 已验证:node --check rust/crates/mnote-web/browser/document-conflict-panel-runtime.jscargo fmt --manifest-path rust/Cargo.toml --all --checkcargo check --manifest-path rust/Cargo.toml -p mnote-webcargo test --manifest-path rust/Cargo.toml -p mnote-web document_conflict_panel_runtime_contains_dom_helpers -- --test-threads=1cargo test --manifest-path rust/Cargo.toml -p mnote-web mnote_browser_runtime_assets_are_explicitly_mounted -- --test-threads=1NODE_PATH=/mnt/Data1T/mnote/node_modules node scripts/task451-local-markdown-conflict-resolution-ui-smoke.js
    • 同轮回归:local_upload_runtime_contains_editor_upload_context_helperssidebar_upload_runtime_routes_local_markdown_assets_to_local_foldertask479-local-folder-markdown-resource-lifecycle-smoke 仍通过。
    • 未完成:acceptDiskVersionkeepCurrentEditorVersionwriteMergedConflictResult、document session lifecycle、secondary pane conflict smoke 仍未迁出或覆盖。
  • 2026-05-25Batch E 派发异常并终止:Worker B 任务被重复启动为两个 runner / ACP 进程(reasonix-2026-05-24T18-25-26-844Z-33ea4d58reasonix-2026-05-24T18-26-04-453Z-5ff62e40),同一 worktree /mnt/Data1T/mnote-worktrees/0525-e-worker-b-3-20-conflict-diff-dom 出现并发写入风险;Codex 已终止相关 Reasonix 进程,未读取到 final.mdresult.jsonprocess-handoff.md/json。原始未验证 diff 不直接采纳;后续采纳必须经过 Codex 独立复核、修正和验证。
  • 2026-05-25Batch F 计划继续采用独立 worktree 候选 patchWorker B 负责把 file tree 上传目标解析的纯 fallback / plan 归一化 helper 外置到 filetree-runtime.jslayout.rs 仍保留 async preflight 和完整 inline fallback,避免和当前 conflict panel 写集冲突。
  • 2026-05-25Batch F Worker B 异常终止:run reasonix-2026-05-24T18-39-34-442Z-d9e7ada1 只产出 prompt.md / memory-recall.json / reasonix-transcript.jsonl,未产出 final.mdresult.jsonprocess-handoff.md/jsonworktree 无 difftranscript 停在 ask_choice,原因是 worker 误判任务书拼接了 Worker A / Worker B 两个任务并要求人工选择。Codex 已终止 runner / ACP,不采纳该 run。
  • 2026-05-25Batch G 按用户纠正把 Worker B/C/D 分别派到独立 worktree,但三个 worker 同时启动,超过当前 goal 的“每批最多 2 个 worker”;三个 Reasonix run reasonix-2026-05-24T18-51-00-477Z-1307a1b4reasonix-2026-05-24T18-51-00-504Z-2304f570reasonix-2026-05-24T18-51-00-541Z-17d61f43 均只有 prompt.md / memory-recall.json / reasonix-transcript.jsonl,无 handoff/result/finalworktree 初始 diff 为空;Codex 不采纳这些 Reasonix run,只把独立 worktree 保留为 Codex 候选 patch 沙盒。
  • 2026-05-25Codex 主控完成 filetree upload target fallback 小切片:filetree-runtime.js 新增并导出 fileTreeUploadTargetFallback(detail, deps),承接同步 fallback / plan 归一化;layout.rsfallbackFileTreeUploadTarget 优先委托 runtime,仍保留完整 inline fallbackasync preflight、后端归属判定、uploadFileToMediaAssetuploadFilesWithResolvedTarget 不迁。
    • 修改:rust/crates/mnote-web/browser/filetree-runtime.jsrust/crates/mnote-web/src/ssr/pages/layout.rs
    • 已验证:node --check rust/crates/mnote-web/browser/filetree-runtime.jscargo fmt --manifest-path rust/Cargo.toml --all --checkcargo check --manifest-path rust/Cargo.toml -p mnote-webcargo test --manifest-path rust/Cargo.toml -p mnote-web filetree -- --test-threads=1cargo test --manifest-path rust/Cargo.toml -p mnote-web local_upload_runtime_contains_editor_upload_context_helpers -- --test-threads=1NODE_PATH=/mnt/Data1T/mnote/node_modules node scripts/task479-local-folder-markdown-resource-lifecycle-smoke.js
    • 未完成:async preflight、refreshLocalFolderSidebarSnapshot / appendUploadedAssetRow、conflict action helpers、secondary pane conflict smoke 仍未迁出或覆盖。
  • 2026-05-25Batch G Worker C 使用独立 worktree /mnt/Data1T/mnote-worktrees/0525-g-worker-c-3-20-conflict-actionsReasonix run reasonix-2026-05-24T18-51-00-504Z-2304f570 无 handoff/result/final,且 transcript 停在 ask_choice,不采纳。Codex 随后在该 worktree 产出候选 patch,经复核后选择性移植到主工作区。
    • 修改:document-conflict-panel-runtime.js 新增并导出 runSessionConflictAction(action, deps),只负责 promise/catch 动作包装;web_shell.rs 仍持有 acceptDiskVersionkeepCurrentEditorVersionwriteMergedConflictResult、status 和重新渲染业务逻辑。
    • 已验证:node --check rust/crates/mnote-web/browser/document-conflict-panel-runtime.jscargo fmt --manifest-path rust/Cargo.toml --all --checkcargo check --manifest-path rust/Cargo.toml -p mnote-webcargo test --manifest-path rust/Cargo.toml -p mnote-web document_conflict_panel_runtime_contains_dom_helpers -- --test-threads=1cargo test --manifest-path rust/Cargo.toml -p mnote-web mnote_browser_runtime_assets_are_explicitly_mounted -- --test-threads=1NODE_PATH=/mnt/Data1T/mnote/node_modules node scripts/task451-local-markdown-conflict-resolution-ui-smoke.jsNODE_PATH=/mnt/Data1T/mnote/node_modules node scripts/task479-local-folder-markdown-resource-lifecycle-smoke.js
    • 未完成:acceptDiskVersion / keepCurrentEditorVersion / writeMergedConflictResult 业务逻辑、document session lifecycle、secondary pane conflict smoke 仍未迁出或覆盖。
  • 2026-05-25Batch I 只派发 1 个只读 Reasonix worker 审计 filetree DOM helper 边界,使用独立 worktree /mnt/Data1T/mnote-worktrees/0525-i-3-20-filetree-dom-readonlyrun id reasonix-2026-05-24T19-09-00-815Z-4a0a3df4,并显式使用 --no-memory-recall 降低任务串线风险。
    • Codex 已读取 Hindsight recall、process-handoff.md/jsonresult.json,并核对 worktree git status --short / git diff --stat 为空;runner 完成后由主控终止残留进程。
    • 审计结论:revealFileTreeRowrevealFileTreeAssetRowappendUploadedAssetRow 可迁到 filetree-runtime.jsrefreshLocalFolderSidebarSnapshot 仍是 fetch / projection render / selection / focus / attachment existence 的 shell 编排,不迁。
    • Codex 主控完成 filetree DOM append 小切片:filetree-runtime.js 新增并导出 revealFileTreeRowrevealFileTreeAssetRowappendUploadedAssetRowlayout.rs 的同名 wrapper 优先委托 runtime,保留完整 inline fallback,并通过 fileTreeRuntimeDeps 注入 escapeHtmlobjectIdentityAttr、上传资源标题/类型 helper 和当前 source/document。
    • 修改:rust/crates/mnote-web/browser/filetree-runtime.jsrust/crates/mnote-web/src/ssr/pages/layout.rs
    • 已验证:node --check rust/crates/mnote-web/browser/filetree-runtime.jscargo fmt --manifest-path rust/Cargo.toml --all --checkcargo check --manifest-path rust/Cargo.toml -p mnote-webcargo test --manifest-path rust/Cargo.toml -p mnote-web filetree_runtime -- --test-threads=1cargo test --manifest-path rust/Cargo.toml -p mnote-web sidebar_upload_runtime_routes_local_markdown_assets_to_local_folder -- --test-threads=1NODE_PATH=/mnt/Data1T/mnote/node_modules node scripts/task479-local-folder-markdown-resource-lifecycle-smoke.js
    • 未完成:refreshLocalFolderSidebarSnapshot、async preflight、acceptDiskVersion / keepCurrentEditorVersion / writeMergedConflictResult 业务逻辑、document session lifecycle、secondary pane conflict smoke 仍未迁出或覆盖。
  • 2026-05-25Batch J 外部/自动启动 Worker C0525-j-worker-c-3-20-filetree-dom)与 Worker D0525-j-worker-d-3-20-conflict-action),并同时存在 Worker B,超过当前 goal 的“每批最多 2 个 worker”;Codex 已终止相关 runner / ACP 进程。三个 run 仅有 prompt.md / memory-recall.json / reasonix-transcript.jsonl,无 final.mdresult.jsonprocess-handoff.md/jsonworktree diff 为空;不采纳。