# 1-10 [process] Batch C P1 Resource / BufferStore / GFM / Convex Evidence Checklist v1 > 创建时间:2026-05-21 > > 上位入口:`design/01-tree-first-graph-kernel/process/1-8-mvp-post-process-execution-order-v1.md` > > 阶段:Batch C / P1 小尾项收口 > > 当前状态:`PROCESS` ## 1. 目标 在 Batch B 已完成 baseline smoke 复核后,继续处理 P1 中仍会干扰后续判断的尾项: 1. `5-26` resource open resolver 仍未实际收敛。 2. `1-6` Gap A2 保存后刷新可见读回需要以真实 smoke 复核。 3. `3-13` GFM AST 迁移仍有若干可小步关闭的测试 / 过渡标记尾项。 4. `1-6` Gap C1 Convex export dry-run / conflict / rollback 仍缺独立 smoke 证据。 本批次不扩新产品面,不改 OnlyOffice 保存链路,不把 `documents/save` 重新升级为 local-first 长期正文入口。 ## 2. Reasonix Worker 拆分 ### Worker A:resource open resolver 最小收敛 Owner: - `design/05-editor-mainline/process/5-26-resource-open-resolver-convergence-checklist-v1.md` - `rust/crates/mnote-web/src/ssr/pages/layout.rs` - `scripts/task463-onlyoffice-resolver-smoke.js` 目标: - 审查并最小收敛 `buildLocalOnlyOfficeOpenUrl`、`openEditorAttachmentEditTab`、`openEditorAttachmentNewWindow`、`openConvexAssetFromFileTree` 与 `resolveResourceOpen` 的重复 local Office / resource open 判断。 - 若能安全实现,只改 `layout.rs` 与 `task463`。 - 必须保持:正文附件“弹窗编辑”进 main resource tab,“新窗口编辑”进浏览器窗口,md/text/code 继续走 tiptap/text/code 渲染路径。 验收: - `cargo test --manifest-path rust/Cargo.toml -p mnote-web sidebar_tree_runtime_opens_office_assets_through_resource_shell -- --test-threads=1` - `node --check scripts/task463-onlyoffice-resolver-smoke.js` - 如 smoke 可运行,执行 `node scripts/task463-onlyoffice-resolver-smoke.js` ### Worker B:GFM AST 尾项小包 Owner: - `design/03-rust-web/process/3-13-rust-web-local-markdown-gfm-ast-parser-migration-v1.md` - `rust/crates/mnote-web/src/routes/local_folder_source.rs` - `rust/crates/mnote-web/src/routes/web_shell.rs` 目标: - 补充或追认 GFM AST 尾项中低风险项:空表格单元格 / 降级策略测试、legacy->Tiptap marks 验证测试、写侧手写 Markdown 函数过渡标记。 - 不修复 frontmatter title 优先级;该项是单独行为变更,保留给后续专项。 - 不移除 web_shell legacy 适配分支,只允许加过渡注释或测试。 验收: - `cargo test --manifest-path rust/Cargo.toml -p mnote-web local_markdown -- --test-threads=1` - `cargo test --manifest-path rust/Cargo.toml -p mnote-web web_shell -- --test-threads=1` ### Worker C:Convex export 产品化补 smoke Owner: - `design/01-tree-first-graph-kernel/process/1-6-next-phase-gap-closure-checklist-v1.md` - `scripts/task444-convex-workspace-export-local-fixture-smoke.js` - 可新增 `scripts/task48*-convex-export-*.js` 目标: - 为 C1 已有能力补 smoke:dry-run 不写文件、同名冲突不覆盖、rollback 恢复导出前状态。 - 不修改 Convex runtime,不改 local-first 架构口径。 - 优先复用现有 fixture/export 脚本,新增脚本要可离线运行。 验收: - `node --check scripts/task444-convex-workspace-export-local-fixture-smoke.js` - `node scripts/task444-convex-workspace-export-local-fixture-smoke.js` - 新增 smoke 的 `node --check` 与实跑通过。 ## 3. Codex 本地关键路径 Codex 同步处理: - A2 保存后刷新可见读回:复现 `POST /api/page-body/write` 后刷新 editor DOM 不显示正文的问题,判断是过期证据、hydration 问题,还是当前真实回归。 - 若是 smoke 缺失,补最小 browser smoke;若是真回归,优先修复 web shell / aggregate bootstrap。 ## 4. 完成条件 - Reasonix worker 均有 `final.md` / `result.json` 或明确 `TIMEOUT` 记录。 - Codex 独立审查 diff,不直接相信 worker 总结。 - 相关 targeted tests 与 browser smoke 实跑通过或形成明确 bug。 - `1-6`、`1-9`、`3-13`、`5-26` 文档状态更新。 - 提交前运行 `codegraph sync .`、`codegraph status`、`git diff --check`。 ## 5. 本轮执行记录 - 2026-05-21:Codex 建立 Batch C checklist,准备派发 Worker A/B/C,并本地排查 A2 刷新读回。 - 2026-05-21(Codex):新增并实跑 `task484-local-folder-page-body-refresh-readback-smoke.js`,验证 `POST /api/page-body/write` 后磁盘、Page Aggregate、刷新后 ProseMirror 均读回新正文;`1-6` Gap A2 浏览器可见读回改判为完成,剩余仅为 conflict UI 数据源接 BufferStore。 - 2026-05-21(Reasonix Batch C Worker A):worker 只提交 resource resolver 收敛计划,未生成 `final.md` / `result.json`,无业务代码 diff;记录为 `PLAN_ONLY_TIMEOUT`,`5-26` 保持 `process`。结果文件:`.codex/reasonix-tasks/results/batch-c-worker-a-resource-open-resolver-timeout.md`。 - 2026-05-21(Reasonix Batch C Worker B):完成 GFM AST 尾项小包,补空引用块 / 空表格单元格测试、web_shell marks 断言、写侧 Markdown 过渡注释,并更新 `3-13`;结果文件:`.codex/reasonix-tasks/results/batch-c-worker-b-gfm-tail.md`。 - 2026-05-21(Reasonix Batch C Worker C):`task455-convex-export-plan-rollback-smoke.js` 实跑通过,覆盖 dry-run/conflict/rollback 三个行为,`1-6` Gap C1 已可视为完成。结果文件:`.codex/reasonix-tasks/results/batch-c-worker-c-convex-export-smokes.md`。