Files
mnote/bugs/05-editor-mainline/done/5-20-page-body-save-strips-editor-document-before-convex-v1.md
T
lix-2026 cdff672aa5 feat: align local-first workspace direction
Document the VSCode-like local-first product shape, demote Convex to a control-plane role, and retire stale architecture drafts.

Add local workspace migration/export references plus smoke coverage for no-Convex managed workspace startup, local markdown title/body/options persistence, asset upload behavior, and Convex fixture export.

Verification: git diff --cached --check; node scripts/check-local-first-convex-guard.js --staged; node scripts/task444-convex-workspace-export-local-fixture-smoke.js; node scripts/task166-local-first-managed-workspace-no-convex-smoke.js; node scripts/task167-local-markdown-title-body-options-no-convex-smoke.js
2026-05-19 08:11:58 +08:00

2.4 KiB
Raw Blame History

5-20 [done] page.body.save 发往 Convex 前剥离 EditorBlockDocument

级别

P1 / 05-editor-mainline 主线迁移缺陷。

现象

page.body.save 的 Rust runtime plan 已经生成 editorDocument / tiptapDocument,但 mnote-web transport 在真正调用 documents:updateContent 前会删除这两个字段。

这会导致原生块文档只存在于 plan / artifact 里,持久层仍只能保存 legacy content。刷新后 Page Aggregate 即使读侧已支持 editorDocument -> blockDocument -> documents.content,也会因为 substrate 没有原生字段而回到 documents.content

根因

rust/crates/mnote-web/src/transport/convex.rsdocuments.save | page.body.save 视为 legacy validator,只保留 id/content/expectedRevision/conflictDetectionKey,显式删除 editorDocumenttiptapDocument

同时,当前可见的 Convex documents:updateContent 源码仍只声明 content,没有持久化原生编辑器快照字段。

修复

  • mnote-web transport 不再剥离 editorDocument / tiptapDocument,只剥离 Rust artifact 事件字段。
  • 本地可见 Convex substrate recycle/wolai-frontend/convex/documents.ts 已同步接受并写入:
    • editorDocument -> documents.editor_document
    • tiptapDocument -> documents.tiptap_document
  • getContent / getContentForIngest 已同步返回 editorDocument / tiptapDocument,让 Page Aggregate 读侧能够优先消费原生块文档。
  • recycle/wolai-frontend/convex/schema.ts 已补 editor_document / tiptap_document optional 字段。

说明:recycle/ 当前被仓库 .gitignore 忽略,但这是本仓库可见的唯一 documents:updateContent Convex 源码位置;tracked Rust transport 已按该 validator 口径更新。

验证

  • REDcargo test --manifest-path rust/Cargo.toml -p mnote-web convex_command_args_keeps_editor_runtime_fields_for_page_body_save -- --nocapture
    • 旧实现失败,实际 args 中 editorDocument / tiptapDocument 被删除。
  • GREENcargo test --manifest-path rust/Cargo.toml -p mnote-web convex_command_args_keeps_editor_runtime_fields_for_page_body_save -- --nocapture
    • 1 passed。

剩余边界

这次修复让 page.body.save 不再在 Rust Web transport 边界丢弃原生块文档,但完整 EditorBlockDocument 原生落库仍需要后续真实 Convex 部署 schema 与迁移流程确认。历史页面已有 legacy content,不会自动反推补齐 editor_document