Преглед изворни кода

docs(changelog): 更新 2.2.32 详细发布说明

Mochocyang пре 2 месеци
родитељ
комит
22e2212164
1 измењених фајлова са 137 додато и 90 уклоњено
  1. 137 90
      src/lib/changelog.ts

+ 137 - 90
src/lib/changelog.ts

@@ -1,10 +1,10 @@
 export interface ChangelogEntry {
-  version: string
-  date: string
+  version: string;
+  date: string;
   highlights: {
-    en: string[]
-    zh: string[]
-  }
+    en: string[];
+    zh: string[];
+  };
 }
 
 const TWO_POINT_TWO_TEN_CHANGELOG: ChangelogEntry = {
@@ -18,7 +18,7 @@ const TWO_POINT_TWO_TEN_CHANGELOG: ChangelogEntry = {
       "恢复大语言/LLM 模型中的拉取模型入口:拉取后可从下拉框选择模型,点击测试模型时会测试当前选中的模型。",
     ],
   },
-}
+};
 
 const TWO_POINT_TWO_TWELVE_CHANGELOG: ChangelogEntry = {
   version: "2.2.12",
@@ -27,7 +27,7 @@ const TWO_POINT_TWO_TWELVE_CHANGELOG: ChangelogEntry = {
     en: [
       "Fixed continue-next-chapter regenerating chapter 1: incidental 开篇/第一章 wording inside prompts no longer hijacks the target chapter.",
       "Continue-next-chapter now remembers the chapter just generated in this conversation, so an empty chapter library no longer resets the target back to chapter 1.",
-      "Fixed AI chapter editing failing with \"missing frontmatter, write-back stopped\": the original chapter frontmatter is reattached automatically, and fenced output or missing headings are tolerated.",
+      'Fixed AI chapter editing failing with "missing frontmatter, write-back stopped": the original chapter frontmatter is reattached automatically, and fenced output or missing headings are tolerated.',
       "Added a per-chapter target character setting: chapter drafting, expansion thresholds, and the continue-next-chapter prompt all follow the configured target.",
       "Fixed the review stage being unstoppable when the stop signal fired before the review started.",
       "Fixed contradictory outline refinement checks by uniformly testing whether the target directory already contains .md files.",
@@ -47,7 +47,7 @@ const TWO_POINT_TWO_TWELVE_CHANGELOG: ChangelogEntry = {
       "AI 会话界面重做:深度思考与普通模式互斥切换,普通模式支持正常对话与编辑章节。",
     ],
   },
-}
+};
 
 const TWO_POINT_TWO_ELEVEN_CHANGELOG: ChangelogEntry = {
   version: "2.2.11",
@@ -76,36 +76,56 @@ const TWO_POINT_TWO_ELEVEN_CHANGELOG: ChangelogEntry = {
       "补充本地 CLI 配置读取、空模型回退、以及 CLI 启动参数的回归测试,避免后续再次出现“本地环境读不到”或“走不到本地代理模式”的回退。",
     ],
   },
-}
+};
 
 const TWO_POINT_TWO_THIRTY_TWO_CHANGELOG: ChangelogEntry = {
   version: "2.2.32",
   date: "2026-07-04",
   highlights: {
     en: [
-      "Chapter saving is more reliable: switching chapters no longer deletes drafts or writes to the wrong file; saving as a final chapter is when the Chinese filename is applied.",
-      "Chat model and background-task model are separate: the chat box is for conversation and prose; review, summary, de-AI, and similar steps use the Default Model unless you pick another for that step.",
+      "Chapter saving is more reliable: switching chapters no longer deletes chapter-NNN drafts or writes to the wrong file; renaming to Chinese title only happens when saving as a finalized chapter.",
+      "Stale autosaves are cancelled, and old drafts are automatically cleaned up after rename.",
+      "Fixed chapter title/status edits sometimes failing to save due to frontmatter type mismatches.",
+      "Chat model and background-task model are separate: the chat box is for conversation and prose writing; review, summary, de-AI, and similar steps use the Default Model unless you pick another for that step.",
       "De-AI can use its own model instead of always sharing the chat model.",
-      "Duplicate-entity detection: pick a model before scanning, last results are remembered, merged entries disappear right away, and progress is clearer.",
-      "The editor polls disk every 2 seconds so external edits show up; fixed sync stopping after you edit locally.",
-      "Faster startup and safer project switching so data from the previous project does not leak in.",
-      "Fixed chapter title and status edits sometimes failing to save because of mismatched value types.",
-      "macOS and Linux no longer auto-check for updates; the settings page points you to manual download.",
+      "Duplicate-entity detection: pick a model before scanning, results are cached, merged entries disappear immediately, and progress shows read/LLM/write stages.",
+      "The editor polls disk every 2 seconds so external edits show up; fixed disk sync stopping after local edits.",
+      "Cmd+F / Ctrl+F find bar in the editor with overlay highlights and navigation.",
+      "Faster startup and safer project switching: deferred non-critical hydration, normalized path comparison.",
+      "Fixed chapter title/status edits sometimes failing to save because of mismatched value types.",
+      "macOS and Linux no longer auto-check for updates; the settings page points to manual download.",
       "Some settings take effect immediately without a Save button.",
+      "Special thanks to darknessomi for the support and contributions that made this release better!",
     ],
     zh: [
-      "章节保存更稳了:切换章节不会再误删草稿或存错文件;只有点「保存为正式章节」才会改成中文文件名。",
-      "聊天模型和后台任务模型分开了:聊天框里选的只管对话和写正文;审稿、摘要、去 AI 味等默认用「默认模型」,也可以给某个环节单独指定。",
-      "去 AI 味可以单独选模型,不用和聊天模型绑在一起。",
-      "重复角色/实体检测更好用:扫描前可选模型,上次结果会保留,合并后条目马上消失,进度也更清楚。",
-      "编辑器每 2 秒检查一次磁盘,用别的软件改了文件会自动刷新;也修好了本地改完字之后不再同步的问题。",
-      "启动更快,快速切换项目时不会再串上一个项目的数据。",
-      "修好了改章节标题或状态时,偶尔保存失败的问题。",
-      "macOS 和 Linux 版暂不支持软件内自动更新,设置里会提示去官网手动下载。",
-      "部分设置改了立刻生效,不用点保存。",
+      "章节保存更稳了:切换章节不再误删 chapter-NNN 草稿,也不会把内容写到错误的章节文件里。",
+      "只有点击「保存为正式章节」才会将文件名改为中文标题,切换章节时不再自动重命名。",
+      "取消过期自动保存,草稿重命名后自动清理旧草稿。",
+      "修复改章节标题或状态时偶尔保存失败的问题(frontmatter 类型不一致导致)。",
+      "聊天模型只管 AI 会话中的对话和写正文;审稿、摘要、记忆提取等后台任务默认使用「默认模型」,可在小说设置页配置。",
+      "去 AI 味可以单独选择一个模型,不必再和聊天模型绑定。",
+      "小说设置中的模型说明已改写,「跟随默认模型」和「跟随聊天模型」分开勾选,不易混淆。",
+      "重复实体检测扫描前可选择模型,结果自动缓存,合并后条目立即消失。",
+      "扫描和合并更快:并行 I/O,进度区分读盘/LLM 分析/写盘阶段。",
+      "编辑器每 2 秒轮询检测磁盘外部修改——用其他软件修改文件后自动刷新。",
+      "支持 Cmd+F(Ctrl+F)查找:查找条、overlay 高亮、上下条导航。",
+      "优化启动速度、快速切换项目不再串数据。",
+      "macOS/Linux 暂不支持自动更新,设置页提示去官网手动下载。",
+      "部分设置页无需点保存,改动即时生效。",
+      "!!!特别感谢 darknessomi 的支持与帮助,是他让软件变得更加完美!!!",
+      "",
+      "提前预告!!!最新 3.0.0 版本正在构建中!",
+      "这个版本将 AI 会话工作流模式彻底取消,换了更强大的 AGENT 架构,这个架构可以调用工具、调用 skill、调用 MCP。",
+      "在 AI 会话当中可以指定某个章节、某个记忆、某个 skill 等输入,让 AI 生成内容更加灵活。",
+      "同时在 AI 会话当中增加了快速/标准/严格三种模式,每种模式都会走不同的 AGENT 流程,对 AI 会话内容产生更加严谨。",
+      "并且 3.0.0 版本增加了自定义 skill 技能,增加了 MCP 功能,优化了剧情推演室。",
+      "剧情推演室是一个类似小说平行世界模拟的工具,你可以选中小说章节,AI 会读取小说章节中的角色内容,提取角色性格等特征,为每一个角色赋予专有 AGENT。",
+      "在剧情推演室的平行模拟世界当中,每个角色都是一个真实的人物,他们有自己的情绪、自己的视角,会按照自己的思维去推动剧情故事发展。",
+      "相当于每一个角色都在找自己的路,于是故事发生了!剧情推演便是如此而来。",
+      "最新 3.0.0 版本敬请期待。",
     ],
   },
-}
+};
 
 const TWO_POINT_TWO_THIRTY_ONE_CHANGELOG: ChangelogEntry = {
   version: "2.2.31",
@@ -132,7 +152,7 @@ const TWO_POINT_TWO_THIRTY_ONE_CHANGELOG: ChangelogEntry = {
       "修复便携版打包相关问题、聊天输入框若干交互细节、大纲聊天面板相关功能。",
     ],
   },
-}
+};
 
 const TWO_POINT_TWO_THIRTY_CHANGELOG: ChangelogEntry = {
   version: "2.2.30",
@@ -151,7 +171,7 @@ const TWO_POINT_TWO_THIRTY_CHANGELOG: ChangelogEntry = {
       "旧便携版 exe 已归档到 QMdelete,避免用户误打开旧包。",
     ],
   },
-}
+};
 
 const TWO_POINT_TWO_TWENTY_NINE_CHANGELOG: ChangelogEntry = {
   version: "2.2.29",
@@ -171,7 +191,7 @@ const TWO_POINT_TWO_TWENTY_NINE_CHANGELOG: ChangelogEntry = {
       "导入 UI 全面优化:新增全选/取消全选功能,导入结果详细展示,进度分阶段展示。",
     ],
   },
-}
+};
 
 const TWO_POINT_TWO_TWENTY_SEVEN_CHANGELOG: ChangelogEntry = {
   version: "2.2.27",
@@ -184,7 +204,7 @@ const TWO_POINT_TWO_TWENTY_SEVEN_CHANGELOG: ChangelogEntry = {
       "修复队列错误信息为中文:合并任务失败时的错误提示改为中文。",
     ],
   },
-}
+};
 
 const TWO_POINT_TWO_TWENTY_SIX_CHANGELOG: ChangelogEntry = {
   version: "2.2.26",
@@ -198,7 +218,7 @@ const TWO_POINT_TWO_TWENTY_SIX_CHANGELOG: ChangelogEntry = {
       "新增下拉框细滚动条样式,与项目整体风格统一。",
     ],
   },
-}
+};
 
 const TWO_POINT_TWO_TWENTY_FIVE_CHANGELOG: ChangelogEntry = {
   version: "2.2.25",
@@ -230,7 +250,7 @@ const TWO_POINT_TWO_TWENTY_FIVE_CHANGELOG: ChangelogEntry = {
       "故事框架标题旁添加帮助图标,链接到剧情推演室使用说明。",
     ],
   },
-}
+};
 
 const TWO_POINT_TWO_TWENTY_FOUR_CHANGELOG: ChangelogEntry = {
   version: "2.2.24",
@@ -261,7 +281,7 @@ const TWO_POINT_TWO_TWENTY_FOUR_CHANGELOG: ChangelogEntry = {
       "AI 大纲会话面板底部布局调整:停靠图标在最左侧,模型选择下拉框在最右侧。",
     ],
   },
-}
+};
 
 const TWO_POINT_TWO_TWENTY_THREE_CHANGELOG: ChangelogEntry = {
   version: "2.2.23",
@@ -286,7 +306,7 @@ const TWO_POINT_TWO_TWENTY_THREE_CHANGELOG: ChangelogEntry = {
       "修复嵌套路径虚拟化导致部分条目无法删除的问题:路径中包含多个 wiki/QM 段时全量替换,而非仅替换最后一个。",
     ],
   },
-}
+};
 
 const TWO_POINT_TWO_TWENTY_TWO_CHANGELOG: ChangelogEntry = {
   version: "2.2.22",
@@ -321,7 +341,7 @@ const TWO_POINT_TWO_TWENTY_TWO_CHANGELOG: ChangelogEntry = {
       "自定义模型卡片输入框内的失败模型标签会高亮变红并带红框,用户可直接点击「×」移除;移除后该模型会从失败列表中清除。",
     ],
   },
-}
+};
 
 const TWO_POINT_TWO_TWENTY_CHANGELOG: ChangelogEntry = {
   version: "2.2.20",
@@ -364,7 +384,7 @@ const TWO_POINT_TWO_TWENTY_CHANGELOG: ChangelogEntry = {
       "优化Windows更新安装流程,减少文件占用导致的更新失败。",
     ],
   },
-}
+};
 
 const TWO_POINT_TWO_NINETEEN_CHANGELOG: ChangelogEntry = {
   version: "2.2.19",
@@ -381,7 +401,7 @@ const TWO_POINT_TWO_NINETEEN_CHANGELOG: ChangelogEntry = {
       "新增角色识别回归测试,覆盖中文字段返回格式,防止同类问题再次出现。",
     ],
   },
-}
+};
 
 const TWO_POINT_TWO_EIGHTEEN_CHANGELOG: ChangelogEntry = {
   version: "2.2.18",
@@ -400,7 +420,7 @@ const TWO_POINT_TWO_EIGHTEEN_CHANGELOG: ChangelogEntry = {
       "优化修复一些其他小问题",
     ],
   },
-}
+};
 
 const TWO_POINT_TWO_SEVENTEEN_CHANGELOG: ChangelogEntry = {
   version: "2.2.17",
@@ -421,7 +441,7 @@ const TWO_POINT_TWO_SEVENTEEN_CHANGELOG: ChangelogEntry = {
       "修复拆书测试版与模型配置流程中反馈的若干问题。",
     ],
   },
-}
+};
 
 const TWO_POINT_TWO_SIXTEEN_CHANGELOG: ChangelogEntry = {
   version: "2.2.16",
@@ -440,7 +460,7 @@ const TWO_POINT_TWO_SIXTEEN_CHANGELOG: ChangelogEntry = {
       "修复一些其他问题。",
     ],
   },
-}
+};
 
 const TWO_POINT_TWO_FOURTEEN_CHANGELOG: ChangelogEntry = {
   version: "2.2.14",
@@ -454,14 +474,14 @@ const TWO_POINT_TWO_FOURTEEN_CHANGELOG: ChangelogEntry = {
       "Enhanced de-AI rules with Chinese novel adaptation notes: preserve character voice, dialogue edges, narrative rhythm, and necessary pauses; don't apply non-fiction article rules to delete adverbs or compress to fixed word count.",
     ],
     zh: [
-      "修复 Issue #10:AI 修改章节时不再报错\"返回内容缺少 frontmatter,已停止写回\",现在自动沿用原章节 frontmatter,并容错代码围栏与缺失标题。",
-      "修复 Issue #9:\"继续生成下一章\"不再重复生成第一章;提示词中顺带出现的\"开篇/第一章\"字样不再把目标章节劫持为第1章;本会话记住刚生成、尚未保存的章节号。",
+      '修复 Issue #10:AI 修改章节时不再报错"返回内容缺少 frontmatter,已停止写回",现在自动沿用原章节 frontmatter,并容错代码围栏与缺失标题。',
+      '修复 Issue #9:"继续生成下一章"不再重复生成第一章;提示词中顺带出现的"开篇/第一章"字样不再把目标章节劫持为第1章;本会话记住刚生成、尚未保存的章节号。',
       "修复 Issue #6:大纲细化生成逻辑统一按目录是否已有 .md 文件判断;hasOutlineForRefinement 从基于搜索改为直接文件系统检查。",
-      "修复 Issue #8:新增\"单章目标字数\"设置,章节生成、扩写阈值和\"继续生成下一章\"提示词都按设置目标执行。",
+      '修复 Issue #8:新增"单章目标字数"设置,章节生成、扩写阈值和"继续生成下一章"提示词都按设置目标执行。',
       "增强去AI味规则的中文小说适配说明:保留角色声线、对白毛边、叙事节奏和必要停顿;不要按非虚构文章规则硬删副词或压缩到固定字数。",
     ],
   },
-}
+};
 
 const TWO_POINT_TWO_THIRTEEN_CHANGELOG: ChangelogEntry = {
   version: "2.2.13",
@@ -496,7 +516,7 @@ const TWO_POINT_TWO_THIRTEEN_CHANGELOG: ChangelogEntry = {
       "深度思考和普通模式互斥切换,普通模式下可以正常对话不走深度思考流程。",
     ],
   },
-}
+};
 
 const TWO_POINT_TWO_NINE_CHANGELOG: ChangelogEntry = {
   version: "2.2.9",
@@ -509,7 +529,7 @@ const TWO_POINT_TWO_NINE_CHANGELOG: ChangelogEntry = {
       "修复 AI 大纲深度思考生成报错:当大纲上下文或对话字段缺失时,不会再因为 undefined 的 length / trim 报错而直接生成失败。",
     ],
   },
-}
+};
 
 const TWO_POINT_TWO_EIGHT_CHANGELOG: ChangelogEntry = {
   version: "2.2.8",
@@ -532,7 +552,7 @@ const TWO_POINT_TWO_EIGHT_CHANGELOG: ChangelogEntry = {
       "深度章节长度重写失败上限提升到 6000 字,连续压缩失败时可保留可用长稿继续审查。",
     ],
   },
-}
+};
 
 const TWO_POINT_TWO_SEVEN_CHANGELOG: ChangelogEntry = {
   version: "2.2.7",
@@ -555,7 +575,7 @@ const TWO_POINT_TWO_SEVEN_CHANGELOG: ChangelogEntry = {
       "继续未完成时即使切换模型,也会重新加载原始请求和恢复快照后再继续后续阶段。",
     ],
   },
-}
+};
 
 const TWO_POINT_TWO_ZERO_CHANGELOG: ChangelogEntry = {
   version: "2.2.0",
@@ -582,7 +602,7 @@ const TWO_POINT_TWO_ZERO_CHANGELOG: ChangelogEntry = {
       "修复 AI 会话停止生成不及时的问题,思考阶段和流式阶段都能立即收口。",
     ],
   },
-}
+};
 
 const TWO_POINT_ONE_ZERO_CHANGELOG: ChangelogEntry = {
   version: "2.1.0",
@@ -629,7 +649,7 @@ const TWO_POINT_ONE_ZERO_CHANGELOG: ChangelogEntry = {
       "补强 AI 审查改写落地逻辑,换行或空格变化后仍能定位原文片段。",
     ],
   },
-}
+};
 
 const TWO_POINT_ZERO_CHANGELOG: ChangelogEntry = {
   version: "2.0.0",
@@ -658,7 +678,7 @@ const TWO_POINT_ZERO_CHANGELOG: ChangelogEntry = {
       "反馈提交流程增加兜底通道,桌面端 HTTP 客户端异常时仍可尝试提交。",
     ],
   },
-}
+};
 
 const TWO_POINT_TWO_TWENTY_ONE_CHANGELOG: ChangelogEntry = {
   version: "2.2.21",
@@ -677,13 +697,13 @@ const TWO_POINT_TWO_TWENTY_ONE_CHANGELOG: ChangelogEntry = {
       "Clip 服务器安全:Mutex poison 处理、重启计数修复、projectPath 校验。",
     ],
   },
-}
+};
 
 function isMergedOnePointRelease(version: string): boolean {
-  const match = /^1\.0\.(\d+)$/.exec(version)
-  if (!match) return false
-  const patch = Number(match[1])
-  return patch >= 8 && patch <= 32
+  const match = /^1\.0\.(\d+)$/.exec(version);
+  if (!match) return false;
+  const patch = Number(match[1]);
+  return patch >= 8 && patch <= 32;
 }
 
 export const CHANGELOG: ChangelogEntry[] = [
@@ -743,41 +763,68 @@ export const CHANGELOG: ChangelogEntry[] = [
       ],
     },
   },
-]
+];
 
 export function currentVersionChangelog(version: string): ChangelogEntry[] {
-  if (version === TWO_POINT_TWO_THIRTY_TWO_CHANGELOG.version) return [TWO_POINT_TWO_THIRTY_TWO_CHANGELOG]
-  if (version === TWO_POINT_TWO_THIRTY_ONE_CHANGELOG.version) return [TWO_POINT_TWO_THIRTY_ONE_CHANGELOG]
-  if (version === TWO_POINT_TWO_THIRTY_CHANGELOG.version) return [TWO_POINT_TWO_THIRTY_CHANGELOG]
-  if (version === TWO_POINT_TWO_TWENTY_NINE_CHANGELOG.version) return [TWO_POINT_TWO_TWENTY_NINE_CHANGELOG]
-  if (version === TWO_POINT_TWO_TWENTY_SEVEN_CHANGELOG.version) return [TWO_POINT_TWO_TWENTY_SEVEN_CHANGELOG]
-  if (version === TWO_POINT_TWO_TWENTY_SIX_CHANGELOG.version) return [TWO_POINT_TWO_TWENTY_SIX_CHANGELOG]
-  if (version === TWO_POINT_TWO_TWENTY_FIVE_CHANGELOG.version) return [TWO_POINT_TWO_TWENTY_FIVE_CHANGELOG]
-  if (version === TWO_POINT_TWO_TWENTY_FOUR_CHANGELOG.version) return [TWO_POINT_TWO_TWENTY_FOUR_CHANGELOG]
-  if (version === TWO_POINT_TWO_TWENTY_THREE_CHANGELOG.version) return [TWO_POINT_TWO_TWENTY_THREE_CHANGELOG]
-  if (version === TWO_POINT_TWO_TWENTY_TWO_CHANGELOG.version) return [TWO_POINT_TWO_TWENTY_TWO_CHANGELOG]
-  if (version === TWO_POINT_TWO_TWENTY_ONE_CHANGELOG.version) return [TWO_POINT_TWO_TWENTY_ONE_CHANGELOG]
-  if (version === TWO_POINT_TWO_TWENTY_CHANGELOG.version) return [TWO_POINT_TWO_TWENTY_CHANGELOG]
-  if (version === TWO_POINT_TWO_NINETEEN_CHANGELOG.version) return [TWO_POINT_TWO_NINETEEN_CHANGELOG]
-  if (version === TWO_POINT_TWO_EIGHTEEN_CHANGELOG.version) return [TWO_POINT_TWO_EIGHTEEN_CHANGELOG]
-  if (version === TWO_POINT_TWO_SEVENTEEN_CHANGELOG.version) return [TWO_POINT_TWO_SEVENTEEN_CHANGELOG]
-  if (version === TWO_POINT_TWO_SIXTEEN_CHANGELOG.version) return [TWO_POINT_TWO_SIXTEEN_CHANGELOG]
-  if (version === TWO_POINT_TWO_FOURTEEN_CHANGELOG.version) return [TWO_POINT_TWO_FOURTEEN_CHANGELOG]
-  if (version === TWO_POINT_TWO_THIRTEEN_CHANGELOG.version) return [TWO_POINT_TWO_THIRTEEN_CHANGELOG]
-  if (version === TWO_POINT_TWO_TWELVE_CHANGELOG.version) return [TWO_POINT_TWO_TWELVE_CHANGELOG]
-  if (version === TWO_POINT_TWO_ELEVEN_CHANGELOG.version) return [TWO_POINT_TWO_ELEVEN_CHANGELOG]
-  if (version === TWO_POINT_TWO_TEN_CHANGELOG.version) return [TWO_POINT_TWO_TEN_CHANGELOG]
-  if (version === TWO_POINT_TWO_NINE_CHANGELOG.version) return [TWO_POINT_TWO_NINE_CHANGELOG]
-  if (version === TWO_POINT_TWO_EIGHT_CHANGELOG.version) return [TWO_POINT_TWO_EIGHT_CHANGELOG]
-  if (version === TWO_POINT_TWO_SEVEN_CHANGELOG.version) return [TWO_POINT_TWO_SEVEN_CHANGELOG]
-  if (version === TWO_POINT_TWO_ZERO_CHANGELOG.version) return [TWO_POINT_TWO_ZERO_CHANGELOG]
-  if (version === TWO_POINT_ONE_ZERO_CHANGELOG.version) return [TWO_POINT_ONE_ZERO_CHANGELOG]
-  if (version === TWO_POINT_ZERO_CHANGELOG.version) return [TWO_POINT_ZERO_CHANGELOG]
-  if (/^2\.2\.[1-6]$/.test(version)) return []
-  if (/^2\.1\.(?:[1-9]|10)$/.test(version)) return []
-  if (/^2\.0\.(?:[1-9]|1[0-2])$/.test(version)) return []
-  if (isMergedOnePointRelease(version)) return []
-  return CHANGELOG.filter((entry) => entry.version === version)
+  if (version === TWO_POINT_TWO_THIRTY_TWO_CHANGELOG.version)
+    return [TWO_POINT_TWO_THIRTY_TWO_CHANGELOG];
+  if (version === TWO_POINT_TWO_THIRTY_ONE_CHANGELOG.version)
+    return [TWO_POINT_TWO_THIRTY_ONE_CHANGELOG];
+  if (version === TWO_POINT_TWO_THIRTY_CHANGELOG.version)
+    return [TWO_POINT_TWO_THIRTY_CHANGELOG];
+  if (version === TWO_POINT_TWO_TWENTY_NINE_CHANGELOG.version)
+    return [TWO_POINT_TWO_TWENTY_NINE_CHANGELOG];
+  if (version === TWO_POINT_TWO_TWENTY_SEVEN_CHANGELOG.version)
+    return [TWO_POINT_TWO_TWENTY_SEVEN_CHANGELOG];
+  if (version === TWO_POINT_TWO_TWENTY_SIX_CHANGELOG.version)
+    return [TWO_POINT_TWO_TWENTY_SIX_CHANGELOG];
+  if (version === TWO_POINT_TWO_TWENTY_FIVE_CHANGELOG.version)
+    return [TWO_POINT_TWO_TWENTY_FIVE_CHANGELOG];
+  if (version === TWO_POINT_TWO_TWENTY_FOUR_CHANGELOG.version)
+    return [TWO_POINT_TWO_TWENTY_FOUR_CHANGELOG];
+  if (version === TWO_POINT_TWO_TWENTY_THREE_CHANGELOG.version)
+    return [TWO_POINT_TWO_TWENTY_THREE_CHANGELOG];
+  if (version === TWO_POINT_TWO_TWENTY_TWO_CHANGELOG.version)
+    return [TWO_POINT_TWO_TWENTY_TWO_CHANGELOG];
+  if (version === TWO_POINT_TWO_TWENTY_ONE_CHANGELOG.version)
+    return [TWO_POINT_TWO_TWENTY_ONE_CHANGELOG];
+  if (version === TWO_POINT_TWO_TWENTY_CHANGELOG.version)
+    return [TWO_POINT_TWO_TWENTY_CHANGELOG];
+  if (version === TWO_POINT_TWO_NINETEEN_CHANGELOG.version)
+    return [TWO_POINT_TWO_NINETEEN_CHANGELOG];
+  if (version === TWO_POINT_TWO_EIGHTEEN_CHANGELOG.version)
+    return [TWO_POINT_TWO_EIGHTEEN_CHANGELOG];
+  if (version === TWO_POINT_TWO_SEVENTEEN_CHANGELOG.version)
+    return [TWO_POINT_TWO_SEVENTEEN_CHANGELOG];
+  if (version === TWO_POINT_TWO_SIXTEEN_CHANGELOG.version)
+    return [TWO_POINT_TWO_SIXTEEN_CHANGELOG];
+  if (version === TWO_POINT_TWO_FOURTEEN_CHANGELOG.version)
+    return [TWO_POINT_TWO_FOURTEEN_CHANGELOG];
+  if (version === TWO_POINT_TWO_THIRTEEN_CHANGELOG.version)
+    return [TWO_POINT_TWO_THIRTEEN_CHANGELOG];
+  if (version === TWO_POINT_TWO_TWELVE_CHANGELOG.version)
+    return [TWO_POINT_TWO_TWELVE_CHANGELOG];
+  if (version === TWO_POINT_TWO_ELEVEN_CHANGELOG.version)
+    return [TWO_POINT_TWO_ELEVEN_CHANGELOG];
+  if (version === TWO_POINT_TWO_TEN_CHANGELOG.version)
+    return [TWO_POINT_TWO_TEN_CHANGELOG];
+  if (version === TWO_POINT_TWO_NINE_CHANGELOG.version)
+    return [TWO_POINT_TWO_NINE_CHANGELOG];
+  if (version === TWO_POINT_TWO_EIGHT_CHANGELOG.version)
+    return [TWO_POINT_TWO_EIGHT_CHANGELOG];
+  if (version === TWO_POINT_TWO_SEVEN_CHANGELOG.version)
+    return [TWO_POINT_TWO_SEVEN_CHANGELOG];
+  if (version === TWO_POINT_TWO_ZERO_CHANGELOG.version)
+    return [TWO_POINT_TWO_ZERO_CHANGELOG];
+  if (version === TWO_POINT_ONE_ZERO_CHANGELOG.version)
+    return [TWO_POINT_ONE_ZERO_CHANGELOG];
+  if (version === TWO_POINT_ZERO_CHANGELOG.version)
+    return [TWO_POINT_ZERO_CHANGELOG];
+  if (/^2\.2\.[1-6]$/.test(version)) return [];
+  if (/^2\.1\.(?:[1-9]|10)$/.test(version)) return [];
+  if (/^2\.0\.(?:[1-9]|1[0-2])$/.test(version)) return [];
+  if (isMergedOnePointRelease(version)) return [];
+  return CHANGELOG.filter((entry) => entry.version === version);
 }
 
 export function allChangelog(): ChangelogEntry[] {
@@ -810,5 +857,5 @@ export function allChangelog(): ChangelogEntry[] {
     TWO_POINT_ONE_ZERO_CHANGELOG,
     TWO_POINT_ZERO_CHANGELOG,
     ...CHANGELOG.filter((entry) => !isMergedOnePointRelease(entry.version)),
-  ]
+  ];
 }