From 1e097a95973bdf75b1416d344652b1253e7101e3 Mon Sep 17 00:00:00 2001 From: lix-2026 Date: Mon, 25 May 2026 04:16:35 +0800 Subject: [PATCH] refactor: extract dnd target and sidebar helpers --- ...0-browser-runtime-followup-checklist-v1.md | 9 + ...29-editor-runtime-followup-checklist-v1.md | 5 + .../mnote-web/browser/filetree-runtime.js | 12 ++ rust/crates/mnote-web/src/ssr/pages/layout.rs | 14 ++ .../mnote-leptos-tiptap-spike-island.js | 2 +- .../mnote-leptos-tiptap-spike-island_bg.wasm | Bin 2123183 -> 2123181 bytes .../src/editor_runtime/block_dnd.rs | 14 +- rust/spikes/leptos-tiptap-spike/src/lib.rs | 9 +- ...7-local-folder-tree-live-consumer-smoke.js | 193 +++++++++++++----- 9 files changed, 201 insertions(+), 57 deletions(-) diff --git a/design/03-rust-web/process/3-20-browser-runtime-followup-checklist-v1.md b/design/03-rust-web/process/3-20-browser-runtime-followup-checklist-v1.md index 6879b257..86d9699f 100644 --- a/design/03-rust-web/process/3-20-browser-runtime-followup-checklist-v1.md +++ b/design/03-rust-web/process/3-20-browser-runtime-followup-checklist-v1.md @@ -154,3 +154,12 @@ UI / 浏览器可见项必须有真实浏览器截图或结构化 smoke 证据 - Worker C:`filetree-runtime.js` 新增并导出 `readProjection`、`readSidebarDataset`、`readDatasetProjection`、`projectionItems`、`hasProjectionItems`、`nodeIdOf`、`rowIdOf`、`parentIdOf`、`titleOf`、`fileWorkspaceRelativePath`、`groupRowsByParent`;`layout.rs` 对应 inline fallback 优先委托 `fileTreeRuntimeFunction(...)`,未迁 `refreshLocalFolderSidebarSnapshot` / `startLocalFolderSidebarWatch` / fetch / post-render shell 副作用 / HTML renderer。 - Worker D:`task435-local-folder-watch-no-reload-smoke.js` 新增 `waitForLocalFolderWatchProjectionApplied`,每个外部文件变化步骤前清理旧标记,步骤内显式等待 `data-mnote-local-folder-watch-applied="projection"`,未放宽 no-reload 断言;Codex 同步把初始 `Stable Page` 等待修正为当前 file tree 标题 `stable`。 - 已验证:`node --check rust/crates/mnote-web/browser/filetree-runtime.js`、`node --check scripts/task435-local-folder-watch-no-reload-smoke.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`、`cargo test --manifest-path rust/Cargo.toml -p mnote-web sidebar_filetree_runtime_helpers_are_externalized_with_inline_fallback -- --test-threads=1`、`cargo test --manifest-path rust/Cargo.toml -p mnote-web sidebar_tree_runtime_polls_local_folder_without_browser_reload -- --test-threads=1`、`MNOTE_WEB_SMOKE_BASE_URL=http://127.0.0.1:3001 NODE_PATH=/mnt/Data1T/mnote/node_modules node scripts/task435-local-folder-watch-no-reload-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`。 +- 2026-05-25:Batch O Worker C 使用独立 worktree `/mnt/Data1T/mnote-worktrees/0525-o-worker-c-3-20-replace-sidebar-helper`,Codex 已读取 subagent handoff、worktree diff 和验证证据,并选择性移植。 + - 修改:`filetree-runtime.js` 新增并导出 `replaceSidebarTreeFromDocument(nextDocument, rootId)`;`layout.rs` 的 inline fallback 优先委托 `fileTreeRuntimeFunction('replaceSidebarTreeFromDocument')`,仍保留 `innerHTML` 和 attribute copy fallback。 + - 未迁:`refreshLocalFolderSidebarSnapshot`、fetch URL 构造、watcher、副作用和 HTML renderer。 + - Worker 验证:`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 -- --test-threads=1` 通过。 + - Codex 主控验证:`node --check rust/crates/mnote-web/browser/filetree-runtime.js`、`cargo check --manifest-path rust/Cargo.toml -p mnote-web`、`cargo test --manifest-path rust/Cargo.toml -p mnote-web filetree_runtime -- --test-threads=1`、`MNOTE_WEB_SMOKE_BASE_URL=http://127.0.0.1:3001 NODE_PATH=/mnt/Data1T/mnote/node_modules node scripts/task435-local-folder-watch-no-reload-smoke.js`。 +- 2026-05-25:Batch O Worker D 使用独立 worktree `/mnt/Data1T/mnote-worktrees/0525-o-worker-d-3-20-live-smoke-assertions`,Codex 已读取 subagent handoff、worktree diff 和验证证据,并选择性移植。 + - 修改:`task487-local-folder-tree-live-consumer-smoke.js` 保持 RED smoke 退出 0 语义,增加 staged DOM 状态、PageTree/FileTree 外部创建/删除后的目标节点证据、navigation evidence 和更多截图路径。 + - Worker 验证:`node --check scripts/task487-local-folder-tree-live-consumer-smoke.js`、限定 `git diff --check` 通过;因当时 3000 未启动,未运行真实浏览器 smoke。 + - Codex 主控验证:`node --check 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/task487-local-folder-tree-live-consumer-smoke.js`。结果仍为 RED,`transport=local-folder-events`、PageTree/FileTree 外部变更阶段 `navigationEvents=0`,但 `treeLiveApplied` 仍为空,说明 live consumer 证据仍未收敛到 snapshot/resync。 diff --git a/design/05-editor-mainline/process/5-29-editor-runtime-followup-checklist-v1.md b/design/05-editor-mainline/process/5-29-editor-runtime-followup-checklist-v1.md index 80b2954b..4af42f5a 100644 --- a/design/05-editor-mainline/process/5-29-editor-runtime-followup-checklist-v1.md +++ b/design/05-editor-mainline/process/5-29-editor-runtime-followup-checklist-v1.md @@ -155,3 +155,8 @@ UI / 浏览器可见项必须有真实浏览器截图或结构化 smoke 证据 - 2026-05-25:Batch O 继续收口 overlay open helper:Codex 主控把 `open_slash_menu_overlay`、`open_image_toolbar_overlay`、`open_block_menu_overlay` 迁入 `editor_runtime/overlays.rs`。这三者只复用 `close_editor_floating_overlays` 并设置 Leptos signals;`open_block_menu_overlay` 仅读取 `block_menu_open` 判定是否重新打开。 - 未迁:`try_sync_editor_overlay_state`、`on_selection_change` 和各调用点 DOM / selection bridge 逻辑,原因是仍属于 editor shell 编排。 - 已验证:`cargo fmt --manifest-path rust/Cargo.toml --all --check`、`cargo check --manifest-path rust/spikes/leptos-tiptap-spike/Cargo.toml`、wasm release build、`wasm-bindgen`、`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`。 +- 2026-05-25:Batch O Worker B 使用独立 worktree `/mnt/Data1T/mnote-worktrees/0525-o-worker-b-5-29-dnd-target-helper`,Codex 已读取 subagent handoff、worktree diff 和验证证据,并选择性移植。 + - 修改:`editor_runtime/block_dnd.rs` 新增 `event_target_from_point(client_x, client_y)`,封装 `document.element_from_point` 到 `EventTarget` 的窄 DOM lookup;`lib.rs` 的 `drop_indicator_from_point` 只委托该 helper 后继续调用 `drop_indicator_from_target`。 + - 未迁:`drop_indicator_from_target`、拖拽 listener、Leptos signal、`editor_stage_element` / `editor_root_element` 查询和 block reorder 行为仍留在 shell。 + - Worker 验证:`cargo fmt --manifest-path rust/Cargo.toml --all --check`、`git diff --check`、`rustfmt --edition 2021 --check rust/spikes/leptos-tiptap-spike/src/editor_runtime/block_dnd.rs` 通过;`cargo check -p leptos-tiptap-spike` 因包名不匹配失败,主控改用正确 manifest 复核。 + - Codex 主控验证:`cargo fmt --manifest-path rust/Cargo.toml --all --check`、`cargo check --manifest-path rust/spikes/leptos-tiptap-spike/Cargo.toml`、wasm release build、`wasm-bindgen`、`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`。 diff --git a/rust/crates/mnote-web/browser/filetree-runtime.js b/rust/crates/mnote-web/browser/filetree-runtime.js index 5b86993d..8e50e645 100644 --- a/rust/crates/mnote-web/browser/filetree-runtime.js +++ b/rust/crates/mnote-web/browser/filetree-runtime.js @@ -214,6 +214,17 @@ function groupRowsByParent(rows) { return grouped; } +function replaceSidebarTreeFromDocument(nextDocument, rootId) { + var current = document.getElementById(rootId); + var next = nextDocument ? nextDocument.getElementById(rootId) : null; + if (!(current instanceof HTMLElement) || !(next instanceof HTMLElement)) return false; + current.innerHTML = next.innerHTML; + Array.from(next.attributes || []).forEach(function(attr) { + current.setAttribute(attr.name, attr.value); + }); + return true; +} + function revealFileTreeRow(row) { if (!(row instanceof HTMLElement)) return; var node = row.closest('.tree-node'); @@ -351,6 +362,7 @@ window.__mnoteFileTreeRuntime = { titleOf: titleOf, fileWorkspaceRelativePath: fileWorkspaceRelativePath, groupRowsByParent: groupRowsByParent, + replaceSidebarTreeFromDocument: replaceSidebarTreeFromDocument, fileTreeRowKind: fileTreeRowKind, fileTreeRowDocumentId: fileTreeRowDocumentId, fileTreeRowAssetId: fileTreeRowAssetId, diff --git a/rust/crates/mnote-web/src/ssr/pages/layout.rs b/rust/crates/mnote-web/src/ssr/pages/layout.rs index 192cb864..3553bdd5 100644 --- a/rust/crates/mnote-web/src/ssr/pages/layout.rs +++ b/rust/crates/mnote-web/src/ssr/pages/layout.rs @@ -2414,6 +2414,8 @@ const SIDEBAR_TREE_JS: &str = r##" } function replaceSidebarTreeFromDocument(nextDocument, rootId) { + var runtimeFn = fileTreeRuntimeFunction('replaceSidebarTreeFromDocument'); + if (runtimeFn) return runtimeFn(nextDocument, rootId); var current = document.getElementById(rootId); var next = nextDocument ? nextDocument.getElementById(rootId) : null; if (!(current instanceof HTMLElement) || !(next instanceof HTMLElement)) return false; @@ -11087,12 +11089,21 @@ mod tests { assert!(SIDEBAR_TREE_JS.contains("fileTreeRuntimeFunction('titleOf')")); assert!(SIDEBAR_TREE_JS.contains("fileTreeRuntimeFunction('fileWorkspaceRelativePath')")); assert!(SIDEBAR_TREE_JS.contains("fileTreeRuntimeFunction('groupRowsByParent')")); + assert!( + SIDEBAR_TREE_JS.contains("fileTreeRuntimeFunction('replaceSidebarTreeFromDocument')") + ); let document_id_body = js_function_body(SIDEBAR_TREE_JS, "fileTreeRowDocumentId"); assert!( document_id_body.contains("data-document-id") && document_id_body.contains("data-doc-id"), "inline fallback 必须保留旧 data attribute 解析" ); + let replace_body = js_function_body(SIDEBAR_TREE_JS, "replaceSidebarTreeFromDocument"); + assert!( + replace_body.contains("current.innerHTML = next.innerHTML") + && replace_body.contains("current.setAttribute(attr.name, attr.value)"), + "inline fallback 必须保留 DOM copy 行为" + ); } #[test] @@ -11121,8 +11132,11 @@ mod tests { assert!(FILETREE_RUNTIME_JS.contains("function titleOf")); assert!(FILETREE_RUNTIME_JS.contains("function fileWorkspaceRelativePath")); assert!(FILETREE_RUNTIME_JS.contains("function groupRowsByParent")); + assert!(FILETREE_RUNTIME_JS.contains("function replaceSidebarTreeFromDocument")); assert!(FILETREE_RUNTIME_JS.contains("appendUploadedAssetRow: appendUploadedAssetRow")); assert!(FILETREE_RUNTIME_JS.contains("groupRowsByParent: groupRowsByParent")); + assert!(FILETREE_RUNTIME_JS + .contains("replaceSidebarTreeFromDocument: replaceSidebarTreeFromDocument")); assert!(FILETREE_RUNTIME_JS .contains("uploadIntent: String(detail.uploadIntent || 'filetree.folder.drop')")); assert!(FILETREE_RUNTIME_JS diff --git a/rust/spikes/leptos-tiptap-spike/generated/island/mnote-leptos-tiptap-spike-island.js b/rust/spikes/leptos-tiptap-spike/generated/island/mnote-leptos-tiptap-spike-island.js index 86518b31..f17699e6 100644 --- a/rust/spikes/leptos-tiptap-spike/generated/island/mnote-leptos-tiptap-spike-island.js +++ b/rust/spikes/leptos-tiptap-spike/generated/island/mnote-leptos-tiptap-spike-island.js @@ -1284,7 +1284,7 @@ function __wbg_get_imports() { return ret; }, __wbindgen_cast_0000000000000006: function(arg0, arg1) { - // Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [NamedExternref("KeyboardEvent")], shim_idx: 883, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`. + // Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [NamedExternref("KeyboardEvent")], shim_idx: 736, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`. const ret = makeMutClosure(arg0, arg1, wasm_bindgen__convert__closures_____invoke__hd90af689bc3e71bf); return ret; }, diff --git a/rust/spikes/leptos-tiptap-spike/generated/island/mnote-leptos-tiptap-spike-island_bg.wasm b/rust/spikes/leptos-tiptap-spike/generated/island/mnote-leptos-tiptap-spike-island_bg.wasm index 212683558b9caf7d02104b26226bc893bb4b33a2..5622963f7268c32dc0c8815c757d7a499e581bfe 100644 GIT binary patch delta 96335 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 delta 97244 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 Option { + window() + .and_then(|win| win.document()) + .and_then(|document| document.element_from_point(client_x as f32, client_y as f32)) + .map(Into::into) +} + #[cfg(test)] mod tests { use super::*; diff --git a/rust/spikes/leptos-tiptap-spike/src/lib.rs b/rust/spikes/leptos-tiptap-spike/src/lib.rs index 2e8ebbd1..cbb108b0 100644 --- a/rust/spikes/leptos-tiptap-spike/src/lib.rs +++ b/rust/spikes/leptos-tiptap-spike/src/lib.rs @@ -22,8 +22,8 @@ use web_sys::{ use editor_runtime::attachment_upload::dispatch_editor_upload_request; use editor_runtime::block_dnd::{ - drop_indicator_top, drop_placement_from_block_point, pointer_in_handle_corridor_geometry, - HandleCorridorGeometry, + drop_indicator_top, drop_placement_from_block_point, event_target_from_point, + pointer_in_handle_corridor_geometry, HandleCorridorGeometry, }; use editor_runtime::block_menu_overlay; use editor_runtime::block_menu_legacy_html::{ @@ -5430,10 +5430,7 @@ fn drop_indicator_from_target( } fn drop_indicator_from_point(client_x: i32, client_y: i32) -> Option { - let target = window() - .and_then(|win| win.document()) - .and_then(|document| document.element_from_point(client_x as f32, client_y as f32))?; - let target: web_sys::EventTarget = target.into(); + let target = event_target_from_point(client_x, client_y)?; drop_indicator_from_target(target, client_y) } diff --git a/scripts/task487-local-folder-tree-live-consumer-smoke.js b/scripts/task487-local-folder-tree-live-consumer-smoke.js index 5350b4cb..f34d1d68 100644 --- a/scripts/task487-local-folder-tree-live-consumer-smoke.js +++ b/scripts/task487-local-folder-tree-live-consumer-smoke.js @@ -28,8 +28,10 @@ const BASE_URL = (process.env.MNOTE_WEB_SMOKE_BASE_URL || "http://127.0.0.1:3000 const UI_TIMEOUT_MS = Number(process.env.MNOTE_SMOKE_UI_TIMEOUT_MS || 30_000); const OUTPUT_DIR = path.join(process.cwd(), "tmp", "task487-local-folder-tree-live-consumer-smoke"); const RESULT_PATH = path.join(OUTPUT_DIR, "result.json"); -const SCREENSHOT_BEFORE_PATH = path.join(OUTPUT_DIR, "page-tree-before-create.png"); -const SCREENSHOT_AFTER_PATH = path.join(OUTPUT_DIR, "page-tree-after-create.png"); +const SCREENSHOT_PAGE_TREE_LOADED_PATH = path.join(OUTPUT_DIR, "page-tree-loaded.png"); +const SCREENSHOT_PAGE_TREE_AFTER_CREATE_PATH = path.join(OUTPUT_DIR, "page-tree-after-create.png"); +const SCREENSHOT_PAGE_TREE_AFTER_DELETE_PATH = path.join(OUTPUT_DIR, "page-tree-after-delete.png"); +const SCREENSHOT_FILETREE_AFTER_CREATE_PATH = path.join(OUTPUT_DIR, "filetree-after-create.png"); const CHROMIUM_EXECUTABLE_PATH = process.env.PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH || ["/usr/bin/google-chrome-stable", "/usr/bin/google-chrome", "/snap/bin/chromium"] .find((candidate) => fs.existsSync(candidate)); @@ -75,21 +77,52 @@ function writeWorkspaceManifest(root, ownerId) { /** * 读取 上的所有 data-mnote-tree-live-* 属性和 - * data-mnote-local-folder-watch-applied,返回一个状态对象。 + * data-mnote-local-folder-watch-applied,并补充当前树 DOM 证据。 */ -async function readLiveDomState(page) { - return page.evaluate(() => { +async function readLiveDomState(page, evidence = {}) { + return page.evaluate((options) => { const html = document.documentElement; + const pageTreeRows = Array.from(document.querySelectorAll("#sidebar-tree-root .tree-row[data-node-id]")); + const fileTreeRows = Array.from(document.querySelectorAll(".tree-row[data-row-id]")); + const targetNodeId = options.targetNodeId || ""; + const targetRowSelector = options.targetRowSelector || ""; + const targetNodePresent = targetNodeId + ? pageTreeRows.some((row) => row.getAttribute("data-node-id") === targetNodeId) + : null; + const targetRowPresent = targetRowSelector + ? !!document.querySelector(targetRowSelector) + : null; + return { + label: options.label || "", treeLiveTransport: html.getAttribute("data-mnote-tree-live-transport") || "", treeLiveStatus: html.getAttribute("data-mnote-tree-live-status") || "", treeLiveApplied: html.getAttribute("data-mnote-tree-live-applied") || "", treeLiveRevision: html.getAttribute("data-mnote-tree-live-revision") || "", treeLiveApplyError: html.getAttribute("data-mnote-tree-live-apply-error") || "", localFolderWatchApplied: html.getAttribute("data-mnote-local-folder-watch-applied") || "", + pageTreeRowCount: pageTreeRows.length, + fileTreeRowCount: fileTreeRows.length, + targetNodeId, + targetNodePresent, + targetRowSelector, + targetRowPresent, url: window.location.href, }; - }); + }, evidence); +} + +/** + * 记录一个阶段内是否发生主框架导航。RED smoke 不因失败退出非 0, + * 但需要把 reload / full navigation 作为明确证据写入 result.json。 + */ +function navigationEvidence(label, events) { + return { + label, + pass: events.length === 0, + count: events.length, + events: events.slice(0, 20), + }; } /** @@ -144,9 +177,14 @@ async function run() { }); const assertions = []; - let domStateBefore = null; - let domStateAfterCreate = null; - let domStateAfterDelete = null; + let pageTreeLoadedState = null; + let pageTreeAfterCreateState = null; + let pageTreeAfterDeleteState = null; + let filetreeLoadedState = null; + let filetreeAfterCreateState = null; + let filetreeAfterDeleteState = null; + let pageTreeNavigationEvidence = null; + let filetreeNavigationEvidence = null; let fatalError = null; try { @@ -173,72 +211,77 @@ async function run() { navigationEvents.length = 0; // 记录加载后 DOM 状态 - domStateBefore = await readLiveDomState(page); + pageTreeLoadedState = await readLiveDomState(page, { label: "pageTreeLoaded" }); // 断言 1: transport 不应为 local-folder-static assertions.push(check( "data-mnote-tree-live-transport !== 'local-folder-static'", - domStateBefore.treeLiveTransport !== "local-folder-static", + pageTreeLoadedState.treeLiveTransport !== "local-folder-static", '非 local-folder-static(期望 "local-folder-events" 或等价)', - domStateBefore.treeLiveTransport, + pageTreeLoadedState.treeLiveTransport, )); // 断言 2: status 不应为 static assertions.push(check( "data-mnote-tree-live-status 不为 static", - domStateBefore.treeLiveStatus !== "static", + pageTreeLoadedState.treeLiveStatus !== "static", "connected / connecting / disabled 等非 static 值", - domStateBefore.treeLiveStatus, + pageTreeLoadedState.treeLiveStatus, )); // 断言 3: 有 transport 属性(不是空) assertions.push(check( "data-mnote-tree-live-transport 非空", - domStateBefore.treeLiveTransport !== "", + pageTreeLoadedState.treeLiveTransport !== "", "非空字符串", - domStateBefore.treeLiveTransport, + pageTreeLoadedState.treeLiveTransport, )); // 截图:page tree 加载后状态 - await page.screenshot({ path: SCREENSHOT_BEFORE_PATH, fullPage: false }); + await page.screenshot({ path: SCREENSHOT_PAGE_TREE_LOADED_PATH, fullPage: false }); // 断言 4: 外部文件创建后,tree live applied 应为 snapshot 或 resync // 先确认页面稳定 await page.waitForTimeout(200); - domStateBefore = await readLiveDomState(page); + pageTreeLoadedState = await readLiveDomState(page, { label: "pageTreeLoadedAfterStabilize" }); // 创建外部文件 const createdFileRel = "docs/live-consumer-test.md"; + const createdFileDocumentId = localMdDocumentId(createdFileRel); fs.writeFileSync(path.join(root, createdFileRel), "# Live Consumer Test\n", "utf8"); // 等待 page tree row 出现(当前通过 polling 机制) - await waitForPageTreeNode(page, localMdDocumentId(createdFileRel)).catch(() => {}); + await waitForPageTreeNode(page, createdFileDocumentId).catch(() => {}); // 等待一小段时间让 tree live consumer 有机会触发 await page.waitForTimeout(400); - domStateAfterCreate = await readLiveDomState(page); + pageTreeAfterCreateState = await readLiveDomState(page, { + label: "pageTreeAfterExternalCreate", + targetNodeId: createdFileDocumentId, + }); + await page.screenshot({ path: SCREENSHOT_PAGE_TREE_AFTER_CREATE_PATH, fullPage: false }); // 断言 4: applied 应为 snapshot 或 resync - const appliedOk = domStateAfterCreate.treeLiveApplied === "snapshot" - || domStateAfterCreate.treeLiveApplied === "resync"; + const appliedOk = pageTreeAfterCreateState.treeLiveApplied === "snapshot" + || pageTreeAfterCreateState.treeLiveApplied === "resync"; assertions.push(check( "外部创建后 data-mnote-tree-live-applied 为 snapshot|resync", appliedOk, "snapshot 或 resync", - domStateAfterCreate.treeLiveApplied, + pageTreeAfterCreateState.treeLiveApplied, )); // 断言 5: watch-applied 不再是唯一证据 // 即 treeLiveApplied 存在(非空)或 transport 不是 local-folder-static // 如果 watch-applied 是唯一标记而 treeLiveApplied 为空,则不合格 - const hasTreeLiveEvidence = domStateAfterCreate.treeLiveApplied !== "" - || domStateAfterCreate.treeLiveTransport !== "local-folder-static"; + const hasTreeLiveEvidence = pageTreeAfterCreateState.treeLiveApplied !== "" + || pageTreeAfterCreateState.treeLiveTransport !== "local-folder-static"; assertions.push(check( "存在 tree live consumer 证据(非仅 local-folder-watch-applied)", hasTreeLiveEvidence, "treeLiveApplied 非空 或 transport !== local-folder-static", - `treeLiveApplied="${domStateAfterCreate.treeLiveApplied}" transport="${domStateAfterCreate.treeLiveTransport}"`, + `treeLiveApplied="${pageTreeAfterCreateState.treeLiveApplied}" transport="${pageTreeAfterCreateState.treeLiveTransport}"`, )); // 断言 6: 外部文件删除后同样有 tree live applied 痕迹 @@ -250,19 +293,28 @@ async function run() { { timeout: UI_TIMEOUT_MS }, ).catch(() => {}); await page.waitForTimeout(400); - domStateAfterDelete = await readLiveDomState(page); + pageTreeAfterDeleteState = await readLiveDomState(page, { + label: "pageTreeAfterExternalDelete", + targetNodeId: createdFileDocumentId, + }); + await page.screenshot({ path: SCREENSHOT_PAGE_TREE_AFTER_DELETE_PATH, fullPage: false }); - const appliedDelOk = domStateAfterDelete.treeLiveApplied === "snapshot" - || domStateAfterDelete.treeLiveApplied === "resync"; + const appliedDelOk = pageTreeAfterDeleteState.treeLiveApplied === "snapshot" + || pageTreeAfterDeleteState.treeLiveApplied === "resync"; assertions.push(check( "外部删除后 data-mnote-tree-live-applied 为 snapshot|resync", appliedDelOk, "snapshot 或 resync", - domStateAfterDelete.treeLiveApplied, + pageTreeAfterDeleteState.treeLiveApplied, )); - // 截图:外部创建后 - await page.screenshot({ path: SCREENSHOT_AFTER_PATH, fullPage: false }); + pageTreeNavigationEvidence = navigationEvidence("PageTree 外部创建/删除阶段无主框架导航或 reload", navigationEvents); + assertions.push(check( + pageTreeNavigationEvidence.label, + pageTreeNavigationEvidence.pass, + "navigationEvents.length === 0", + pageTreeNavigationEvidence.count, + )); // ── Phase 2: FileTree 视图 ── await page.goto(documentUrl(root, "README.md", "filetree"), { waitUntil: "domcontentloaded", timeout: UI_TIMEOUT_MS }); @@ -277,38 +329,71 @@ async function run() { await page.waitForTimeout(300); navigationEvents.length = 0; - const filetreeState = await readLiveDomState(page); + filetreeLoadedState = await readLiveDomState(page, { label: "filetreeLoaded" }); assertions.push(check( "FileTree: transport !== 'local-folder-static'", - filetreeState.treeLiveTransport !== "local-folder-static", + filetreeLoadedState.treeLiveTransport !== "local-folder-static", "非 local-folder-static", - filetreeState.treeLiveTransport, + filetreeLoadedState.treeLiveTransport, )); assertions.push(check( "FileTree: status 不为 static", - filetreeState.treeLiveStatus !== "static", + filetreeLoadedState.treeLiveStatus !== "static", "非 static", - filetreeState.treeLiveStatus, + filetreeLoadedState.treeLiveStatus, )); // FileTree 外部创建 - fs.writeFileSync(path.join(root, "docs", "filetree-live-test.md"), "# FileTree Live\n", "utf8"); + const filetreeCreatedRel = "docs/filetree-live-test.md"; + const filetreeCreatedRowSelector = `.tree-row[data-row-id="local:markdown:${filetreeCreatedRel}"]`; + fs.writeFileSync(path.join(root, filetreeCreatedRel), "# FileTree Live\n", "utf8"); // 等待 filetree row 出现(与 task435 同模式) - await page.locator(`.tree-row[data-row-id="local:markdown:docs/filetree-live-test.md"]`).waitFor({ + await page.locator(filetreeCreatedRowSelector).waitFor({ state: "visible", timeout: UI_TIMEOUT_MS, }).catch(() => {}); await page.waitForTimeout(400); - const filetreeAfterCreate = await readLiveDomState(page); + filetreeAfterCreateState = await readLiveDomState(page, { + label: "filetreeAfterExternalCreate", + targetRowSelector: filetreeCreatedRowSelector, + }); + await page.screenshot({ path: SCREENSHOT_FILETREE_AFTER_CREATE_PATH, fullPage: false }); assertions.push(check( "FileTree 外部创建后 tree-live-applied 为 snapshot|resync", - filetreeAfterCreate.treeLiveApplied === "snapshot" || filetreeAfterCreate.treeLiveApplied === "resync", + filetreeAfterCreateState.treeLiveApplied === "snapshot" || filetreeAfterCreateState.treeLiveApplied === "resync", "snapshot 或 resync", - filetreeAfterCreate.treeLiveApplied, + filetreeAfterCreateState.treeLiveApplied, + )); + + fs.rmSync(path.join(root, filetreeCreatedRel)); + await page.locator(filetreeCreatedRowSelector).waitFor({ + state: "detached", + timeout: UI_TIMEOUT_MS, + }).catch(() => {}); + await page.waitForTimeout(400); + + filetreeAfterDeleteState = await readLiveDomState(page, { + label: "filetreeAfterExternalDelete", + targetRowSelector: filetreeCreatedRowSelector, + }); + + assertions.push(check( + "FileTree 外部删除后 tree-live-applied 为 snapshot|resync", + filetreeAfterDeleteState.treeLiveApplied === "snapshot" || filetreeAfterDeleteState.treeLiveApplied === "resync", + "snapshot 或 resync", + filetreeAfterDeleteState.treeLiveApplied, + )); + + filetreeNavigationEvidence = navigationEvidence("FileTree 外部创建/删除阶段无主框架导航或 reload", navigationEvents); + assertions.push(check( + filetreeNavigationEvidence.label, + filetreeNavigationEvidence.pass, + "navigationEvents.length === 0", + filetreeNavigationEvidence.count, )); } catch (err) { @@ -325,13 +410,27 @@ async function run() { ? "✅ 所有断言通过 — local_folder 已收敛到 tree live consumer" : "🔴 RED — 一个或多个断言失败,local_folder 仍使用 local-folder-static / polling 主链", assertions, - domStateBefore, - domStateAfterCreate, - domStateAfterDelete, + domStateBefore: pageTreeLoadedState, + domStateAfterCreate: pageTreeAfterCreateState, + domStateAfterDelete: pageTreeAfterDeleteState, + stagedDomStates: { + pageTreeLoaded: pageTreeLoadedState, + pageTreeAfterExternalCreate: pageTreeAfterCreateState, + pageTreeAfterExternalDelete: pageTreeAfterDeleteState, + filetreeLoaded: filetreeLoadedState, + filetreeAfterExternalCreate: filetreeAfterCreateState, + filetreeAfterExternalDelete: filetreeAfterDeleteState, + }, + navigationEvidence: { + pageTreeExternalMutations: pageTreeNavigationEvidence, + filetreeExternalMutations: filetreeNavigationEvidence, + }, navigationEvents: navigationEvents.slice(0, 20), screenshots: { - pageTreeLoaded: SCREENSHOT_BEFORE_PATH, - afterExternalCreate: SCREENSHOT_AFTER_PATH, + pageTreeLoaded: SCREENSHOT_PAGE_TREE_LOADED_PATH, + pageTreeAfterExternalCreate: SCREENSHOT_PAGE_TREE_AFTER_CREATE_PATH, + pageTreeAfterExternalDelete: SCREENSHOT_PAGE_TREE_AFTER_DELETE_PATH, + filetreeAfterExternalCreate: SCREENSHOT_FILETREE_AFTER_CREATE_PATH, }, fatalError, timestamp: new Date().toISOString(),