fn parse_changelog(full_md: &str) -> ChangelogDataExpand description
将 CHANGELOG.md 全文解析为结构化 ChangelogData。
逐行扫描:## 开头 → 版本边界,### 开头 → 分类边界,
其余行归入当前分类的原始 Markdown(若无分类则归入版本 intro)。
解析完成后,每个分类的原始 Markdown 经 render_markdown_enhanced 渲染为 HTML。