Skip to content

Commit 288f777

Browse files
committed
Add BIAPS from Wiki
1 parent d4fb2db commit 288f777

File tree

12 files changed

+1784
-6
lines changed

12 files changed

+1784
-6
lines changed

doc/source/_static/biap_flowchart.png

12.6 KB
Loading

doc/source/devel/biaps/biap_0000.rst

Lines changed: 283 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,283 @@
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+
networkx-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+
For an example, see: https://mail.python.org/pipermail/networkx-discussion/2018-June/078345.html
173+
174+
After you send the email, you should make sure to link to the email
175+
thread from the ``Discussion`` section of the BIAP, so that people can
176+
find it later.
177+
178+
Generally the BIAP author will be the one to send this email, but
179+
anyone can do it – the important thing is to make sure that everyone
180+
knows when a BIAP is on the verge of acceptance, and give them a final
181+
chance to respond. If there's some special reason to extend this final
182+
comment period beyond 7 days, then that's fine, just say so in the
183+
email. You shouldn't do less than 7 days, because sometimes people are
184+
travelling or similar and need some time to respond.
185+
186+
In general, the goal is to make sure that the community has consensus,
187+
not provide a rigid policy for people to try to game. When in doubt,
188+
err on the side of asking for more feedback and looking for
189+
opportunities to compromise.
190+
191+
If the final comment period passes without any substantive objections,
192+
then the BIAP can officially be marked ``Accepted``. You should send a
193+
followup email notifying the list (celebratory emoji optional but
194+
encouraged 🎉✨), and then update the BIAP by setting its ``:Status:``
195+
to ``Accepted``, and its ``:Resolution:`` header to a link to your
196+
followup email.
197+
198+
If there *are* substantive objections, then the BIAP remains in
199+
``Draft`` state, discussion continues as normal, and it can be
200+
proposed for acceptance again later once the objections are resolved.
201+
202+
In unusual cases, disagreements about the direction or approach may
203+
require escalation to the Nibabel :ref:`steering_council` who
204+
then decide whether a controversial BIAP is ``Accepted``.
205+
206+
207+
Maintenance
208+
^^^^^^^^^^^
209+
210+
In general, Standards track BIAPs are no longer modified after they have
211+
reached the Final state as the code and project documentation are considered
212+
the ultimate reference for the implemented feature.
213+
However, finalized Standards track BIAPs may be updated as needed.
214+
215+
Process BIAPs may be updated over time to reflect changes
216+
to development practices and other details. The precise process followed in
217+
these cases will depend on the nature and purpose of the BIAP being updated.
218+
219+
220+
Format and Template
221+
-------------------
222+
223+
BIAPs are UTF-8 encoded text files using the reStructuredText_ format. Please
224+
see the :doc:`biap_template` file and the reStructuredTextPrimer_ for more
225+
information. We use Sphinx_ to convert BIAPs to HTML for viewing on the web
226+
[2]_.
227+
228+
229+
Header Preamble
230+
^^^^^^^^^^^^^^^
231+
232+
Each BIAP must begin with a header preamble. The headers
233+
must appear in the following order. Headers marked with ``*`` are
234+
optional. All other headers are required. ::
235+
236+
:Author: <list of authors' real names and optionally, email addresses>
237+
:Status: <Draft | Active | Accepted | Deferred | Rejected |
238+
Withdrawn | Final | Superseded>
239+
:Type: <Standards Track | Process>
240+
:Created: <date created on, in dd-mmm-yyyy format>
241+
* :Requires: <BIAP numbers>
242+
* :Nibabel-Version: <version number>
243+
* :Replaces: <BIAP number>
244+
* :Replaced-By: <BIAP number>
245+
* :Resolution: <url>
246+
247+
The Author header lists the names, and optionally the email addresses
248+
of all the authors of the BIAP. The format of the Author header
249+
value must be
250+
251+
Random J. User <[email protected]>
252+
253+
if the email address is included, and just
254+
255+
Random J. User
256+
257+
if the address is not given. If there are multiple authors, each should be on
258+
a separate line.
259+
260+
261+
References and Footnotes
262+
------------------------
263+
264+
.. [1] This historical record is available by the normal git commands
265+
for retrieving older revisions, and can also be browsed on
266+
`GitHub <https://github.com/nipy/nibabel/tree/master/doc/source/devel/biaps>`_.
267+
268+
.. [2] The URL for viewing BIAPs on the web is
269+
https://nipy.org/nibabel/devel/biaps/index.html
270+
271+
.. _repo: https://github.com/nipy/nibabel
272+
273+
.. _mailing list: https://mail.python.org/mailman/listinfo/neuroimaging
274+
275+
.. _issue tracker: https://github.com/nipy/nibabel/issues
276+
277+
.. _`GitHub pull request`: https://github.com/nipy/nibabel/pulls
278+
279+
.. _reStructuredText: http://docutils.sourceforge.net/rst.html
280+
281+
.. _reStructuredTextPrimer: http://www.sphinx-doc.org/en/stable/rest.html
282+
283+
.. _Sphinx: http://www.sphinx-doc.org/en/stable/

0 commit comments

Comments
 (0)