从主题页面创建新主题时,“c” 快捷键会导致草稿冲突

我可以在 meta.discourse.org 上复现草稿冲突:在查看现有主题时,使用原生 c 快捷键创建两个新主题草稿。

复现步骤

  1. 打开一个现有的公开主题。
  2. 按 c 创建新主题。
  3. 输入标题和正文。
  4. 等待草稿保存,然后点击编辑器的 保存并关闭 按钮(X)。
  5. 在仍然查看现有主题的情况下,再次按 c 创建另一个新主题。
  6. 输入不同的标题。
  7. 按 Tab 键从标题字段移动到消息正文,并等待自动保存。

为了复现我在 Meta 上确认的问题,两个新主题的编辑器都必须在查看现有主题时打开。

实际结果

出现一个警告,提示草稿正在另一个窗口中被编辑,并要求重新加载页面。

这发生在未在其他窗口中编辑草稿的情况下。

在我自己的站点上,失败的自动保存请求到 /drafts.json 返回 HTTP 409。

预期结果

第二个新主题应获得自己的草稿,同时保留第一个已保存的草稿而不产生冲突。

复现环境

  • 在 meta.discourse.org 上,按照上述步骤操作。
  • 在我自己的站点上,处于 安全模式,禁用了主题和所有客户端插件自定义。
  • 我的站点运行 Discourse 2026.10.0-latest,提交 b28f2a44c。

可能原因

代码检查表明,KeyboardShortcuts#createTopic 中的回退逻辑仍然使用固定的 Composer.NEW_TOPIC_KEY(new_topic),并且没有提供 draftSequence:

https://github.com/discourse/discourse/blob/ec4cea91ea81d926cedab5f0d61c9313f42aba24/frontend/discourse/app/services/keyboard-shortcuts.js#L565-L569

相比之下,composer.openNewTopic() 会生成唯一的草稿键。

在我站点上捕获的复现过程中,第一个草稿保存在 new_topic 下并达到序列 1。第二个编辑器尝试在没有序列的情况下使用相同的键进行保存,导致 HTTP 409 和警告。

能否让这个回退逻辑使用 composer.openNewTopic(),以便每个新主题都能获得独立的草稿?

此致,
Prof. Caju