refactor: normalize filetree upload target plans
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
|
||||
## 1. 目标
|
||||
|
||||
在 `3-19` 已归档的基础上,继续把仍留在 Rust inline / 主壳大 runtime 中的浏览器行为切成可审计模块。Codex 维护本文件作为事实源,Reasonix 只承接短批次审计、窄范围实现或浏览器 smoke;当前 goal 下每批最多 4 个 worker。
|
||||
在 `3-19` 已归档的基础上,继续把仍留在 Rust inline / 主壳大 runtime 中的浏览器行为切成可审计模块。Codex 维护本文件作为事实源,Reasonix 只承接短批次审计、窄范围实现或浏览器 smoke;当前 goal 下每批最多 2 个 worker。
|
||||
|
||||
## 2. 本轮边界
|
||||
|
||||
@@ -239,6 +239,11 @@ UI / 浏览器可见项必须有真实浏览器截图或结构化 smoke 证据
|
||||
- Codex 已读取 Hindsight recall、`process-handoff.md/json`、`result.json`,并核对 worktree `git status --short` / `git diff --stat` 为空;worker 未修改源码。
|
||||
- 审计结论经主控复核后采纳:`syncSidebarFileTreeSelection()` 与 `markLocalFolderWatchApplied()` 已外置完成;剩余 `restoreSidebarTreeTab()`、`schedulePendingLocalFolderRestoreFocus()`、`refreshEditorLocalAttachmentExistence()` 属于 layout shell / local restore focus / attachment URL 解析链的编排层,不值得继续外置。
|
||||
- 当前决定:`3-20` 不再围绕 `refreshLocalFolderSidebarSnapshot` 的 post-apply UI 副作用继续切片,后续应把精力转回更高收益的 runtime 边界。
|
||||
- 2026-05-25:Batch BD 只派发 1 个只读 Reasonix worker 审计 local mindmap asset fetch observer 边界,使用独立 worktree `/mnt/Data1T/mnote-worktrees/0525-bd-worker-a-3-20-mindmap-asset-runtime-readonly`,run id `reasonix-2026-05-25T01-02-53-392Z-d1614585`,显式 `--no-memory-recall`。
|
||||
- Codex 已核对该 worktree 源码 `git status --short` / `git diff --stat` 为空;但本 run 仅产出 `prompt.md` / `memory-recall.json` / `reasonix-transcript.jsonl`,没有 `result.json`、`process-handoff.md/json` 或 `final.md`,因此按合同拒收。
|
||||
- transcript 补充证据:仅见大量 `read_file` 只读取证,没有形成可交付 handoff;不把其中零散过程输出当作审计结论。
|
||||
- 主控本地代码证据:`mindmapAssetFromTarget` / `parseMindmapApiTarget` / `withLocalMindmapSourceParams` / `requestMethod` / `requestBodyHasMindmapCreateOnly` / `applyMindmapApiMutationToFileTree` / `installMindmapAssetFetchObserver` 目前仍一起留在 `SIDEBAR_TREE_JS` 壳层,核心耦合点是 fetch hook、`currentSourceKind/currentRootUri/currentDocumentId`、`appendUploadedAssetRow` 与 `refreshLocalFolderSidebarSnapshot` 的事件编排。当前尚无足够有效的只读 handoff 证明存在高收益的最小继续外置切片。
|
||||
- 当前决定:本轮不采纳该 run 的任何文字结论;若继续推进这一簇,应由主控基于本地代码另选更稳的最小机械切片,或重新派发更窄的只读任务。
|
||||
- 2026-05-25:Batch AM 只派发 1 个 browser smoke Reasonix worker,使用独立 worktree `/mnt/Data1T/mnote-worktrees/0525-am-worker-b-3-20-smoke-regression`,run id `reasonix-2026-05-25T00-26-34-914Z-c639fcef`,并显式使用 `--no-memory-recall`。
|
||||
- Codex 已读取 Hindsight recall、`process-handoff.md/json`、`result.json`,并核对 worktree `git status --short` 为空;worker 未修改源码。
|
||||
- 实测通过:`MNOTE_WEB_SMOKE_BASE_URL=http://127.0.0.1:3001 NODE_PATH=/mnt/Data1T/mnote/node_modules node scripts/task487-local-folder-tree-live-consumer-smoke.js`、`MNOTE_WEB_SMOKE_BASE_URL=http://127.0.0.1:3001 NODE_PATH=/mnt/Data1T/mnote/node_modules node scripts/task451-local-markdown-conflict-resolution-ui-smoke.js`、`MNOTE_WEB_SMOKE_BASE_URL=http://127.0.0.1:3001 NODE_PATH=/mnt/Data1T/mnote/node_modules node scripts/task479-local-folder-markdown-resource-lifecycle-smoke.js`、`MNOTE_WEB_SMOKE_BASE_URL=http://127.0.0.1:3001 NODE_PATH=/mnt/Data1T/mnote/node_modules node scripts/task489-block-menu-delete-undo-smoke.js`、`MNOTE_WEB_SMOKE_BASE_URL=http://127.0.0.1:3001 NODE_PATH=/mnt/Data1T/mnote/node_modules node scripts/task488-local-attachment-link-delete-undo-smoke.js`。
|
||||
@@ -249,8 +254,18 @@ UI / 浏览器可见项必须有真实浏览器截图或结构化 smoke 证据
|
||||
- 审计结论经主控复核后采纳:`uploadFilesWithResolvedTarget(files, detail, options, deps)` 当前已经是合理的薄编排壳层;`deps` 提取与 guard、`resolveFileTreeUploadTarget(detail)` 调用、顺序上传循环、错误收集与 `alert` 反馈均属于当前函数自身职责,不建议继续拆出只会增加间接层的 1-6 行微型 helper。
|
||||
- 主控本地代码证据:`local-upload-runtime.js` 中 `uploadFilesWithResolvedTarget` 目前只保留 `resolveFileTreeUploadTarget` 与 `uploadFileToMediaAsset` 注入、`Array.from(files || []).filter(Boolean)`、顺序上传循环、错误汇总与 `alert`;更低层纯 helper 已分别落地到 `fetchWithTimeout`、`uploadLocalFolderAsset`、`uploadMediaAsset`、`insertUploadedAssetIntoEditor`、`uploadFileToMediaAsset`。
|
||||
- 当前决定:`3-20` 的 local upload 线不再围绕 `uploadFilesWithResolvedTarget` 继续拆刀,下一批改审 `resolveFileTreeUploadTarget` / preflight fallback 或 sidebar refresh 边界。
|
||||
- 2026-05-25:Batch BC 派发 1 个只读 Reasonix worker 审计 `resolveFileTreeUploadTarget` / preflight / fallback 的下一刀边界,使用独立 worktree `/mnt/Data1T/mnote-worktrees/0525-bc-worker-a-3-20-target-plan-readonly`,预期 run id `reasonix-2026-05-25T01-03-07-024Z-de2fcc8a`,显式 `--no-memory-recall`。
|
||||
- 结果拒收:该 run 仅产出 `prompt.md` / `memory-recall.json` / `reasonix-transcript.jsonl`,无 `result.json`、`process-handoff.md/json`、`final.md`;worktree 源码零 diff。
|
||||
- transcript 补充证据:worker 只完成了函数定位与部分只读 grep/读取,未形成结构化回答或 smoke/验证产物。
|
||||
- 处置:不采纳其任何文字过程;下一步仍由 Codex 依据本地代码证据判断 `resolveFileTreeUploadTarget` / `preflightFileTreeUploadTarget` / `fallbackFileTreeUploadTarget` 是否值得继续拆。
|
||||
- 2026-05-25:Batch AH 由 Codex 主控按当前 goal 明确派发 4 个独立 worktree worker;主工作区不承接实现过程,只读取 Hindsight recall、handoff、diff 与验证证据后裁决。
|
||||
- Worker B `/mnt/Data1T/mnote-worktrees/0525-af-worker-b-3-20-filetree-selection-helper`,run `reasonix-2026-05-24T23-33-43-259Z-bd947ad9` 仅产出 `prompt.md` / `memory-recall.json` / `reasonix-transcript.jsonl`,没有 `final.md`、`result.json`、`process-handoff.md/json`;transcript 停在 `submit_plan`,worktree 零 diff,按合同拒收。
|
||||
- Worker C `/mnt/Data1T/mnote-worktrees/0525-af-worker-c-3-20-upload-target-readonly`,run `reasonix-2026-05-24T23-33-43-393Z-301491ef` 有完整 `process-handoff.md/json`、`result.json`、`final.md`,源码零 diff;审计结论经主控复核后采纳:`syncSidebarFileTreeSelection` 及 selection runtime 已外置到合理边界,不应回并到 `filetree-runtime.js`;`resolveFileTreeUploadTarget` / `preflightFileTreeUploadTarget` 仍不适合整体迁入 browser runtime,`fileTreeRowsForUploadPreflight` 仅是低优先级候选 helper。
|
||||
- Worker D `/mnt/Data1T/mnote-worktrees/0525-af-worker-d-regression-smoke`,run `reasonix-2026-05-24T23-33-43-450Z-e37e8564` 有完整 `process-handoff.md/json`、`result.json`、`final.md`,源码零 diff;`task489`、`task488`、`task487`、`task451` 在 3001 全部通过。主控独立复核 result.json 后确认:`task487` 已收敛为 `transport=local-folder-events`、PageTree/FileTree 外部创建/删除均 `treeLiveApplied=resync`、`navigationEvents=0`;`task451` 四个冲突动作步骤均 `ok:true`。
|
||||
- 本批 3-20 采纳结论:保持 selection runtime / filetree runtime / context-menu runtime 分离;`resolveFileTreeUploadTarget`、`refreshLocalFolderSidebarSnapshot`、preflight fetch、conflict action 业务编排继续留在壳层;下一刀仍优先只读审计或更窄 DOM helper,不扩回大块 runtime 合并。
|
||||
- 2026-05-25:当前用户已手动覆盖 goal,后续批次统一收紧为“每批最多 2 个 worker”;本文件中早先 3/4-worker 记录仅作为历史执行事实保留,不再作为后续派发口径。
|
||||
- 2026-05-25:Codex 主控继续收口 `resolveFileTreeUploadTarget` 的纯数据规范化层。
|
||||
- 修改:`rust/crates/mnote-web/browser/filetree-runtime.js` 新增 `normalizeFileTreeUploadTargetPlan(detail, plan)`,承接 preflight 成功后的 `targetRelativePath` / `uploadIntent` 规范化;`rust/crates/mnote-web/src/ssr/pages/layout.rs::resolveFileTreeUploadTarget` 优先委托该 runtime helper,保留完整 inline fallback,以及 `preflightFileTreeUploadTarget` 的 fetch、`console.warn`、`fallbackFileTreeUploadTarget` 降级路径不动。
|
||||
- 边界:未迁 `preflightFileTreeUploadTarget` 的 API 请求、`fallbackFileTreeUploadTarget` 的 workspace/document 语义、preflight 失败降级策略、sidebar refresh 或上传编排。
|
||||
- 已验证:`node --check rust/crates/mnote-web/browser/filetree-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 filetree_runtime_contains_row_accessor_helpers -- --test-threads=1`、临时当前源码服务 `MNOTE_WEB_BIND=127.0.0.1:3022 MNOTE_WEB_PUBLIC_BIND=127.0.0.1:3022 cargo run --manifest-path rust/Cargo.toml -p mnote-web`、`MNOTE_WEB_SMOKE_BASE_URL=http://127.0.0.1:3022 NODE_PATH=/mnt/Data1T/mnote/node_modules node scripts/task479-local-folder-markdown-resource-lifecycle-smoke.js`。
|
||||
- 结果:`task479` 中 `editor-upload-to-page-resource-dir` 与 `filetree-folder-drop-to-target` 均 `ok:true`,说明本刀未破坏本地 Markdown 附件上传目标与文件树文件夹拖入目标路径。
|
||||
|
||||
Reference in New Issue
Block a user