Files
mnote/.codex/reasonix-tasks/results/batch-c-worker-b-gfm-tail.md
T

94 lines
4.2 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.
# Batch C Worker BGFM 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` 全量。局部风险较低。