199 lines
10 KiB
ReStructuredText
199 lines
10 KiB
ReStructuredText
.. _governance:
|
||
|
||
===========================================
|
||
Scikit-learn governance and decision-making
|
||
===========================================
|
||
|
||
The purpose of this document is to formalize the governance process used by the
|
||
scikit-learn project, to clarify how decisions are made and how the various
|
||
elements of our community interact.
|
||
This document establishes a decision-making structure that takes into account
|
||
feedback from all members of the community and strives to find consensus, while
|
||
avoiding any deadlocks.
|
||
|
||
This is a meritocratic, consensus-based community project. Anyone with an
|
||
interest in the project can join the community, contribute to the project
|
||
design and participate in the decision making process. This document describes
|
||
how that participation takes place and how to set about earning merit within
|
||
the project community.
|
||
|
||
Roles And Responsibilities
|
||
==========================
|
||
|
||
We distinguish between contributors, core contributors, and the technical
|
||
committee. A key distinction between them is their voting rights: contributors
|
||
have no voting rights, whereas the other two groups all have voting rights,
|
||
as well as permissions to the tools relevant to their roles.
|
||
|
||
Contributors
|
||
------------
|
||
|
||
Contributors are community members who contribute in concrete ways to the
|
||
project. Anyone can become a contributor, and contributions can take many forms
|
||
– not only code – as detailed in the :ref:`contributors guide <contributing>`.
|
||
There is no process to become a contributor: once somebody contributes to the
|
||
project in any way, they are a contributor.
|
||
|
||
Core Contributors
|
||
-----------------
|
||
|
||
All core contributor members have the same voting rights and right to propose
|
||
new members to any of the roles listed below. Their membership is represented
|
||
as being an organization member on the scikit-learn `GitHub organization
|
||
<https://github.com/orgs/scikit-learn/people>`_.
|
||
|
||
They are also welcome to join our `monthly core contributor meetings
|
||
<https://github.com/scikit-learn/administrative/tree/master/meeting_notes>`_.
|
||
|
||
New members can be nominated by any existing member. Once they have been
|
||
nominated, there will be a vote by the current core contributors. Voting on new
|
||
members is one of the few activities that takes place on the project's private
|
||
mailing list. While it is expected that most votes will be unanimous, a
|
||
two-thirds majority of the cast votes is enough. The vote needs to be open for
|
||
at least 1 week.
|
||
|
||
Core contributors that have not contributed to the project, corresponding to
|
||
their role, in the past 12 months will be asked if they want to become emeritus
|
||
members and recant their rights until they become active again. The list of
|
||
members, active and emeritus (with dates at which they became active) is public
|
||
on the scikit-learn website.
|
||
|
||
The following teams form the core contributors group:
|
||
|
||
* **Contributor Experience Team**
|
||
The contributor experience team improves the experience of contributors by
|
||
helping with the triage of issues and pull requests, as well as noticing any
|
||
repeating patterns where people might struggle, and to help with improving
|
||
those aspects of the project.
|
||
|
||
To this end, they have the required permissions on github to label and close
|
||
issues. :ref:`Their work <bug_triaging>` is crucial to improve the
|
||
communication in the project and limit the crowding of the issue tracker.
|
||
|
||
.. _communication_team:
|
||
|
||
* **Communication Team**
|
||
Members of the communication team help with outreach and communication
|
||
for scikit-learn. The goal of the team is to develop public awareness of
|
||
scikit-learn, of its features and usage, as well as branding.
|
||
|
||
For this, they can operate the scikit-learn accounts on various social networks
|
||
and produce materials. They also have the required rights to our blog
|
||
repository and other relevant accounts and platforms.
|
||
|
||
* **Documentation Team**
|
||
Members of the documentation team engage with the documentation of the project
|
||
among other things. They might also be involved in other aspects of the
|
||
project, but their reviews on documentation contributions are considered
|
||
authoritative, and can merge such contributions.
|
||
|
||
To this end, they have permissions to merge pull requests in scikit-learn's
|
||
repository.
|
||
|
||
* **Maintainers Team**
|
||
Maintainers are community members who have shown that they are dedicated to the
|
||
continued development of the project through ongoing engagement with the
|
||
community. They have shown they can be trusted to maintain scikit-learn with
|
||
care. Being a maintainer allows contributors to more easily carry on with their
|
||
project related activities by giving them direct access to the project's
|
||
repository. Maintainers are expected to review code contributions, merge
|
||
approved pull requests, cast votes for and against merging a pull-request,
|
||
and to be involved in deciding major changes to the API.
|
||
|
||
Technical Committee
|
||
-------------------
|
||
|
||
The Technical Committee (TC) members are maintainers who have additional
|
||
responsibilities to ensure the smooth running of the project. TC members are
|
||
expected to participate in strategic planning, and approve changes to the
|
||
governance model. The purpose of the TC is to ensure a smooth progress from the
|
||
big-picture perspective. Indeed changes that impact the full project require a
|
||
synthetic analysis and a consensus that is both explicit and informed. In cases
|
||
that the core contributor community (which includes the TC members) fails to
|
||
reach such a consensus in the required time frame, the TC is the entity to
|
||
resolve the issue. Membership of the TC is by nomination by a core contributor.
|
||
A nomination will result in discussion which cannot take more than a month and
|
||
then a vote by the core contributors which will stay open for a week. TC
|
||
membership votes are subject to a two-third majority of all cast votes as well
|
||
as a simple majority approval of all the current TC members. TC members who do
|
||
not actively engage with the TC duties are expected to resign.
|
||
|
||
The Technical Committee of scikit-learn consists of :user:`Thomas Fan
|
||
<thomasjpfan>`, :user:`Alexandre Gramfort <agramfort>`, :user:`Olivier Grisel
|
||
<ogrisel>`, :user:`Adrin Jalali <adrinjalali>`, :user:`Andreas Müller
|
||
<amueller>`, :user:`Joel Nothman <jnothman>` and :user:`Gaël Varoquaux
|
||
<GaelVaroquaux>`.
|
||
|
||
Decision Making Process
|
||
=======================
|
||
Decisions about the future of the project are made through discussion with all
|
||
members of the community. All non-sensitive project management discussion takes
|
||
place on the project contributors' `mailing list <mailto:scikit-learn@python.org>`_
|
||
and the `issue tracker <https://github.com/scikit-learn/scikit-learn/issues>`_.
|
||
Occasionally, sensitive discussion occurs on a private list.
|
||
|
||
Scikit-learn uses a "consensus seeking" process for making decisions. The group
|
||
tries to find a resolution that has no open objections among core contributors.
|
||
At any point during the discussion, any core contributor can call for a vote,
|
||
which will conclude one month from the call for the vote. Most votes have to be
|
||
backed by a :ref:`SLEP <slep>`. If no option can gather two thirds of the votes
|
||
cast, the decision is escalated to the TC, which in turn will use consensus
|
||
seeking with the fallback option of a simple majority vote if no consensus can
|
||
be found within a month. This is what we hereafter may refer to as "**the
|
||
decision making process**".
|
||
|
||
Decisions (in addition to adding core contributors and TC membership as above)
|
||
are made according to the following rules:
|
||
|
||
* **Minor Documentation changes**, such as typo fixes, or addition / correction
|
||
of a sentence, but no change of the ``scikit-learn.org`` landing page or the
|
||
“about” page: Requires +1 by a maintainer, no -1 by a maintainer (lazy
|
||
consensus), happens on the issue or pull request page. Maintainers are
|
||
expected to give “reasonable time” to others to give their opinion on the
|
||
pull request if they're not confident others would agree.
|
||
|
||
* **Code changes and major documentation changes**
|
||
require +1 by two maintainers, no -1 by a maintainer (lazy
|
||
consensus), happens on the issue of pull-request page.
|
||
|
||
* **Changes to the API principles and changes to dependencies or supported
|
||
versions** happen via a :ref:`slep` and follows the decision-making process
|
||
outlined above.
|
||
|
||
* **Changes to the governance model** follow the process outlined in `SLEP020
|
||
<https://scikit-learn-enhancement-proposals.readthedocs.io/en/latest/slep020/proposal.html>`__.
|
||
|
||
If a veto -1 vote is cast on a lazy consensus, the proposer can appeal to the
|
||
community and maintainers and the change can be approved or rejected using
|
||
the decision making procedure outlined above.
|
||
|
||
Governance Model Changes
|
||
------------------------
|
||
|
||
Governance model changes occur through an enhancement proposal or a GitHub Pull
|
||
Request. An enhancement proposal will go through "**the decision-making process**"
|
||
described in the previous section. Alternatively, an author may propose a change
|
||
directly to the governance model with a GitHub Pull Request. Logistically, an
|
||
author can open a Draft Pull Request for feedback and follow up with a new
|
||
revised Pull Request for voting. Once that author is happy with the state of the
|
||
Pull Request, they can call for a vote on the public mailing list. During the
|
||
one-month voting period, the Pull Request can not change. A Pull Request
|
||
Approval will count as a positive vote, and a "Request Changes" review will
|
||
count as a negative vote. If two-thirds of the cast votes are positive, then
|
||
the governance model change is accepted.
|
||
|
||
.. _slep:
|
||
|
||
Enhancement proposals (SLEPs)
|
||
==============================
|
||
For all votes, a proposal must have been made public and discussed before the
|
||
vote. Such proposal must be a consolidated document, in the form of a
|
||
"Scikit-Learn Enhancement Proposal" (SLEP), rather than a long discussion on an
|
||
issue. A SLEP must be submitted as a pull-request to `enhancement proposals
|
||
<https://scikit-learn-enhancement-proposals.readthedocs.io>`_ using the `SLEP
|
||
template
|
||
<https://scikit-learn-enhancement-proposals.readthedocs.io/en/latest/slep_template.html>`_.
|
||
`SLEP000
|
||
<https://scikit-learn-enhancement-proposals.readthedocs.io/en/latest/slep000/proposal.html>`__
|
||
describes the process in more detail.
|