Files
mnote/design/01-tree-first-graph-kernel/process/1-9-batch-b-p1-identity-buffer-pageaggregate-execution-checklist-v1.md
T

167 lines
8.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 1-9 [process] Batch B P1 Identity / BufferStore / Page Aggregate Execution Checklist v1
> 创建时间:2026-05-21
>
> 上位入口:`design/01-tree-first-graph-kernel/process/1-8-mvp-post-process-execution-order-v1.md`
>
> 阶段:Batch B / P1 工作区身份、BufferStore、Page Aggregate 收口
>
> 当前状态:`PROCESS`
## 1. 目标
`1-8` 的 P1 顺序,把当前已经明确的 P1 缺口拆成可并行执行的小阶段:
1. `5-26` 正文附件 open resolver 与 FileTree open resolver 收敛未执行。
2. `1-6` Gap A2 的 BufferStore 运行时接入已完成,但保存后刷新读回仍有浏览器可见缺口。
3. `1-6` Gap A0 browser smoke 已复跑,A2/A7/B2/C1 仍有证据尾项。
4. `5-6` / `3-13` 的 Page Aggregate / GFM AST 尾项状态需要继续拆小,避免大文档长期停在 process。
5. 本轮 smoke 复核后,`task443` / `task445` / `task452` 已确认是过期断言,不是当前业务回归。
本阶段优先处理“已实现但缺浏览器/测试证据”与“已有计划但未落地”的缺口,不扩新产品面,不改变 local-first / tree-first 口径。
## 2. 上游入口
- `design/01-tree-first-graph-kernel/process/1-5-next-phase-sequential-execution-checklist-v1.md`
- `design/01-tree-first-graph-kernel/process/1-6-next-phase-gap-closure-checklist-v1.md`
- `design/05-editor-mainline/process/5-26-resource-open-resolver-convergence-checklist-v1.md`
- `design/05-editor-mainline/process/5-6-page-aggregate-alignment-checklist-v1.md`
- `design/03-rust-web/process/3-13-rust-web-local-markdown-gfm-ast-parser-migration-v1.md`
## 3. 不做事项
- 不把 `documents/save` 重新描述为 local-first 长期正文主入口。
- 不把 `md/text/code` 改成 OnlyOffice 或浏览器窗口默认打开。
- 不把 browser smoke 失败伪装成通过。
- 不移动 `design/old/**`
- Reasonix worker 不提交 git;最终由 Codex 复核和提交。
## 4. Reasonix Worker 拆分
### Worker A5-26 resource open resolver convergence
Owner
- `design/05-editor-mainline/process/5-26-resource-open-resolver-convergence-checklist-v1.md`
- `rust/crates/mnote-web/src/routes/web_shell.rs`
- 可新增或修改一个 `scripts/task48*-resource-open-resolver-*.js` smoke。
目标:
- 审查 `resolveResourceOpen``openEditorAttachmentEditTab``openEditorAttachmentNewWindow`、FileTree asset open/edit-mode 的重复判断。
- 如能小范围安全实现,抽出最小 shared resolver/helper,减少正文附件与 FileTree 分歧。
- 必须保持:正文附件 `弹窗编辑` 进入 main resource tab`新窗口编辑` 进入浏览器窗口,`md/text/code` 继续走 tiptap / text/code 渲染路径。
验收:
- `cargo test -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 --check scripts/task48*-resource-open-resolver-*.js`
### Worker BA2 BufferStore browser visible readback gap
Owner
- `design/01-tree-first-graph-kernel/process/1-6-next-phase-gap-closure-checklist-v1.md`
- `rust/crates/mnote-web/src/routes/web_shell.rs`
- `rust/crates/mnote-web/src/ssr/pages/layout.rs`
- 可新增或修改一个 `scripts/task48*-bufferstore-*.js` smoke。
目标:
- 复现并定位 `POST /api/page-body/write` 后磁盘与 Page Aggregate 已更新,但刷新后编辑器 DOM/截图未显示正文的问题。
- 优先做最小修复:让刷新后的主编辑器可见 DOM 消费最新 Page Aggregate / blockDocument。
- 若无法安全修复,必须输出可复现 bug 证据和具体源码定位,不把该项标完成。
验收:
- `cargo test -p mnote-web document_buffer -- --test-threads=1`
- `cargo test -p mnote-web page_aggregate -- --test-threads=1`
- 相关 browser smoke 能证明保存后刷新可见正文不丢失,或明确失败原因。
### Worker CA0/A2/B2/C1 baseline smoke evidence
Owner
- `design/01-tree-first-graph-kernel/process/1-6-next-phase-gap-closure-checklist-v1.md`
- 可新增 `.codex/reasonix-tasks/results/batch-b-worker-c-baseline-smokes.md`
- 不修改 Rust / JS 业务代码。
目标:
- 运行并记录 `1-6` 中尚未复跑的 browser smokes
- `task451-local-markdown-conflict-resolution-ui-smoke.js`
- `task452-local-search-index-browser-smoke.js`
- `task453-local-folder-page-ai-changed-files-smoke.js`
- `task443-filetree-mindmap-click-active-row-smoke.js`
- `task445-filetree-mindmap-switch-no-flicker-smoke.js`
- 失败时记录为环境阻塞或业务 bug,附 stdout / result.json 路径。
- 不做业务修复。
验收:
- 每个 smoke 有明确 `PASS` / `FAIL` / `BLOCKED`
- 对失败项给出 `tmp/.../result.json` 或日志路径。
### Worker DPage Aggregate / GFM AST tail audit
Owner
- `design/05-editor-mainline/process/5-6-page-aggregate-alignment-checklist-v1.md`
- `design/03-rust-web/process/3-13-rust-web-local-markdown-gfm-ast-parser-migration-v1.md`
- 可新增 `.codex/reasonix-tasks/results/batch-b-worker-d-pageaggregate-gfm-tail.md`
- 默认只改文档和 smoke 建议;如需改代码,先只输出建议,不直接改核心 Rust。
目标:
- 审查 `5-6` 中仍未勾选项是否已被后续实现覆盖,哪些应追认,哪些应拆新 checklist。
- 审查 `3-13` 中 GFM AST 尾项:空段落/空表格、legacy <-> Tiptap mark、保存失败错误、过渡 parser 标记、web_shell 临时分支。
- 给出下一步最小执行包,不把未验证项移动到 done。
## 5. 本轮执行记录
- 2026-05-21Batch B 仍保留为 process,原因是 `5-26` 还未形成可复核实现,A2 的冲突 UI 数据源接 BufferStore 也尚未落地。
- 2026-05-21`task443` / `task445` / `task452` 已在后续复核中修正为过期断言,不再作为当前业务回归证据。
验收:
- 输出明确表格:`已完成可追认` / `仍需代码修复` / `仅参考保留`
- 更新对应 process 文档的执行记录,但不归档。
## 5. Codex 复核项
- [ ] 逐个读取 Reasonix `final.md` / `result.json`
- [ ] 检查 `git diff`,确认 worker 没有越权修改。
- [ ] 运行 worker 涉及脚本的 `node --check`
- [ ] 运行受影响 Rust targeted tests。
- [ ] 对 UI / browser 可见项派发或执行独立浏览器测试。
- [ ] 更新本 checklist 的执行记录。
## 6. 浏览器测试阶段
Batch B 代码 / smoke / 审查完成后,再按实际变更拆分浏览器测试 worker:
- Browser Worker 1resource open resolver,验证正文附件 / FileTree asset / edit / new-window 分流。
- Browser Worker 2BufferStore 保存后刷新可见读回。
- Browser Worker 3Page Aggregate / GFM tail smoke,验证正文刷新、inline mark、task list 不回退。
Codex 必须复核浏览器测试结果;不能只相信 worker 文字总结。
## 7. 完成条件
- `5-26` 至少完成审查与最小实现,或明确不可安全实现的阻塞原因。
- `1-6` Gap A2 浏览器可见读回有明确结果:完成、失败 bug 或环境阻塞。
- `1-6` A0 browser smokes 有新的 PASS / FAIL / BLOCKED 证据。
- `5-6` / `3-13` 尾项不再是模糊 TODO,已拆出下一步执行包。
- `git diff --check` 通过。
- `codegraph sync .` 已运行。
- 本阶段完成后由 Codex 提交 git。
## 8. 本轮执行记录
- 2026-05-21Codex 建立 Batch B P1 checklist,并准备派发 Reasonix Worker A/B/C/D。
- 2026-05-21Reasonix Worker C 完成 baseline smoke 证据收集;`task451``task453` PASS`task452` 初判为 page-settings 本地索引面板渲染回归,`task443` / `task445` 初判为 mindmap smoke 仍按历史 `/mindmap/` 路由断言导致 false-negative。
- 2026-05-21Reasonix Worker D 完成 Page Aggregate / GFM AST 尾项审计;只改文档,不改业务代码。关键结论:`3-13` 中标题优先级被误标为完成,列对齐 marker 可追认,legacy/Tiptap marks、空单元格、保存失败可解释错误、写侧过渡标记仍需后续小包。
- 2026-05-21Reasonix Worker A/B 运行到 runner 超时后未生成 `final.md` / `result.json`,也未留下业务代码 diff;Codex 不采纳为完成项。A 的 transcript 只留下 resource open resolver 收敛计划,指出重复判断主要位于 `layout.rs` sidebar JS,原任务允许范围过窄;B 的 transcript 只留下 BufferStore / PageAggregate hydration 排查片段,未形成可复核结论。
- 2026-05-21Codex 复核裁定:`task452` 实为旧断言假失败,`task443` / `task445` 已改为 resourceTab 断言并实跑通过;本轮可采纳 C/D 的证据与审计,但 A/B 仍需拆成更小的后续任务,不把 `5-26` 或 Gap A2 标为完成。