Skip to content

Commit bbbe260

Browse files
committed
PEP 1: Update to reflect best practices in PEP annoucement/discussion
1 parent 674eb70 commit bbbe260

File tree

3 files changed

+120
-55
lines changed

3 files changed

+120
-55
lines changed

pep-0001.txt

Lines changed: 105 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -132,9 +132,11 @@ Each PEP must have a champion -- someone who writes the PEP using the style
132132
and format described below, shepherds the discussions in the appropriate
133133
forums, and attempts to build community consensus around the idea. The PEP
134134
champion (a.k.a. Author) should first attempt to ascertain whether the idea is
135-
PEP-able. Posting to the comp.lang.python newsgroup
136-
(a.k.a. [email protected] mailing list) or the [email protected]
137-
mailing list is the best way to go about this.
135+
PEP-able. Posting to the `Python-Ideas`_ mailing list or the
136+
`Ideas category`_ of the `Python Discourse`_ is usually
137+
the best way to go about this, unless a more specialized venue is appropriate,
138+
such as `Typing-SIG`_ for static typing or the `Packaging category`_ of the
139+
Python Discourse for packaging issues.
138140

139141
Vetting an idea publicly before going as far as writing a PEP is meant
140142
to save the potential author time. Many ideas have been brought
@@ -149,15 +151,16 @@ mean it will work for most people in most areas where Python is used.
149151

150152
Once the champion has asked the Python community as to whether an
151153
idea has any chance of acceptance, a draft PEP should be presented to
152-
python-ideas. This gives the author a chance to flesh out the draft
154+
the appropriate venue mentioned above.
155+
This gives the author a chance to flesh out the draft
153156
PEP to make properly formatted, of high quality, and to address
154157
initial concerns about the proposal.
155158

156159

157160
Submitting a PEP
158161
----------------
159162

160-
Following a discussion on python-ideas, the workflow varies based on whether
163+
Following the above initial discussion, the workflow varies based on whether
161164
any of the PEP's co-authors are core developers. If one or more of the PEP's
162165
co-authors are core developers, they are responsible for following the process
163166
outlined below. Otherwise (i.e. none of the co-authors are core developers),
@@ -242,37 +245,86 @@ on GitHub.
242245

243246
As updates are necessary, the PEP author can check in new versions if they
244247
(or a collaborating developer) have write access to the `PEP repository`_.
245-
246-
After a PEP number has been assigned, a draft PEP may be discussed further on
247-
python-ideas (getting a PEP number assigned early can be useful for ease of
248+
Getting a PEP number assigned early can be useful for ease of
248249
reference, especially when multiple draft PEPs are being considered at the
249-
same time). Eventually, all Standards Track PEPs must be sent to the
250-
`python-dev list <mailto:[email protected]>`__ for review as described
251-
in the next section.
250+
same time.
252251

253252
Standards Track PEPs consist of two parts, a design document and a
254253
reference implementation. It is generally recommended that at least a
255254
prototype implementation be co-developed with the PEP, as ideas that sound
256255
good in principle sometimes turn out to be impractical when subjected to the
257256
test of implementation.
258257

258+
259+
Discussing a PEP
260+
----------------
261+
262+
As soon as a PEP number has been assigned
263+
and the draft PEP is committed to the `PEP repository`_,
264+
a discussion thread for the PEP should be created
265+
to provide a central place to discuss and review its contents, and the
266+
PEP should be updated so that the ``Discussions-To`` header links to it.
267+
268+
The PEP authors (or sponsor, if applicable) may select any reasonable venue
269+
for the discussion, so long as the the following criteria are met:
270+
271+
* The forum is appropriate to the PEP's topic.
272+
* The thread is publicly available on the web so that all interested parties
273+
can participate.
274+
* The discussion is subject to the `Python Community Code of Conduct
275+
<https://www.python.org/psf/conduct/>`_.
276+
* A direct link to the current discussion thread is provided in the PEP
277+
under the ``Discussions-To`` header.
278+
279+
Typically, the `Python-Dev`_ mailing list and the
280+
`PEPs category`_ of the `Python Discourse`_ are good choices for most PEPs,
281+
while some specialized topics have specific venues, such as
282+
`Typing-SIG`_ for typing PEPs or the `Packaging category`_ on the Python
283+
Discourse for packaging PEPs. If the PEP authors are unsure of the best venue,
284+
the PEP Sponsor and PEP editors can advise them accordingly.
285+
286+
If the chosen venue is not the `Python-Dev`_ mailing list,
287+
a brief announcement should be posted there when the draft PEP is
288+
committed to the PEP repository and available on the PEP website,
289+
with a link to the rendered PEP and the to canonical Discussions-To thread.
290+
291+
If a PEP undergoes a significant re-write or other major, substantive
292+
changes to its proposed specification, a new thread should typically be created
293+
in the chosen venue to solicit additional feedback. If this occurs, the
294+
``Discussions-To`` link and ``Post-History`` in the PEP must be updated to
295+
reflect this new thread, and (if not the discussion venue) a further
296+
announcement sent to `Python-Dev`_ containing the same information as above
297+
and at least briefly summarizing the major changes.
298+
259299
PEP authors are responsible for collecting community feedback on a PEP
260-
before submitting it for review. However, wherever possible, long
261-
open-ended discussions on public mailing lists should be avoided.
262-
Strategies to keep the discussions efficient include: setting up a
263-
separate SIG mailing list for the topic, having the PEP author accept
264-
private comments in the early design phases, setting up a wiki page, etc.
300+
before submitting it for review. However, to avoid long-winded and
301+
open-ended discussions, strategies such as soliciting private or more
302+
narrowly-tailored feedback in the early design phase,
303+
collaborating with other community members with expertise in the PEP's
304+
subject matter, and picking an appropriately-specialized discussion for the
305+
PEP's topic (if applicable) should be considered.
265306
PEP authors should use their discretion here.
266307

308+
Once the PEP is assigned a number and committed to the PEP repository,
309+
substantive issues should generally be discussed on the canonical public
310+
thread, as opposed to private channels, GitHub pull request reviews or
311+
unrelated venues. This ensures everyone can follow and contribute,
312+
avoids fragmenting the discussion,
313+
and makes sure it is fully considered as part of the PEP review process.
314+
Comments, support, concerns and other feedback on this designated thread
315+
are a critical part of what the Steering Council or PEP-Delegate will
316+
consider when reviewing the PEP.
317+
267318

268319
PEP Review & Resolution
269320
-----------------------
270321

271322
Once the authors have completed a PEP, they may request a review for
272323
style and consistency from the PEP editors.
273-
274-
However, content review of the PEP must be requested of the
275-
core developers, usually via an email to the python-dev mailing list.
324+
However, content review and acceptance of the PEP is ultimately the
325+
responsibility of the Steering Council, which is formally initiated by
326+
opening a `Steering Council issue`_ once the authors (and sponsor, if any)
327+
determine the PEP is ready for final review and resolution.
276328

277329
To expedite the process in selected cases (e.g. when a change is clearly
278330
beneficial and ready to be accepted, but the PEP hasn't been formally submitted
@@ -325,13 +377,6 @@ replacement can be found). In the event that a PEP-Delegate is asked to step
325377
down, this will overrule any prior acceptance or rejection of the PEP, and it
326378
will revert to Draft status.
327379

328-
With the approval of the Steering Council, PEP review and resolution may also
329-
occur on a list other than python-dev (for example, distutils-sig for packaging
330-
related PEPs that don't immediately affect the standard library). In these
331-
cases, the "Discussions-To" heading in the PEP will identify the appropriate
332-
alternative list where discussion, review and pronouncement on the PEP will
333-
occur.
334-
335380
When such standing delegations are put in place, the Steering Council will
336381
maintain sufficient public records to allow subsequent Councils, the core
337382
developers, and the wider Python community to understand the delegations that
@@ -348,6 +393,11 @@ the interpreter unduly. Finally, a proposed enhancement must be
348393
the Steering Council. This logic is intentionally circular.) See :pep:`2`
349394
for standard library module acceptance criteria.
350395

396+
Except where otherwise approved by the Steering Council, pronouncements
397+
of PEP resolution will be posted to the `Python-Dev`_ mailing list,
398+
and may be mirrored on the official "Discussions-To" thread and other venues,
399+
as appropriate.
400+
351401
Once a PEP has been accepted, the reference implementation must be
352402
completed. When the reference implementation is complete and incorporated
353403
into the main source code repository, the status will be changed to "Final".
@@ -379,9 +429,10 @@ themselves has decided that the PEP is actually a bad idea, or has
379429
accepted that a competing proposal is a better alternative.
380430

381431
When a PEP is Accepted, Rejected or Withdrawn, the PEP should be updated
382-
accordingly. In addition to updating the status field, at the very least
432+
accordingly. In addition to updating the Status field, at the very least
383433
the Resolution header should be added with a link to the relevant post
384-
in the python-dev mailing list archives.
434+
in the `Python-Dev`_ mailing list
435+
`archives <https://mail.python.org/archives/list/[email protected]/>`_.
385436

386437
PEPs can also be superseded by a different PEP, rendering the original
387438
obsolete. This is intended for Informational PEPs, where version 2 of
@@ -543,15 +594,15 @@ optional and are described below. All other headers are required.
543594
Author: <list of authors' real names and optionally, email addrs>
544595
* Sponsor: <real name of sponsor>
545596
* PEP-Delegate: <PEP delegate's real name>
546-
* Discussions-To: <email address or URL>
597+
Discussions-To: <URL of current canonical discussion thread>
547598
Status: <Draft | Active | Accepted | Provisional | Deferred | Rejected |
548599
Withdrawn | Final | Superseded>
549600
Type: <Standards Track | Informational | Process>
550601
* Content-Type: <text/x-rst | text/plain>
551602
* Requires: <pep numbers>
552603
Created: <date created on, in dd-mmm-yyyy format>
553604
* Python-Version: <version number>
554-
Post-History: <dates of postings to python-ideas and/or python-dev>
605+
Post-History: <dates of postings to Python-Dev and/or the Discussions-To thread, in dd-mmm-yyyy format>
555606
* Replaces: <pep number>
556607
* Superseded-By: <pep number>
557608
* Resolution: <url>
@@ -588,16 +639,13 @@ limitation in the email address masking for reStructuredText PEPs)
588639

589640
*Note: The Resolution header is required for Standards Track PEPs
590641
only. It contains a URL that should point to an email message or
591-
other web resource where the pronouncement about the PEP is made.*
642+
other web resource where the pronouncement about
643+
(i.e. approval or rejection of) the PEP is made.*
592644

593-
For a PEP where final pronouncement will be made on a list other than
594-
python-dev, a Discussions-To header will indicate the mailing list
595-
or URL where the pronouncement will occur. A temporary Discussions-To header
596-
may also be used when a draft PEP is being discussed prior to submission for
597-
pronouncement. No Discussions-To header is necessary if the PEP is being
598-
discussed privately with the author, or on the python-list, python-ideas
599-
or python-dev mailing lists. Note that email addresses in the
600-
Discussions-To header will not be obscured.
645+
The Discussions-To header provides the URL to the current
646+
canonical discussion thread for the PEP.
647+
For email lists, this should be a direct link to the thread in the list's
648+
archives, rather than just a mailto: or hyperlink to the list itself.
601649

602650
The Type header specifies the type of PEP: Standards Track,
603651
Informational, or Process.
@@ -611,8 +659,8 @@ Content-Type header is present.
611659

612660
The Created header records the date that the PEP was assigned a
613661
number, while Post-History is used to record the dates of when new
614-
versions of the PEP are posted to python-ideas and/or python-dev. Both
615-
headers should be in dd-mmm-yyyy format, e.g. 14-Aug-2001.
662+
versions of the PEP are posted to Python-Dev and/or the Discussions-To thread.
663+
Both headers should be in dd-mmm-yyyy format, e.g. 14-Aug-2001.
616664

617665
Standards Track PEPs will typically have a Python-Version header which
618666
indicates the version of Python that the feature will be released with.
@@ -803,12 +851,26 @@ Footnotes
803851

804852
.. _PEP repository: https://github.com/python/peps
805853

806-
.. _`GitHub pull request`: https://github.com/python/peps/pulls
854+
.. _GitHub pull request: https://github.com/python/peps/pulls
807855

808-
.. _`GitHub issue`: https://github.com/python/peps/issues
856+
.. _GitHub issue: https://github.com/python/peps/issues
809857

810858
.. _Steering Council issue: https://github.com/python/steering-council/issues/new/choose
811859

860+
.. _Python-Ideas: https://mail.python.org/mailman3/lists/python-ideas.python.org/
861+
862+
.. _Python-Dev: https://mail.python.org/mailman3/lists/python-dev.python.org/
863+
864+
.. _Python Discourse: https://discuss.python.org/
865+
866+
.. _Ideas category: https://discuss.python.org/c/ideas/
867+
868+
.. _PEPs category: https://discuss.python.org/c/peps/
869+
870+
.. _Typing-SIG: https://mail.python.org/mailman3/lists/typing-sig.python.org/
871+
872+
.. _Packaging category: https://discuss.python.org/c/packaging/
873+
812874

813875
Copyright
814876
=========

pep-0012.rst

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -81,11 +81,14 @@ directions below.
8181
- If none of the authors are Python core developers, include a Sponsor
8282
header with the name of the core developer sponsoring your PEP.
8383

84-
- For many PEPs, discussions will take place on [email protected]
85-
and/or [email protected]. If there is another mailing list or
86-
public forum more appropriate for discussion of your new feature,
87-
add a Discussions-To header right after the Author header. Most
88-
Informational PEPs don't need a Discussions-To header.
84+
- Add the direct URL (and optionally, the venue name)
85+
of the PEP's canonical discussion thread under the Discussions-To header,
86+
such as on Python-Dev, Discourse or a specialized list or Discourse category.
87+
If the thread will be created after the PEP is submitted as an official
88+
draft, it is okay to just list the venue name initially, but remember to
89+
update the PEP with the URL as soon as the PEP is successfully merged
90+
to the PEPs repository and you create the corresponding discussion thread.
91+
See :pep:`PEP 1 <1#discussing-a-pep>` for more details.
8992

9093
- Change the Status header to "Draft".
9194

@@ -116,10 +119,10 @@ directions below.
116119
Python-Version: 2.2
117120

118121
- Leave Post-History alone for now; you'll add dates to this header
119-
each time you post your PEP to the designated discussion forum (see
120-
the Discussions-To header above). If you posted your PEP to the lists
121-
on August 14, 2001 and September 3, 2001, the Post-History header
122-
would look like::
122+
each time you post your PEP to the designated discussion forum (and announce
123+
it on Python-Dev, if needed; see the ``Discussions-To`` header above).
124+
If you posted threads for your PEP on August 14, 2001 and September 3, 2001,
125+
the Post-History header would look like::
123126

124127
Post-History: 14-Aug-2001, 03-Sept-2001
125128

@@ -157,7 +160,7 @@ your PEP)::
157160
Author: [Full Name <email at example.com>]
158161
Sponsor: *[Full Name <email at example.com>]
159162
PEP-Delegate:
160-
Discussions-To: *[...]
163+
Discussions-To: [`Venue Name <Thread URL>`__]
161164
Status: Draft
162165
Type: [Standards Track | Informational | Process]
163166
Content-Type: text/x-rst

pep-0012/pep-NNNN.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@ Title: <REQUIRED: pep title>
33
Author: <REQUIRED: list of authors' real names and optionally, email addrs>
44
Sponsor: <real name of sponsor>
55
PEP-Delegate: <PEP delegate's real name>
6-
Discussions-To: <email address or URL>
6+
Discussions-To: <REQUIRED: URL of current canonical discussion thread>
77
Status: <REQUIRED: Draft | Active | Accepted | Provisional | Deferred | Rejected | Withdrawn | Final | Superseded>
88
Type: <REQUIRED: Standards Track | Informational | Process>
99
Requires: <pep numbers>
1010
Created: <date created on, in dd-mmm-yyyy format>
1111
Python-Version: <version number>
12-
Post-History: <REQUIRED: dates of postings to python-ideas and/or python-dev, in dd-mmm-yyyy format>
12+
Post-History: <REQUIRED: dates of postings to Python-Dev and/or the Discussions-To thread, in dd-mmm-yyyy format>
1313
Replaces: <pep number>
1414
Superseded-By: <pep number>
1515
Resolution: <url>

0 commit comments

Comments
 (0)