8000 RFC Governance Document (#12878) · xhluca/scikit-learn@ae9bae2 · GitHub
[go: up one dir, main page]

Skip to content

Commit ae9bae2

Browse files
amuellerXing
authored andcommitted
RFC Governance Document (scikit-learn#12878)
* add governance doc * add links to docs * minor formatting, more links * Update doc/governance.rst fix broken link Co-Authored-By: amueller <t3kcit@gmail.com> * Apply suggestions from code review Co-Authored-By: amueller <t3kcit@gmail.com> * reframed with call for vote. I think this is good. * make it easier to call a vote. * Update doc/governance.rst rephrasing Co-Authored-By: amueller <t3kcit@gmail.com> * link governance from the about page instead on documentation.rst
1 parent 6223b30 commit ae9bae2

File tree

2 files changed

+136
-0
lines changed

2 files changed

+136
-0
lines changed

doc/about.rst

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,11 @@ in the FAQ.
3333

3434
.. _citing-scikit-learn:
3535

36+
Governance
37+
----------
38+
The decision making process and governance structure of scikit-learn is laid
39+
out in the `governance document <governance>`_.
40+
3641
Citing scikit-learn
3742
-------------------
3843

doc/governance.rst

Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
2+
.. _governance:
3+
4+
===========================================
5+
Scikit-learn governance and decision-making
6+
===========================================
7+
8+
The purpose of this document is to formalize the governance process used by the
9+
scikit-learn project, to clarify how decisions are made and how the various
10+
elements of our community interact.
11+
This document establishes a decision-making structure that takes into account
12+
feedback from all members of the community and strives to find consensus, while
13+
avoiding any deadlocks.
14+
15+
This is a meritocratic, consensus-based community project. Anyone with an
16+
interest in the project can join the community, contribute to the project
17+
design and participate in the decision making process. This document describes
18+
how that participation takes place and how to set about earning merit within
19+
the project community.
20+
21+
Roles And Responsibilities
22+
==========================
23+
24+
Contributors
25+
------------
26+
Contributors are community members who contribute in concrete ways to the
27+
project. Anyone can become a contributor, and contributions can take many forms
28+
– not only code – as detailed in the `contributors guide <contributing>`_.
29+
30+
Core developers
31+
---------------
32+
Core developers are community members who have shown that they are dedicated to
33+
the continued development of the project through ongoing engagement with the
34+
community. They have shown they can be trusted to maintain Scikit-learn with
35+
care. Being a core developer allows contributors to more easily carry on
36+
with their project related activities by giving them direct access to the
37+
project’s repository and is represented as being an organization member on the
38+
scikit-learn `GitHub organization <https://github.com/orgs/scikit-learn/people>`_.
39+
Core developers are expected to review code
40+
contributions, can merge approved pull requests, can cast votes for and against
41+
merging a pull-request, and can be involved in deciding major changes to the
42+
API.
43+
44+
New core developers can be nominated by any existing core developers. Once they
45+
have been nominated, there will be a vote by the current core developers.
46+
Voting on new core developers is one of the few activities that takes place on
47+
the project's private management list. While it is expected that most votes
48+
will be unanimous, a two-thirds majority of the cast votes is enough. The vote
49+
needs to be open for at least 1 week.
50+
51+
Core developers that have not contributed to the project (commits or GitHub
52+
comments) in the past 12 months will be asked if they want to become emeritus
53+
core developers and recant their commit and voting rights until they become
54+
active again. The list of core developers, active and emeritus (with dates at
55+
which they became active) is public on the scikit-learn website.
56+
57+
Technical Committee
58+
-------------------
59+
The Technical Committee (TC) members are core developers who have additional
60+
responsibilities to ensure the smooth running of the project. TC members are expected to
61+
participate in strategic planning, and approve changes to the governance model.
62+
The purpose of the TC is to ensure a smooth progress from the big-picture
63+
perspective. Indeed changes that impact the full project require a synthetic
64+
analysis and a consensus that is both explicit and informed. In cases that the
65+
core developer community (which includes the TC members) fails to reach such a
66+
consensus in the required time frame, the TC is the entity to resolve the
67+
issue.
68+
Membership of the TC is by nomination by a core developer. A nomination will
69+
result in discussion which cannot take more than a month and then a vote by
70+
the core developers which will stay open for a week. TC membership votes are
71+
subject to a two-third majority of all cast votes as well as a simple majority
72+
approval of all the current TC members. TC members who do not actively engage
73+
with the TC duties are expected to resign.
74+
75+
The initial Technical Committee of scikit-learn consists of :user:`Alexandre Gramfort <agramfort>`,
76+
:user:`Olivier Grisel <ogrisel>`, :user:`Andreas Müller <amueller>`, :user:`Joel Nothman <jnothman>`,
77+
:user:`Hanmin Qin <qinhanmin2014>`, :user:`Gaël Varoquaux <GaelVaroquaux>`, and
78+
:user:`Roman Yurchak <rth>`.
79+
80+
Decision Making Process
81+
=======================
82+
Decisions about the future of the project are made through discussion with all
83+
members of the community. All non-sensitive project management discussion takes
84+
place on the project contributors’ `mailing list <mailto:scikit-learn@python.org>`_
85+
and the `issue tracker <https://github.com/scikit-learn/scikit-learn/issues>`_.
86+
Occasionally, sensitive discussion occurs on a private list.
87+
88+
Scikit-learn uses a "consensus seeking" process for making decisions. The group
89+
tries to find a resolution that has no open objections among core developers.
90+
At any point during the discussion, any core-developer can call for a vote, which will
91+
conclude one month from the call for the vote. Any vote must be backed by a
92+
`SLEP <slep>`. If no option can gather two thirds of the votes cast, the
93+
decision is escalated to the TC, which in turn will use consensus seeking with
94+
the fallback option of a simple majority vote if no consensus can be found
95+
within a month. This is what we hereafter may refer to as “the decision making
96+
process”.
97+
98+
Decisions (in addition to adding core developers and TC membership as above)
99+
are made according to the following rules:
100+
101+
* **Minor Documentation changes**, such as typo fixes, or addition / correction of a
102+
sentence, but no change of the scikit-learn.org landing page or the “about”
103+
page: Requires +1 by a core developer, no -1 by a core developer (lazy
104+
consensus), happens on the issue or pull request page. Core developers are
105+
expected to give “reasonable time” to others to give their opinion on the pull
106+
request if they’re not confident others would agree.
107+
108+
* **Code changes and major documentation changes**
109+
require +1 by two core developers, no -1 by a core developer (lazy
110+
consensus), happens on the issue of pull-request page.
111+
112+
* **Changes to the API principles and changes to dependencies or supported
113+
versions** happen via a :ref:`slep` and follows the decision-making process outlined above.
114+
115+
* **Changes to the governance model** use the same decision process outlined above.
116+
117+
118+
If a veto -1 vote is cast on a lazy consensus, the proposer can appeal to the
119+
community and core developers and the change can be approved or rejected using
120+
the decision making procedure outlined above.
121+
122+
.. _slep:
123+
124+
Enhancement proposals (SLEPs)
125+
==============================
126+
For all votes, a proposal must have been made public and discussed before the
127+
vote. Such proposal must be a consolidated document, in the form of a
128+
‘Scikit-Learn Enhancement Proposal’ (SLEP), rather than a long discussion on an
129+
issue. A SLEP must be submitted as a pull-request to
130+
`scikit-learn/enhancement_proposals <https://github.com/scikit-learn/enhancement_proposals/>`_
131+
using the `SLEP template <https://github.com/scikit-learn/enhancement_proposals/blob/master/slep_template.rst>`_.

0 commit comments

Comments
 (0)
0