# [recycle] mnote Rust Block Editor Blocks Spike v0 > 更新时间:2026-04-18 ## 1. 目标 本 spike 聚焦 `blocks` 参考层是否适合承担: - Markdown - round-trip - history - diff - merge 以及哪些地方存在 `缺口`。 ## 2. 参考入口 - `/mnt/Data1T/mnote/design/05-editor-mainline/reference-code/blocks/src/document.rs` - `/mnt/Data1T/mnote/design/05-editor-mainline/reference-code/blocks/src/block.rs` - `/mnt/Data1T/mnote/design/05-editor-mainline/reference-code/blocks/src/converters.rs` - `/mnt/Data1T/mnote/design/05-editor-mainline/reference-code/blocks/src/history.rs` - `/mnt/Data1T/mnote/design/05-editor-mainline/reference-code/blocks/src/diff.rs` ## 3. 适配性结论 ### 3.1 Markdown `blocks` 最适合直接借的是 Markdown 相关思路。 原因: - 已有文档模型 - 已有 converter facade - 方向上天然适合 Markdown import/export 这意味着第一阶段不应该自己先写一套新的 Markdown parser 胶水。 ### 3.2 round-trip `Markdown -> blocks -> Markdown round-trip` 是 `blocks` 最容易先验证的一条链。 对 `mnote` 的价值: - 可以快速检查标题、列表、待办、引用、代码块的稳定性 - 可以给 `task-057` 的导入导出提供直接参考 ### 3.3 history `blocks` 的 history 适合直接借思路,不建议第一阶段重写。 至少在 `undo / redo` 的双栈组织上,它比从零发明更稳。 ### 3.4 diff / merge `blocks` 的 diff / merge 很适合做 AI-first 和 CLI-first 后续阶段的基础参考。 第一阶段不要求完整采用,但必须明确后续方向,否则 AI 重写链会缺审计基础。 ## 4. 主要缺口 ### 4.1 文档模型仍偏扁平 当前 `blocks::Document` 是 `Vec` 为主。 而 `mnote` 要的不是简单扁平列表,而是: - 块树 - children - 自定义 `BlockProps` - 引用 token - 字符串 ID 这就是第一大 `缺口`。 ### 4.2 BlockType 与 mnote 目标不完全一致 `blocks` 的 `BlockType` 更偏通用编辑器,不直接覆盖: - `page_reference` - `block_reference` - `media_placeholder` - `progress_placeholder` 因此不能直接拿来当最终枚举。 ### 4.3 默认 ID 体系不适合 `blocks` 用 `Uuid`。 但 `mnote` 当前更适合: - `DocumentId = String` - `BlockId = String` 因为要跟现有页面、引用、CLI、AI 命令保持统一可读标识。 ## 5. Spike 结论 `blocks` 的定位应固定为: - 采用:Markdown 思路 - 采用:round-trip 参考 - 采用:history 思路 - 采用:diff / merge 思路 - 不直接采用:最终 block model - 不直接采用:最终 ID 体系 ## 6. 建议落地方式 建议在 `mnote-editor-core` 中这样接: - 自定义 `EditorDocument` - 自定义 `EditorBlockNode` - 自定义 `EditorBlockType` - 用 `blocks` 作为后续 `markdown/history/diff/merge` 参考或局部依赖 不要反过来把 `mnote` 的核心模型强行塞进 `blocks`。 ## 7. 第一阶段保留判断 第一阶段可接受的保守做法: - 先不把 `blocks` 作为正式依赖 - 但在文档中冻结:后续 Markdown、history、diff、merge 优先复用其思路 若到 `task-057` 时验证表明 `blocks` 已足够稳定,再引正式依赖。 ## 8. 完成判定映射 `task-052` 的完成判定要求本文显式包含: - Markdown - round-trip - history - diff - merge - 缺口 当前文档已满足这些项。