Skip to content

Commit 7fc471f

Browse files
authored
Merge pull request #1017 from matthew-brett/numfocus-application
MRG: add BIAP from Wiki
2 parents cd87a5f + b58f15e commit 7fc471f

15 files changed

+2576
-13
lines changed

doc/source/_static/biap_flowchart.png

12.6 KB
Loading

doc/source/devel/biaps/biap_0000.rst

Lines changed: 281 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,281 @@
1+
.. _biap0:
2+
3+
============================
4+
BIAP 0 — Purpose and Process
5+
============================
6+
7+
:Author: Jarrod Millman <[email protected]>
8+
:Status: Draft
9+
:Type: Process
10+
:Created: 2020-06-25
11+
12+
13+
What is a BIAP?
14+
---------------
15+
16+
17+
BIAP stands for Nibabel Enhancement Proposal. BIAPs are the primary
18+
mechanisms for proposing major new features, for collecting community input on
19+
an issue, and for documenting the design decisions that have gone into
20+
Nibabel. A BIAP should provide a concise technical specification of the
21+
feature and a rationale for the feature. The BIAP author is responsible for
22+
building consensus within the community and documenting dissenting opinions.
23+
24+
Because the BIAPs are maintained as text files in a versioned
25+
repository, their revision history is the historical record of the
26+
feature proposal [1]_.
27+
28+
29+
Types
30+
^^^^^
31+
32+
There are three kinds of BIAPs:
33+
34+
1. A **Standards Track** BIAP describes a new feature or implementation
35+
for Nibabel.
36+
37+
2. An **Informational** BIAP describes a Nibabel design issue, or provides
38+
general guidelines or information to the Python community, but does not
39+
propose a new feature. Informational BIAPs do not necessarily represent a
40+
Nibabel community consensus or recommendation, so users and implementers are
41+
free to ignore Informational BIAPs or follow their advice.
42+
43+
3. A **Process** BIAP describes a process surrounding Nibabel, or
44+
proposes a change to (or an event in) a process. Process BIAPs are
45+
like Standards Track BIAPs but apply to areas other than the Nibabel
46+
language itself. They may propose an implementation, but not to
47+
Nibabel's codebase; they require community consensus. Examples include
48+
procedures, guidelines, changes to the decision-making process, and
49+
changes to the tools or environment used in Nibabel development.
50+
Any meta-BIAP is also considered a Process BIAP.
51+
52+
53+
BIAP Workflow
54+
-------------
55+
56+
The BIAP process begins with a new idea for Nibabel. It is highly
57+
recommended that a single BIAP contain a single key proposal or new
58+
idea. Small enhancements or patches often don't need
59+
a BIAP and can be injected into the Nibabel development workflow with a
60+
pull request to the Nibabel `repo`_. The more focused the
61+
BIAP, the more successful it tends to be.
62+
If in doubt, split your BIAP into several well-focused ones.
63+
64+
Each BIAP must have a champion---someone who writes the BIAP using the style
65+
and format described below, shepherds the discussions in the appropriate
66+
forums, and attempts to build community consensus around the idea. The BIAP
67+
champion (a.k.a. Author) should first attempt to ascertain whether the idea is
68+
suitable for a BIAP. Posting to the Nibabel discussion `mailing list`_ is the
69+
best way to go about doing this.
70+
71+
The proposal should be submitted as a draft BIAP via a `GitHub pull request`_
72+
to the ``doc/source/devel/biaps`` directory with the name ``biap_<n>.rst``
73+
where ``<n>`` is an appropriately assigned four-digit number (e.g.,
74+
``biap_0000.rst``). The draft must use the :doc:`biap_template` file.
75+
76+
Once the PR for the BIAP is in place, a post should be made to the
77+
mailing list containing the sections up to "Backward compatibility",
78+
with the purpose of limiting discussion there to usage and impact.
79+
Discussion on the pull request will have a broader scope, also including
80+
details of implementation.
81+
82+
At the earliest convenience, the PR should be merged (regardless of
83+
whether it is accepted during discussion). Additional PRs may be made
84+
by the Author to update or expand the BIAP, or by maintainers to set
85+
its status, discussion URL, etc.
86+
87+
Standards Track BIAPs consist of two parts, a design document and a
88+
reference implementation. It is generally recommended that at least a
89+
prototype implementation be co-developed with the BIAP, as ideas that sound
90+
good in principle sometimes turn out to be impractical when subjected to the
91+
test of implementation. Often it makes sense for the prototype implementation
92+
to be made available as PR to the Nibabel repo (making sure to appropriately
93+
mark the PR as a WIP).
94+
95+
96+
Review and Resolution
97+
^^^^^^^^^^^^^^^^^^^^^
98+
99+
BIAPs are discussed on the mailing list. The possible paths of the
100+
status of BIAPs are as follows:
101+
102+
.. image:: _static/biap_flowchart.png
103+
104+
All BIAPs should be created with the ``Draft`` status.
105+
106+
Eventually, after discussion, there may be a consensus that the BIAP
107+
should be accepted – see the next section for details. At this point
108+
the status becomes ``Accepted``.
109+
110+
Once a BIAP has been ``Accepted``, the reference implementation must be
111+
completed. When the reference implementation is complete and incorporated
112+
into the main source code repository, the status will be changed to ``Final``.
113+
114+
To allow gathering of additional design and interface feedback before
115+
committing to long term stability for a language feature or standard library
116+
API, a BIAP may also be marked as "Provisional". This is short for
117+
"Provisionally Accepted", and indicates that the proposal has been accepted for
118+
inclusion in the reference implementation, but additional user feedback is
119+
needed before the full design can be considered "Final". Unlike regular
120+
accepted BIAPs, provisionally accepted BIAPs may still be Rejected or Withdrawn
121+
even after the related changes have been included in a Python release.
122+
123+
Wherever possible, it is considered preferable to reduce the scope of a
124+
proposal to avoid the need to rely on the "Provisional" status (e.g. by
125+
deferring some features to later BIAPs), as this status can lead to version
126+
compatibility challenges in the wider Nibabel ecosystem.
127+
128+
A BIAP can also be assigned status ``Deferred``. The BIAP author or a
129+
core developer can assign the BIAP this status when no progress is being made
130+
on the BIAP.
131+
132+
A BIAP can also be ``Rejected``. Perhaps after all is said and done it
133+
was not a good idea. It is still important to have a record of this
134+
fact. The ``Withdrawn`` status is similar---it means that the BIAP author
135+
themselves has decided that the BIAP is actually a bad idea, or has
136+
accepted that a competing proposal is a better alternative.
137+
138+
When a BIAP is ``Accepted``, ``Rejected``, or ``Withdrawn``, the BIAP should be
139+
updated accordingly. In addition to updating the status field, at the very
140+
least the ``Resolution`` header should be added with a link to the relevant
141+
thread in the mailing list archives.
142+
143+
BIAPs can also be ``Superseded`` by a different BIAP, rendering the
144+
original obsolete. The ``Replaced-By`` and ``Replaces`` headers
145+
should be added to the original and new BIAPs respectively.
146+
147+
Process BIAPs may also have a status of ``Active`` if they are never
148+
meant to be completed, e.g. BIAP 0 (this BIAP).
149+
150+
151+
How a BIAP becomes Accepted
152+
^^^^^^^^^^^^^^^^^^^^^^^^^^^
153+
154+
A BIAP is ``Accepted`` by consensus of all interested contributors. We
155+
need a concrete way to tell whether consensus has been reached. When
156+
you think a BIAP is ready to accept, send an email to the
157+
Nibabel discussion mailing list with a subject like:
158+
159+
Proposal to accept BIAP #<number>: <title>
160+
161+
In the body of your email, you should:
162+
163+
* link to the latest version of the BIAP,
164+
165+
* briefly describe any major points of contention and how they were
166+
resolved,
167+
168+
* include a sentence like: "If there are no substantive objections
169+
within 7 days from this email, then the BIAP will be accepted; see
170+
BIAP 0 for more details."
171+
172+
After you send the email, you should make sure to link to the email
173+
thread from the ``Discussion`` section of the BIAP, so that people can
174+
find it later.
175+
176+
Generally the BIAP author will be the one to send this email, but
177+
anyone can do it – the important thing is to make sure that everyone
178+
knows when a BIAP is on the verge of acceptance, and give them a final
179+
chance to respond. If there's some special reason to extend this final
180+
comment period beyond 7 days, then that's fine, just say so in the
181+
email. You shouldn't do less than 7 days, because sometimes people are
182+
travelling or similar and need some time to respond.
183+
184+
In general, the goal is to make sure that the community has consensus,
185+
not provide a rigid policy for people to try to game. When in doubt,
186+
err on the side of asking for more feedback and looking for
187+
opportunities to compromise.
188+
189+
If the final comment period passes without any substantive objections,
190+
then the BIAP can officially be marked ``Accepted``. You should send a
191+
followup email notifying the list (celebratory emoji optional but
192+
encouraged 🎉✨), and then update the BIAP by setting its ``:Status:``
193+
to ``Accepted``, and its ``:Resolution:`` header to a link to your
194+
followup email.
195+
196+
If there *are* substantive objections, then the BIAP remains in
197+
``Draft`` state, discussion continues as normal, and it can be
198+
proposed for acceptance again later once the objections are resolved.
199+
200+
In unusual cases, disagreements about the direction or approach may
201+
require escalation to the Nibabel :ref:`steering_council` who
202+
then decide whether a controversial BIAP is ``Accepted``.
203+
204+
205+
Maintenance
206+
^^^^^^^^^^^
207+
208+
In general, Standards track BIAPs are no longer modified after they have
209+
reached the Final state as the code and project documentation are considered
210+
the ultimate reference for the implemented feature.
211+
However, finalized Standards track BIAPs may be updated as needed.
212+
213+
Process BIAPs may be updated over time to reflect changes
214+
to development practices and other details. The precise process followed in
215+
these cases will depend on the nature and purpose of the BIAP being updated.
216+
217+
218+
Format and Template
219+
-------------------
220+
221+
BIAPs are UTF-8 encoded text files using the reStructuredText_ format. Please
222+
see the :doc:`biap_template` file and the reStructuredTextPrimer_ for more
223+
information. We use Sphinx_ to convert BIAPs to HTML for viewing on the web
224+
[2]_.
225+
226+
227+
Header Preamble
228+
^^^^^^^^^^^^^^^
229+
230+
Each BIAP must begin with a header preamble. The headers
231+
must appear in the following order. Headers marked with ``*`` are
232+
optional. All other headers are required. ::
233+
234+
:Author: <list of authors' real names and optionally, email addresses>
235+
:Status: <Draft | Active | Accepted | Deferred | Rejected |
236+
Withdrawn | Final | Superseded>
237+
:Type: <Standards Track | Process>
238+
:Created: <date created on, in dd-mmm-yyyy format>
239+
* :Requires: <BIAP numbers>
240+
* :Nibabel-Version: <version number>
241+
* :Replaces: <BIAP number>
242+
* :Replaced-By: <BIAP number>
243+
* :Resolution: <url>
244+
245+
The Author header lists the names, and optionally the email addresses
246+
of all the authors of the BIAP. The format of the Author header
247+
value must be
248+
249+
Random J. User <[email protected]>
250+
251+
if the email address is included, and just
252+
253+
Random J. User
254+
255+
if the address is not given. If there are multiple authors, each should be on
256+
a separate line.
257+
258+
259+
References and Footnotes
260+
------------------------
261+
262+
.. [1] This historical record is available by the normal git commands
263+
for retrieving older revisions, and can also be browsed on
264+
`GitHub <https://github.com/nipy/nibabel/tree/master/doc/source/devel/biaps>`_.
265+
266+
.. [2] The URL for viewing BIAPs on the web is
267+
https://nipy.org/nibabel/devel/biaps/index.html
268+
269+
.. _repo: https://github.com/nipy/nibabel
270+
271+
.. _mailing list: https://mail.python.org/mailman/listinfo/neuroimaging
272+
273+
.. _issue tracker: https://github.com/nipy/nibabel/issues
274+
275+
.. _`GitHub pull request`: https://github.com/nipy/nibabel/pulls
276+
277+
.. _reStructuredText: http://docutils.sourceforge.net/rst.html
278+
279+
.. _reStructuredTextPrimer: http://www.sphinx-doc.org/en/stable/rest.html
280+
281+
.. _Sphinx: http://www.sphinx-doc.org/en/stable/

0 commit comments

Comments
 (0)