From 7c6392becdefced193cdeadd713c7be85fbefc0a Mon Sep 17 00:00:00 2001 From: lix-2026 Date: Mon, 25 May 2026 05:48:26 +0800 Subject: [PATCH] refactor: remove dead selection bridge helpers --- ...29-editor-runtime-followup-checklist-v1.md | 9 ++ .../mnote-leptos-tiptap-spike-island_bg.wasm | Bin 2120772 -> 2120772 bytes rust/spikes/leptos-tiptap-spike/src/lib.rs | 115 ------------------ 3 files changed, 9 insertions(+), 115 deletions(-) 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 d206bc87..9134ae36 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 @@ -198,3 +198,12 @@ UI / 浏览器可见项必须有真实浏览器截图或结构化 smoke 证据 - 修改:`rust/spikes/leptos-tiptap-spike/src/editor_runtime/dom_selection.rs`、`rust/spikes/leptos-tiptap-spike/src/lib.rs`。 - 已验证:`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`、`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`。 - 未迁/未删:`send_selection_state_to_target`、selection event dispatch、`send_selection_state`、`selection_event_payload`、`runtime_state_payload`、`runtime_status_payload` 等未使用 bridge/helper 函数;死代码清理后续单独切片处理。 +- 2026-05-25:Batch W 只派发 1 个只读 Reasonix worker 审计 selection / bridge 死代码清理边界,使用独立 worktree `/mnt/Data1T/mnote-worktrees/0525-w-worker-a-5-29-selection-deadcode-readonly`,run id `reasonix-2026-05-24T21-36-28-065Z-75d6e2e8`,并显式使用 `--no-memory-recall`。 + - Codex 已读取 Hindsight recall、`process-handoff.md/json`、`result.json`,并核对 worktree `git status --short` / `git diff --stat` 为空;Reasonix 未修改源码。 + - 同批补派 Worker B/C/D 三个独立实现 worktree,合计 4 个 worker,未超过当前 goal 上限;三个实现 run 均只有 `prompt.md` / `memory-recall.json` / `reasonix-transcript.jsonl`,没有 `final.md`、`result.json`、`process-handoff.md/json`,且 worktree diff 为空,按采纳规则全部拒收。 + - 审计结论经 Codex 复核后采纳:删除无调用方私有函数 `send_selection_state`、`selection_event_payload`、`dispatch_bridge_event`、`current_runtime_block_info`、`current_runtime_block_info_from_hovered`、`runtime_state_payload`、`runtime_status_payload`。 + - 保留:`send_selection_state_to_target`、`dispatch_selection_event_to_target`、`current_block_info_from_index`、`state_payload`、`status_payload`,原因是仍有真实调用方或作为当前替代链路使用。 + - Codex 随后在独立 worktree `/mnt/Data1T/mnote-worktrees/0525-w-worker-b-5-29-selection-deadcode-impl` 基于 W 审计结论产出候选 patch,验证后再选择性合入主工作区;没有在主工作区直接试改实现。 + - 修改:`rust/spikes/leptos-tiptap-spike/src/lib.rs`、generated island wasm。 + - 当前执行约束同步修正:`3-20` / `5-29` checklist 均保持“当前 goal 下每批最多 4 个 worker”。 + - 已验证:`git diff --check`、`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`、`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`、`codegraph sync .`、`codegraph status .`。 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 d09ac4ad5b099e9e64a707426245080db1c18cc7..1c964dbabbfcd938ead2554f5eb4a5e9a9f192bb 100644 GIT binary patch delta 8045 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 Option { .map(|body| body.into()) } -fn current_runtime_block_info() -> CurrentBlockInfo { - hovered_block_from_selection() - .and_then(|block| { - Some(CurrentBlockInfo { - index: Some(block.index), - block_id: runtime_block_id_from_index(block.index), - }) - }) - .unwrap_or(CurrentBlockInfo { - index: None, - block_id: None, - }) -} - -fn current_runtime_block_info_from_hovered( - hovered_block: Option, -) -> CurrentBlockInfo { - hovered_block - .map(|block| CurrentBlockInfo { - index: Some(block.index), - block_id: runtime_block_id_from_index(block.index), - }) - .unwrap_or(CurrentBlockInfo { - index: None, - block_id: None, - }) -} - fn editor_block_by_id(block_id: &str) -> Option { find_mnote_block_anchor(block_id) } @@ -4826,81 +4798,6 @@ fn current_workspace_id() -> Option { current_query_param("workspaceId") } -fn selection_event_payload( - selection: &TiptapSelectionState, - editor_focused: bool, - hovered_block: Option, -) -> SelectionPayload { - SelectionPayload { - selection: selection.clone(), - summary: selection_summary(selection), - editor_focused, - current_block_index: hovered_block.as_ref().map(|block| block.index), - current_block_id: hovered_block.and_then(|block| runtime_block_id_from_index(block.index)), - } -} - -fn runtime_state_payload( - document_id: Option, - workspace_id: Option, - title: String, - dirty_count: u32, - hovered_block: Option, - editor_focused: bool, - slash_open: bool, - turn_into_open: bool, - color_menu_open: bool, - more_menu_open: bool, - read_only: bool, -) -> StatePayload { - StatePayload { - document_id, - workspace_id, - title, - dirty_count, - selected_block_index: hovered_block.map(|block| block.index), - editor_focused, - slash_open, - toolbar_open: toolbar_overlay_locked(turn_into_open, color_menu_open, more_menu_open), - read_only, - } -} - -fn runtime_status_payload( - document_id: Option, - workspace_id: Option, - title: String, - dirty_count: u32, - hovered_block: Option, - editor_focused: bool, - slash_open: bool, - turn_into_open: bool, - color_menu_open: bool, - more_menu_open: bool, - read_only: bool, -) -> HostStatusPayload { - let current_block_index = hovered_block.as_ref().map(|block| block.index); - HostStatusPayload { - document_id, - workspace_id, - title, - dirty_count, - selected_block_index: current_block_index, - current_block_id: current_block_index.and_then(runtime_block_id_from_index), - editor_focused, - read_only, - slash_open, - toolbar_open: toolbar_overlay_locked(turn_into_open, color_menu_open, more_menu_open), - } -} - -fn dispatch_bridge_event(event_name: &'static str, payload: &T) -where - T: Serialize, -{ - dispatch_runtime_event(event_name, payload); -} - pub(crate) fn editor_root_element() -> Option { window() .and_then(|win| win.document()) @@ -5952,18 +5849,6 @@ fn dispatch_runtime_state_to_target( ); } -fn send_selection_state( - selection: &TiptapSelectionState, - editor_focused: bool, - current_block_index: Option, -) { - dispatch_selection_event(&selection_payload( - selection, - editor_focused, - current_block_index, - )); -} - fn send_selection_state_to_target( target: &EventTarget, selection: &TiptapSelectionState,