# 1-9 [recycle] 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 收口
>
> 当前状态：`recycle / old`
>
> 归档说明（2026-05-22）：本文的 Batch B 尾项已被后续 Batch / `done/` 文档和 `1-6`、`5-6` 的当前缺口口径覆盖；保留为历史执行记录，不再作为 active 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 A：5-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 B：A2 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 C：A0/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 D：Page 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-21：Batch 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 1：resource open resolver，验证正文附件 / FileTree asset / edit / new-window 分流。
- Browser Worker 2：BufferStore 保存后刷新可见读回。
- Browser Worker 3：Page 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-21：Codex 建立 Batch B P1 checklist，并准备派发 Reasonix Worker A/B/C/D。
- 2026-05-21：Reasonix Worker C 完成 baseline smoke 证据收集；`task451`、`task453` PASS，`task452` 初判为 page-settings 本地索引面板渲染回归，`task443` / `task445` 初判为 mindmap smoke 仍按历史 `/mindmap/` 路由断言导致 false-negative。
- 2026-05-21：Reasonix Worker D 完成 Page Aggregate / GFM AST 尾项审计；只改文档，不改业务代码。关键结论：`3-13` 中标题优先级被误标为完成，列对齐 marker 可追认，legacy/Tiptap marks、空单元格、保存失败可解释错误、写侧过渡标记仍需后续小包。
- 2026-05-21：Reasonix 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-21：Codex 复核裁定：`task452` 实为旧断言假失败，`task443` / `task445` 已改为 resourceTab 断言并实跑通过；本轮可采纳 C/D 的证据与审计，但 A/B 仍需拆成更小的后续任务，不把 `5-26` 或 Gap A2 标为完成。
