Управление и принятие решений в Scikit-learn#

Цель этого документа — формализовать процесс управления, используемый проектом scikit-learn, чтобы прояснить, как принимаются решения и как взаимодействуют различные элементы нашего сообщества. Этот документ устанавливает структуру принятия решений, которая учитывает обратную связь от всех членов сообщества и стремится достичь консенсуса, избегая тупиковых ситуаций.

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

Roles And Responsibilities#

Мы различаем участников, основных участников и технический комитет. Ключевое различие между ними заключается в их праве голоса: участники не имеют права голоса, в то время как две другие группы имеют право голоса, а также доступ к инструментам, соответствующим их ролям.

Участники#

Участники - это члены сообщества, которые вносят конкретный вклад в проект. Любой может стать участником, и вклад может принимать различные формы - не только код - как подробно описано в руководство для участников. Нет процесса, чтобы стать контрибьютором: как только кто-то вносит вклад в проект любым способом, он становится контрибьютором.

Основные разработчики#

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

Они также могут присоединиться к нашему ежемесячные встречи основных участников.

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

Основные участники, которые не вносили вклад в проект, соответствующий их роли, за последние 12 месяцев, будут спрошены, хотят ли они стать почетными членами и отказаться от своих прав до тех пор, пока не станут активными снова. Список участников, активных и почетных (с датами, когда они стали активными), публикуется на сайте scikit-learn. Ответственность активных основных участников — отправлять такое ежегодное напоминание по электронной почте.

Следующие команды формируют группу основных разработчиков:

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

    Для этого у них есть необходимые разрешения на GitHub для маркировки и закрытия проблем. Их работа важно для улучшения коммуникации в проекте и ограничения переполнения трекера задач.

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

    Для этого они могут управлять аккаунтами scikit-learn в различных социальных сетях и создавать материалы. У них также есть необходимые права на наш репозиторий блога и другие соответствующие аккаунты и платформы.

  • Команда документации Члены команды документации занимаются документацией проекта среди прочего. Они также могут быть вовлечены в другие аспекты проекта, но их рецензии на вклады в документацию считаются авторитетными и могут объединять такие вклады.

    Для этого у них есть разрешения на слияние pull-запросов в репозитории scikit-learn.

  • Команда сопровождающих Мейнтейнеры — это участники сообщества, которые показали свою преданность постоянному развитию проекта через постоянное взаимодействие с сообществом. Они показали, что им можно доверить поддержку scikit-learn с заботой. Быть мейнтейнером позволяет участникам легче продолжать свою деятельность, связанную с проектом, предоставляя им прямой доступ к репозиторию проекта. От мейнтейнеров ожидается проверка вкладов в код, слияние одобренных pull-запросов, голосование за и против слияния pull-запроса и участие в принятии решений о крупных изменениях в API.

Технический комитет#

Члены Технического комитета (TC) - это сопровождающие с дополнительными обязанностями по обеспечению бесперебойной работы проекта. От членов TC ожидается участие в стратегическом планировании и утверждение изменений в модели управления. Цель TC - обеспечить плавный прогресс с точки зрения общей картины. Действительно, изменения, затрагивающие весь проект, требуют синтетического анализа и консенсуса, который является как явным, так и информированным. В случаях, когда сообщество основных участников (включая членов TC) не достигает такого консенсуса в требуемые сроки, TC является органом для разрешения проблемы. Членство в TC осуществляется по номинации основного участника. Номинация приведет к обсуждению, которое не может длиться более месяца, а затем к голосованию основных участников, которое будет открыто в течение недели. Голосования по членству в TC требуют двух третей голосов всех поданных голосов, а также простого большинства одобрения всех текущих членов TC. Члены TC, которые не активно участвуют в обязанностях TC, должны уйти в отставку.

Технический комитет scikit-learn состоит из Томас Фан, Александр Грамфор, Оливье Гризель, Адрин Джалали, Андреас Мюллер, Joel Nothman и Gaël Varoquaux.

Процесс принятия решений#

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

Scikit-learn использует процесс «поиска консенсуса» для принятия решений. Группа пытается найти решение, не вызывающее возражений среди основных участников. В любой момент обсуждения любой основной участник может предложить голосование, которое завершится через месяц после предложения. Большинство голосов должно быть поддержано SLEP. Если ни один вариант не может собрать две трети поданных голосов, решение передается в TC, который, в свою очередь, будет использовать поиск консенсуса с резервным вариантом простого большинства голосов, если консенсус не может быть достигнут в течение месяца. Это то, что мы в дальнейшем можем называть “процесс принятия решений”.

Решения (в дополнение к добавлению основных участников и членства в TC, как указано выше) принимаются в соответствии со следующими правилами:

  • Незначительные изменения кода и документации, такие как небольшие изменения обслуживания без изменения логики кода, исправления опечаток или добавление/исправление предложения, но без изменения scikit-learn.org целевая страница или страница "о проекте": Требуется +1 от основного участника, нет -1 от основного участника (ленивый консенсус), происходит на странице issue или pull request. Основные участники должны дать "разумное время" другим, чтобы высказать своё мнение о pull request, если они не уверены, что другие согласятся.

  • Изменения кода и основные изменения документации требует +1 от двух основных участников, нет -1 от основного участника (ленивый консенсус), происходит на странице проблемы или запроса на включение.

  • Изменения в принципах API и изменения в зависимостях или поддерживаемых версиях следуйте процессу принятия решений, описанному выше. В частности, изменения в принципах API поддерживаются через Предложения по улучшению (SLEPs). Меньшие решения, такие как поддерживаемые версии, могут приниматься в issue или pull request на GitHub.

  • Изменения в модели управления следуйте процессу, описанному в SLEP020.

Если при ленивом консенсусе подано вето -1, инициатор может обратиться к сообществу и сопровождающим, и изменение может быть одобрено или отклонено с использованием процедуры принятия решений, описанной выше.

Изменения модели управления#

Изменения модели управления происходят через предложение улучшения или Pull Request на GitHub. Предложение улучшения пройдёт через "процесс принятия решений” описанного в предыдущем разделе. В качестве альтернативы автор может предложить изменение непосредственно в модели управления с помощью Pull Request на GitHub. С логистической точки зрения автор может открыть Draft Pull Request для получения обратной связи, а затем создать новый пересмотренный Pull Request для голосования. Когда автор будет удовлетворён состоянием Pull Request, он может объявить голосование в публичном списке рассылки. В течение месячного периода голосования Pull Request не может быть изменён. Одобрение Pull Request засчитывается как положительный голос, а отзыв “Request Changes” — как отрицательный. Если две трети поданных голосов положительные, изменение модели управления принимается.

Предложения по улучшению (SLEPs)#

Для всех голосов предложение должно быть опубликовано и обсуждено перед голосованием. Такое предложение должно быть консолидированным документом в форме «Scikit-Learn Enhancement Proposal» (SLEP), а не длинным обсуждением в issue. SLEP должен быть отправлен как pull-request в предложения по улучшению используя шаблон SLEP. SLEP000 подробнее описывает процесс.