advance 1-8 post-mvp execution batches
This commit is contained in:
+105
@@ -0,0 +1,105 @@
|
||||
# 1-10 [done] 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 小尾项收口
|
||||
>
|
||||
> 当前状态:`DONE`
|
||||
|
||||
## 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/done/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`。
|
||||
- 2026-05-21(Codex Batch F 追认):`3-13` 已移动到 `design/03-rust-web/done/`,本文作为 Batch C 执行记录不再保持活跃 process。
|
||||
+126
@@ -0,0 +1,126 @@
|
||||
# 1-12 [done] Batch E P1/P2 尾项执行 checklist v1
|
||||
|
||||
> 创建时间:2026-05-21
|
||||
>
|
||||
> 当前状态:`DONE`
|
||||
>
|
||||
> 上位入口:`design/01-tree-first-graph-kernel/process/1-8-mvp-post-process-execution-order-v1.md`
|
||||
>
|
||||
> 阶段:Batch E / P1-P2 剩余尾项收口
|
||||
|
||||
## 1. 目标
|
||||
|
||||
本批次只处理当前仍有明确证据缺口、且可以并行推进的三个小尾项:
|
||||
|
||||
1. `3-13` GFM AST 迁移尾项:保存失败状态保留、表格降级策略、`web_shell.rs` 临时适配分支去留判定。
|
||||
2. `1-6` Gap A2:conflict UI 数据源从本地 session 状态进一步接入 `BufferStore` 可查询状态。
|
||||
3. `1-6` Gap A7 / `1-8` P2.2:FileTree 菜单与快捷键最小接入 `CommandContext` enablement 口径。
|
||||
|
||||
本批次不扩 AI 主线,不处理 Wolai 对标,不提前实现 Phase C / Review Mode,不改变 local-first / tree-first 口径。
|
||||
|
||||
## 2. 已完成追认
|
||||
|
||||
- [x] `5-26` resource open resolver 已由 Batch D 完成,并经 `task463-onlyoffice-resolver-smoke.js` 与 Rust 单测复核,已归档到 `design/05-editor-mainline/done/`。
|
||||
- [x] `1-6` Gap A2 保存后刷新可见读回已由 `task484-local-folder-page-body-refresh-readback-smoke.js` 复核通过。
|
||||
- [x] `1-6` Gap C1 Convex export dry-run / conflict / rollback 已由 `task455-convex-export-plan-rollback-smoke.js` 复核通过。
|
||||
- [x] `1-6` Gap A2 conflict UI 数据源已接入 `BufferStore` 查询与冲突信封桥接;`/api/documents/buffer-state`、`document_page_shell` 初始化、`task451` 信封断言均已通过,`task451` 在最新 3000 主进程上已复测通过。
|
||||
- [x] `1-6` Gap A7 FileTree 右键菜单与 Delete/Backspace 快捷键已接入 `CommandContext` 等价 enablement 逻辑;`task471` / `task476` / `core-protocol command_context` 已通过。
|
||||
|
||||
## 3. Reasonix Worker 拆分
|
||||
|
||||
### Worker A:GFM AST 保存失败与降级策略尾项
|
||||
|
||||
Owner:
|
||||
|
||||
- `design/03-rust-web/done/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/local_markdown_parser.rs`
|
||||
- `rust/crates/mnote-web/src/routes/web_shell.rs`(只读审查,不能直接修改)
|
||||
- 可新增或修改一个 `scripts/task48*-local-markdown-save-error-*.js` smoke。
|
||||
|
||||
目标:
|
||||
|
||||
- 补最小测试或实现,验证保存失败时编辑器状态可保留并显示可解释错误。
|
||||
- 补表格带 mark 单元格或不支持结构的降级策略测试;若当前行为已经可解释,写入证据并更新 `3-13`。
|
||||
- 只读审查 `web_shell.rs` 中 `legacyStylesToTiptapMarks` 等临时适配分支是否仍为必要兼容层;不能安全移除时,把它从“必须移除”改为“保留兼容层并有 TODO 退出条件”。
|
||||
|
||||
验收:
|
||||
|
||||
- `cargo test -p mnote-web local_markdown -- --test-threads=1`
|
||||
- `cargo test -p mnote-web web_shell -- --test-threads=1`
|
||||
- 如新增 smoke,`node --check scripts/task48*-local-markdown-save-error-*.js`,并尽量实跑。
|
||||
|
||||
当前状态:
|
||||
|
||||
- 已有 `task473` / `task455` / `task451` 等结果可表明相邻尾项已处理,但保存失败状态保留与 `web_shell.rs` 兼容层退出条件仍需 Worker A 自己落盘证据。
|
||||
|
||||
### Worker B:BufferStore conflict UI 数据源
|
||||
|
||||
Owner:
|
||||
|
||||
- `design/01-tree-first-graph-kernel/process/1-6-next-phase-gap-closure-checklist-v1.md`
|
||||
- `rust/crates/mnote-web/src/document_buffer_store.rs`
|
||||
- `rust/crates/mnote-web/src/routes/documents.rs`
|
||||
- `rust/crates/mnote-web/src/routes/web_shell.rs`
|
||||
- `scripts/task451-local-markdown-conflict-resolution-ui-smoke.js`
|
||||
|
||||
目标:
|
||||
|
||||
- 为当前打开文档暴露最小 buffer state 查询能力,或把已有 Page Aggregate / session conflict envelope 明确桥接到 `BufferStore` 状态。
|
||||
- conflict UI 应能读取 editor base version、disk/current version、source actor 或等价字段;不能只靠前端本地临时状态。
|
||||
- 保持现有 `task451` 的 accept disk / keep current / merge 三条行为不回退。
|
||||
|
||||
验收:
|
||||
|
||||
- `cargo test -p mnote-web document_buffer -- --test-threads=1`
|
||||
- `cargo test -p mnote-web local_folder -- --test-threads=1`
|
||||
- `PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH=/usr/bin/google-chrome-stable node scripts/task451-local-markdown-conflict-resolution-ui-smoke.js`
|
||||
|
||||
当前状态:
|
||||
|
||||
- 代码与 targeted tests 已通过,后续仅保留对 UI 复核和状态记录的收口,不再作为未完成主线。
|
||||
|
||||
### Worker C:CommandContext FileTree 菜单 / 快捷键最小接入
|
||||
|
||||
Owner:
|
||||
|
||||
- `design/01-tree-first-graph-kernel/process/1-6-next-phase-gap-closure-checklist-v1.md`
|
||||
- `rust/crates/core-protocol/src/command.rs`
|
||||
- `rust/crates/mnote-web/src/ssr/pages/layout.rs`
|
||||
- `scripts/task476-filetree-editor-context-menu-download-smoke.js`
|
||||
- `scripts/task471-local-folder-bulk-resource-trash-smoke.js`
|
||||
|
||||
目标:
|
||||
|
||||
- 在 SSR sidebar JS 中引入最小 `CommandContext` 等价 enablement helper,先覆盖 FileTree 右键菜单和 Delete/Backspace 快捷键。
|
||||
- readonly / sourceKind / selectionCount / resourceKind 的禁用语义应与 Rust `CommandContext` 测试口径一致;不要求本轮把 Rust evaluator 直接编译到 JS。
|
||||
- 保持下载、多选删除、粘贴、只读阻断 smoke 不回退。
|
||||
|
||||
验收:
|
||||
|
||||
- `cargo test -p mnote-web sidebar_filetree -- --test-threads=1`
|
||||
- `cargo test -p core-protocol command_context -- --test-threads=1`
|
||||
- `node scripts/task471-local-folder-bulk-resource-trash-smoke.js`
|
||||
- `node scripts/task476-filetree-editor-context-menu-download-smoke.js`
|
||||
|
||||
当前状态:
|
||||
|
||||
- 代码与 targeted tests 已通过,可作为 `1-6` A7 的已完成证据使用。
|
||||
|
||||
## 4. Codex 复核项
|
||||
|
||||
- [x] 逐个读取 worker 的 `final.md` / `result.json` / diff:B/C 由代码 diff 与 targeted tests 复核,A 无 `final.md` / `result.json`,已记录 timeout。
|
||||
- [x] 检查 worker 是否越权修改非 owner 文件:A 未采纳,B/C 改动范围与任务目标一致;Codex 对 `documents.rs` 查询兜底补了单测。
|
||||
- [x] 运行各 worker 验收命令中与实际改动相关的 targeted tests。
|
||||
- [x] UI/browser 可见项必须由 Codex 或浏览器测试 worker 实跑复核:`task471`、`task476`、`task451` 已有实跑记录,且 `task451` 已在最新 3000 主进程上复测通过。
|
||||
- [x] 更新 `1-6`、`3-13`、本文执行记录:`1-6` 追认 buffer_state / task451 状态;`3-13` 追认 task486 改为当前主链 smoke 并复测通过。
|
||||
- [x] 可归档的文档移动到 `done/`,不能归档的保留明确未完成项:`5-26` 已归档,`3-13` 已由 Batch F 归档到 done。
|
||||
- [x] 提交前运行 `git diff --check`、`codegraph sync .`、`codegraph status`。
|
||||
|
||||
## 5. 本轮执行记录
|
||||
|
||||
- 2026-05-21:Codex 复核 `5-26` 最后一项,`cargo test -p mnote-web sidebar_tree_runtime_opens_office_assets_through_resource_shell -- --test-threads=1` 与 `node scripts/task463-onlyoffice-resolver-smoke.js` 通过,`5-26` 已归档。
|
||||
- 2026-05-21:Codex 建立 Batch E checklist,并准备派发 Worker A/B/C。
|
||||
- 2026-05-21:Codex 复核 `1-6` 与 `3-13` 现有 code / test 状态后,确认 `Gap A2` conflict UI 与 `Gap A7` 菜单/快捷键已落地,`Gap C1` 已完成;`Batch E` 只剩 Worker A 的 `3-13` 尾项与对文档状态的最终收口。
|
||||
- 2026-05-21:Reasonix Worker A 重新派发后长期未生成 `final.md` / `result.json`,Codex 终止卡住的 runner / reasonix acp 进程,并记录 `.codex/reasonix-tasks/results/batch-e-worker-a-gfm-save-error-timeout.md`;后续 Codex 将 `task486` 重新对齐到当前 `/documents` 主链并复测通过,保存失败状态保留已追认。
|
||||
- 2026-05-21:Batch F 追认 `3-13` 剩余兼容层为可解释保留项,本文作为 Batch E 执行记录不再保持活跃 process。
|
||||
Reference in New Issue
Block a user