Skip to content

Commit 3259515

Browse files
authored
slep000, slep workflow (#30)
* slep000, slep workflow * rename folder * address Guillaume's comments * address Nicolas's comments * in place -> created * accepted -> merged * slight rephrasing of the abstract * clarify the 'it also used...' sentence * Gael's suggestions * revised merge criteria * further clarify initial approval * SLEP -> SLEP draft * address Olivier's comments * add Guillaume's suggestion * Andy's comments
1 parent 0a729cf commit 3259515

File tree

2 files changed

+298
-0
lines changed

2 files changed

+298
-0
lines changed

slep000/pep-0001-process_flow.png

12.6 KB
Loading

slep000/proposal.rst

+298
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,298 @@
1+
.. _slep_000:
2+
3+
==============================
4+
SLEP000: SLEP and its workflow
5+
==============================
6+
7+
:Author: Adrin Jalali
8+
:Status: Draft
9+
:Type: Process
10+
:Created: 2020-02-13
11+
12+
Abstract
13+
########
14+
15+
This SLEP specifies details related to SLEP submission, review, and acceptance
16+
process.
17+
18+
Motivation
19+
##########
20+
21+
Without a predefined workflow, the discussions around a SLEP can be long and
22+
consume a lot of energy for both the author(s) and the reviewers. The lack of a
23+
known workflow also results in the SLEPs to take months (if not years) before
24+
it is merged as ``Under Review``. The purpose of this SLEP is to lubricate and
25+
ease the process of working on a SLEP, and make it a more enjoyable and
26+
productive experience. This SLEP borrows the process used in PEPs and NEPs
27+
which means there will be no ``Under Review`` status.
28+
29+
30+
What is a SLEP?
31+
###############
32+
33+
SLEP stands for Scikit-Learn Enhancement Proposal, inspired from Python PEPs or
34+
Numpy NEPs. A SLEP is a design document providing information to the
35+
scikit-learn community, or describing a new feature for scikit-learn or its
36+
processes or environment. The SLEP should provide a concise technical
37+
specification of the proposed solution, and a rationale for the feature.
38+
39+
We intend SLEPs to be the primary mechanisms for proposing major new features,
40+
for collecting community input on an issue, and for documenting the design
41+
decisions that have gone into scikit-learn. The SLEP author is responsible for
42+
building consensus within the community and documenting dissenting opinions.
43+
44+
Because the SLEPs are maintained as text files in a versioned repository, their
45+
revision history is the historical record of the feature proposal.
46+
47+
SLEP Audience
48+
#############
49+
50+
The typical primary audience for SLEPs are the core developers of
51+
``scikit-learn`` and technical committee, as well as contributors to the
52+
project. However, these documents also serve the purpose of documenting the
53+
changes and decisions to help users understand the changes and why they are
54+
made. The SLEPs are available under `Scikit-learn enhancement proposals
55+
<https://scikit-learn-enhancement-proposals.readthedocs.io/en/latest/>`_.
56+
57+
SLEP Types
58+
##########
59+
60+
There are three kinds of SLEPs:
61+
62+
1. A Standards Track SLEP describes a new feature or implementation for
63+
scikit-learn.
64+
65+
2. An Informational SLEP describes a scikit-learn design issue, or provides
66+
general guidelines or information to the scikit-learn community, but does not
67+
propose a new feature. Informational SLEPs do not necessarily represent a
68+
scikit-learn community consensus or recommendation, so users and implementers
69+
are free to ignore Informational SLEPs or follow their advice. For instance, an
70+
informational SLEP could be one explaining how people can write a third party
71+
estimator, one to explain the usual process of adding a package to the contrib
72+
org, or what our inclusion criteria are for scikit-learn and
73+
scikit-learn-extra.
74+
75+
3. A Process SLEP describes a process surrounding scikit-learn, or proposes a
76+
change to (or an event in) a process. Process SLEPs are like Standards Track
77+
SLEPs but apply to areas other than the scikit-learn library itself. They may
78+
propose an implementation, but not to scikit-learn’s codebase; they require
79+
community consensus. Examples include procedures, guidelines, changes to the
80+
decision-making process and the governance document, and changes to the tools
81+
or environment used in scikit-learn development. Any meta-SLEP is also
82+
considered a Process SLEP.
83+
84+
85+
SLEP Workflow
86+
#############
87+
88+
A SLEP starts with an idea, which usually is discussed in an issue or a pull
89+
request on the main repo before submitting a SLEP. It is generally a good idea
90+
for the author of the SLEP to gauge the viability and the interest of the
91+
community before working on a SLEP, mostly to save author's time.
92+
93+
A SLEP must have one or more champions: people who write the SLEP following the
94+
SLEP template, shepherd the discussions around it, and seek consensus in the
95+
community.
96+
97+
The proposal should be submitted as a draft SLEP via a GitHub pull request to a
98+
``slepXXX`` directory with the name ``proposal.rst`` where ``XXX`` is an
99+
appropriately assigned three-digit number (e.g., ``slep000/proposal.rst``). The
100+
draft must use the `SLEP — Template and Instructions
101+
<https://github.com/scikit-learn/enhancement_proposals/blob/master/slep_template.rst>`_
102+
file.
103+
104+
Once the PR for the SLEP is created, a post should be made to the mailing list
105+
containing the sections up to “Backward compatibility”, with the purpose of
106+
limiting discussion there to usage and impact. Discussion on the pull request
107+
will have a broader scope, also including details of implementation.
108+
109+
The first draft of the SLEP needs to be approved by at least one core developer
110+
before being merged. Merging the draft does not mean it is accepted or is ready
111+
for the vote. To this end, the SLEP draft is reviewed for structure,
112+
formatting, and other errors. Approval criteria are:
113+
114+
- The draft is sound and complete. The ideas must make technical sense.
115+
- The initial PR reviewer(s) should not consider whether the SLEP seems likely
116+
to be accepted.
117+
- The title of the SLEP draft accurately describes its content.
118+
119+
Reviewers are generally quite lenient about this initial review, expecting that
120+
problems will be corrected by the further reviewing process. **Note**: Approval
121+
of the SLEP draft is no guarantee that there are no embarrassing mistakes!
122+
Ideally they're avoided, but they can also be fixed later in separate PRs. Once
123+
approved by at least one core developer, the SLEP draft can be merged.
124+
Additional PRs may be made by the champions to update or expand the SLEP, or by
125+
maintainers to set its status, discussion URL, etc.
126+
127+
Standards Track SLEPs (see bellow) consist of two parts, a design document and
128+
a reference implementation. It is generally recommended that at least a
129+
prototype implementation be co-developed with the SLEP, as ideas that sound
130+
good in principle sometimes turn out to be impractical when subjected to the
131+
test of implementation. Often it makes sense for the prototype implementation
132+
to be made available as PR to the scikit-learn repo (making sure to
133+
appropriately mark the PR as a WIP).
134+
135+
Review and Resolution
136+
---------------------
137+
138+
SLEPs are discussed on the mailing list or the PRs modifying the SLEP. The
139+
possible paths of the status of SLEPs are as follows:
140+
141+
.. image:: pep-0001-process_flow.png
142+
:alt: SLEP process flow diagram
143+
144+
All SLEPs should be created with the ``Draft`` status.
145+
146+
Eventually, after discussion, there may be a consensus that the SLEP should be
147+
accepted – see the next section for details. At this point the status becomes
148+
``Accepted``.
149+
150+
Once a SLEP has been ``Accepted``, the reference implementation must be
151+
completed. When the reference implementation is complete and incorporated into
152+
the main source code repository, the status will be changed to ``Final``. Since
153+
most SLEPs deal with a part of scikit-learn's API, another way of viewing a
154+
SLEP as ``Final`` is when its corresponding API interface is considered stable.
155+
156+
To allow gathering of additional design and interface feedback before
157+
committing to long term stability for a feature or API, a SLEP may also be
158+
marked as ``Provisional``. This is short for "Provisionally Accepted", and
159+
indicates that the proposal has been accepted for inclusion in the reference
160+
implementation, but additional user feedback is needed before the full design
161+
can be considered ``Final``. Unlike regular accepted SLEPs, provisionally
162+
accepted SLEPs may still be ``Rejected`` or ``Withdrawn`` even after the
163+
related changes have been included in a scikit-learn release.
164+
165+
Wherever possible, it is considered preferable to reduce the scope of a
166+
proposal to avoid the need to rely on the ``Provisional`` status (e.g. by
167+
deferring some features to later SLEPs), as this status can lead to version
168+
compatibility challenges in the wider scikit-learn ecosystem.
169+
170+
A SLEP can also be assigned status ``Deferred``. The SLEP author or a core
171+
developer can assign the SLEP this status when no progress is being made on the
172+
SLEP.
173+
174+
A SLEP can also be ``Rejected``. Perhaps after all is said and done it was not
175+
a good idea. It is still important to have a record of this fact. The
176+
``Withdrawn`` status is similar; it means that the SLEP author themselves has
177+
decided that the SLEP is actually a bad idea, or has accepted that a competing
178+
proposal is a better alternative.
179+
180+
When a SLEP is ``Accepted``, ``Rejected``, or ``Withdrawn``, the SLEP should be
181+
updated accordingly. In addition to updating the status field, at the very
182+
least the ``Resolution`` header should be added with a link to the relevant
183+
thread in the mailing list archives or where the discussion happened.
184+
185+
SLEPs can also be ``Superseded`` by a different SLEP, rendering the original
186+
obsolete. The ``Replaced-By`` and ``Replaces`` headers should be added to the
187+
original and new SLEPs respectively.
188+
189+
``Process`` SLEPs may also have a status of ``Active`` if they are never meant
190+
to be completed, e.g. SLEP 1 (this SLEP).
191+
192+
How a SLEP becomes Accepted
193+
---------------------------
194+
195+
A SLEP is ``Accepted`` by the voting mechanism defined in the `governance model
196+
<https://scikit-learn.org/stable/governance.html?highlight=governance>`_. We
197+
need a concrete way to tell whether consensus has been reached. When you think
198+
a SLEP is ready to accept, create a PR changing the status of the SLEP to
199+
``Accepted``, then send an email to the scikit-learn mailing list with a
200+
subject like:
201+
202+
[VOTE] Proposal to accept SLEP #<number>: <title>
203+
204+
In the body of your email, you should:
205+
206+
- link to the latest version of the SLEP, and a link to the PR accepting the
207+
SLEP.
208+
209+
- briefly describe any major points of contention and how they were resolved,
210+
211+
- include a sentence like: “The vote will be closed in a month i.e. on
212+
<the_date>.”
213+
214+
Generally the SLEP author will be the one to send this email, but anyone can do
215+
it; the important thing is to make sure that everyone knows when a SLEP is on
216+
the verge of acceptance, and give them a final chance to respond.
217+
218+
In general, the goal is to make sure that the community has consensus, not
219+
provide a rigid policy for people to try to game. When in doubt, err on the
220+
side of asking for more feedback and looking for opportunities to compromise.
221+
222+
If the final comment and voting period passes with the required majority, then
223+
the SLEP can officially be marked ``Accepted``. The ``Resolution`` header
224+
should link to the PR accepting the SLEP.
225+
226+
If the vote does not achieve a required majority, then the SLEP remains in
227+
``Draft`` state, discussion continues as normal, and it can be proposed for
228+
acceptance again later once the objections are resolved.
229+
230+
In unusual cases, with the request of the author, the scikit-learn technical
231+
committee may be asked to decide whether a controversial SLEP is ``Accepted``,
232+
put back to ``Draft`` with additional recommendation to try again to reach
233+
consensus or definitely ``Rejected``. Please refer to the governance doc for
234+
more details.
235+
236+
Maintenance
237+
-----------
238+
239+
In general, Standards track SLEPs are no longer modified after they have
240+
reached the ``Final`` state as the code and project documentation are
241+
considered the ultimate reference for the implemented feature. However,
242+
finalized Standards track SLEPs may be updated as needed.
243+
244+
Process SLEPs may be updated over time to reflect changes to development
245+
practices and other details. The precise process followed in these cases will
246+
depend on the nature and purpose of the SLEP being updated.
247+
248+
Format and Template
249+
-------------------
250+
251+
SLEPs are UTF-8 encoded text files using the `reStructuredText
252+
<http://docutils.sourceforge.net/rst.html>`_ format. Please see the `SLEP —
253+
Template and Instructions
254+
<https://github.com/scikit-learn/enhancement_proposals/blob/master/slep_template.rst>`_
255+
file and the `reStructuredTextPrimer
256+
<https://www.sphinx-doc.org/en/stable/rest.html>`_ for more information. We use
257+
`Sphinx <https://www.sphinx-doc.org/en/stable/>`_ to convert SLEPs to HTML for
258+
viewing on the web.
259+
260+
Header Preamble
261+
---------------
262+
263+
Each SLEP must begin with a header preamble. The headers must appear in the
264+
following order. Headers marked with * are optional. All other headers are
265+
required::
266+
267+
:Author: <list of authors' real names and optionally, email addresses>
268+
:Status: <Draft | Active | Accepted | Deferred | Rejected |
269+
Withdrawn | Final | Superseded>
270+
:Type: <Standards Track | Informational | Process>
271+
:Created: <date created on, in yyyy-mm-dd format>
272+
* :Requires: <slep numbers>
273+
* :scikit-learn-Version: <version number>
274+
* :Replaces: <slep number>
275+
* :Replaced-By: <slep number>
276+
* :Resolution: <url>
277+
278+
The Author header lists the names, and optionally the email addresses of all
279+
the authors of the SLEP. The format of the Author header value must be
280+
281+
Random J. User <[email protected]>
282+
283+
if the email address is included, and just
284+
285+
Random J. User
286+
287+
if the address is not given. If there are multiple authors, each should be on a
288+
separate line.
289+
290+
Copyright
291+
---------
292+
293+
This document has been placed in the public domain [1]_.
294+
295+
References and Footnotes
296+
------------------------
297+
298+
.. [1] _Open Publication License: https://www.opencontent.org/openpub/

0 commit comments

Comments
 (0)