26 KiB
6 [process] Mindmap Kernel Phase 6:降级为 Projection / Editor v1
更新时间:2026-04-22
当前主线依据:
/mnt/Data1T/mnote/design/01-05-current-priority-overview.md/mnt/Data1T/mnote/design/01-tree-first-graph-kernel/process/1-tree-first-graph-kernel-v1.md/mnt/Data1T/mnote/design/04-tree-domain/process/4-sidebar-pagetree-filetree-rust-web-rebuild-v1.md/mnt/Data1T/mnote/design/03-rust-web/process/3-rust-web-long-term-architecture-v1.md历史参考:
/mnt/Data1T/mnote/design/01-tree-first-graph-kernel/process/1-1-tree-first-graph-kernel-checklist-v2.md/mnt/Data1T/mnote/design/old/05-editor-mainline/process/ai-first-rust-block-editor-baseline-v1.md
1. 文档目的
这份文档用于重写 Kernel Phase 6 的落地口径。
这里仍沿用 Phase 6 命名,是为了保留与旧阶段拆分的一致性;当前执行依据应以 design/01-05-current-priority-overview.md 和相关现行主线文档为准,不再以 1-1-tree-first-graph-kernel-checklist-v2.md 作为唯一推进入口。
这里回答的不是:
- “要不要马上把导图 UI 全量重写成 Rust”
而是:
在当前仓库代码现实下,Mindmap 如何从独立对象中心,降级成
tree-first graph kernel的一种 projection / editor。
这份文档必须同时满足三件事:
- 服从
tree-first graph kernel主线 - 对齐当前仓库里的真实实现,而不是抽象设想
- 给出可迁移、可双写、可分阶段切流的方案
2. 先给结论
结论固定如下:
Mindmap 后续必须进行 Rust 内核化重构,但重构重点不是先替换
simple-mind-map画布,而是先把“导图真相、导图命令、导图 projection、AI 工具入口”切到 Rust kernel。
换句话说:
- 必须 Rust 化的部分
- 导图事实源
- 导图命令层
- 导图 projection 层
- AI / CLI 直接调用的导图工具层
- 不必第一阶段 Rust 化的部分
- 具体画布渲染器
- 工具栏、缩略图、拖拽动画、局部 DOM 细节
因此:
Phase 6 的正确目标不是“把导图换个前端库”,而是“让导图不再以
simple-mind-mapJSON 为系统真相”。
3. 当前代码现实
当前导图主链已经部分接入 Rust runtime,但整体仍然是“前端重交互壳 + blob 持久化 + Rust compat 工具”的形态,还不是 kernel truth。
3.1 前端主壳仍然由 simple-mind-map 驱动
当前主组件:
/mnt/Data1T/mnote/wolai-frontend/src/components/editor/blocks/MindmapBlock.tsx
现状特征:
- 直接加载
simple-mind-map与大量插件 - 同时承担内嵌块、独立页、全屏态、工具栏、缩略图、右键菜单、图片处理、导入导出
- 直接调用:
mindmap.setData(...)mindmap.getData(...)mindmap.execCommand(...)
- 直接请求:
fetch(/api/mindmap/${docId}/${mindmapId})
这说明当前导图编辑器仍然以画布库数据结构为第一现场。
3.2 当前所谓 projection 仍然是前端摘要层,不是 kernel projection
当前文件:
/mnt/Data1T/mnote/wolai-frontend/src/lib/mindmap/mindmap-projection.ts
当前 buildMindmapProjection(...) 的本质是:
- 接受一份 raw mindmap blob
- 做
simple-mind-map兼容归一化 - 输出一个前端摘要对象
- 同时保留
data原始树
这意味着当前 projection 还是:
- blob 的摘要
而不是:
- kernel subtree / graph 的正式投影
3.3 当前持久化仍然是整棵导图 blob
当前持久化主链:
/mnt/Data1T/mnote/wolai-frontend/convex/mindmaps.ts/mnt/Data1T/mnote/wolai-frontend/src/app/api/mindmap/[docId]/[mindmapId]/route.ts
现状特征:
mindmaps.get返回整棵datamindmaps.put写回整棵datamindmaps表持有的是一份完整导图 JSON- 独立页服务端入口仍然走:
mindmaps.get- 然后在前端侧
buildMindmapProjection(...)
这说明当前“导图真相”依然是:
- 可直接存取的一整棵导图 blob
而不是:
- kernel node / edge / subtree
3.4 Rust runtime 已经介入,但仍是 compat mindmap 树语义
当前 Rust 侧相关实现:
/mnt/Data1T/mnote/rust/crates/core-protocol/src/mindmap.rs/mnt/Data1T/mnote/rust/crates/bridge-runtime/src/lib.rs
已存在的事实:
- Rust 侧已经有:
MindmapTreeNodeMindmapOpmindmap_getmindmap_get_subtreemindmap_putmindmap_apply_opsmindmap_outline_to_mindmap
bridge-runtime已能在 Rust 内部应用MindmapOp
但这些能力当前本质上仍然是:
- 对一棵
MindmapTreeNodeJSON 树做读取、修改、返回
不是:
- 对
KernelNode/KernelEdge/KernelSubtree做正式操作
3.5 Kernel 协议已具备导图进入统一内核的入口
当前 kernel 类型:
/mnt/Data1T/mnote/rust/crates/core-protocol/src/kernel.rs
已经有:
KernelNodeType::MindmapKernelNodeType::MindmapNodeKernelProjectionKind::Mindmap
这说明协议层已经承认:
导图应该属于统一 kernel,而不是永远停留在专用 blob 协议。
问题不在方向,而在主线尚未切换完成。
4. 当前架构问题
如果继续维持当前模式,会有四类问题。
4.1 导图真相仍被视图库数据结构绑架
现在真正被保存、被读取、被回写的是:
simple-mind-map兼容树
这会导致:
- 领域模型被 UI 库字段形状反向约束
- 导图语义无法稳定进入 kernel
- 不同视图无法共享统一对象真相
4.2 AI 仍然不是直接操作 kernel
虽然已经有 mindmap_apply_ops 等工具,但它们当前语义仍然是:
- 取出一棵树
- 在 runtime 里改树
- 返回新树
这仍然不是:
- 直接创建
mindmap_node - 直接移动 subtree
- 直接挂接 reference edge
因此 AI 还没有真正“直接写导图内核”。
4.3 导图还没有进入统一 projection 家族
当前 Sidebar / 页面树 / 文件树 正在往 kernel projection 收敛。
但导图仍然主要是:
- 专用 route
- 专用 blob
- 专用前端大组件
这会让导图继续成为一个旁路系统。
4.4 前端壳过重,迁移边界不清
MindmapBlock.tsx 当前同时承担:
- 读取
- 兼容转换
- 渲染
- 编辑
- 保存
- 资产替换
- 导入导出
- 页面模式切换
这意味着:
只要导图真相还留在这里,Phase 6 就不会真正成立。
5. Phase 6 的正确目标
Phase 6 的正确目标固定为:
让 Mindmap 从“独立对象中心 + blob 真相 + 前端重壳”降级成“kernel subtree / graph 的一种 projection 与 editor”。
再收口成一句:
Mindmap 不是对象真相层,Mindmap 只是树/图真相的一种空间化编辑视图。
这意味着:
- 导图不能再拥有第二份对象真相
- 导图不能再以整棵 blob 作为长期 canonical model
- 导图编辑器只能操作 kernel
- 导图 route 只能消费 kernel projection
6. 目标分层
长期建议把导图域拆成四层。
6.1 Kernel Truth
这一层只存系统真相。
建议对象:
mindmap- 作为导图根容器节点
mindmap_node- 作为导图树节点
reference edge- 作为节点到页面、附件、PDF anchor、summary、ai_note 的横向关系
这层只负责:
- 节点存在性
- 父子结构
- sibling 顺序
- 节点稳定 ID
- 节点元信息
- 引用边
- 审计与版本
6.2 Mindmap Projection Layer
这一层负责把 kernel truth 投影为导图视图可消费的数据。
长期至少应有两类 projection:
mindmap_preview- 给文档内嵌卡片、轻量预览使用
mindmap_editor- 给导图独立页、沉浸编辑器使用
这层输出的应是:
- 稳定 node id
- parent / child 关系
- sibling order
- depth
- child count
- 引用摘要
- capability flags
- 视图提示信息
而不是直接把前端控件内部状态回吐出去。
6.3 Editor Adapter Layer
这一层负责:
- 把 kernel projection 转成
simple-mind-map当前所需的数据形状 - 把画布交互翻译成 kernel command
这一层是 compat adapter,不是事实源。
6.4 View Shell
这一层只负责:
- 画布
- 工具栏
- 右键菜单
- 缩略图
- 全屏壳
- 交互状态
这里可以继续用 simple-mind-map 过渡,但不能再持有对象真相。
7. 哪些语义必须进入 kernel
下面这些语义必须进入 kernel,而不是继续停留在 simple-mind-map blob 中。
7.1 节点级稳定语义
mindmap根节点mindmap_node子节点title / textnotehyperlinkrefscollapsed- sibling 排序键
- 节点归档/删除状态
7.2 树语义
- 创建子节点
- 创建同级节点
- 重命名
- 移动 subtree
- 重排顺序
- 删除 subtree
7.3 图语义
- 节点引用页面
- 节点引用块
- 节点引用附件
- 节点引用 PDF 页码/anchor
- AI 生成节点引用证据节点
7.4 审计语义
- command id
- trace id
- actor id
- revision / version
8. 哪些语义不应进入 kernel
下面这些内容不应进入 kernel truth。
- 当前缩放比例
- 当前视口位置
- 当前选中节点
- minimap 展开状态
- 文本编辑框 DOM 状态
- 鼠标拖拽中的临时态
- 纯视图级动画状态
simple-mind-map内部 history 栈- 仅服务当前画布库的缓存字段
这些内容属于:
- editor session state
- view shell state
不是 kernel truth。
9. 命令层重构口径
当前 mindmap_apply_ops 和 mindmap_put 不能再继续被当作长期真相接口。
9.1 mindmap_put
长期应降级为:
- 导入整图
- 替换快照
- 迁移回放
- 故障恢复
不应再作为常规编辑主路径。
9.2 mindmap_apply_ops
长期应保留,但语义要改。
它应变成:
- compat facade
内部行为应是:
- 把
MindmapOp翻译成 kernel command 序列
例如:
addChildkernel.node.create
addSiblingAfterkernel.node.create+ sibling order 调整
updateTextkernel.node.update
setHyperlinkkernel.node.update
setRefskernel.edge.attach/kernel.edge.detach
deleteNodekernel.subtree.delete或kernel.node.archive
也就是说:
mindmap_apply_ops可以继续存在,但它不能继续直接修改一棵 compat 树。
9.3 新的正式命令面
Phase 6 后导图应以 kernel command 为正式写面:
create_nodeupdate_nodemove_subtreereorder_siblingsarchive_noderestore_nodeattach_edgedetach_edge
如果 kernel 当前缺少某些命令,就应在 Phase 6 补入,而不是继续把缺口留给前端 blob。
10. Projection 重构口径
当前导图 route 仍然主要走:
mindmaps.get
然后前端:
buildMindmapProjection(...)
这条链必须调整。
10.1 正式读路径
长期正式读路径应是:
kernel.project_view- projection=
mindmap
- projection=
而不是:
mindmaps.get- 返回 raw blob
10.2 Projection 输出要求
导图 projection 输出至少应包括:
projection_idroot_node_iditemsedgesdepthsort_keyexpand_hintcapability_flagsresource_meta
10.3 前端 adapter 的角色
前端可以继续存在一个:
projection -> simple-mind-mapadapter
但这层只能是 view adapter。
它不能再同时承担:
- canonical model
- 持久化模型
- AI 写入模型
11. AI / CLI 口径
如果目标是“AI 能直接编写思维导图,而不是外挂组件”,那 Phase 6 的 AI 路线必须明确。
11.1 AI 读取导图
AI 应读取:
- kernel subtree
- mindmap projection
- node refs / evidence
而不是只读取一棵视图库 JSON。
11.2 AI 修改导图
AI 应直接发 kernel command,或通过 compat facade 发命令。
正确路径应是:
- AI 意图
- tool / command plan
- kernel command
- projection 刷新
不是:
- AI 输出一整棵导图 JSON
- 再整体覆盖保存
11.3 AI 生成导图
mindmap_outline_to_mindmap 这类能力可以保留,但输出应优先写入:
mindmapmindmap_nodereference edge
而不是先生成一棵孤立 blob 再把它塞进存储。
12. 与当前代码对应的重构任务
12.1 Rust 协议层
需要重构或补充:
/mnt/Data1T/mnote/rust/crates/core-protocol/src/kernel.rs/mnt/Data1T/mnote/rust/crates/core-protocol/src/mindmap.rs
建议动作:
- 保留
MindmapOp作为 compat DTO - 不再把
MindmapTreeNode当长期 canonical model - 为导图补齐正式 projection / command 契约
12.2 Rust runtime
需要重构:
/mnt/Data1T/mnote/rust/crates/bridge-runtime/src/lib.rs
建议动作:
- 增加正式
mindmapprojection builder - 把
mindmap_apply_ops改成 command translator - 让
mindmaps.get逐步降级为 compat query - 新增或补齐导图相关 kernel command
12.3 前端 mindmap adapter
需要重构:
/mnt/Data1T/mnote/wolai-frontend/src/lib/mindmap/mindmap-projection.ts/mnt/Data1T/mnote/wolai-frontend/src/lib/mindmap/mindmapOps.ts
建议动作:
mindmap-projection.ts- 从“blob 摘要器”转成“kernel projection adapter”
mindmapOps.ts- 从“本地真相修改器”降级为 compat / fallback 层
12.4 前端视图壳
需要重构:
/mnt/Data1T/mnote/wolai-frontend/src/components/editor/blocks/MindmapBlock.tsx/mnt/Data1T/mnote/wolai-frontend/src/app/mindmap/[docId]/[mindmapId]/page.tsx/mnt/Data1T/mnote/wolai-frontend/src/app/mindmap/[docId]/[mindmapId]/mindmap-page-client.tsx
建议动作:
- 将读取从
mindmaps.get切到 kernel projection - 将写入从
getData()/POST whole blob切到命令流 - 将
MindmapBlock.tsx缩成 view shell + adapter
12.5 持久化与兼容层
需要重构:
/mnt/Data1T/mnote/wolai-frontend/convex/mindmaps.ts/mnt/Data1T/mnote/wolai-frontend/src/app/api/mindmap/[docId]/[mindmapId]/route.ts
建议动作:
- 迁移期允许双写
- 长期让
mindmaps表退到 compat snapshot / import-export 层 - 正式真相切到 kernel backing store
13. 迁移分期
13.1 Phase 6-A:冻结边界
目标:
- 停止在前端和 compat blob 上继续追加长期业务语义
详细 checklist:
- 冻结口径:
- 明确
MindmapTreeNode只作为 compat DTO - 明确
mindmapsblob 只作为过渡存储,不再新增长期业务语义 - 明确
simple-mind-map只作为 renderer / editor adapter,不再定义系统真相
- 明确
- 协议边界盘点:
- 盘点
/mnt/Data1T/mnote/rust/crates/core-protocol/src/mindmap.rs中哪些字段属于 compat 语义 - 盘点
/mnt/Data1T/mnote/rust/crates/core-protocol/src/kernel.rs中已有mindmap/mindmap_node/projection能力 - 列出 Phase 6 后必须新增的 kernel command / projection 契约缺口
- 盘点
- 前端边界盘点:
- 盘点
/mnt/Data1T/mnote/wolai-frontend/src/components/editor/blocks/MindmapBlock.tsx中哪些逻辑属于真相层 - 将这些逻辑标记为后续待迁移:
- 读主链
- 写主链
- 本地摘要
- 引用回写
- 资产 URL 反写
- 明确哪些逻辑继续保留在 view shell:
- 画布渲染
- 右键菜单
- 工具栏
- 缩略图
- 全屏壳
- 盘点
- 持久化边界盘点:
- 盘点
/mnt/Data1T/mnote/wolai-frontend/convex/mindmaps.ts的现有字段与索引 - 盘点
/mnt/Data1T/mnote/wolai-frontend/src/app/api/mindmap/[docId]/[mindmapId]/route.ts的现有读写语义 - 明确哪些接口后续降级为 compat:
mindmaps.getmindmaps.putmindmaps.deletemindmaps.restore
- 盘点
- AI / CLI 边界盘点:
- 盘点
mindmap_get/mindmap_get_subtree/mindmap_put/mindmap_apply_ops - 标注哪些工具后续保留为 facade,哪些应切到 kernel command
- 明确 AI 不再以“整图 JSON 覆盖”作为长期主路径
- 盘点
- 文档口径冻结:
- 当前文档作为 Phase 6 主文档继续维护
- checklist / architecture / 后续任务拆分不再把导图描述为独立事实源
- 新增导图相关设计时默认引用本文件,而不是继续围绕
simple-mind-map数据结构展开
- 代码约束冻结:
- 在未完成 Phase 6-B 之前,不再给
MindmapTreeNode增加新的长期业务字段 - 在未完成 Phase 6-C 之前,不再新增新的“整图读取后本地改树再整体提交”的主路径
- 在未完成 Phase 6-D 之前,不再新增绕过 kernel 的 AI 写入链路
- 在未完成 Phase 6-B 之前,不再给
出阶段判定:
- 新导图语义默认先判断是否落 kernel,而不是先落前端 blob
MindmapBlock.tsx不再继续承担新的长期对象真相职责- 团队已统一接受:
- compat blob 不是长期真相
simple-mind-map不是对象中心- Phase 6 后正式主线是 kernel truth + projection + adapter
13.2 Phase 6-B:先切读路径
目标:
- 独立页与内嵌预览先读取正式 kernel projection
详细 checklist:
- 定义 projection 家族:
- 定义
mindmap_previewprojection - 定义
mindmap_editorprojection - 明确两者共享的稳定字段:
projection_idroot_node_iditemsedgescapability_flagsresource_meta
- 定义
- 定义 projection item 结构:
- 稳定 node id
parent_idsort_keydepthchild_counttitle/textcollapsedrefs summarystyle hint
- Rust runtime 补 projection builder:
- 在
/mnt/Data1T/mnote/rust/crates/bridge-runtime/src/lib.rs中增加正式mindmapprojection builder - 让
kernel.project_view可返回KernelProjectionKind::Mindmap - 明确 preview 与 editor 的输出差异,不再直接返回 compat 整树
- 在
- 前端 adapter 改造:
- 将
/mnt/Data1T/mnote/wolai-frontend/src/lib/mindmap/mindmap-projection.ts从“blob 摘要器”改为“kernel projection adapter” - 把 adapter 输出限定为
simple-mind-map所需最小数据形状 - 不再让 adapter 同时承担 canonical model 职责
- 将
- 独立页读路径切换:
/mnt/Data1T/mnote/wolai-frontend/src/app/mindmap/[docId]/[mindmapId]/page.tsx改为优先读取 kernel projection- SSR 初始数据不再以
mindmaps.getraw blob 为主 mindmap-page-client.tsx仅接收 projection / adapter 输出
- 文档内嵌预览切换:
- 内嵌卡片优先消费
mindmap_preview - 预览态不再默认依赖整棵 blob
- 轻量预览和沉浸编辑使用不同 projection,避免主编辑壳过早挂载
- 内嵌卡片优先消费
- 兼容回退策略:
- kernel projection 不可用时,可临时回退到 compat
mindmaps.get - 回退路径必须显式标记为 compat/fallback
- 回退逻辑不得反向成为新主路径
- kernel projection 不可用时,可临时回退到 compat
- 可观测性与追踪:
- projection 响应带
request_id/trace_id - 前端记录当前页面命中的 projection 来源:
- kernel
- compat fallback
- 为后续切流留出观测点
- projection 响应带
- 测试与验收:
- 增加 runtime 单测:
mindmap_preview/mindmap_editor输出稳定 - 增加 adapter 单测:projection ->
simple-mind-mapdata - 增加独立页 smoke:首屏读 projection 成功
- 增加内嵌态 smoke:文档页不再依赖整图 blob 才能显示摘要
- 增加 runtime 单测:
出阶段判定:
- 独立页正式主读链已经是 kernel projection
- 文档内嵌预览正式主读链已经是 preview projection
- compat
mindmaps.get只作为 fallback,而不是默认主链 - 前端已有清晰的
projection -> adapter -> renderer三层边界
13.3 Phase 6-C:再切写路径
目标:
- 常规编辑改为命令流
详细 checklist:
- 明确正式写面:
create_nodeupdate_nodemove_subtreereorder_siblingsarchive_noderestore_nodeattach_edgedetach_edge
- 补齐 kernel command 缺口:
- 若当前 kernel 缺少 sibling reorder 命令,需补齐
- 若当前 kernel 缺少 subtree archive/delete 语义,需补齐
- 若当前 kernel 缺少导图节点 refs 的 attach/detach 语义,需补齐
- compat
MindmapOp到 kernel command 的翻译表落地:addChildaddSiblingAfterupdateTextsetHyperlinksetRefsappendNotedeleteNode- 为每个 op 指定唯一的 kernel command 映射与错误语义
- Rust runtime 改造:
/mnt/Data1T/mnote/rust/crates/bridge-runtime/src/lib.rs中的mindmap_apply_ops改为 command translator- 不再直接对 compat 树做 canonical 修改
- 执行完成后返回:
- command 执行结果
- 最新 projection 或 refresh token
- trace / audit 信息
- 前端保存链改造:
MindmapBlock.tsx中工具栏操作不再默认走getData()/POST whole blob- 节点编辑、移动、删除、引用更新都发命令,而不是整体回传 snapshot
- 本地只保留短暂 optimistic state,不再作为长期真相
- 导图 route 改造:
/api/mindmap/[docId]/[mindmapId]的POST从常规编辑主入口降级- 新增或切换到专用 command route / command envelope
mindmap_put只保留:- 导入
- 替换快照
- 恢复
- 迁移回放
- 双写与迁移策略:
- 迁移期允许 kernel truth + compat snapshot 双写
- 双写失败时要有清晰告警,不得静默漂移
- 明确哪一侧是主真相,哪一侧只是镜像
- 冲突与审计:
- 所有命令返回 revision / version
- 写入链保留
command_id/request_id/trace_id - 并发冲突时优先按 kernel command 冲突规则处理,而不是前端最后一次整图覆盖
- 测试与验收:
- runtime 单测:各类
MindmapOp均正确翻译为 kernel command - route 单测:常规编辑不再依赖整图
put - UI smoke:增删改拖拽节点后可稳定刷新 projection
- 回归测试:导入/恢复仍可通过
mindmap_put正常工作
- runtime 单测:各类
出阶段判定:
- 常规编辑链路已经以 kernel command 为主
mindmap_put已从常规编辑主链退出- 前端不再依赖
getData()作为长期提交真相 - compat snapshot 即使保留,也只是双写镜像或导入导出格式
13.4 Phase 6-D:统一 AI / CLI
目标:
- AI / CLI 改为直接操作 kernel truth
详细 checklist:
- AI 工具口径统一:
- 明确 AI 读导图优先读取 kernel projection / subtree
- 明确 AI 写导图优先发送 kernel command
- 明确 AI 不再以“输出完整 mindmap JSON 并整体覆盖”作为主模式
- compat tool 重构:
mindmap_get降级为 compat read facademindmap_get_subtree降级为 compat read facademindmap_apply_ops降级为 compat write facademindmap_put降级为导入/恢复工具
- 新 kernel-aware tool 面补齐:
- 面向 node / subtree / edge 的导图工具定义
- 工具参数默认使用:
nodeIdrootNodeIdworkspaceIdpageIdedgeType
- 避免继续以 compat
uid + whole tree为中心
- AI host/runtime 接缝改造:
- 导图 agent route 优先走 kernel-aware tool
mindmap_outline_to_mindmap的输出优先落 kernel truth- AI 修改后的刷新结果优先返回 projection,而不是 raw blob
- CLI 改造:
- CLI 新增或切换到导图 kernel command 子命令
- 现有
mindmap get/put/op标记 compat/legacy 语义 - CLI smoke 优先验证 kernel command 与 projection 输出
- 权限与审计:
- AI / CLI 导图写入保留 actor / trace / command id
- 区分:
- 用户直接编辑
- AI 代理修改
- 导入/恢复
- 确保后续 bridge log / audit 能区分来源
- 结果返回规范:
- AI / CLI 执行导图写命令后,默认返回:
- command 执行结果
- 受影响 node / edge
- 最新 projection 摘要
- 非必要不再回传整棵 compat 树
- AI / CLI 执行导图写命令后,默认返回:
- 迁移与兼容:
- 迁移期 compat tools 仍可保留
- 但默认优先级必须低于 kernel-aware tools
- 新增 AI 能力时不得再优先扩写 compat blob 工具
- 测试与验收:
- AI tool 单测:至少一条创建节点、修改节点、挂接 refs 的链路走 kernel command
- CLI smoke:至少一条真实导图操作链不依赖整图覆盖
- 回归测试:compat tool 仍可用于迁移和紧急 fallback
出阶段判定:
- AI 已能直接创建、修改、移动导图节点与引用边
- CLI 已能直接操作导图 kernel truth
- compat tools 只剩 facade / import-export / fallback 职责
- 导图 AI / CLI 主链已经和 Sidebar / 页面树 / 阅读页一样,正式回到统一 kernel command / projection 体系
13.5 Phase 6-E:压缩旧壳
目标:
- 把
MindmapBlock.tsx收缩为可替换 view shell
要求:
- 真相、命令、projection 已完全外移
- 前端只剩渲染与交互适配
14. 完成判定
只有同时满足下面几条,才能说 Kernel Phase 6 完成。
- 导图正式事实源已经进入 kernel node / edge / subtree
- 导图独立页读取的是 kernel projection,而不是
mindmaps.getraw blob - 文档内嵌导图读取的是 preview projection,而不是前端直接拼整棵树
- 常规编辑操作已经回写 kernel command,而不是
POST整棵getData() - AI / CLI 可以直接创建、修改、移动导图节点,而不依赖整图覆盖
simple-mind-map已经退到 renderer / adapter 层mindmapsblob 存储已降级为 compat snapshot 或导入导出用途
15. 非目标
这阶段不以这些事情为主目标:
- 立即把整个导图画布改写成 Rust 前端
- 立即替换全部导图 UI 细节
- 把
simple-mind-map的所有样式字段完整提升为 kernel 语义 - 在第一阶段就清空全部历史兼容接口
Phase 6 的重点只有一个:
先把导图真相、导图命令、导图 projection 从前端 blob 体系里拔出来,正式并入
tree-first graph kernel。