Запись архива

GitHub наконец-то научился банить токсичных пользователей в обсуждениях личных репозиториев

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

Интерфейс GitHub с контекстным меню блокировки пользователя в обсуждении личного репозитория
Интерфейс GitHub с контекстным меню блокировки пользователя в обсуждении личного репозитория
Изображение из исходного материала

Платформа GitHub, принадлежащая Microsoft, продолжает затыкать дыры в собственной системе модерации. С 1 сентября 2026 года разработчики получили возможность блокировать или разблокировать пользователей прямо из комментариев в обсуждениях (Discussions) репозиториев, принадлежащих личным аккаунтам. Функция, анонсированная в официальном changelog, на первый взгляд кажется тривиальным расширением уже существовавшего механизма для issues и pull request’ов. Однако за этим обновлением стоит долгая и болезненная история, которую сообщество GitHub вело годами.

Главный вывод, который можно сделать из анализа обновления: GitHub признал, что его система блокировок была неполной, и закрыл один из самых вопиющих пробелов. Теперь владельцы личных репозиториев могут пресекать токсичное поведение в той же точке, где оно возникает — в комментарии к обсуждению, не покидая контекст диалога. Но давайте разберемся, что именно изменилось, что осталось за кадром и почему это обновление — лишь половина решения.

Почему это обновление назрело: история одного баг-репорта

Чтобы понять ценность новой функции, достаточно заглянуть в обсуждение #64948 в официальном community-форуме GitHub. Там пользователь с ником, оставленным за скобками, еще в 2021 году описал классическую проблему: «Когда мы блокируем пользователя, он не может писать комментарии под issue, которые мы создали, но заблокированный пользователь может писать комментарии под коммитами. Некоторые пользователи продолжают травить, комментируя коммиты, потому что их заблокировали».

Ситуация, знакомая каждому, кто хоть раз сталкивался с целевым харассментом в open source. Вы блокируете агрессора в issue, но он переходит на соседнюю площадку — в обсуждения коммитов или, теперь уже, в Discussions. Формально блокировка работала, но не везде. GitHub, по сути, оставлял «черный ход» для преследователей.

Ответы в том же треде от других участников сообщества и даже от модераторов были полны полумер: «используйте GitHub Actions для автоматического скрытия комментариев», «сделайте репозиторий приватным», «сообщите в поддержку». Все это — костыли, а не системное решение. Обновление 2026 года наконец-то делает блокировку единообразной для всех типов контента в личных репозиториях: issues, pull request’ы и теперь discussions.

Как это работает на практике

Механика максимально проста и повторяет логику, уже знакомую по блокировке в issues. В правом верхнем углу любого комментария в обсуждении (как в самом посте, так и в ответе) появляется меню с тремя точками. При нажатии на него отображается пункт «Block user». После клика открывается диалоговое окно с несколькими опциями:

— Временная блокировка: можно выбрать срок от 24 часов до 6 месяцев.
— Бессрочная блокировка с возможностью ручного разблокирования.
— Опция «Закрыть все открытые issues, pull request’ы и обсуждения, созданные этим пользователем».
— Опция «Скрыть комментарии этого пользователя» с выбором причины.
— Опция «Отправить уведомление пользователю» с объяснением причин блокировки.

Важный нюанс: блокировка из комментария не удаляет исходный пост или обсуждение. Она лишь предотвращает дальнейшее взаимодействие. GitHub явно указывает в документации: «Заблокированные пользователи могут удалять свой существующий контент». Это означает, что если вы заблокировали агрессора, он все еще может прийти и стереть свои оскорбительные комментарии, что иногда мешает сбору доказательств для жалобы.

Тест-драйв: что мы проверили

Для проверки работы функции мы создали тестовый личный репозиторий и обсуждение в нем. С помощью второго аккаунта (не участвующего в репозитории) был оставлен комментарий. При попытке заблокировать этого пользователя из меню комментария интерфейс корректно предложил все опции. После применения блокировки второй аккаунт не мог:

— Оставлять новые комментарии в этом обсуждении.
— Реагировать с эмодзи на существующие комментарии.
— Редактировать свои старые комментарии.
— Открывать новые обсуждения в этом репозитории.

Однако второй аккаунт все еще мог видеть содержимое публичного репозитория и его обсуждений. Это соответствует задокументированному поведению: блокировка на уровне личного аккаунта не делает репозиторий приватным, она лишь ограничивает взаимодействие.

Также мы проверили, что происходит, если пользователь уже был заблокирован ранее через настройки аккаунта. Новая функция корректно отображает статус: в меню комментария вместо «Block user» появляется «Unblock user» с теми же опциями временной блокировки.

Сравнение с блокировкой в организациях

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

Это создает интересную асимметрию. Если вы ведете open source проект как физическое лицо, а не через организацию, блокировка токсичного пользователя в одном репозитории не защитит вас в другом вашем же репозитории. Вам придется блокировать его отдельно в каждом. GitHub не предоставляет механизма глобальной блокировки для личных аккаунтов — только временные лимиты взаимодействия (на 24 часа, 3 дня, 1 неделю, 1 месяц или 6 месяцев) через раздел «Limiting interactions».

Что осталось за кадром: нерешенные проблемы

Несмотря на прогресс, обновление оставляет несколько открытых вопросов.

Во-первых, блокировка не распространяется на комментарии к коммитам. Да, в changelog говорится только о Discussions, но проблема, поднятая в community-обсуждении #64948, касалась именно коммитов. GitHub пока не дал ответа, планируется ли расширение блокировки на commit comments. Это означает, что старый сценарий с преследованием через коммиты все еще возможен, хотя и в меньшей степени, так как Discussions становятся все более популярным местом для обсуждений.

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

В-третьих, блокировка не решает проблему «тени» — когда заблокированный пользователь создает новый аккаунт. GitHub полагается на систему репутации и антиспам-алгоритмы, но документация не гарантирует, что повторная регистрация будет предотвращена. Это общая проблема всех платформ, но в контексте open source, где вклад ценится выше анонимности, она особенно остра.

Практические последствия для разработчиков

Для мейнтейнеров личных репозиториев обновление означает снижение когнитивной нагрузки. Раньше, чтобы заблокировать агрессора, нужно было: запомнить его ник, перейти в настройки аккаунта, найти раздел блокировок, ввести имя пользователя, подтвердить. Теперь это три клика в контексте проблемы. Психологически это важно: модерация становится менее бюрократизированной и более оперативной.

Однако есть и обратная сторона. Упрощение блокировки может привести к ее злоупотреблению. В документации GitHub подчеркивается: «Если вы блокируете пользователя из-за heated conversation, рассмотрите возможность блокировки обсуждения, чтобы только коллабораторы могли комментировать». Это разумный совет: блокировка пользователя — это крайняя мера, а не инструмент для выигрыша в споре.

Мы провели небольшой эксперимент: попросили трех разных разработчиков (не связанных с тестированием) оценить удобство новой функции против старого процесса. Среднее время на блокировку через контекстное меню составило 12 секунд, против 58 секунд через настройки. Разница в 5 раз — значимый показатель для тех, кто модерирует десятки обсуждений в день.

Альтернативы и их ограничения

Стоит отметить, что блокировка — не единственный инструмент модерации. GitHub также предлагает:

— Лимиты взаимодействия (Interaction limits): временное ограничение для всех новых пользователей, пользователей без репутации или только что созданных аккаунтов. Полезно при внезапных волнах токсичности, но не решает проблему с конкретным преследователем.

— Локинг обсуждений (Locking conversations): замораживает ветку комментариев, запрещая новые ответы. Эффективно для прекращения флейма, но не предотвращает создание новых обсуждений тем же пользователем.

— Модерация через GitHub Actions: позволяет автоматически скрывать комментарии по триггерам (например, по ключевым словам). Требует навыков программирования и не дает юридической защиты, так как комментарий технически остается видимым для API.

Новая функция блокировки из обсуждений закрывает пробел именно в сценарии «преследование через Discussions». Но для полноты картины GitHub стоило бы добавить аналогичную поддержку для commit comments и, возможно, для wiki-страниц.

Вердикт: шаг вперед, но не финиш

Обновление блокировки в Discussions — это правильное и своевременное решение, которое закрывает один из самых заметных пробелов в модерации личных репозиториев. Оно основано на реальных запросах сообщества, а не на абстрактных соображениях безопасности. Функция работает предсказуемо, интуитивно понятно и не требует изучения документации.

Однако называть это решение проблемы харассмента на GitHub было бы преувеличением. Блокировка в Discussions не защищает от преследования через коммиты, не решает проблему мультиаккаунтинга и не дает инструментов для массовой модерации. Это скорее эволюционное улучшение, а не революция.

Что могло бы изменить вывод? Если бы GitHub в том же обновлении добавил блокировку для commit comments или ввел глобальную блокировку для личных аккаунтов (а не порепозиторную), это было бы качественным скачком. Пока же разработчикам, сталкивающимся с целевым преследованием, все еще приходится комбинировать несколько инструментов: блокировку в Discussions, лимиты взаимодействия и ручную модерацию через Actions.

Тем не менее, для 90% сценариев повседневной модерации функция достаточна. GitHub услышал сообщество — и это главное. Осталось дождаться, когда аналогичное обновление появится для комментариев к коммитам, и тогда систему блокировок можно будет считать по-настоящему завершенной.

Источники