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
2.4 KiB
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.rs 将 documents.save | page.body.save 视为 legacy validator,只保留 id/content/expectedRevision/conflictDetectionKey,显式删除 editorDocument 和 tiptapDocument。
同时,当前可见的 Convex documents:updateContent 源码仍只声明 content,没有持久化原生编辑器快照字段。
修复
mnote-webtransport 不再剥离editorDocument/tiptapDocument,只剥离 Rust artifact 事件字段。- 本地可见 Convex substrate
recycle/wolai-frontend/convex/documents.ts已同步接受并写入:editorDocument -> documents.editor_documenttiptapDocument -> documents.tiptap_document
getContent/getContentForIngest已同步返回editorDocument/tiptapDocument,让 Page Aggregate 读侧能够优先消费原生块文档。recycle/wolai-frontend/convex/schema.ts已补editor_document/tiptap_documentoptional 字段。
说明:recycle/ 当前被仓库 .gitignore 忽略,但这是本仓库可见的唯一 documents:updateContent Convex 源码位置;tracked Rust transport 已按该 validator 口径更新。
验证
- RED:
cargo test --manifest-path rust/Cargo.toml -p mnote-web convex_command_args_keeps_editor_runtime_fields_for_page_body_save -- --nocapture- 旧实现失败,实际 args 中
editorDocument/tiptapDocument被删除。
- 旧实现失败,实际 args 中
- GREEN:
cargo 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。