Заметки к выпуску Discourse 2.4.0.beta3

Новые функции в версии 2.4.0.beta3

Настройка файла robots.txt

Эта функция позволяет администраторам изменять или переопределять содержимое файла robots.txt по адресу /admin/customize/robots. Эта страница не связана ни с одним элементом интерфейса — администраторы должны вручную ввести URL для доступа к ней:

Отправка максимум 200 писем в минуту для массовых приглашений

Примечание: Параметр invite.via_email устарел и заменен на invite.emailed_status.

Этот коммит добавляет новое поле emailed_status в таблицу invites для отслеживания статуса отправки писем.

 0 - не требуется
 1 - в ожидании
 2 - массовое ожидание
 3 - отправка
 4 - отправлено
  • Для обычных приглашений по электронной почте создается запись приглашения со статусом emailed_status = ‘pending’ (в ожидании).

  • При массовой отправке приглашений создается запись со статусом emailed_status = ‘bulk pending’ (массовое ожидание).

  • Для приглашений, генерирующих ссылку, создается запись со статусом emailed_status = ‘not required’ (не требуется).

  • Когда приглашение находится в очереди на отправку, статус emailed_status обновляется до ‘sending’ (отправка).

  • После отправки письма через задачу InviteEmail статус emailed_status обновляется до ‘sent’ (отправлено).

Внешняя аутентификация при использовании приглашений

Эта функция (при включении) позволит сайтам с режимом invite_only требовать внешнюю аутентификацию перед использованием приглашения.

  • Создана скрытая настройка сайта для переключения этой функции
  • Включена возможность отправки приглашений при отключенном локальном входе
  • К форме приглашения добавлена кнопка OAuth
  • Требуется совпадение адреса электронной почты OAuth с адресом в приглашении
  • Запрещается использование приглашения при сбое аутентификации OAuth

Выбор категории при публикации личного сообщения

Ранее по умолчанию выбиралась категория Без категории, что не всегда было удобно на некоторых форумах. Теперь сотрудник может сразу выбрать категорию, в которую будет перемещено личное сообщение.

Просмотр исходного текста писем для проверяемых сообщений в очереди

Если сообщение поступило по электронной почте, но требует проверки, теперь отображается иконка, при нажатии на которую можно просмотреть исходное содержимое письма.

Это полезно, если парсер писем в Discourse работает некорректно, и пользователь, проверяющий сообщение, хочет узнать исходное содержимое перед утверждением или отклонением сообщения.

Улучшения работы со списком отслеживаемых слов

В этом выпуске добавлены новые функции.

Появились две новые кнопки. Первая позволяет администраторам загружать список отслеживаемых слов по типам действий в файл .txt, вторая очищает все удаленные слова по типам действий (например, блокировка, флаг и т. д.). Кроме того, если сообщение отклонено из-за наличия одного или нескольких заблокированных слов, в сообщении об ошибке теперь перечисляются все заблокированные слова, содержащиеся в сообщении.

Обратите внимание, что эти новые функции также изменили формат файла для импорта отслеживаемых слов с .csv на .txt, поэтому он стал несовместим с расширением файла при экспорте отслеживаемых слов.

Настройка HTML-писем

Эта функция добавляет возможность настройки HTML-части всех писем с использованием пользовательского HTML-шаблона и, при необходимости, CSS-стилей. CSS будет проанализирован и преобразован во встроенные стили, так как почтовые клиенты плохо поддерживают CSS. При написании пользовательского HTML и CSS учитывайте поддержку почтовых клиентов. Делайте настройки максимально простыми.

Настройки можно добавлять и редактировать в разделе Администрирование > Настройка > Стиль письма.

Поскольку сводное письмо уже имеет сложную стилизацию, существует настройка apply custom styles to digest (применять пользовательские стили к сводке) в разделе Администрирование > Настройки > Письма, позволяющая отключить пользовательские стили для сводных писем.

В рамках этой работы для всех писем теперь корректно отображаются локали с правым направлением текста (RTL).

Отображение модераторов категорий на странице «О сайте»

Новое обновление для функции Category Group Review/Moderation. Отныне модераторы категорий будут отображаться на странице «О сайте» вместе со списком сотрудников.

Добавлена поддержка уровня видимости участников группы и уведомлений при принятии участника в группу.

Еще одно дополнение к управлению видимостью группы. Теперь существует 5 уровней видимости (аналогично видимости группы):

  • публичный (по умолчанию)
  • зарегистрированные пользователи
  • только участники
  • сотрудники
  • владельцы

Администраторы и владельцы группы всегда имеют видимость участников группы.

Также отныне пользователям, принятым в группу, будут отправляться уведомления.

Встраивание списка тем на удаленные сайты через JavaScript API.

Эта функция добавляет поддержку тега <d-topics-list>, который можно встроить на ваш сайт для отображения списка тем Discourse. Любые атрибуты тега будут переданы как фильтры. Например:

<d-topics-list discourse-url="URL" category="1234"> отфильтрует темы по категории 1234.

Чтобы использовать эту функцию, включите настройку сайта «Встраивать список тем». Затем на сайте, куда вы хотите встроить список, добавьте следующий JavaScript:

<script src="http://URL/javascripts/embed-topics.js"></script>

где URL — адрес вашего форума Discourse.

Затем добавьте тег <d-topics-list discourse-url="URL"> в ваш HTML-документ, и он будет заменен списком тем.

Подробности см. по адресу Embedding a list of Discourse Topics in another site

Добавлен вебхук для уведомлений пользователей

Если включено, это будет вызывать вебхук каждый раз при создании уведомления пользователя. В зависимости от вашего форума это может генерировать большой объем данных, поэтому использовать эту функцию следует осторожно, так как она включает все, что пользователи увидят в своих лентах.

Обработка theme_uploads как настроек в JavaScript и возможность загрузки themes файлов js в качестве ресурсов

Это еще два улучшения для тем. Первое позволяет темам и компонентам получать доступ к ресурсам темы. Это означает, что внутри JS-файла темы теперь можно получить URL ресурса с помощью:

settings.theme_uploads.name

Второе улучшение помогает реализовать возможность отложенной загрузки больших JS-нагрузок для тем. Изменение безопасно, так как темы и так разрешено включать инлайн-JS.

Настройки сайта для связи с нативными приложениями iOS/Android и внедрение подсказки установки PWA в интерфейс Discourse

В этом выпуске также добавлены новые функции для приложений Android и iOS.

Теперь есть две новые настройки сайта для поддержки универсальных ссылок iOS через конечную точку apple-app-site-association и цифровых ссылок Google через конечную точку .well-known/assetlinks.json.

Кроме того, мы предотвратим появление мини-информационной панели нативной установки, перехватим событие её появления и отложим его до тех пор, пока пользователь не выполнит наши критерии, которые в настоящее время — уровень доверия 1.

Если событие происходит и пользователь соответствует нашим критериям, мы показываем баннер оповещения Discourse с предложением установки. Отклонение баннера фиксируется, чтобы пользователь больше не беспокоился на том же устройстве.

Вход через Discord

Мы добавили функциональность плагина discourse-plugin-discord-auth в ядро. При обновлении ядра плагин автоматически отключится, см.: discourse/discourse-plugin-discord-auth@fd08678?w=1.

Инструкции по настройке см. по адресу Configure Discord Login for Discourse

Улучшение производительности анонимного кэша

Вот две новые функции для повышения производительности:

  • DISCOURSE_COMPRESS_ANON_CACHE (true|false, по умолчанию false): позволяет опционально сжимать записи тела анонимного кэша в Redis, что может быть полезно для сайтов с высокой нагрузкой, где Redis расположен на отдельном сервере от веб-серверов.

  • DISCOURSE_ANON_CACHE_STORE_THRESHOLD (по умолчанию 2): помещать записи в Redis только если мы наблюдаем их более N раз. Это предотвращает ситуации, когда сканер может обойти большое количество тем и сохранить их все в Redis, где они никогда не будут использованы. Наше время анонимного кэша для тем составляет всего 60 секунд. Анонимный кэш внедрен для предотвращения эффекта «Слэшдот», когда одна тема посещается сотнями людей в течение одной минуты.

26 лайков

Еще больше!

Но подождите, есть еще! Мы делаем всё возможное, чтобы выделить для вас новые функции и изменения, но изменений всегда слишком много, чтобы описать их все. Для полного списка новых функций, исправлений ошибок, улучшений UX и многого другого обязательно ознакомьтесь с дополнительными функциями и исправлениями, перечисленными ниже.

Обновления безопасности

Эта бета-версия включает 10 исправлений уязвимостей безопасности, о которых сообщили члены нашего сообщества и HackerOne.

  • Сброс пароля при активации учетной записи через провайдера аутентификации
  • Не отправлять токен CSRF в строке запроса
  • Обновление nokogiri
  • Добавление ограничения частоты запросов для анонимной отчетности об ошибках JS
  • Не раскрывать детали категорий пользователям, у которых нет доступа
  • Ограничение доступа к message-bus на сайтах с требованием входа
  • Требование POST с токеном CSRF для этапа запроса OmniAuth
  • Очистка email-идентификатора для использования в качестве ключа мьютекса
  • Добавление экрана подтверждения при подключении связанных учетных записей
  • Валидация идентификатора фрагмента резервной копии

Улучшения плагинов

Discourse Cakeday

  • Обновление переводов

Discourse Checklist

  • Обновление переводов

Discourse Math

  • Обновление переводов

Discourse Saved Searches

  • Обновление переводов

Discourse Policy

  • Обновление устаревшей иконки

Discourse Invite Token

  • ИСПРАВЛЕНИЕ: invite.via_email устарел, используйте invite.emailed_status

Discourse User Notes

  • Обновление переводов
  • Обновление устаревших имен иконок
  • Удаление package.json
  • Обновление имен настроек и файла readme для отражения переименования в «Заметки о пользователе»
  • Обновление README.md
  • ИСПРАВЛЕНИЕ: Переименование настройки сайта в базе данных.
  • ИСПРАВЛЕНИЕ: Использование правильного пути
  • РАЗРАБОТКА: Переименование файлов, функций и записей БД плюс два небольших исправления

Discourse Translator

  • Использование zh-Hans и zh-Hant в качестве кодов языка для API Microsoft
  • ИСПРАВЛЕНИЕ: Использование опции HTML в Microsoft Translator
  • Исправление спецификаций

Discourse Steam Login

  • Удовлетворение Rubocop

Discourse Amazon Login

  • ИСПРАВЛЕНИЕ: Amazon проверяет адреса электронной почты.
  • Удовлетворение Rubocop

Discourse Canned Replies

  • Обновление переводов
  • Обновление устаревших имен иконок
  • РЕФАКТОРИНГ: незначительный рефакторинг/форматирование
  • РАЗРАБОТКА: удаление устаревания sendAction
  • ИСПРАВЛЕНИЕ: ограничение высоты модального окна редактирования ответа на мобильных устройствах

Discourse Oauth2 Basic

  • Обновление переводов
  • ФУНКЦИЯ: Переход на ManagedAuthenticator
  • ИСПРАВЛЕНИЕ: Игнорирование дубликатов user_ids при миграции старых данных
  • Удовлетворение Rubocop
  • ИСПРАВЛЕНИЕ: Игнорирование нечисловых значений при миграции из старого формата данных

Discourse Chat Integration

  • Обновление переводов
  • Обновление устаревших имен иконок
  • ИСПРАВЛЕНИЕ: Правильный доступ к параметрам транскрипта
  • ИСПРАВЛЕНИЕ: Неопределенная локальная переменная или метод site_setting_saved
  • ИСПРАВЛЕНИЕ: Ошибка возникала, если сообщений было меньше, чем «skip_messages»

Discourse Graphviz

  • Добавление id к вызову API decorateCooked
  • ИСПРАВЛЕНИЕ: Регистрация плагина только если он включен
  • ИСПРАВЛЕНИЕ: Не выполнять работу, если не включен
  • ИСПРАВЛЕНИЕ: Возможность рендеринга нескольких графиков в предпросмотре
  • ИСПРАВЛЕНИЕ: Автоматическое удаление комментариев из определения графа
  • ИСПРАВЛЕНИЕ: Разрешение пустых строк в определении графа
  • ФУНКЦИЯ: Использование svg=true для принудительного предотвращения конвертации изображений в Graphviz
  • ФУНКЦИЯ: Рендеринг SVG в настоящий SVG и замена встроенного

Discourse Tooltips

  • РЕФАКТОРИНГ: Удаление паттерна this.$()
  • ПРОИЗВОДИТЕЛЬНОСТЬ: Включение 3-минутного анонимного кэша для подсказок
  • ФУНКЦИЯ: Добавление поддержки ограничения частоты запросов при очереди

Discourse Signatures

  • РАЗРАБОТКА: Не требуется перезапуск для включения подписей
  • ИСПРАВЛЕНИЕ: Сериализация только пользовательских полей пользователя, специфичных для этого плагина

Discourse Patreon

  • Обновление переводов
  • Обновление устаревшей иконки
  • ИСПРАВЛЕНИЕ: Не выдавать ошибку, если группа патронов или значок уже существуют.
  • Линтинг файла

Discourse Code Review

  • Обновление устаревшей иконки
  • Изменения после обратной связи от Сэма
  • РАЗРАБОТКА: Переименование ключей i18n, так как они не являются ключами множественного числа i18n
  • РАЗРАБОТКА: Перемещение синхронизации пользователей в отдельный модуль
  • РАЗРАБОТКА: Перемещение создания категорий в отдельный модуль
  • ИСПРАВЛЕНИЕ: Состояние гонки
  • ИСПРАВЛЕНИЕ: Извлечение отдельного коммита было сломано в 079055c
  • ФУНКЦИЯ: Синхронизация неотмеченных коммитов
  • ФУНКЦИЯ: Синхронизация удаления постов обратно в Github
  • РЕФАКТОРИНГ: Устаревшие паттерны и устаревания
  • Удовлетворение Rubocop
  • РАЗРАБОТКА: Добавление помощников для очистки входных данных
  • ФУНКЦИЯ: Синхронизация запросов на слияние (Pull Request)
  • РАЗРАБОТКА: Удовлетворение Rubocop
  • ИСПРАВЛЕНИЕ: Приведение строковых констант к верхнему змеиному регистру
  • ИСПРАВЛЕНИЕ: Синхронизация только обычных постов
  • ИСПРАВЛЕНИЕ: Пропуск валидации при обновлении закрытых постов
  • ИСПРАВЛЕНИЕ: Обновление node_id после зеркалирования комментария
  • ФУНКЦИЯ: Страница конфигурации веб-хука Github
  • РАЗРАБОТКА: Добавление тестов для зеркалирования постов PR в github как комментариев
  • ИСПРАВЛЕНИЕ: Состояние гонки при создании постов и тем

Discourse Styleguide

  • РЕФАКТОРИНГ: Удаление паттерна this.$()
  • Обновление устаревших имен иконок FA 4.7 и ссылки
  • Обновление ссылки, дополнительные детали для раздела иконок
  • UX: Небольшие исправления стиля
  • Список всех доступных иконок в SVG-спрайтах

Discourse Characters Required

  • Обновление переводов

Discourse Solved

  • Обновление переводов
  • UX: Интеграция текста с кнопкой для улучшения отступов
  • Откат «UX: Интеграция текста с кнопкой для улучшения отступов»
  • UX: Если я не могу отменить выбор ответа, показывать текст, а не кнопку
  • Удаление неиспользуемой переменной
  • Исправление отступа текста кнопки «Решено»
  • ИСПРАВЛЕНИЕ: Включение ранее решенных тем в автоматическое поднятие
  • ИСПРАВЛЕНИЕ: Исправление набора тестов после изменения созданных по умолчанию категорий
  • Замена устаревшей иконки

Discourse Calendar

  • Различные исправления ошибок и улучшения производительности
  • Исправление Prettier
  • Удовлетворение Rubocop
  • ИСПРАВЛЕНИЕ: Гарантия того, что только активные пользователи могут быть в отпуске
  • РАЗРАБОТКА: Давайте не будем вводить тесты с временной неопределенностью (heisentests)
  • ИСПРАВЛЕНИЕ: Не пытаться валидировать пост из темы без календаря
  • ИСПРАВЛЕНИЕ: Гарантия проверки на оригинальном посте, а не на любом посте
  • Небольшое исправление стиля кода
  • ИСПРАВЛЕНИЕ: Не применять markdown к календарю, если плагин не включен
  • Исправление prettier

Discourse Plugin Discord Auth

(Начиная с этого релиза поддержка Discord включена в ядро Discourse, этот плагин больше не требуется)

  • РАЗРАБОТКА: Одобрение пользователей с использованием API reviewable
  • ИСПРАВЛЕНИЕ: send_email должно быть false
  • ФУНКЦИЯ: Переход Discord на ManagedAuthenticator
  • РАЗРАБОТКА: Удаление неиспользуемых параметров стратегии
  • ИСПРАВЛЕНИЕ: Исправление сигнатуры метода after_authenticate для возможности переподключения
  • РАЗРАБОТКА: Удаление зависимости от omniauth-discord
  • ФУНКЦИЯ: Изменение метода ограничения доступа к trusted_guilds
  • UX: Определение секретного ключа Discord как секретной настройки сайта
  • Автоматическое отключение плагина при обновлении ядра с поддержкой Discord
  • UX: Обновление текста настройки client_id

Discourse Prometheus

  • Удовлетворение Rubocop
  • РАЗРАБОТКА: Линтинг файла, попытка изолировать корень исключения БД
  • РАЗРАБОТКА: Попытка агрессивной очистки соединений
  • ФУНКЦИЯ: Отслеживание количества вызовов SQL на конечную точку HTTP
  • ФУНКЦИЯ: Отслеживание производительности анонимного кэша
  • РАЗРАБОТКА: Логирование БД — это излишне

Discourse Data Explorer

  • Обновление переводов
  • РЕФАКТОРИНГ: Устаревшие паттерны, устаревания и мертвый код
  • Добавление prettier
  • Исправление prettier
  • ИСПРАВЛЕНИЕ: Предотвращение мутации только для чтения объекта

Discourse Akismet

  • Обновление переводов
  • Обновление устаревших имен иконок
  • ИСПРАВЛЕНИЕ: Не отправлять IP/UA пользователя, если они недоступны
  • ИСПРАВЛЕНИЕ: Всегда проверять наличие био перед отправкой в Akismet
  • Проверка comment_content перед удалением
  • ИСПРАВЛЕНИЕ: Пропуск пользователя, если client_ip отсутствует
  • Обновление дублирующегося описания теста
  • Исправление rubocop
  • Откат «Проверка comment_content перед удалением»
  • ФУНКЦИЯ: Ссылка на профиль пользователя, если возможно, при проверке AkismetFlaggedUsers
  • ИСПРАВЛЕНИЕ: Совместимость с функцией «распределяемые ресурсы CSS плагинов».

Discourse Assign

  • Обновление переводов
  • РАЗРАБОТКА: Использование идентификаторов групп для назначения группам
  • РЕФАКТОРИНГ: Устаревшие паттерны Ember, устаревания, мертвый код
  • РАЗРАБОТКА: Использование нового API topic-button
  • ИСПРАВЛЕНИЕ: Использование api taskActions и удаление старых кнопок
  • РАЗРАБОТКА: Разрешенные группы для назначения отправляются вместе с предложениями. После миграции нам все еще потребуется доступ к именам разрешенных групп для поиска пользователей.
  • ИСПРАВЛЕНИЕ: Удаление неиспользуемого импорта
  • Инициализация allowedGroups внутри конструктора
  • Удовлетворение Rubocop
  • UX: Добавление «Назначено» в заголовок страницы для списка назначенных тем
  • ИСПРАВЛЕНИЕ: Использование can_assign вместо staff для правильного отображения модального окна назначения

Discourse Voting

  • Обновление переводов
  • РАЗРАБОТКА: Определение category_custom_field как булево значение
  • ИСПРАВЛЕНИЕ: Возврат голосов, когда голосование отключено в категории
  • Удовлетворение Rubocop
  • ПРОИЗВОДИТЕЛЬНОСТЬ: Избегание N+1 при загрузке категории
  • РАЗРАБОТКА: Использование нового API addNavigationBarItem
  • РАЗРАБОТКА: Перемещение части инициализатора в пре-инициализатор
  • ИСПРАВЛЕНИЕ: Обертка переопределений в reloadable_patch
  • ИСПРАВЛЕНИЕ: Добавление атрибута can_vote ко всем сериализаторам категорий.
  • Линтинг
  • ИСПРАВЛЕНИЕ: Гарантия того, что контейнер не был уничтожен
  • ИСПРАВЛЕНИЕ: Предотвращение любой работы, если не включено
  • ИСПРАВЛЕНИЕ: Сохранение совместимости плагина со старыми версиями Discourse
  • РЕФАКТОРИНГ: Очистка CSS плагина
  • UX: Обертка аватаров во всплывающем окне голосователя

Discourse AD

  • Обновление переводов
  • ИСПРАВЛЕНИЕ: Неправильный размер рекламы DFP при использовании нескольких размеров
  • РАЗРАБОТКА: Миграция no_ads_for_groups для использования идентификаторов вместо имен групп
  • ИСПРАВЛЕНИЕ: Реклама Amazon никогда не отображается
  • РАЗРАБОТКА: Миграция no_ads_for_groups для использования идентификаторов вместо имен групп
  • ИСПРАВЛЕНИЕ: Реклама всегда отображается во всех размещениях для CodeFund и Carbon Ads
  • ИСПРАВЛЕНИЕ: Реклама CodeFund между постами на узких ширинах
  • ФУНКЦИЯ: Добавление опции отключения рекламы в ограниченных категориях

Дополнительные функции и исправления

Нажмите, чтобы развернуть

Новые функции

  • Поддержка выхода data-explorer в навигации группы
  • Отслеживание даты последнего использования ключа API
  • Встраивание темы с подробными метаданными
  • Анонимный кэш передает данные логгерам
  • Создание задачи rake для удаления категорий
  • Новый HTTP-заголовок «Discourse-Render»
  • Уведомление авторов при восстановлении помеченных постов
  • Не заменять ↔ эмодзи
  • Публикация состояния прочтения в групповых сообщениях. (Изначально введено в #7989)
  • Добавление хука после всех инициализаторов
  • Добавление атрибута обратного отсчета к [date]
  • Защита от атак повторного воспроизведения при использовании TLS 1.3 0-RTT
  • Разрешение плагинам манипулировать настройками сайта во время восстановления резервной копии
  • Публикация состояния прочтения в групповых сообщениях.
  • Избранные эмодзи также будут отображаться в автодополнении композера
  • Результаты опроса только для сотрудников
  • Добавление предпросмотра в конструктор опросов
  • Разрешение темам переопределять переменные трансформации цветов
  • Внешняя аутентификация при выкупе приглашений
  • Добавление настройки для отображения содержимого пересланных писем в темах
  • Добавление опции всегда отправлять выдержки в письмах
  • Упоминание в безопасной категории для приоритизации групп
  • Разрешение удерживать мьютекс обработки постов дольше
  • Добавление испытательного объекта в интерфейс администратора отслеживаемых слов
  • Улучшение статистики, предоставляемой rake db:stats
  • Генерация новых ключей VAPID при изменении base_url
  • Синхронизация состояния непрочитанного с списками тем в реальном времени
  • Добавление вложений во исходящие письма
  • Добавление оператора поиска для просмотра всех прямых сообщений от пользователя
  • Разрешение пользователям без штрафов за последние 6 месяцев достигать уровня TL3.
  • Создание задачи rake для удаления категорий]``[1]`
  • Новые компоненты даты/времени
  • Gz в zip для экспорта
  • Экспорты администратора/пользователя сжимаются в формате zip
  • Создание задачи rake для удаления категорий
  • Работа Discourse в автономном режиме с WorkboxJS

Исправления ошибок

  • Улучшения композера Mobile Safari
  • Деление функции «запросы на членство в группе» совместимой с опцией уровня видимости «logged_on_users».
  • Корректировка размера композера для iPhone Xs Max и Xʀ
  • Отчет о закэшированном контроллере и действии логгерам
  • Гарантия того, что google classic имеет правильный эмодзи man_facepalming
  • Включение ‘short_url’ как src, если URL загрузки не существует
  • Закрытие карточки пользователя после нажатия кнопки «Сообщение»
  • Обработка всплывающего окна аутентификации для странностей с куками same-site в Safari
  • Уведомления пользователей о помеченных постах
  • Пользователь должен получать уведомление при удалении поста
  • Сломанный планировщик при изменении per_host <-> глобального
  • Разрешение доступа к вложенным объектам внутри настроек темы
  • В случае сиротских записей пользователей пропуск значка
  • Сердцебиение должно быть для каждого хоста
  • Уведомления не обновляются корректно из фоновой вкладки
  • Запись удаленной темы не сохраняется при проверке обновлений
  • Избегание публикации изменений, если тема была удалена
  • Включение индикатора прочтения, когда включено publish_group_state
  • Переопределенный текст несуществующего ключа множественного числа привел к ошибке
  • Гарантия первой работы живого обновления CSS темы
  • turbo_rspec корректно отображает ошибки в общих группах
  • Состояние гонки при создании таблиц стилей во время развертывания
  • Не искать теги при редактировании заголовка темы
  • Не вызывать сбой, если тема больше не существует
  • При активации через omniauth создание токенов после сброса пароля
  • При активации пользователя гарантия немедленного отражения изменений
  • Разрешение загрузке панели приборов даже при невозможности найти версию git
  • Отображение фактических читателей в первом посте
  • Гарантия того, что размеры аватаров являются целыми числами
  • Использование аргумента app только для официального баннера iOS-приложения
  • Показывать, кто прочитал, только если атрибут включен
  • Корректное обновление групп тем
  • Переопределение текстов _MF не работало для en_US
  • При использовании пользовательского URL аутентификатора отправка запроса через GET
  • Add_to_serializer некорректно учитывал цепочки наследования
  • Не отображать баннер PWA при использовании нативного приложения
  • Удаление дублирующегося символа % из сообщений об ошибках
  • Проверка сердцебиения для каждого процесса sidekiq
  • Разрешение mini-tag-chooser загружать теги в фоне
  • Фильтрация скрытых постов для wordpress
  • Не устанавливать cookie destination_url после удаления собственной учетной записи.
  • Бесконечный цикл при упоминании в IE11
  • Правильная загрузка только CSS-ресурсов плагинов для десктопа и мобильных устройств.
  • Разрешение редактирования тем при использовании скрытого тега
  • Состояние гонки в обработчиках fallback
  • Не пытаться удалить подготовленных, неиспользуемых администраторов и модераторов
  • Регулярный сброс неизвестного расширения загруженных файлов
  • Ограничение баннера установки PWA для Android пока
  • Индикатор прочтения появляется только при включении настройки группы
  • Гарантия того, что дополнительные локали доступны только сотрудникам
  • Гарантия того, что смещение всегда положительное
  • Предотвращение создания ошибки мобильной навигацией при отмене регистрации событий клика
  • Использование более простого паттерна для пользовательского href в дополнительных элементах навигации
  • Rack-mini-profiler не отображает фреймы плагинов
  • Навигация J/K сбрасывает текущий выбор при быстрой прокрутке.
  • Правильная установка уровней уведомлений при приглашении в группу
  • При приглашении групп в сообщения уважение состояния отслеживания
  • Явное требование topic_query_params
  • Очистка кэша тем баннеров после переназначения
  • Гарантия того, что отчеты не могут изменять записи
  • Исправление состояния гонки при загрузке библиотеки
  • Удержание распределенных блокировок, связанных с S3, дольше
  • Хранение пользовательских атрибутов, необходимых плагинам, в полезной нагрузке queuedpost
  • Попытка использования параметров из addDiscoveryQueryParam
  • Преобразование имен аутентификаторов omniauth в символы перед сравнением
  • Не вызывать исключение, если email аутентификатора отсутствует
  • Приведение email, полученного от провайдера аутентификации, к нижнему регистру
  • Замена использования модели на SQL-запрос
  • Корректный порядок для отчета post_edits и удаление ограничения запроса
  • Корректный запрос для отчета дашборда post_edits
  • Удаление временных файлов инвентаризации после проверки загрузки S3.
  • RIP меню свайпа на Android
  • Не обновлять уведомления watching_first_post при перемещении первого поста
  • Доверенные пользователи могут вызывать скрытие контента одним флагом
  • Предотвращение неудачных переназначений во время восстановления
  • Обрезка topic_links.url до 500 символов во время переназначения
  • Не создавать двойное уведомление о лайке.
  • Пустой второй фактор получает имя по умолчанию
  • Полифилл String.prototype.repeat для IE
  • Запрет самоудаления пользователя, если пользователь публиковал в ЛС
  • Использование #dup вместо #+@, так как содержимое может быть экземпляром Nokogiri::XML::Element.
  • Удаление функции readonly при удалении таблицы
  • Создание функций readonly во время резервного копирования
  • Обнаружение пользовательского агента DiscourseHub.
  • Присвоение значка «Первый Onebox» только для URL-адресов Oneboxed.
  • Корректный порядок маршрутов OmniAuth
  • Уведомление об обновлении Reviewable.
  • Для определенных локалей запускался неправильный учебник discobot.
  • Удаление зависимости от present? в библиотеке distributed_mutex
  • Правильное кодирование имен файлов не-ASCII в заголовке HTTP
  • Не следовать перенаправлению на том же хосте с путем /login или /session
  • Разрешение замены эмодзи цифр и символов
  • Встраивание тем не работало с некоторым HTML
  • Не скрывать/закрывать темы, если они не соответствуют минимальной видимости
  • Использование неэкранированного заголовка как id combo-box
  • Загрузки S3 не имели заголовка cache-control
  • Гарантия того, что отчет flag-ratio показывает пользователей с несогласием >` согласен
  • Показывать ссылку на запросы членства только для владельцев групп.
  • Генератор контроллера должен находиться в папке с подчеркиванием
  • Гарантия того, что пикер Pikaday отображается в UTC
  • Разрешение копирования и вставки файла в композере с Chrome
  • Синтаксическая ошибка в b1f5949
  • Деление пути workbox совместимым с мультисайтом
  • Предпросмотр композера в IE11
  • Переименование устаревшей иконки «refresh» в «sync»
  • Улучшенное обнаружение браузеров Apple
  • Различные улучшения отслеживаемых слов
  • Не включать путь загрузки мультисайта в исходный URL, если он уже существует.
  • Деление восстановления загрузок совместимым с мультисайтом.
  • Корректное обновление ответов при перемещении первого поста
  • Модальное окно onClose вызывалось многократно
  • Откат при возникновении исключений в тестах мультисайта
  • Не переиспользовать соединения redis в разных потоках в тестах
  • Загрузки Gravatar зависят от authorized_extensions.
  • DistributedMutex
  • Улучшенное сообщение об ошибке при обновлении имени пользователя со страницы администратора.
  • Возврат опции verbose в DbHelper.remap
  • Добавление frozen_string_literal: true в миграцию
  • Предотвращение нежелательных изменений prevent user-notifications-dropdown
  • Post#each_upload_url возвращает неправильный путь блоку при включенном CDN.
  • Деление инициализатора рабочим при первой db:migrate
  • Правильная идентификация Chromium-based Edge
  • Поддержка многостраничных таблиц стилей в компонентах темы
  • Улучшенная ошибка при сбое SSO из-за пустого секрета
  • Включение метки по умолчанию при экспорте отчетов
  • Предоставление сообщения об ошибке, если не выбраны валидные теги
  • Ошибка замороженной строки в TopicEmbed.import
  • Скрытие загруженных в реальном времени постов от игнорируемых пользователей
  • Откат #18e2816
  • Использование одного id для обоих оригинальных и оптимизированных инвентарей в настройке мультисайта.
  • Применение ограничений по умолчанию к формату маршрутов (часть 2)
  • Сохранение параметров запроса, присутствующих в auth_redirect
  • Гарантия того, что задачи не запускаются сразу после migrate_to_s3
  • Улучшение проверки тегов при обновлении категории темы
  • Удаление контекста без категории, если не разрешено в композере
  • Отправка featuredLink как featured_link на бэкенд для обновления правильного …
  • Отправка featuredLink как featured_link на бэкенд для обновления правильного значения
  • Использование uniq вместо uniq! при проверке несжатого корневого пути. Использование соглашения об именовании Rails для ZipUtils
  • Миграции пытались изменить замороженную строку
  • Обновление количества ответов при перемещении постов
  • Удаление уведомлений, которые пользователи не могут видеть после перемещения постов
  • Старые уведомления не ссылались на правильный пост после перемещения поста
  • Разрешение указания атрибутов в camelCase в компоненте wrap
  • Установка минимального времени чтения на пост.
  • Всегда резервное копирование локальных загрузок в дополнение к файлам, хранящимся на S3
  • Не запрашивать обновление на запрос «Выйти из всех»
  • Отображение одинакового имени пользователя или имени для уведомлений о постах.
  • Пустые имена резервных копий с юникодными заголовками сайтов]``[1]`
  • Кодирование URL-адресов имен пользователей в ссылках на профили пользователей в RSS-лентах
  • Удаление создания записи загрузки поста внутри метода ‘find_missing_uploads’.
  • Ошибки, препятствующие закрытию модального окна удаления учетной записи кнопкой
  • Строка, которую нельзя перевести в интерфейсе отслеживаемых слов
  • Пустые имена резервных копий с юникодными заголовками сайтов
  • Уважение настройки logout_redirect при «Выйти из всех»
  • Когда «raw» начинался с URL загрузки не-изображения, он не конвертировался в short-url.
  • Конвертация горячих ссылок на не-изображения в short url.
  • Удаление всех сервисных рабочих с устройств Apple снова
  • Переименование устаревших иконок, разрешение пользовательских иконок в значках
  • Перекомпиляция ресурсов темы extra_js при изменении COMPILER_VERSION
  • Откат на сжатие gzip, если brotli не поддерживается
  • Пропуск конвертации markdown для горячих ссылок на не-изображения
  • Резервные копии, сделанные pg_dump >= 11, не переносятся
  • Применение ограничений по умолчанию к формату маршрутов
  • Гарантия того, что подавленные категории не производят никаких рекомендуемых тем.

Изменения UX

  • Использование Flexbox для встраивания списка тем
  • Использование vertical-align: middle вместо единиц em
  • Использование переменной кода цвета
  • Конвертация структуры HTML встраиваемого списка тем из таблицы в div
  • Улучшения индикатора прочтения.
  • Удаление неиспользуемых строк об уведомлениях для десктопа
  • Небольшое продолжение #8047
  • Улучшенное выравнивание тегов в заголовке
  • Обход ошибки автодополнения Chrome в поиске
  • Исправление макета для коробок категорий с длинными именами подкатегорий
  • Предотвращение растяжения/сжатия не-лайтбоксированных изображений в цитатах
  • Скрытие опции «Создать тег», если пользователь не может создать тег.
  • Последовательное размещение выхода плагина category-title-before
  • Добавление ссылки на редактор robots.txt в описание настройки сайта
  • Откат на имя провайдера аутентификации без локализации, если требуется
  • Предотвращение iframe onebox twitter выше мобильного viewport
  • Улучшение обработки ошибок для распространенных исключений OmniAuth
  • Модификация шаблона email администратора для большего пространства формы
  • Очистка имени пользователя при открытии модального окна длительности игнорирования
  • Скрытие кнопок заголовка входа/регистрации во время потоков аутентификации
  • Добавление иконки кнопки входа на страницу no_ember
  • Улучшение макета модального окна конструктора опросов
  • Улучшение дат в интерфейсе экспорта отчетов
  • Использование более коротких обозначений дней недели в плагине local-dates
  • Использование более коротких обозначений дней недели в пикере дат
  • Переименование «Сохранить пост» в «Сохранить скрытый пост» при скрытии
  • Исправления стиля для страницы предпросмотра сводного email администратора
  • Удаление запутанной границы в списке игнорируемых пользователей
  • Деление просмотров профиля согласованным с другими элементами
  • Предотвращение переноса дат cooked
  • Показ предупреждения, когда администратор нажимает «Сохранить» без добавления группы при изменении разрешений категории
  • Увеличение контраста текста причины закрепления/отслеживания, улучшение макета
  • Улучшение ассоциации учетной записи, когда описание учетной записи отсутствует
  • Добавление классов expanded/collapsed к post-controls
  • Исправление вертикального выравнивания favicon onebox
  • Улучшение макета длинных заголовков тегов на мобильных устройствах
  • Рефакторинг модального окна загрузки аватара для лучшего отступа на мобильных устройствах
  • Обновление сообщения «не найдено» для приглашений
  • Исправление отступа управления загрузкой изображения профиля на мобильных устройствах
  • Добавление тега <a> с href в заголовки коробок категорий
  • Удаление дублирующейся копии в предпочтениях двухфакторной аутентификации
  • Использование переменных цвета SCSS
  • Отключение системных уведомлений об редактировании по умолчанию
  • Замена разделов игнорирования и отключения звука для перемещения кнопки «Сохранить изменения» вниз
  • Использование высоты относительно viewport для текстового поля robots.txt
  • Перестановка элементов управления в модальных окнах редактирования

Производительность

  • Использование URL CDN для прокси favicon
  • Запуск нескольких потоков для регулярных расписаний задач
  • Сокращение окна согласованности действий пользователя
  • Избегание фильтрации общих черновиков, когда они не используются
  • Выбор только поля, которое мы используем
  • Предварительный расчет последнего прочитанного поста членом группы
  • Ускорение расчета длины тела композера
  • Избегание N+1 при просмотре темы
  • Rake posts:rebake_uncooked_posts выполняется inline
  • Message_bus будет отложен сервером при переполнении
  • Добавление большего ограничения на использование хранилища кэша
  • Ускорение запроса при поиске прямых ЛС
25 лайков