File: ep-001.rst

package info (click to toggle)
python-docutils 0.22%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 11,448 kB
  • sloc: python: 53,302; lisp: 14,475; xml: 1,807; javascript: 1,032; makefile: 102; sh: 96
file content (458 lines) | stat: -rw-r--r-- 13,530 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
.. include:: header.rst

=========================================
EP 1 — Docutils EP Purpose and Guidelines
=========================================

:Author:  Günter Milde
:Discussions-To: `feature-requests 111`_
:Status:  Draft
:Type:    Process
:Created: 2025-04-22
:Docutils-Version: 0.22

:Abstract:
  `Docutils Enhancement Proposals` are a mechanism for
  proposing major new features, collecting community input,
  and documenting important design decisions.
  This document describes their purpose and structure.
  It borrows heavily from `Python Enhancement Proposals`_. [PEP1]_

  The document is still a draft -- suggestions and contributions are welcome.

.. contents::


Motivation
==========

.. Explain why the existing specification is inadequate

`Issue tickets`_ on the project page and the `Docutils To Do List`_ are
established channels for suggesting changes to Docutils and
reStructuredText.
They work fine for small changes or issues with one obvious solution.
However, we are missing a framework for complex cases with competing
alternative approaches and for documenting the internal processes at the
Docutils project.


Rationale
=========

.. Describe why particular design decisions were made.

*Enhancement Proposals* are used by a wide range of projects
of different size (see References_).
David Goodger suggested using enhancement proposals in a
lightweight formal process for the Docutils project.


Specification
=============

.. Describe the syntax and semantics of any new feature.

.. note::
   The key words "*must*", "*must not*", "*required*", "*shall*",
   "*shall not*", *should*", "*should not*", "*recommended*", "*may*",
   and "*optional*" are to be interpreted as described in :RFC:`2119`.

A `Docutils Enhancement Proposal` (EP) [#dep]_ is a reStructuredText_
document with a preamble_ and a standard set of sections_.

.. [#dep] Deciding on an abbreviation for `Docutils Enhancement Proposals`
   is one of the `open issues`_.


Preamble
--------

The preamble *should* contain the following `Bibliographic Fields`_:


.. class:: field-indent-8em

:Author [#]_: Author name and, optionally, email address (in angle brackets).
:Discussions-To: URL of the current discussion thread and/or issue ticket.
:Status:   One of "Draft", "Active", "Accepted", "Provisional", "Deferred",
           "Rejected", "Withdrawn", "Final", or "Superseded"
           (cf. `PEP Review & Resolution`_).
:Created:  Date [#iso8601]_ that the proposal was assigned a number.
:Abstract: A short description of the technical issue being addressed.

As appropriate, it *may* contain

.. class:: field-indent-8em

:Docutils-Version: Number of the first release including the new feature.
:Post-History: List of past discussion threads and/or issue tickets.
:Type:     One of "Standard" (default), "Informational", "Process".
:Topic:    Special topic (affected component or part), e.g.
           "reStructuredText", "Document Model", "HTML output", …
:Requires: Number(s) of EP(s) this proposal depends on.
:Replaces: Current policy, API document, or EP.
:Superseded-By: Number of EP obsoleting this proposal.
:Resolution: Date [#iso8601]_ with link to the acceptance/rejection post.

.. [#] Use "Authors_" if there is more than one author.
.. [#iso8601] in ISO 8601 format (yyyy-mm-dd)


Sections
--------

Each standard EP *should* have the following sections:

.. class:: description

Motivation:
  Clearly explain why the existing specification is inadequate to address
  the problem that the proposal solves.

  The motivation is critical for proposals that want to change the
  reStructuredText_ language or the Docutils `document model`_, library,
  or ecosystem. Proposals without sufficient motivation may be rejected.

  .. _`sec: rationale`:

Rationale:
  Describe why particular design decisions were made.

  The rationale should describe alternate designs that were considered and
  related work, e.g. how the feature is supported in other languages.

  The rationale should provide evidence of consensus within the community
  and discuss important objections or concerns raised during
  discussion (see also `rejected Ideas <sec: rejected ideas_>`__ below).

Specification:
  Describe the syntax and semantics of any new feature.

  The specification should be detailed enough to allow competing,
  interoperable implementations.

Backwards Compatibility:
  Describe potential impact and severity on pre-existing code.

  The proposal must explain how the author attempts to deal with these
  incompatibilities. Proposal submissions without a sufficient backwards
  compatibility treatise may be rejected outright.

Security Implications:
  How could a malicious user take advantage of this new feature?

  If there are security concerns in relation to the PEP, those concerns
  should be explicitly written out to make sure reviewers of the PEP are
  aware of them.
  If applicable, include a suggestion how to update the
  `security documentation`_.

How to Teach This:
  How to teach users, new and experienced, how to apply the proposal to
  their work.

  This section may include key points and recommended documentation
  changes that would help users adopt a new feature or migrate their code
  to make use of the new feature.

Reference Implementation:
  Link to any existing implementation and details about its state, e.g.
  proof-of-concept.

  The reference implementation must be completed before any PEP is given
  status “Final”, but it need not be completed before the PEP is
  accepted. The final implementation must include test code and
  documentation.

  .. _`sec: rejected ideas`:

Rejected Ideas:
  Why certain ideas that were brought while discussing this proposal
  were not ultimately pursued.

  Those rejected ideas should be recorded along with the reasoning as to
  why they were rejected. This both helps record the thought process
  behind the final version of the PEP as well as preventing people from
  bringing up the same rejected idea again in subsequent discussions.

  A brief discussion of rejected ideas should be included in the
  `Rationale <sec: rationale_>`__.

Open Issues:
  Any points that are still being decided/discussed.

  Those ideas should be recorded so people know that they are being
  thought about but do not have a concrete resolution. This helps make
  sure all issues required for the PEP to be ready for consideration are
  complete and reduces people duplicating prior discussion.

References:
  A collection of footnotes and references.

Copyright:
  The copyright notice.

  See the copyright_ of this document for a suggestion.


Backwards Compatibility
=======================

.. Describe potential impact and severity on pre-existing code.

`Enhancement Proposals` will supplement rather than replace existing
communication channels.

`Issue tickets`_ with a long list of comments will gain from a
consolidation into a related EP.
Some sections of the `Docutils To Do List`_ may be moved to an EP.


Security Implications
=====================

.. How could a malicious user take advantage of this new feature?

A structured discussion of proposed changes including their security
implications will help `deploying Docutils securely`_.


How to Teach This
=================

.. How to teach users, new and experienced, how to apply the proposal to
   their work.

Enhancement proposals will be included in the `Docutils documentation`__.

In the FAQ entry "`How can I get a new feature into Docutils?`_",
we should add a paragraph like

   If discussion of a bug, patch, or feature request ticket_ spans more
   than one page, it may be time to consider turning it into an
   `enhancement proposal`.
   (The existing ticket should be referenced in the "Discussions-To" or
   "Post-History" preamble_ field.)

__ ../index.html#enhancement-proposals


Reference Implementation
========================

.. Link to any existing implementation and details about its state, e.g.
   proof-of-concept.

Since 2025-04-29, enhancement proposals are available as part of the
Docutils Documentation under https://docutils.sourceforge.io/docs/eps/.

The sandbox_ contains a directory for
`enhancement proposals in "pre-draft" stage`_.


Rejected Ideas
==============

.. Why certain ideas that were brought while discussing this proposal
   were not ultimately pursued.


Open Issues
===========

.. Any points that are still being decided/discussed.

* How to abbreviate `Docutils Enhancement Proposal`?

  David Goodger proposed "DocutilsEP" or "DEP" or just "EP".
  Alternatively we may use an unambiguous abbreviation like "DuEP" or
  "DUEP" for `Documentation Utilities Enhancement Proposal`.

  See also the abbreviations used by `other projects`_.

* Put the EP number in

  - the title, preceding the topic,
  - a sub-title,
  - the title with the topic as sub-title,
  - an "EP" preamble_ field,


References
==========

.. A collection of URLs used as references through the proposal.

.. [PEP1] `PEP Purpose and Guidelines`,
       Barry Warsaw, Jeremy Hylton, David Goodger, Alyssa Coghlan,
       13-Jun-2000, https://peps.python.org/pep-0001/

Enhancement Proposals in _`other projects`
------------------------------------------

.. class:: field-indent-3em

:EPs:  used by

:AEP__:  AiiDA__ workflow manager for computational science

  __ https://github.com/aiidateam/AEP
  __ https://www.aiida.net/

:CEP__:  Cassandra__ distributed database

  __ https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=95652201
  __ https://cwiki.apache.org/confluence/display/CASSANDRA/

:DEP__: Debian__ Linux distribution

  __ https://dep-team.pages.debian.net/
  __ https://www.debian.org

:DEP__: Django__ Web framework

  __ https://github.com/django/deps
  __ http://www.djangoproject.com/

:DEP__: Dylan__ programming language

  __ https://opendylan.org/proposals/index.html
  __ https://opendylan.org/

:IEP__: `International Standard Content Code`__ content-based identifier

  __ https://ieps.iscc.codes/
  __ https://iscc.codes/


:JEP__: OpenJDK__ Java Platform

  __ https://openjdk.org/jeps/0
  __ https://openjdk.org/

:JEP__: Jenkins__ automation server

  __ https://github.com/jenkinsci/jep
  __ https://www.jenkins.io/

:JEP__: Project Jupyter__ interactive computing

  __ https://github.com/jupyter/enhancement-proposals
  __ https://jupyter.org/

:Julep__: Julia__ programming language

  __ https://github.com/JuliaLang/Juleps
  __ https://julialang.org/

:KEEP__: Kotline__ programming language

  __ https://github.com/Kotlin/KEEP
  __ https://kotlinlang.org/

:KEP__: Kubernetes__ container orchestration system

  __ https://www.kubernetes.dev/resources/keps/
  __ https://kubernetes.io/

:MEP__: Matplotlib__ data visualisation library

  __ https://matplotlib.org/3.10.0/devel/MEP/index.html
  __ https://matplotlib.org

:MEP__: MyST__ markup language and abstract syntax tree

  __ https://mep.myst-tools.org/en/latest/
  __ https://mystmd.org/

:NEP__: NEAR__  proof-of-stake blockchain

  __ https://github.com/near/NEPs
  __ https://docs.near.org/

:NEP__: NumPy__ package for scientific computing with Python

  __ https://numpy.org/neps/
  __ https://numpy.org/

:PEP_: Python__ programming language

  __ https://www.python.org/

:PLEP__: PlasmaPy__ package for plasma research and education

  __ https://github.com/PlasmaPy/PlasmaPy-PLEPs
  __ https://docs.plasmapy.org

:REP__: ROS__ Robot Operating System

  __ https://www.ros.org/reps/rep-0000.html
  __ https://www.ros.org/

:REP__: Ray__ unified Python framework for machine learning

  __ https://github.com/ray-project/enhancements
  __ https://docs.ray.io/

:SEP__: Salt__ event-driven automation engine (EPs deprecated__!)

  __ https://github.com/saltstack/salt-enhancement-proposals
  __ https://docs.saltproject.io
  __ https://github.com/saltstack/salt-enhancement-proposals
     #deprecation-of-sep-process

:SLEP__: scikit-learn__ Machine Learning in Python

  __ https://github.com/scikit-learn/enhancement_proposals
  __ https://scikit-learn.org

:STEP__: sktime__ time series analysis in Python

  __ https://github.com/sktime/enhancement-proposals
  __ https://www.sktime.net

:ZEP__: Zarr__ specifications and software for storage of large tensors

  __ https://zarr.dev/zeps/active/ZEP0000.html
  __ https://zarr.dev/


.. URI references
   --------------

.. _Python Enhancement Proposals:
.. _PEP:
.. _PEPs: https://peps.python.org/
.. _PEP review & resolution:
    https://peps.python.org/pep-0001/#pep-review-resolution

.. _feature-requests 111:
    https://sourceforge.net/p/docutils/feature-requests/111/
.. _sandbox: https://docutils.sourceforge.io/sandbox/README.html
.. _enhancement proposals in "pre-draft" stage:
    https://docutils.sourceforge.io/sandbox/enhancement-proposals/
.. _ticket:
.. _issue tickets: https://sourceforge.net/p/docutils/_list/tickets

.. _Docutils To Do List: ../dev/todo.html
.. _security documentation:
.. _Deploying Docutils Securely:
    ../howto/security.html
.. _document model:
    ../ref/doctree.html
.. _reStructuredText:
    ../ref/rst/restructuredtext.html
.. _bibliographic fields:
    ../ref/rst/restructuredtext.html#bibliographic-fields
.. _Authors:
    ../ref/rst/restructuredtext.html#authors
.. _How can I get a new feature into Docutils?:
    ../../FAQ.html#how-can-i-get-a-new-feature-into-docutils


Copyright
=========

This document is placed in the public domain or under the
CC0-1.0-Universal license, whichever is more permissive.