我可以在 meta.discourse.org 上复现草稿冲突:在查看现有主题时,使用原生 c 快捷键创建两个新主题草稿。
复现步骤
- 打开一个现有的公开主题。
- 按
c创建新主题。 - 输入标题和正文。
- 等待草稿保存,然后点击编辑器的 保存并关闭 按钮(X)。
- 在仍然查看现有主题的情况下,再次按
c创建另一个新主题。 - 输入不同的标题。
- 按 Tab 键从标题字段移动到消息正文,并等待自动保存。
为了复现我在 Meta 上确认的问题,两个新主题的编辑器都必须在查看现有主题时打开。
实际结果
出现一个警告,提示草稿正在另一个窗口中被编辑,并要求重新加载页面。
这发生在未在其他窗口中编辑草稿的情况下。
在我自己的站点上,失败的自动保存请求到 /drafts.json 返回 HTTP 409。
预期结果
第二个新主题应获得自己的草稿,同时保留第一个已保存的草稿而不产生冲突。
复现环境
- 在 meta.discourse.org 上,按照上述步骤操作。
- 在我自己的站点上,处于 安全模式,禁用了主题和所有客户端插件自定义。
- 我的站点运行 Discourse
2026.10.0-latest,提交b28f2a44c。
可能原因
代码检查表明,KeyboardShortcuts#createTopic 中的回退逻辑仍然使用固定的 Composer.NEW_TOPIC_KEY(new_topic),并且没有提供 draftSequence:
相比之下,composer.openNewTopic() 会生成唯一的草稿键。
在我站点上捕获的复现过程中,第一个草稿保存在 new_topic 下并达到序列 1。第二个编辑器尝试在没有序列的情况下使用相同的键进行保存,导致 HTTP 409 和警告。
能否让这个回退逻辑使用 composer.openNewTopic(),以便每个新主题都能获得独立的草稿?
此致,
Prof. Caju