Files
mnote/.codex/reasonix-tasks/2026-05-21-batch-d-worker-b-local-markdown-title-priority.md
T

2.3 KiB

Reasonix Batch D Worker B:本地 Markdown 标题优先级收口

Project root: /mnt/Data1T/mnote

背景

P1 阶段 3-13 Rust Web 本地 Markdown GFM AST 解析器迁移方案 仍有标题优先级尾项未完成。当前 parse_markdown_page 固定使用文件名 stem 作为标题,需要收口到:

frontmatter title > 第一条 H1 > 文件名

事实源:

  • design/01-tree-first-graph-kernel/process/1-8-mvp-post-process-execution-order-v1.md
  • design/01-tree-first-graph-kernel/process/1-11-batch-d-p1-small-tail-execution-checklist-v1.md
  • design/03-rust-web/process/3-13-rust-web-local-markdown-gfm-ast-parser-migration-v1.md

Ownership

你可以修改:

  • rust/crates/mnote-web/src/routes/local_markdown_parser.rs
  • rust/crates/mnote-web/src/routes/local_folder_source.rs
  • design/03-rust-web/process/3-13-rust-web-local-markdown-gfm-ast-parser-migration-v1.md

不要修改:

  • rust/crates/mnote-web/src/ssr/pages/layout.rs
  • rust/crates/mnote-web/src/routes/web_shell.rs
  • resource trash / open resolver / OnlyOffice / ACP / Hermes 相关文件

你不是独自在代码库中工作。不要回滚、覆盖、格式化或清理其他 worker 的改动。不要提交 git。

任务

  1. 修改 parse_markdown_page 标题解析规则:
    • frontmatter 中 title: ... 非空时优先使用。
    • frontmatter 无 title 时,使用正文中的第一条 H1。
    • 仍无标题时,回退 file_stem_title(file_name)
  2. 解析 frontmatter title 时保持简单、可测:
    • 支持普通 title: value
    • 支持简单引号包裹值。
    • 不需要引入新的 YAML 依赖,除非仓库已有稳定依赖可直接复用。
  3. 保持 mnote_id、document_id、path-id 规则不变。
  4. 更新现有测试 local_markdown_page_title_comes_from_file_name_not_body_heading,不要再断言“有 H1 也只取文件名”。
  5. 补最小测试覆盖 frontmatter / H1 / filename 三层优先级。
  6. 更新 3-13 执行记录,只标记本轮真实完成的标题优先级项。

验证

至少运行:

cd /mnt/Data1T/mnote/rust
cargo test -p mnote-web local_markdown -- --test-threads=1

如果你新增了更精确测试名,也请单独运行对应测试。

最终回复格式

  • 修改文件列表
  • 标题优先级实现方式
  • 运行过的命令和结果
  • 未完成项/风险