# 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` 尾项。
- 验证命令和结果。
- 未完成项和风险。
