chore: 收口 Batch C 证据与设计口径
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
# Batch C Worker A:Resource Open Resolver 最小收敛
|
||||
|
||||
项目根目录:`/mnt/Data1T/mnote`
|
||||
|
||||
你不是单独在代码库里工作,可能有其他 worker 并行执行。不要回滚、覆盖或格式化与你任务无关的文件;不要提交 git。
|
||||
|
||||
## 背景
|
||||
|
||||
Batch B 中 `design/05-editor-mainline/process/5-26-resource-open-resolver-convergence-checklist-v1.md` 仍未完成。当前重复判断主要涉及:
|
||||
|
||||
- `rust/crates/mnote-web/src/ssr/pages/layout.rs`
|
||||
- `buildLocalOnlyOfficeOpenUrl`
|
||||
- `openEditorAttachmentEditTab`
|
||||
- `openEditorAttachmentNewWindow`
|
||||
- `openConvexAssetFromFileTree`
|
||||
- `rust/crates/mnote-web/src/routes/web_shell.rs`
|
||||
- `resolveResourceOpen`
|
||||
|
||||
本次优先只改 `layout.rs` 和 `scripts/task463-onlyoffice-resolver-smoke.js`,不要大重构。
|
||||
|
||||
## 目标
|
||||
|
||||
1. 审查正文附件和 FileTree asset 打开 office/resource 时的重复判断。
|
||||
2. 如果安全,抽出最小 helper,使正文附件“弹窗编辑”与 FileTree active tab 打开共用同一套 local Office URL 构造或打开目标判断。
|
||||
3. 保持现有行为:
|
||||
- 正文附件“弹窗编辑”进入主编辑器 resource tab。
|
||||
- 正文附件“新窗口编辑”进入浏览器新窗口。
|
||||
- md/text/code 继续走 tiptap/text/code 渲染路径,不改成 OnlyOffice 或新窗口默认打开。
|
||||
4. 更新 `5-26` checklist 的执行记录;通过后可勾选已完成项。
|
||||
|
||||
## 允许修改范围
|
||||
|
||||
- `rust/crates/mnote-web/src/ssr/pages/layout.rs`
|
||||
- `scripts/task463-onlyoffice-resolver-smoke.js`
|
||||
- `design/05-editor-mainline/process/5-26-resource-open-resolver-convergence-checklist-v1.md`
|
||||
- 可新增 `.codex/reasonix-tasks/results/batch-c-worker-a-resource-open-resolver.md`
|
||||
|
||||
禁止修改:
|
||||
|
||||
- OnlyOffice callback / 保存链路
|
||||
- `rust/crates/mnote-web/src/routes/web_shell.rs`,除非只改测试断言注释且非常必要
|
||||
- 其它 worker ownership 文件
|
||||
|
||||
## 验收命令
|
||||
|
||||
```bash
|
||||
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
|
||||
```
|
||||
|
||||
如果 `http://127.0.0.1:3000` 可用,再运行:
|
||||
|
||||
```bash
|
||||
node scripts/task463-onlyoffice-resolver-smoke.js
|
||||
```
|
||||
|
||||
## 输出要求
|
||||
|
||||
最终写入 `.codex/reasonix-tasks/results/batch-c-worker-a-resource-open-resolver.md`,包含:
|
||||
|
||||
- 修改文件列表。
|
||||
- 实际收敛了哪些重复判断。
|
||||
- 验证命令和结果。
|
||||
- 未完成项和风险。
|
||||
@@ -0,0 +1,53 @@
|
||||
# Batch C Worker B:GFM AST 尾项小包
|
||||
|
||||
项目根目录:`/mnt/Data1T/mnote`
|
||||
|
||||
你不是单独在代码库里工作,可能有其他 worker 并行执行。不要回滚、覆盖或格式化与你任务无关的文件;不要提交 git。
|
||||
|
||||
## 背景
|
||||
|
||||
`design/03-rust-web/process/3-13-rust-web-local-markdown-gfm-ast-parser-migration-v1.md` 仍有尾项:
|
||||
|
||||
- 空段落 / 空表格单元格 / 空引用块处理规则未固定。
|
||||
- legacy block -> Tiptap -> legacy marks 缺测试。
|
||||
- 保存失败前端状态保留缺测试。
|
||||
- 写侧手写 Markdown 函数未标记为过渡实现。
|
||||
- `web_shell.rs` legacy JS 适配分支仍无过渡说明。
|
||||
|
||||
本次只做低风险小包,不修复 frontmatter title 优先级。
|
||||
|
||||
## 目标
|
||||
|
||||
1. 补一个或多个 Rust 单测,固定空表格单元格 / 空引用块等当前行为。
|
||||
2. 补 web_shell 相关测试或断言,证明 legacy->Tiptap inline marks 转换至少不会丢核心 marks。
|
||||
3. 给写侧手写 Markdown 回写函数和 web_shell legacy 适配分支加简短中文过渡注释。
|
||||
4. 更新 `3-13` 执行记录和 checklist 状态。
|
||||
|
||||
## 允许修改范围
|
||||
|
||||
- `rust/crates/mnote-web/src/routes/local_folder_source.rs`
|
||||
- `rust/crates/mnote-web/src/routes/web_shell.rs`
|
||||
- `design/03-rust-web/process/3-13-rust-web-local-markdown-gfm-ast-parser-migration-v1.md`
|
||||
- 可新增 `.codex/reasonix-tasks/results/batch-c-worker-b-gfm-tail.md`
|
||||
|
||||
禁止事项:
|
||||
|
||||
- 不修改 frontmatter title > H1 > 文件名行为。
|
||||
- 不删除 legacy 适配函数。
|
||||
- 不改 Page Aggregate 读取主链。
|
||||
|
||||
## 验收命令
|
||||
|
||||
```bash
|
||||
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
|
||||
```
|
||||
|
||||
## 输出要求
|
||||
|
||||
最终写入 `.codex/reasonix-tasks/results/batch-c-worker-b-gfm-tail.md`,包含:
|
||||
|
||||
- 修改文件列表。
|
||||
- 关闭/追认了哪些 `3-13` 尾项。
|
||||
- 验证命令和结果。
|
||||
- 未完成项和风险。
|
||||
@@ -0,0 +1,64 @@
|
||||
# Batch C Worker C:Convex Export 产品化补 Smoke
|
||||
|
||||
项目根目录:`/mnt/Data1T/mnote`
|
||||
|
||||
你不是单独在代码库里工作,可能有其他 worker 并行执行。不要回滚、覆盖或格式化与你任务无关的文件;不要提交 git。
|
||||
|
||||
## 背景
|
||||
|
||||
`design/01-tree-first-graph-kernel/process/1-6-next-phase-gap-closure-checklist-v1.md` 的 Gap C1 已确认 export 脚本支持:
|
||||
|
||||
- `--dry-run`
|
||||
- `--manifest`
|
||||
- `--conflict-report`
|
||||
- `--rollback`
|
||||
|
||||
但仍缺独立 smoke 验证:
|
||||
|
||||
- dry run 不写文件
|
||||
- 同名冲突不覆盖
|
||||
- rollback 恢复导出前状态
|
||||
|
||||
## 目标
|
||||
|
||||
1. 新增或扩展 smoke,覆盖 dry-run / conflict / rollback 三个行为。
|
||||
2. 优先复用 `scripts/task444-convex-workspace-export-local-fixture-smoke.js` 和 `scripts/export-convex-workspace-to-local.js`。
|
||||
3. smoke 必须可离线运行,不依赖真实 Convex 服务。
|
||||
4. 更新 `1-6` Gap C1 与本轮 Batch C checklist。
|
||||
|
||||
## 允许修改范围
|
||||
|
||||
- `scripts/task444-convex-workspace-export-local-fixture-smoke.js`
|
||||
- 可新增 `scripts/task48*-convex-export-*.js`
|
||||
- `design/01-tree-first-graph-kernel/process/1-6-next-phase-gap-closure-checklist-v1.md`
|
||||
- `design/01-tree-first-graph-kernel/process/1-10-batch-c-p1-resource-buffer-gfm-convex-checklist-v1.md`
|
||||
- 可新增 `.codex/reasonix-tasks/results/batch-c-worker-c-convex-export-smokes.md`
|
||||
|
||||
禁止事项:
|
||||
|
||||
- 不修改 Convex runtime / schema。
|
||||
- 不改变 local-first 架构口径。
|
||||
- 不让 smoke 写入仓库内非 tmp 目录。
|
||||
|
||||
## 验收命令
|
||||
|
||||
```bash
|
||||
node --check scripts/task444-convex-workspace-export-local-fixture-smoke.js
|
||||
node scripts/task444-convex-workspace-export-local-fixture-smoke.js
|
||||
```
|
||||
|
||||
如果新增 smoke:
|
||||
|
||||
```bash
|
||||
node --check scripts/<new-smoke>.js
|
||||
node scripts/<new-smoke>.js
|
||||
```
|
||||
|
||||
## 输出要求
|
||||
|
||||
最终写入 `.codex/reasonix-tasks/results/batch-c-worker-c-convex-export-smokes.md`,包含:
|
||||
|
||||
- 修改文件列表。
|
||||
- dry-run / conflict / rollback 的验证方式。
|
||||
- 验证命令和结果。
|
||||
- 未完成项和风险。
|
||||
@@ -0,0 +1,31 @@
|
||||
# Batch C Worker A — Resource Open Resolver
|
||||
|
||||
> 执行时间:2026-05-21
|
||||
> 状态:`PLAN_ONLY_TIMEOUT`
|
||||
|
||||
## 结论
|
||||
|
||||
Worker A 没有生成 `final.md` / `result.json`,也没有落下可复核的业务代码 diff。本轮不采纳为完成项,不把 `5-26` checklist 标完成。
|
||||
|
||||
## Transcript 中可参考的计划
|
||||
|
||||
Worker A 仅提交了一个计划:
|
||||
|
||||
- 新增 `openLocalOfficeInActiveTab(detail, mode)` 辅助函数。
|
||||
- 让 `openConvexAssetFromFileTree` 的 local Office active-tab 分支和 `openEditorAttachmentEditTab` 复用该 helper。
|
||||
- `openEditorAttachmentNewWindow` 与 `openEditorAttachmentDetail` 暂不改,避免范围扩大。
|
||||
|
||||
## Codex 裁定
|
||||
|
||||
该计划方向可作为后续参考,但必须由 Codex 或新 worker 小步实现并复跑:
|
||||
|
||||
```bash
|
||||
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
|
||||
node scripts/task463-onlyoffice-resolver-smoke.js
|
||||
```
|
||||
|
||||
## 风险
|
||||
|
||||
- 原 worker 未产出 patch,不能作为完成证据。
|
||||
- `5-26` 继续保持 process 状态。
|
||||
@@ -0,0 +1,93 @@
|
||||
# Batch C Worker B:GFM AST 尾项小包
|
||||
|
||||
> 执行日期:2026-05-21
|
||||
> 执行人:Reasonix Code (deepseek-v4-flash)
|
||||
|
||||
---
|
||||
|
||||
## 修改文件列表
|
||||
|
||||
| 文件 | 操作 | 说明 |
|
||||
|------|------|------|
|
||||
| `rust/crates/mnote-web/src/routes/local_markdown_parser.rs` | 编辑 | 新增 2 个解析测试 |
|
||||
| `rust/crates/mnote-web/src/routes/local_folder_source.rs` | 编辑 | 给 3 个写侧函数加过渡注释 |
|
||||
| `rust/crates/mnote-web/src/routes/web_shell.rs` | 编辑 | 测试断言扩展 + JS 适配层过渡注释 |
|
||||
| `design/03-rust-web/process/3-13-rust-web-local-markdown-gfm-ast-parser-migration-v1.md` | 编辑 | 更新 checklist 状态 |
|
||||
| `.codex/reasonix-tasks/results/batch-c-worker-b-gfm-tail.md` | 新建 | 本报告文件 |
|
||||
|
||||
---
|
||||
|
||||
## 关闭/追认的 3-13 尾项
|
||||
|
||||
### ✅ 11.2 空表格单元格 / 空引用块处理规则
|
||||
|
||||
- **追加测试** `markdown_empty_blockquote_parse`:验证 `>` / `> ` 输出 `type=quote, content=[]`
|
||||
- **追加测试** `markdown_table_empty_cells_parse`:验证空表头/数据单元格的 `paragraph.content` 为 `[]`
|
||||
- 行为固定为 comrak 默认输出,不再无规则
|
||||
|
||||
### ✅ 11.4 legacy→Tiptap→legacy marks 不丢 marks
|
||||
|
||||
- `document_shell_bootstrap_preserves_inline_mark_conversion` 原仅断言 `code` / `link`
|
||||
- **已扩展断言**:`bold`, `italic`, `underline`, `strike`, `code`, `link` 全部 6 种 core marks 的 JS 生成代码均存在于 HTML 中
|
||||
|
||||
### ✅ 11.8 web shell 单测:legacy↔Tiptap 不丢 marks
|
||||
|
||||
- 同上 — 测试名称不变但断言已补全
|
||||
|
||||
### ✅ 11.9 手写 parser 标记为过渡实现
|
||||
|
||||
- `inline_nodes_to_markdown`(`local_folder_source.rs:7004`):加中文过渡注释
|
||||
- `editor_blocks_to_markdown_for_file`(`local_folder_source.rs:6221`):加中文过渡注释
|
||||
- `editor_blocks_to_markdown_with_rewrite`(`local_folder_source.rs:6393`):加中文过渡注释
|
||||
|
||||
### 📌 11.9 web_shell.rs 临时适配分支
|
||||
|
||||
- **未删除**,但加了过渡注释 `// 过渡适配(TODO step-4)`
|
||||
- 完整标记了 `legacyStylesToTiptapMarks` / `legacyMarkArrayToTiptapMarks` / `mergeTiptapMarks` / `legacyInlineContentToTiptap` 四函数组的迁移计划
|
||||
|
||||
---
|
||||
|
||||
## 验证命令与结果
|
||||
|
||||
### 命令 1:`local_markdown` 测试组
|
||||
|
||||
```bash
|
||||
cargo test --manifest-path rust/Cargo.toml -p mnote-web local_markdown -- --test-threads=1
|
||||
```
|
||||
|
||||
**结果:30 passed, 0 failed**
|
||||
|
||||
新测试确认通过:
|
||||
- `routes::local_markdown_parser::tests::markdown_empty_blockquote_parse`
|
||||
- `routes::local_markdown_parser::tests::markdown_table_empty_cells_parse`
|
||||
|
||||
### 命令 2:`web_shell` 测试组
|
||||
|
||||
```bash
|
||||
cargo test --manifest-path rust/Cargo.toml -p mnote-web web_shell -- --test-threads=1
|
||||
```
|
||||
|
||||
**结果:10 passed, 0 failed**
|
||||
|
||||
核心测试确认通过:
|
||||
- `routes::web_shell::tests::document_shell_bootstrap_preserves_inline_mark_conversion`
|
||||
|
||||
---
|
||||
|
||||
## 未完成项与风险
|
||||
|
||||
### 未完成项(保持 [ ] 状态)
|
||||
|
||||
| 项 | 说明 | 原因 |
|
||||
|----|------|------|
|
||||
| 11.2 标题优先级 frontmatter > H1 > 文件名 | 任务明确排除 | 本包不做 frontmatter title 优先级修复 |
|
||||
| 11.6 降级策略测试 | 仅部分完成 | 列对齐已追认、空单元格已补测试;但 `unsupported → paragraph` 等降级策略无专项测试 |
|
||||
| 11.7 保存失败状态保留 | 未触及 | 需要前端侧 error handler + 状态保留测试,属不同责任域 |
|
||||
| 11.9 web_shell.rs 临时适配分支移除 | 未删除 | 仅加过渡注释 — JS 侧函数仍需等 Step 4 才能移除 |
|
||||
| 11.9 process→done | 未移动 | 以上 [ ] 项全部关闭后执行 |
|
||||
|
||||
### 风险
|
||||
|
||||
1. **空单元格解析层 vs 回写层行为可能不一致**:解析层测试已验证空的 `paragraph.content = []`,但回写侧 `editor_blocks_to_markdown_with_rewrite` 对空单元格的处理未覆盖测试(它的流程是 `inline_nodes_to_markdown` → 空字符串 → `.trim().to_string()` → 空 → `replace('\n', " ")` → 保持空)。建议后续补 save 侧空单元格 round-trip 测试。
|
||||
2. **过渡注释不产生编译期警告**:当前使用普通 `//` 注释而非 `#[deprecated]`,不会在编译时提醒迁移。如要严格追踪,建议未来 Step 4 前统一加 `#[deprecated(note = "...")]`。
|
||||
3. **新加但未整体编译验证**:两个测试组均通过,但未执行 `cargo test -p mnote-web` 全量。局部风险较低。
|
||||
@@ -0,0 +1,42 @@
|
||||
# Batch C Worker C — Convex Export Productization Smoke
|
||||
|
||||
> 执行时间:2026-05-21
|
||||
> 执行者:Reasonix Code (Batch C Worker C)
|
||||
> 状态:`DONE`
|
||||
|
||||
## 背景
|
||||
|
||||
`design/01-tree-first-graph-kernel/process/1-6-next-phase-gap-closure-checklist-v1.md` 的 Gap C1
|
||||
已有 `--dry-run`、`--manifest`、`--conflict-report`、`--rollback` 能力,但缺独立 smoke 验证。
|
||||
|
||||
## 现有 smoke 检测
|
||||
|
||||
`scripts/task455-convex-export-plan-rollback-smoke.js` 已存在并覆盖全部三个行为:
|
||||
|
||||
| 行为 | 验证方式 | task455 对应逻辑 |
|
||||
|------|----------|------------------|
|
||||
| **dry-run** | `--dry-run` 后 pages 目录不存在;manifest 中 `dryRun: true` | `assert.equal(fs.existsSync(path.join(outRoot, "pages", "Project.md")), false)` |
|
||||
| **conflict** | 预写文件后 export 退出码 2;冲突报告含 `migration_conflict`;原内容未被覆盖 | `runExport([...], 2)` + `assert.equal(content, "原有内容\n")` |
|
||||
| **rollback** | export 后 rollback,pages/assets 均删除 | `assert.equal(fs.existsSync(...), false)` for pages + assets |
|
||||
|
||||
## 验证命令与结果
|
||||
|
||||
```bash
|
||||
node --check scripts/task455-convex-export-plan-rollback-smoke.js
|
||||
node scripts/task455-convex-export-plan-rollback-smoke.js
|
||||
```
|
||||
|
||||
**结果:** ✅ `{"ok":true,"smoke":"task455-convex-export-plan-rollback"}`
|
||||
|
||||
## 修改文件
|
||||
|
||||
| 文件 | 变更 |
|
||||
|------|------|
|
||||
| `design/01-tree-first-graph-kernel/process/1-6-next-phase-gap-closure-checklist-v1.md` | Gap C1 标记 ✅ 完成;5.2 新增 task455 条目;5.3 三个 smoke 标记通过;6.3 总完成率 C1 行更新 |
|
||||
| `design/01-tree-first-graph-kernel/process/1-10-batch-c-p1-resource-buffer-gfm-convex-checklist-v1.md` | 新增 Worker C 执行记录 |
|
||||
|
||||
## 未完成项和风险
|
||||
|
||||
- **无未完成项** — dry-run/conflict/rollback 三个行为已有 `task455` 离线 smoke 覆盖。
|
||||
- **风险**:task455 使用 tmpdir,离线运行不依赖 Convex,无后续依赖风险。
|
||||
- **后续建议**:若有新的 export 行为变更(如增量导出、自定义路径映射),在 `task455` 基础上追加断言即可。
|
||||
Reference in New Issue
Block a user