Мне удалось воспроизвести конфликт черновиков на meta.discourse.org при создании двух черновиков новых тем с использованием стандартного горячего клавиша c при просмотре существующей темы.
Шаги для воспроизведения
- Откройте существующую публичную тему.
- Нажмите
c, чтобы создать новую тему. - Введите заголовок и текст.
- Дождитесь сохранения черновика, затем нажмите кнопку Сохранить и закрыть (X) в композере.
- По-прежнему находясь на странице просмотра существующей темы, снова нажмите
c, чтобы создать ещё одну новую тему. - Введите другой заголовок.
- Нажмите Tab, чтобы перейти от поля заголовка к полю текста сообщения, и дождитесь автосохранения.
Для воспроизведения, которое я подтвердил на Meta, оба композера новых тем должны быть открыты во время просмотра существующей темы.
Фактический результат
Появляется предупреждение о том, что черновик редактируется в другом окне, и предлагается перезагрузить страницу.
Это происходит без редактирования черновика в другом окне.
На моём собственном сайте неудачный запрос автосохранения на /drafts.json возвращает HTTP 409.
Ожидаемый результат
Вторая новая тема должна получить собственный черновик, сохраняя первый сохранённый черновик без конфликта.
Где я воспроизвёл проблему
- На meta.discourse.org, выполнив шаги, описанные выше.
- На моём собственном сайте в безопасном режиме, с отключёнными темами и всеми клиентскими кастомизациями плагинов.
- Мой сайт работает на Discourse
2026.10.0-latest, коммитb28f2a44c.
Возможная причина
Анализ кода показывает, что fallback в KeyboardShortcuts#createTopic по-прежнему использует фиксированный Composer.NEW_TOPIC_KEY (new_topic) и не передаёт draftSequence:
Для сравнения, composer.openNewTopic() генерирует уникальный ключ черновика.
В воспроизведении, зафиксированном на моём сайте, первый черновик был сохранён под ключом new_topic и достиг последовательности 1. Второй композер попытался сохранить черновик под тем же ключом без указания последовательности, что привело к HTTP 409 и появлению предупреждения.
Можно ли использовать в этом fallback метод composer.openNewTopic(), чтобы каждая новая тема получала отдельный черновик?
С уважением,
Prof. Caju