# Mindmap Phase 6 leptos-mindmap UI Shell Reuse Checklist v1

> **For agentic workers:** REQUIRED SUB-SKILL: Use `superpowers:subagent-driven-development` for independent code slices, or `superpowers:executing-plans` when executing this checklist in order. Steps use checkbox (`- [ ]`) syntax for tracking. 每完成一个节点，必须基于代码、截图或测试证据勾选对应项。

**Goal:** 在不恢复旧 React 主链、不直接嵌入 lx-doc Vue 应用的前提下，把当前 `leptos-mindmap + simple-mind-map runtime` 从“无头 runtime + 手写 chrome”推进到接近 KMind/lx-doc 可用度的 floating overlay canvas UI shell。

**Architecture:** Rust kernel 继续持有导图事实源和命令语义，`simple-mind-map` 继续作为编辑 runtime。UI schema 只描述 toolbar、sidebar、navigator、context menu 的项目和动作，不负责布局；默认宿主必须采用接近 lx-doc/KMind 的画布承载模型：runtime 作为块内无限画布底层，toolbar/sidebar/navigator/count/minimap 作为 overlay 浮在画布上，不挤压画布尺寸。当前 TypeScript NodeView 只是过渡桥接层，后续 UI shell 应迁到 Leptos/Rust 组件，避免引入更多长期前端语言/框架边界。

**Tech Stack:** Rust `core-protocol` / `bridge-runtime` / `mnote-web`、`leptos-tiptap` NodeView、`simple-mind-map`、历史 React `MindmapBlock` 组件族、lx-doc `mind-map` 参考代码、Playwright smoke。

---

## 0. 当前判断

当前 Phase 6 的方向不需要改成“直接嵌入 lx-doc/mind-map”。应该继续采用：

```text
Rust kernel truth
  -> mindmap.simple_mind_map_scene.v1
  -> leptos-tiptap NodeView
  -> simple-mind-map runtime
  -> UI shell schema / action bridge
  -> kernel command / compatPayload.patch
```

本 checklist 修正的是下一阶段执行重心：

- 不再把“接入 `simple-mind-map` runtime”当作可用导图编辑器完成。
- 不再继续手写一次性的功能键、选项栏和底部栏。
- 优先复用本仓历史自研 UI 壳的配置、按钮分组、右侧栏、导航栏、MiniMap、统计、右键菜单经验。
- lx-doc/KMind 作为视觉、命令和交互基线；历史 React 组件作为最直接的迁移素材。
- 2026-05-11 修正：此前 schema UI 已能显示工具项，但仍采用 grid/flex 文档流布局，和 `https://wanglin2.github.io/mind-map/#/`、KMind 截图的“无限画布 + 浮动 UI”不一致。后续必须先迁移到 floating overlay canvas shell，再继续扩展功能语义。
- 2026-05-11 方向约束：mnote 主体是 Rust，`leptos-tiptap` 也是嵌入式 Leptos 路线；mindmap UI shell 不应继续沉淀为 TypeScript DOM UI。TS 只保留 `tiptap NodeView mount + simple-mind-map bridge + event/command forwarding`，真正的 toolbar/sidebar/navigator/context menu 应迁移到 Leptos/Rust。

## 1. 参考材料

### 当前主线文档

- `design/06-mindmap/reference/6-mindmap-kernel-phase6-projection-editor-v1.md`
- `design/06-mindmap/reference/6-mindmap-leptos-adapter-reference-notes-v1.md`
- `docs/superpowers/plans/2026-05-10-mindmap-phase6-projection-editor-checklist.md`

### lx-doc / KMind 参考

- `design/05-editor-mainline/reference-code/lx-doc/mind-map/src/pages/Edit/components/Edit.vue`
- `design/05-editor-mainline/reference-code/lx-doc/mind-map/src/pages/Edit/components/ToolbarNodeBtnList.vue`
- `design/05-editor-mainline/reference-code/lx-doc/mind-map/src/pages/Edit/components/SidebarTrigger.vue`
- `design/05-editor-mainline/reference-code/lx-doc/mind-map/src/pages/Edit/components/NavigatorToolbar.vue`
- `design/05-editor-mainline/reference-code/lx-doc/mind-map/src/config/zh.js`
- `design/05-editor-mainline/reference-code/kmind-plugin`

### 本仓历史 UI 壳

- `wolai-frontend/src/components/editor/blocks/MindmapBlock.tsx`
- `wolai-frontend/src/components/editor/blocks/MindmapToolbar.tsx`
- `wolai-frontend/src/components/editor/blocks/mindmapToolbarConfig.ts`
- `wolai-frontend/src/components/editor/blocks/MindmapSidebar.tsx`
- `wolai-frontend/src/components/editor/blocks/mindmapSidebarConfig.ts`
- `wolai-frontend/src/components/editor/blocks/MindmapNavigator.tsx`
- `wolai-frontend/src/components/editor/blocks/MindmapMiniMap.tsx`
- `wolai-frontend/src/components/editor/blocks/MindmapCount.tsx`
- `wolai-frontend/src/components/editor/blocks/MindmapContextMenu.tsx`

### 历史简化宿主参考

- `/mnt/Data1T/mnote-rust/components/editor/blocks/MindmapRuntimeEditor.tsx`
- `/mnt/Data1T/mnote-rust/components/editor/blocks/MindmapToolbar.tsx`
- `/mnt/Data1T/mnote-rust/components/editor/blocks/MindmapNavigator.tsx`
- `/mnt/Data1T/mnote-rust/components/editor/blocks/MindmapMiniMap.tsx`
- `/mnt/Data1T/mnote-rust/components/editor/blocks/MindmapSidebarTrigger.tsx`

## 2. 文件职责图

- `wolai-frontend/src/lib/mindmap/mindmap-ui-schema.ts`
  - 新增：toolbar、sidebar、navigator、context menu 的中立 UI schema。
- `wolai-frontend/src/lib/mindmap/mindmap-action-map.ts`
  - 新增：UI action 到 `simple-mind-map` command、kernel command、`compatPayload.patch` 的映射。
- `wolai-frontend/src/lib/mindmap/mindmap-ui-state.ts`
  - 新增：active node、selection、readonly、scale、panel open state、disabled state 的派生逻辑。
- `wolai-frontend/src/lib/mindmap/leptos-mindmap-adapter.ts`
  - 修改：暴露 UI shell 需要的 runtime action、state subscribe、command result。
- `wolai-frontend/src/lib/mindmap/simple-mind-map-bridge.ts`
  - 修改：补齐 `execCommand`、插件能力探测、scale/view 操作、销毁清理。
- `wolai-frontend/src/lib/mindmap/mindmap-command-diff.ts`
  - 修改：补齐 toolbar/sidebar/context menu 产生的变更到 kernel command / compat patch 的转换。
- `design/05-editor-mainline/reference-code/leptos-tiptap/tiptap/src/extensions/tiptap_paragraph.ts`
  - 过渡修改：NodeView 只负责挂载 runtime、Leptos/Rust UI shell 宿主和最小桥接，不再继续扩散硬编码按钮逻辑。
- `rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_paragraph.js`
  - 修改：同步生成后的 browser-side bridge，保持与 TS source 行为一致。
- `scripts/task166-mindmap-phase6-block-smoke.js`
  - 修改：从 runtime 存在 smoke 升级为 UI shell、交互、保存、reload、截图 smoke。

### Floating overlay canvas shell 约束

- 默认 DOM 应为 `canvas-layer + overlay-layer`：`simple-mind-map` runtime 充满块内画布，toolbar/sidebar/navigator/count/minimap 都位于 overlay layer。
- toolbar 顶部居中浮动，视觉上接近 lx-doc `Toolbar.vue` 的 fixed toolbar，而不是文档流顶部栏。
- sidebar trigger / panel 右侧浮动，打开 panel 时不改变 runtime 宽度，只覆盖画布右侧安全区域。
- navigator 右下浮动，count 左下浮动，MiniMap 后续在右下 navigator 上方浮动。
- smoke 必须断言 overlay layer 存在，runtime rect 与 editor root rect 高度/宽度接近，不因 sidebar/toolbar/navigator 被 grid/flex 挤压。

### Leptos/Rust UI shell 收口约束

- `mindmap-ui-schema.ts` / `mindmap-action-map.ts` / `mindmap-ui-state.ts` 当前是过渡资产；新增长期 UI 行为时应优先设计 Rust/Leptos 可消费的 schema 和 signal/state 边界。
- `tiptap_paragraph.ts` 不应继续成为 toolbar/sidebar/navigator 的长期实现文件；新增复杂 UI 面板前，应先迁出到 Leptos/Rust 组件或生成的 island 组件边界。
- 禁止恢复旧 React `MindmapBlock.tsx` 为默认主链，禁止直接嵌入 lx-doc Vue app，禁止新增第三套 JS UI 框架。
- `simple-mind-map` 可以继续作为 runtime engine，但 UI shell 的宿主语言方向应是 Leptos/Rust。

---

### Task 1: 冻结新阶段边界

**Files:**
- Modify: `design/06-mindmap/reference/6-mindmap-kernel-phase6-projection-editor-v1.md`
- Modify: `docs/superpowers/plans/2026-05-10-mindmap-phase6-projection-editor-checklist.md`
- Create/Modify: `design/06-mindmap/done/6-mindmap-phase6-leptos-ui-shell-reuse-checklist-v1.md`

- [x] 明确当前 Phase 6 不是“Rust 重写 lx-doc/mind-map”，也不是“直接嵌入 lx-doc Vue app”。
  - 2026-05-11 记录：本文件“当前判断”和总设计稿第 3 节均保留三路线定位，Phase 6 主线为 `leptos-mindmap`。
- [x] 明确下一阶段目标是“当前 simple-mind-map runtime + 可复用 UI shell + kernel command bridge”。
  - 2026-05-11 记录：本文件 Goal/Architecture 与总设计稿 `10.2` 均明确 floating overlay UI shell + command bridge。
- [x] 在旧 checklist 中标记：已完成项如果只覆盖 runtime 接入和最小 smoke，不代表 KMind-like UI 可用性完成。
  - 2026-05-11 更新：旧 checklist 新增 `Task 13: UI Shell Reuse 后续收口`，指向本文件。
- [x] 在设计稿中补一段“UI shell 复用策略”，指向本 checklist。
  - 2026-05-11 更新：`6-mindmap-kernel-phase6-projection-editor-v1.md` 新增 `10.2 2026-05-11 UI shell reuse 收口状态`。
- [x] 验证：`rg -n "UI shell|MindmapBlock.tsx|mindmap-ui-schema|直接嵌入 lx-doc" design/06-mindmap docs/superpowers/plans/2026-05-10-mindmap-phase6-projection-editor-checklist.md`
  - 2026-05-11 通过：命令能检索到本 checklist、总设计稿、reference notes 和旧执行 checklist 的对应口径。

### Task 2: 抽取历史 React UI 能力清单

**Files:**
- Inspect: `wolai-frontend/src/components/editor/blocks/MindmapBlock.tsx`
- Inspect: `wolai-frontend/src/components/editor/blocks/MindmapToolbar.tsx`
- Inspect: `wolai-frontend/src/components/editor/blocks/mindmapToolbarConfig.ts`
- Inspect: `wolai-frontend/src/components/editor/blocks/MindmapSidebar.tsx`
- Inspect: `wolai-frontend/src/components/editor/blocks/mindmapSidebarConfig.ts`
- Inspect: `wolai-frontend/src/components/editor/blocks/MindmapNavigator.tsx`
- Inspect: `wolai-frontend/src/components/editor/blocks/MindmapMiniMap.tsx`
- Inspect: `wolai-frontend/src/components/editor/blocks/MindmapCount.tsx`
- Inspect: `wolai-frontend/src/components/editor/blocks/MindmapContextMenu.tsx`
- Output: `design/06-mindmap/reference/6-mindmap-leptos-adapter-reference-notes-v1.md`

- [x] 列出历史 toolbar 分组：历史操作、节点操作、插入扩展、样式、结构、导入导出、视图操作。
- [x] 列出每个 toolbar action 的旧实现来源、旧 runtime 调用、禁用条件、是否需要 active node。
- [x] 列出历史 sidebar panel：节点样式、基础样式、主题、结构、大纲、快捷键或设置。
- [x] 列出历史 navigator 能力：缩放、回根、适应画布、MiniMap、节点数/字数、只读/全屏。
- [x] 列出历史 context menu 能力：插入、删除、复制、粘贴、展开折叠、概要、关联线、样式。
- [x] 标注哪些能力第一阶段必须迁移，哪些只保留 schema 但暂不显示。
- [x] 验证：输出表格至少覆盖 toolbar、sidebar、navigator、context menu 四类能力，并能追溯到具体文件名。
  - 2026-05-11 输出：`design/06-mindmap/reference/6-mindmap-leptos-adapter-reference-notes-v1.md` 第 8 节。

### Task 3: 建立中立 UI Schema

**Files:**
- Create: `wolai-frontend/src/lib/mindmap/mindmap-ui-schema.ts`
- Create: `wolai-frontend/src/lib/mindmap/mindmap-ui-schema.test.ts`

- [x] 定义 `MindmapUiActionId`，覆盖第一阶段 action：`undo`、`redo`、`editNode`、`insertSiblingAfter`、`insertChild`、`deleteNode`、`tag`、`hyperlink`、`note`、`image`、`icon`、`summary`、`associativeLine`、`formula`、`painter`、`import`、`export`、`setTheme`、`setLayout`、`zoomIn`、`zoomOut`、`fitView`、`centerRoot`、`search`、`readonly`。
- [x] 定义 `MindmapToolbarGroup`，字段包含 `id`、`label`、`actions`、`collapsePriority`。
- [x] 定义 `MindmapSidebarPanel`，字段包含 `id`、`label`、`icon`、`runtimeCapability`、`phase`。
- [x] 定义 `MindmapNavigatorItem`，字段包含 `id`、`label`、`actionId`、`readOnly`、`displayMode`。
- [x] 定义 `MindmapContextMenuItem`，字段包含 `id`、`label`、`actionId`、`requiresNode`、`phase`。
- [x] 导出 `mindmapDefaultUiSchema`，只包含第一阶段需要显示的功能。
- [x] 单测断言 action id 不重复、每个 toolbar action 都能在 action map 中找到占位映射、第一阶段 panel 数量不超过 5 个。
- [x] 验证：`cd /mnt/Data1T/mnote/wolai-frontend && pnpm test -- mindmap-ui-schema`

### Task 4: 建立 Action Map 与禁用状态

**Files:**
- Create: `wolai-frontend/src/lib/mindmap/mindmap-action-map.ts`
- Create: `wolai-frontend/src/lib/mindmap/mindmap-action-map.test.ts`
- Create: `wolai-frontend/src/lib/mindmap/mindmap-ui-state.ts`
- Create: `wolai-frontend/src/lib/mindmap/mindmap-ui-state.test.ts`
- Modify: `wolai-frontend/src/lib/mindmap/leptos-mindmap-adapter.ts`

- [x] 定义 `MindmapActionTarget`：`runtimeCommand`、`kernelCommand`、`compatPatch`、`localView`。
- [x] 把 `insertChild` 映射到 `simple-mind-map` 插入子节点命令，并在成功后走 `mindmap.node.insert_child` 或 diff。
- [x] 把 `insertSiblingAfter` 映射到同级插入命令，并在成功后走 `mindmap.node.insert_sibling_after` 或 diff。
- [x] 把 `deleteNode` 映射到删除命令，并在成功后走 `mindmap.node.delete` 或 diff。
- [x] 把 `centerRoot`、`zoomIn`、`zoomOut`、`fitView` 映射为 runtime view action，同时产生 `mindmap.view.patch`。
- [x] 把 `setTheme`、`setLayout` 映射为 `mindmap.theme.set`、`mindmap.layout.set`。
- [x] 把 `tag`、`hyperlink`、`note`、`image`、`icon`、`formula`、`painter` 第一阶段映射为 `compatPayload.patch`，并记录字段路径。
- [x] 实现 `deriveMindmapUiState()`，根据 active node、readonly、runtime capabilities、selection 派生 disabled state。
- [x] 单测覆盖：无 active node 时节点操作禁用；readonly 时编辑类 action 禁用；view action 不依赖 active node。
- [x] 验证：`cd /mnt/Data1T/mnote/wolai-frontend && pnpm test -- mindmap-action-map mindmap-ui-state`
  - 2026-05-11 补充验证：`pnpm test -- mindmap-ui-schema mindmap-action-map mindmap-ui-state` 通过。

### Task 5: 替换 NodeView 中的硬编码 Chrome

**Files:**
- Modify: `design/05-editor-mainline/reference-code/leptos-tiptap/tiptap/src/extensions/tiptap_paragraph.ts`
- Modify: `rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_paragraph.js`
- Modify: `wolai-frontend/src/lib/mindmap/leptos-mindmap-adapter.ts`

- [x] 移除默认主链中的手写 toolbar button 列表，改为从 `mindmapDefaultUiSchema.toolbarGroups` 渲染。
  - 2026-05-11 验证：默认 DOM `data-testid="mindmap-schema-toolbar"` 且 `data-schema-source="mindmapDefaultUiSchema"`；截图 `tmp/task166-mindmap-phase6-block-smoke/toolbar-actions.png`。
- [x] 移除默认主链中的手写 sidebar trigger 列表，改为从 `mindmapDefaultUiSchema.sidebarPanels` 渲染。
  - 2026-05-11 验证：默认 DOM `data-testid="mindmap-schema-sidebar"` 且 `data-schema-source="mindmapDefaultUiSchema"`；截图 `tmp/task166-mindmap-phase6-block-smoke/sidebar-node-style.png`。
- [x] 移除默认主链中的固定 bottom bar 文案，改为从 navigator schema 和 runtime state 渲染。
  - 2026-05-11 验证：默认 DOM `data-testid="mindmap-schema-navigator"`，显示节点数、字数与缩放百分比；截图 `tmp/task166-mindmap-phase6-block-smoke/navigator-default.png`。
- [x] 保留最小错误层：`projection_load_failed`、`adapter_init_failed`、`runtime_render_failed`、`command_failed`。
- [x] 保留 debug fallback，但必须通过显式 debug flag 才能显示，不作为默认主链。
- [x] 确保 NodeView 销毁时仍调用 adapter `destroy()`。
- [x] 验证：页面 DOM 中默认不再出现旧 `.mnote-mindmap-node` 手写节点主链；`data-testid="mnote-mindmap-editor-root"` 仍存在。
  - 2026-05-11 验证：`node scripts/task166-mindmap-phase6-block-smoke.js` 通过；`tmp/task166-mindmap-phase6-block-smoke/result.json` 中 `ok=true`，默认 `debugChrome=false` 且无手写 toolbar/sidebar/bottom bar。

### Task 5A: 修正为 Floating Overlay Canvas Shell

**Files:**
- Modify: `design/05-editor-mainline/reference-code/leptos-tiptap/tiptap/src/extensions/tiptap_paragraph.ts`
- Modify: `rust/spikes/leptos-tiptap-spike/src/lib.rs`
- Modify: `rust/spikes/leptos-tiptap-spike/generated/island/snippets/leptos-tiptap-c355e6ec24c3df4c/src/js/generated/tiptap_paragraph.js`
- Modify: `scripts/task166-mindmap-phase6-block-smoke.js`

- [x] NodeView 默认 DOM 改为 `canvas-layer + overlay-layer`，runtime 不再和 sidebar 组成 grid。
  - 2026-05-11 实现：默认路径挂载 `mindmap-canvas-layer` 与 `mindmap-overlay-layer`；debug fallback 仍保留旧布局。
- [x] toolbar 顶部居中浮动，sidebar 右侧浮动，navigator 右下浮动，count 左下浮动。
  - 2026-05-11 截图：`tmp/task166-mindmap-phase6-block-smoke/01-after-insert-floating-overlay.png`。
- [x] sidebar 打开或切换 panel 时不改变 runtime 宽度。
  - 2026-05-11 验证：sidebar 已从 workspace grid 移到 overlay layer；smoke 覆盖 panel 切换截图。
- [x] smoke 断言 `data-testid="mindmap-overlay-layer"` 存在，且 `runtimeBox.width / rootBox.width >= 0.9`。
  - 2026-05-11 验证：`node scripts/task166-mindmap-phase6-block-smoke.js` 通过。
- [x] smoke 保存 `01-after-insert-floating-overlay.png`，截图能看到画布底层和浮动 UI。
  - 2026-05-11 截图：`tmp/task166-mindmap-phase6-block-smoke/01-after-insert-floating-overlay.png`。
- [x] 验证：`cd /mnt/Data1T/mnote/design/05-editor-mainline/reference-code/leptos-tiptap/tiptap && npm run typecheck && npm run build`
  - 2026-05-11 通过。
- [x] 验证：`cd /mnt/Data1T/mnote/wolai-frontend && node scripts/build-leptos-tiptap-island.js`
  - 2026-05-11 已重新生成 island。
- [x] 验证：`cd /mnt/Data1T/mnote && node scripts/task166-mindmap-phase6-block-smoke.js`
  - 2026-05-11 通过；`tmp/task166-mindmap-phase6-block-smoke/result.json` 中 `ok=true`。

### Task 5B: 收口到 Leptos/Rust UI Shell 宿主

**Files:**
- Modify/Create: `rust/spikes/leptos-tiptap-spike/src/lib.rs`
- Modify/Create: `rust/spikes/leptos-tiptap-spike/src/mindmap_shell.rs` 或同等 Leptos 组件文件
- Modify: `design/05-editor-mainline/reference-code/leptos-tiptap/tiptap/src/extensions/tiptap_paragraph.ts`
- Modify: `wolai-frontend/src/lib/mindmap/leptos-mindmap-adapter.ts`
- Modify: `scripts/task166-mindmap-phase6-block-smoke.js`

- [x] 明确 `tiptap_paragraph.ts` 只创建 mount 容器、加载 runtime bridge、转发事件，不再直接渲染 toolbar/sidebar/navigator 长期 UI。
  - 2026-05-11 实现：默认路径只挂载 `mindmap-rust-shell-mount`，TS 负责 `simple-mind-map` runtime、projection/command bridge、`mnote:mindmap-shell:*` 事件转发；debug fallback 仍需显式 debug flag。
- [x] 将 floating overlay shell 的 toolbar/sidebar/count/navigator 渲染迁到 Leptos/Rust 组件边界。
  - 2026-05-11 实现：`rust/spikes/leptos-tiptap-spike/src/lib.rs` 导出 `mount_mindmap_shell` / `unmount_mindmap_shell`，Leptos 组件输出 `mindmap-rust-shell`、toolbar、sidebar、count、navigator。
- [x] Leptos/Rust UI shell 消费同等 schema/state/action 能力；若仍需 TS schema，必须作为临时 adapter 输入，不作为长期事实源。
  - 2026-05-11 实现：当前 TS adapter 将 `mindmapDefaultUiSchema` 与 `deriveMindmapUiState()` 转为 Rust shell options；后续新增长期 UI 能力应继续迁到 Rust/Leptos schema 边界。
- [x] Leptos/Rust UI shell 触发 action 时仍经由 adapter command bridge，不绕过 kernel command。
  - 2026-05-11 验证：Rust shell 派发 `mnote:mindmap-shell:action` / `mnote:mindmap-shell:panel`，NodeView 统一转到 `executeSchemaAction()`、`applyCommandsAndRefresh()`、`patchView`。
- [x] smoke 断言默认 UI shell 来源为 `leptos-rust-shell` 或等价稳定标记，而不是 `typescript-nodeview-dom`。
  - 2026-05-11 验证：`scripts/task166-mindmap-phase6-block-smoke.js` 断言 `data-ui-shell-source="leptos-rust-shell"`、`data-ui-source="leptos-rust-shell"`。
- [x] 验证：`cd /mnt/Data1T/mnote/design/05-editor-mainline/reference-code/leptos-tiptap/tiptap && npm run typecheck && npm run build`
  - 2026-05-11 通过。
- [x] 验证：`cd /mnt/Data1T/mnote/wolai-frontend && node scripts/build-leptos-tiptap-island.js`
  - 2026-05-11 通过，island 入口包含 `mount_mindmap_shell` / `unmount_mindmap_shell`。
- [x] 验证：`cd /mnt/Data1T/mnote && node scripts/task166-mindmap-phase6-block-smoke.js`
  - 2026-05-11 通过；`tmp/task166-mindmap-phase6-block-smoke/result.json` 中 `ok=true`，默认入口 `http://127.0.0.1:3000`；截图 `tmp/task166-mindmap-phase6-block-smoke/01-after-insert-floating-overlay.png`。

### Task 6: Toolbar 第一阶段迁移

**Files:**
- Modify: `wolai-frontend/src/lib/mindmap/mindmap-ui-schema.ts`
- Modify: `wolai-frontend/src/lib/mindmap/mindmap-action-map.ts`
- Modify: `wolai-frontend/src/lib/mindmap/leptos-mindmap-adapter.ts`
- Modify: `scripts/task166-mindmap-phase6-block-smoke.js`

- [x] 顶部 toolbar 显示：撤销、重做、同级节点、子节点、删除、标签、超链接、备注、图片、图标、概要、关联线、公式、格式刷、导入、导出。
  - 2026-05-11 验证：`node scripts/task166-mindmap-phase6-block-smoke.js` 断言上述 action id 均存在；截图 `tmp/task166-mindmap-phase6-block-smoke/toolbar-actions.png`。
- [x] toolbar 分组、图标尺寸、按钮间距对齐 KMind/lx-doc 的工作台密度，不做大卡片式按钮。
  - 2026-05-11 实现：`rust/spikes/leptos-tiptap-spike/src/lib.rs` 新增 schema toolbar group、tool icon/label 紧凑样式；截图 `tmp/task166-mindmap-phase6-block-smoke/01-after-insert-schema-ui.png`。
- [x] active node 为空时禁用节点相关按钮。
  - 2026-05-11 实现：Rust shell 消费 `deriveMindmapUiState()` 派生的 disabled state；节点类 action 依赖 `activeNodeId`。
- [x] readonly 时禁用所有编辑类按钮，保留缩放、搜索、回根。
  - 2026-05-11 验证：`node scripts/task166-mindmap-phase6-block-smoke.js` 中 `verifyReadonlyToolbarState()` 覆盖 readonly 开关后编辑按钮禁用、view 按钮保留可用。
- [x] 点击“子节点”后真实插入节点，截图可见新增节点。
  - 2026-05-11 验证：`toolbarActions.insertChildOk=true`，截图 `tmp/task166-mindmap-phase6-block-smoke/03-after-toolbar-actions.png`。
- [x] 点击“同级节点”后真实插入同级节点，截图可见新增节点。
  - 2026-05-11 验证：`toolbarActions.insertSiblingOk=true`，节点数从 5 增至 6。
- [x] 点击“删除”后真实删除选中节点，并能 reload 后保持。
  - 2026-05-11 验证：`toolbarActions.deleteOk=true`，删除后节点数为 5，reload 后仍为 5。
- [x] 验证：smoke 输出 toolbar action 结果 JSON，包含 `insertChildOk`、`insertSiblingOk`、`deleteOk`。
  - 2026-05-11 通过：`tmp/task166-mindmap-phase6-block-smoke/result.json` 中 `toolbarActions={insertChildOk:true,insertSiblingOk:true,deleteOk:true}`。

### Task 7: Sidebar 第一阶段迁移

**Files:**
- Modify: `wolai-frontend/src/lib/mindmap/mindmap-ui-schema.ts`
- Modify: `wolai-frontend/src/lib/mindmap/mindmap-action-map.ts`
- Modify: `wolai-frontend/src/lib/mindmap/leptos-mindmap-adapter.ts`
- Modify: `scripts/task166-mindmap-phase6-block-smoke.js`

- [x] 右侧栏触发器显示：节点样式、导图样式、主题、结构、大纲。
  - 2026-05-11 验证：smoke 断言 `nodeStyle`、`baseStyle`、`theme`、`structure`、`outline` 均存在。
- [x] 打开一个 panel 时不挤压或遮挡主要画布节点。
  - 2026-05-11 验证：Task 5A/5B smoke 断言 `runtimeBox.width / rootBox.width >= 0.9`、`runtimeBox.height / rootBox.height >= 0.85`；sidebar 位于 floating overlay，不改变 runtime 尺寸。
- [x] 主题 panel 第一阶段至少提供默认主题和 KMind-like 主题切换。
  - 2026-05-11 实现：Rust/Leptos sidebar body 渲染 `theme-classic`、`theme-classic4`；NodeView bridge 将选择转为 `setTheme` kernel command。验证：`node scripts/task166-mindmap-phase6-block-smoke.js` 中 `sidebarActions.themeOk=true`，reload 后 `theme=classic4` 保持；截图 `tmp/task166-mindmap-phase6-block-smoke/sidebar-theme.png`、`sidebar-actions.png`。
- [x] 结构 panel 第一阶段至少提供逻辑结构、右侧结构、鱼骨或树形结构中的可用子集。
  - 2026-05-11 实现：Rust/Leptos sidebar body 渲染 `logicalStructure`、`mindMap`、`fishbone` 结构选项；NodeView bridge 将选择转为 `setLayout` kernel command。验证：`node scripts/task166-mindmap-phase6-block-smoke.js` 中 `sidebarActions.layoutOk=true`，reload 后 `layout=mindMap` 保持；截图 `tmp/task166-mindmap-phase6-block-smoke/sidebar-structure.png`。
- [x] 大纲 panel 只从 projection/runtime 派生，不创建第二份树真相。
  - 2026-05-11 实现：NodeView 每次 mount Rust shell 时从当前 runtime snapshot / projection root 派生 `bodyItems`，Rust shell 只渲染传入列表，不维护第二份树状态。验证：`sidebarActions.outlineDerivedOk=true`，输出 outline items 包含当前导图节点文本；截图 `tmp/task166-mindmap-phase6-block-smoke/sidebar-outline.png`。
- [x] 节点样式和导图样式的暂未语义化字段走 `compatPayload.patch`。
  - 2026-05-11 实现：sidebar option 派发 `source=sidebar` 与 `compatPath`；节点样式写入 `nodes.$active.data.fillColor`，导图样式写入 `compatPayload.style.map.lineStyle`。验证：`sidebarActions.nodeStyleCompatOk=true`、`sidebarActions.baseStyleCompatOk=true`，reload 后保持；截图 `tmp/task166-mindmap-phase6-block-smoke/sidebar-node-style.png`、`sidebar-base-style.png`。
- [x] 验证：smoke 能打开每个 panel，并保存 `sidebar-node-style.png`、`sidebar-theme.png`、`sidebar-structure.png`、`sidebar-outline.png`。
  - 2026-05-11 通过：`node scripts/task166-mindmap-phase6-block-smoke.js` 保存四张 sidebar 截图。

### Task 8: Navigator / MiniMap / Count 迁移

**Files:**
- Modify: `wolai-frontend/src/lib/mindmap/mindmap-ui-schema.ts`
- Modify: `wolai-frontend/src/lib/mindmap/leptos-mindmap-adapter.ts`
- Modify: `scripts/task166-mindmap-phase6-block-smoke.js`

- [x] 底部栏显示节点数、字数、当前缩放百分比。
  - 2026-05-11 验证：smoke 断言 navigator stats 包含“节点”，zoom 包含 `%`；截图 `tmp/task166-mindmap-phase6-block-smoke/navigator-default.png`。
- [x] “回根节点”调用 runtime center root，并写入 view patch。
  - 2026-05-11 验证：`node scripts/task166-mindmap-phase6-block-smoke.js` 通过；`navigatorActions.centerRootOk=true`，通过浮动 navigator 按钮触发并观测到 `patchView` POST。
- [x] 缩放加减按钮调用 runtime zoom，并写入 view patch。
  - 2026-05-11 验证：`navigatorActions.zoomOk=true`、`viewScale=1.2`，截图 `tmp/task166-mindmap-phase6-block-smoke/navigator-zoomed.png`。
- [x] 搜索入口调用 `simple-mind-map` Search 插件或当前 adapter 搜索入口。
  - 2026-05-11 实现：Rust/Leptos navigator search input 派发 `search` action，NodeView adapter 记录当前搜索入口状态与 query；后续可替换为 Search 插件面板。验证：`navigatorActions.searchOk=true`。
- [x] MiniMap 第一阶段可折叠显示，但按钮和容器状态必须稳定。
  - 2026-05-11 实现：Rust/Leptos shell 增加 MiniMap 开关和稳定 overlay 容器；不恢复旧 React MiniMap。验证：`navigatorActions.minimapOk=true`，截图 `tmp/task166-mindmap-phase6-block-smoke/navigator-minimap.png`。
- [x] 底部栏在窄屏下不覆盖节点编辑区域。
  - 2026-05-11 验证：当前 smoke 断言 runtime 仍保持 `runtimeBox.width/rootBox.width >= 0.9`、`runtimeBox.height/rootBox.height >= 0.85`；navigator/MiniMap 均在 overlay layer，不改变 runtime 尺寸。
- [x] 验证：smoke 保存 `navigator-default.png`、`navigator-zoomed.png`、`navigator-minimap.png`。
  - 2026-05-11 通过：`node scripts/task166-mindmap-phase6-block-smoke.js` 输出 `ok=true`，截图路径包含三张 navigator 截图。

### Task 9: Context Menu 迁移

**Files:**
- Modify: `wolai-frontend/src/lib/mindmap/mindmap-ui-schema.ts`
- Modify: `wolai-frontend/src/lib/mindmap/mindmap-action-map.ts`
- Modify: `wolai-frontend/src/lib/mindmap/leptos-mindmap-adapter.ts`
- Modify: `scripts/task166-mindmap-phase6-block-smoke.js`

- [x] 右键节点时显示节点 context menu。
  - 2026-05-11 实现：NodeView capture 阶段监听 `contextmenu`，检测 `.smm-node` 后打开节点菜单。验证：`node scripts/task166-mindmap-phase6-block-smoke.js` 中 `contextMenuActions.nodeMenuOk=true`；截图 `tmp/task166-mindmap-phase6-block-smoke/context-menu-actions.png`。
- [x] 右键画布时显示画布 context menu，节点专属操作禁用或隐藏。
  - 2026-05-11 验证：smoke 右键 runtime 空白区后 `contextMenuActions.canvasMenuOk=true`，且 canvas 菜单不包含 `insertChild`。
- [x] 节点 menu 第一阶段包含：插入子节点、插入同级节点、删除、展开/收起、概要、关联线、复制文本。
  - 2026-05-11 验证：smoke 断言节点菜单包含 `insertChild`、`insertSiblingAfter`、`deleteNode`、`summary`、`associativeLine`、`expandCollapse`、`copyNodeText`；`copyTextOk=true`，`insertChildOk=true`。
- [x] 画布 menu 第一阶段包含：回根节点、适应画布、搜索、只读切换。
  - 2026-05-11 验证：smoke 断言画布菜单包含 `centerRoot`、`fitView`、`search`、`readonly`。
- [x] 所有 context menu action 复用 `mindmap-action-map.ts`，不新增第二套动作逻辑。
  - 2026-05-11 实现：`mindmap-ui-schema.ts` 新增 `expandCollapse`、`copyNodeText`，`mindmap-action-map.ts` 将其映射为 `localView`；菜单点击统一调用 `executeSchemaAction()`。说明：context menu DOM 当前仍由 NodeView 过渡渲染，后续可按 Task 5B 同样迁入 Rust/Leptos shell。
- [x] 验证：smoke 能打开节点右键菜单和画布右键菜单，并保存截图。
  - 2026-05-11 通过：`node scripts/task166-mindmap-phase6-block-smoke.js` 输出 `ok=true`；截图 `tmp/task166-mindmap-phase6-block-smoke/context-menu-actions.png`。

### Task 10: Command Bridge 与保存闭环补齐

**Files:**
- Modify: `wolai-frontend/src/lib/mindmap/mindmap-command-diff.ts`
- Modify: `wolai-frontend/src/lib/mindmap/leptos-mindmap-adapter.ts`
- Modify: `rust/crates/bridge-runtime/src/lib.rs`
- Modify: `rust/crates/core-protocol/src/mindmap.rs`
- Modify: `scripts/task166-mindmap-phase6-block-smoke.js`

- [x] `data_change` 能识别文本更新、插入子节点、插入同级节点、删除节点、移动节点。
  - 2026-05-11 验证：`mindmap-command-diff.test.ts` 覆盖文本、插入、删除、移动 diff；`node scripts/task166-mindmap-phase6-block-smoke.js` 覆盖 toolbar/context menu 插入与删除保存闭环。
- [x] `view_data_change` 能转成 `mindmap.view.patch`。
  - 2026-05-11 验证：navigator 回根与缩放触发 view patch；smoke 输出 `navigatorActions.centerRootOk=true`、`navigatorActions.zoomOk=true`、`viewScale=1.2`。
- [x] toolbar/sidebar/context menu 触发的动作都能落到 `kernel command` 或 `compatPayload.patch`。
  - 2026-05-11 验证：toolbar 插入/删除、sidebar 主题/结构、context menu 插入均通过 smoke；sidebar 节点样式/导图样式走 compat patch，结果为 `nodeStyleCompatOk=true`、`baseStyleCompatOk=true`。
- [x] 每个 `compatPayload.patch` 记录字段路径、来源 action、runtime revision、kernel revision。
  - 2026-05-11 实现：`mindmap-command-diff.ts` 的 `MindmapCompatPayloadPatch` 增加 `actionId`、`runtimeRevision`、`kernelRevision`；NodeView bridge 注入 action/revision 元信息。
- [x] command 失败时显示 `command_failed`，并保留失败 action id 和错误消息。
  - 2026-05-11 实现：NodeView command 失败时写入 `data-command-failed-action` 与 `data-command-failed-message`；本轮 smoke 未再复现删除节点 400。
- [x] reload 后仍能看到 toolbar 插入/删除/主题/结构/view 的已保存结果。
  - 2026-05-11 验证：smoke 保存并校验 `04-after-reload.png`；输出 `toolbarActions.deleteOk=true`、`sidebarActions.themeOk=true`、`sidebarActions.layoutOk=true`、`viewScale=1.2`。
- [x] 验证：`cd /mnt/Data1T/mnote/rust && cargo test -p core-protocol mindmap`
  - 2026-05-11 通过：3 passed。
- [x] 验证：`cd /mnt/Data1T/mnote/rust && cargo test -p bridge-runtime mindmap`
  - 2026-05-11 通过：14 passed。
- [x] 验证：`cd /mnt/Data1T/mnote/wolai-frontend && pnpm test -- mindmap-command-diff leptos-mindmap-adapter`
  - 2026-05-11 通过：实际匹配全量 106 files，416 tests passed。

### Task 11: KMind/lx-doc 视觉对齐

**Files:**
- Modify: `design/05-editor-mainline/reference-code/leptos-tiptap/tiptap/src/extensions/tiptap_paragraph.ts`
- Modify: relevant generated JS island file
- Modify: `wolai-frontend/src/lib/mindmap/mindmap-ui-schema.ts`
- Modify: `scripts/task166-mindmap-phase6-block-smoke.js`
- Reference Image: `tmp/image copy 60.png`
- Reference Image: `tmp/image copy 70.png`
- Current Evidence: `tmp/image copy 79.png`

- [x] 默认根节点、二级节点、分支节点、概要线的视觉结果接近 KMind/lx-doc，而不是只显示基础节点和错位连线。
  - 2026-05-11 实现：真实 `simple-mind-map` runtime 负责节点、连线、概要线渲染；当前截图能看到根节点、二级节点、分支主题和概要括号线。剩余差异：默认主题色仍未完全等同 `image copy 60.png` 的红/蓝 KMind 配色，后续可继续细化 themeConfig。
- [x] toolbar、右侧触发器、底部栏呈现为编辑工作台 chrome，不占据画布主体。
  - 2026-05-11 实现：Leptos/Rust shell 的 toolbar、sidebar、navigator、count 均为 floating overlay；新截图 `tmp/task166-mindmap-phase6-block-smoke/01-after-insert-floating-overlay.png` 显示 UI 浮在画布上，不再挤压 runtime。
- [x] 连线对齐节点中心或 runtime 默认锚点，无明显错位。
  - 2026-05-11 验证：当前连线由 `simple-mind-map` runtime 生成；人工查看 `04-after-reload.png` 未见此前手写线条错位问题。
- [x] 画布初始视口能看到完整示例导图，不需要用户手动拖拽才能判断是否渲染成功。
  - 2026-05-11 修复：`simple-mind-map-bridge.ts` 不再用固定 `fit:false` 覆盖 runtimeOptions；默认 `fit:true`，`01-after-insert-floating-overlay.png` 中示例导图完整可见。
- [x] 禁止用说明性大字、调试文案或状态卡片占据导图首屏。
  - 2026-05-11 验证：默认首屏为真实 runtime + floating UI；debug fallback 仍需显式 debug flag。
- [x] 验证：人工对照 `image copy 60.png` / `image copy 70.png` / 当前 smoke 截图，记录剩余差异到 checklist 或 reference notes。
  - 2026-05-11 对照：当前已具备无限画布底层、浮动 toolbar、右侧栏、底部 navigator、概要线和完整初始视口；剩余差异为图标体系、默认主题色、工具栏按钮分组密度和高级面板内容仍未完全复刻 lx-doc/KMind。

### Task 12: Browser Smoke 升级

**Files:**
- Modify: `scripts/task166-mindmap-phase6-block-smoke.js`
- Output: `tmp/task166-mindmap-phase6-block-smoke/result.json`
- Output: `tmp/task166-mindmap-phase6-block-smoke/*.png`

- [x] smoke 使用真实测试账号登录 `http://127.0.0.1:3000/`。
  - 2026-05-11 验证：`tree-shell-smoke-helpers.js` 使用 `mnote.e2e@example.com` / “测试账号快速登录”，本轮 smoke baseUrl 为 `http://127.0.0.1:3000`。
- [x] smoke 插入或打开 mindmap block 后断言 `simple-mind-map` canvas/SVG 容器非零尺寸。
  - 2026-05-11 验证：`assertMindmapReady()` 断言 `simple-mind-map-runtime`、runtime box、节点数和边数。
- [x] smoke 断言 toolbar、sidebar trigger、bottom navigator、context menu 入口存在。
  - 2026-05-11 验证：smoke 断言 `mindmap-schema-toolbar`、`mindmap-schema-sidebar`、`mindmap-schema-navigator`、`mindmap-schema-count`，并打开节点/画布 context menu。
- [x] smoke 执行插入子节点、插入同级节点、删除节点、缩放、回根节点。
  - 2026-05-11 验证：输出 `toolbarActions.insertChildOk/insertSiblingOk/deleteOk=true`，`navigatorActions.centerRootOk/zoomOk=true`。
- [x] smoke 打开右侧栏的主题、结构、大纲 panel。
  - 2026-05-11 验证：截图包含 `sidebar-theme.png`、`sidebar-structure.png`、`sidebar-outline.png`。
- [x] smoke reload 后断言已编辑文本、节点数量、view state 至少一项保持。
  - 2026-05-11 验证：reload 后断言编辑文本、节点数量、主题、结构、节点样式、导图样式；view scale 输出为 `1.2`。
- [x] smoke 输出 `ok`、`documentId`、`mindmapId`、`nodeCount`、`edgeCount`、`toolbarActions`、`sidebarPanels`、`navigatorActions`、`contextMenuActions`、`screenshots`。
  - 2026-05-11 验证：`tmp/task166-mindmap-phase6-block-smoke/result.json` 输出 `ok=true`、`documentId`、`mindmapId`、`nodeCount=6`、`edgeCount=5`、`toolbarActions`、`sidebarActions`、`navigatorActions`、`contextMenuActions`、`screenshots`。
- [x] smoke 失败时必须标出阶段：`projection_load_failed`、`adapter_init_failed`、`runtime_render_failed`、`ui_shell_missing`、`command_failed`、`reload_mismatch`。
  - 2026-05-11 实现：失败分支从 error message / error layer 归类 `failureStage`，并保存 `99-failure.png`。
- [x] 验证：`node /mnt/Data1T/mnote/scripts/task166-mindmap-phase6-block-smoke.js`
  - 2026-05-11 通过：`ok=true`，截图已刷新。

### Task 13: 旧实现边界收口

**Files:**
- Modify: `wolai-frontend/src/components/editor/blocks/MindmapBlock.tsx`
- Modify: `wolai-frontend/src/components/editor/blocks/MindmapToolbar.tsx`
- Modify: `wolai-frontend/src/components/editor/blocks/MindmapSidebar.tsx`
- Modify: `wolai-frontend/src/components/editor/blocks/MindmapNavigator.tsx`
- Modify: `wolai-frontend/src/components/editor/blocks/MindmapContextMenu.tsx`
- Modify: `wolai-frontend/src/components/editor/editor-host-config.test.ts`

- [x] 给旧 React mindmap 组件族补清晰注释：legacy/reference/compat，不是 3000 文档页默认主链。
  - 2026-05-11 实现：`MindmapBlock.tsx` 及 `MindmapToolbar.tsx`、`MindmapSidebar.tsx`、`MindmapNavigator.tsx`、`MindmapContextMenu.tsx`、`MindmapMiniMap.tsx`、`MindmapCount.tsx`、`MindmapSidebarTrigger.tsx` 顶部均标注 legacy/reference/compat 边界。
- [x] 默认文档页 host 为 `leptos_tiptap_island` 时，不加载旧 React `MindmapBlock` 作为主编辑路径。
  - 2026-05-11 验证：`editor-host-config.test.ts` 断言默认 host 为 `leptos_tiptap_island`，`blocknote`/旧 debug host 均折返 island。
- [x] 历史 toolbar/sidebar/navigator/context menu 只能作为 schema 抽取来源，不在运行时并行挂两套 UI。
  - 2026-05-11 验证：smoke 断言默认不存在旧 `mindmap-command-toolbar`、`mindmap-sidebar`、`mindmap-bottom-bar` fallback。
- [x] 保留旧组件用于对照、独立迁移或回收，不在本任务中删除。
  - 2026-05-11 处理：旧 React 组件族仍被独立导图页 `/mindmap/[docId]/[mindmapId]` 引用，暂不移动；已删除重复的 `wolai-frontend/src/app/dev/mindmap/page.tsx`，对应副本保留在 `recycle/wolai-frontend/src/app/dev/mindmap/page.tsx`。
- [x] 静态测试禁止把 `.mnote-mindmap-react-mount` 或 `window.__mindmapInstance` 作为 Phase 6 成功条件。
  - 2026-05-11 实现：`editor-host-config.test.ts` 新增 Phase 6 mindmap 成功选择器断言，成功条件限定为 `mnote-mindmap-editor-root`、`simple-mind-map-runtime`、`mindmap-rust-shell`。
- [x] 验证：`cd /mnt/Data1T/mnote/wolai-frontend && pnpm test -- editor-host-config`
  - 2026-05-11 通过：实际匹配全量 106 files，418 tests passed。

### Task 14: 文档与执行记录

**Files:**
- Modify: `design/06-mindmap/reference/6-mindmap-kernel-phase6-projection-editor-v1.md`
- Modify: `design/06-mindmap/reference/6-mindmap-leptos-adapter-reference-notes-v1.md`
- Modify: `design/06-mindmap/done/6-mindmap-phase6-leptos-ui-shell-reuse-checklist-v1.md`
- Modify: `docs/superpowers/plans/2026-05-10-mindmap-phase6-projection-editor-checklist.md`

- [x] 在总设计稿中明确：UI shell reuse 是 `leptos-mindmap` 的 Phase 6 后续收口，不改变 kernel-first 主合同。
  - 2026-05-11 更新：`6-mindmap-kernel-phase6-projection-editor-v1.md` 新增 `10.2 UI shell reuse 收口状态`，指向本 checklist。
- [x] 在 reference notes 中补历史 React UI 壳能力表。
  - 2026-05-11 已完成：`6-mindmap-leptos-adapter-reference-notes-v1.md` 第 8 节覆盖 toolbar、sidebar、navigator/MiniMap/count、context menu。
- [x] 在旧执行 checklist 中补一条链接，说明后续 UI 可用度按本 checklist 继续。
  - 2026-05-11 更新：`docs/superpowers/plans/2026-05-10-mindmap-phase6-projection-editor-checklist.md` 新增 `Task 13: UI Shell Reuse 后续收口`。
- [x] 每完成一个 task，在本文件勾选对应节点，并附验证命令或截图路径。
  - 2026-05-11 已按 Task 10-13 补充命令、截图和 result.json 证据。
- [x] 如果某项被后续实现废弃，移动到“暂不做项”并写明原因，不静默删除。
  - 2026-05-11 当前没有静默删除项；context menu DOM 仍标记为 NodeView 过渡层，未误报为纯 Rust shell。

## 退出标准

- [x] 当前文档页 mindmap block 默认使用真实 `simple-mind-map` runtime，而不是手写 SVG/DOM 假导图。
- [x] toolbar、sidebar、navigator、context menu 都来自可复用 UI schema 或等价配置，不再散落为 NodeView 内硬编码按钮。
- [x] 第一阶段常用操作可用：插入子节点、插入同级节点、删除、编辑文本、缩放、回根、主题切换、结构切换、大纲查看。
- [x] 所有编辑动作都经过 kernel command 或 `compatPayload.patch`，不把整棵 runtime data 作为 canonical truth。
- [x] smoke 有插入后、操作后、打开侧栏后、打开右键菜单后、reload 后截图。
- [x] 人工对照 `tmp/image copy 60.png` 或 `tmp/image copy 70.png`，当前实现已经呈现为可用工作台，而不是“无头 runtime + 临时按钮”。

## 暂不做项

- [ ] 不直接把 lx-doc Vue2 应用作为 mnote 文档页内嵌主链。
- [ ] 不恢复旧 React `MindmapBlock.tsx` 为默认编辑器主链。
- [ ] 不在本阶段 Rust-native 重写 `simple-mind-map` layout / hit-test / renderer。
- [ ] 不在本阶段完整复刻 KMind 多根、MOC、思源块镜像、PDF 标注、全量导入导出、主题设计器。
- [ ] 不删除历史 React mindmap 文件；先作为迁移参考和 compat 资产保留。
- [ ] 旧 React `MindmapBlock.tsx` 组件族暂不移动到 recycle，直到 `/mindmap/[docId]/[mindmapId]` 独立页切到同一 `leptos-mindmap` adapter contract；当前只回收重复 dev 路由。
