Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add PLEP 1 on purpose and guidelines of PLEPs #11

Merged
merged 30 commits into from
Sep 25, 2018
Merged
Changes from 7 commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
56446a3
Begin PLEP 1 on purpose and guidelines of PLEPs
namurphy Nov 13, 2017
3462c3f
Add first draft of PLEP 1 on the PLEP process
namurphy Nov 14, 2017
c96b97a
Add partial draft of PLEP on PLEPs
namurphy Nov 17, 2017
892192a
Expand draft of PLEP 1 on PLEP process
namurphy Nov 18, 2017
7c770bf
Incorporate suggestions on PLEP 1
namurphy Dec 2, 2017
153df4e
Update date in PLEP 1
namurphy Dec 2, 2017
647e060
Minor changes to PLEP 1
namurphy Feb 4, 2018
ce1e5a1
Make minor edits and fix typos in metaPLEP
namurphy May 18, 2018
4278f02
Add Zenodo archiving paragraph to metaPLEP
namurphy May 18, 2018
4bc0c41
Make title capitalization consistent
namurphy May 18, 2018
4f6e4b3
Merge branch 'master' of github.com:PlasmaPy/PlasmaPy-PLEPs into meta…
namurphy May 18, 2018
d0cdf5e
Convert README.md to README.rst
namurphy May 22, 2018
f6be1bc
Convert CODE_OF_CONDUCT.md to CODE_OF_CONDUCT.rst
namurphy May 22, 2018
8fa1376
Convert CONTRIBUTING.md to CONTRIBUTING.rst
namurphy May 22, 2018
94ee05b
Convert LICENSE.md to LICENSE.rst
namurphy May 22, 2018
8d34e1b
Convert PLEP-0000.md to PLEP-0000.rst
namurphy May 22, 2018
f9cebab
Convert PLEP-0001.md to PLEP-0001.rst
namurphy May 22, 2018
01ca59c
Convert PLEP-0003.md to PLEP-0003.rst
namurphy May 22, 2018
d8efc9c
Convert PLEP-template.md to PLEP-template.rst
namurphy May 22, 2018
6f304ed
Update links to code of conduct/contributing files
namurphy May 22, 2018
7eb76c8
Change PLEP instructions to use reStructuredText
namurphy May 22, 2018
afef6c8
Update reStructuredText formatting of index
namurphy May 22, 2018
21dfc48
Update link
namurphy May 22, 2018
79457f9
Fix links
namurphy May 22, 2018
ce66357
Add GitHub nicknames
StanczakDominik Jun 5, 2018
2482284
Add SunPy CC BY 4.0 license
namurphy Sep 17, 2018
c1fdf98
Update PLEP 1 to reflect community suggestions
namurphy Sep 17, 2018
2b1ef9b
Fix formatting error in PLEP 1
namurphy Sep 17, 2018
60ccd86
Update voting procedure for PLEPs
namurphy Sep 18, 2018
edd6bb6
Update PLEP 1 last revised date
namurphy Sep 18, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
191 changes: 191 additions & 0 deletions PLEP-0001.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,191 @@
# PLEP-0001 -- Purpose and guidelines for PlasmaPy Enhancement Proposals

| PLEP | 1 |
|-------------------|-----------------------------------------------------------|
| title | Purpose and guidelines for PlasmaPy Enhancement Proposals |
| author(s) | Nick Murphy |
| contact email | [email protected] |
| date created | 2017-11-13 |
| date last revised | 2018-02-04 |
| type | process |
| status | in preparation |

## Introduction

**Pl**asmaPy **E**nhancement **P**roposals (PLEPs) are design documents
that provide information to the PlasmaPy community, describe
decision-making processes, or propose major changes or enhancements to
the code. PLEPs are intended to be the primary mechanism for proposing
major changes to the direction of PlasmaPy, collecting community
feedback, and documenting the reasoning behind major decisions.

## Types of PLEPs

There are three primary types of PLEPs:

* A **standard PLEP** introduces and describes a major change to the
PlasmaPy code base. Standard PLEPs may describe a new feature or
subpackage, major changes to an existing package, or a backwards
incompatible change to the application programming interface (API).
A standard PLEP will start out as a proposal and eventually evolve
into a design document if accepted.

* A **process PLEP** describes a new process or change to an existing
process in the management and coordination of PlasmaPy. Examples
include changes to PlasmaPy decision-making processes or management
structure, guidelines, or procedures. A process PLEP will start out
as a proposal and eventually evolve into a document on the
governance of PlasmaPy.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we have any kind of formal template for such a document? Or would the PLEP remain as is and be marked as a PLEP about governance?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is a PLEP template but that's more for standard PLEPs. Do you think we should have separate standard PLEP and process PLEP templates?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not necessarily - I'm just not clear on how a PLEP is different once it becomes a 'document on the governance of PlasmaPy'. I guess what I really mean to ask is is it the same document or once it's accepted are we then going to reconstitute it into a more formal document somewhere else?


* An **informational PLEP** provides information and does not describe
any changes.

## PLEP workflow

A PLEP may come about when a contributor has an idea for how to improve
PlasmaPy or when a Coordinating Committee member or subpackage
maintainer requests a PLEP to be written before a pull request is
accepted. The following subsections describe the procedure for PLEPs to
be created, submitted, decided upon, amended, and implemented. Anyone
who abides by the code of conduct may submit a PLEP.

### Creating a PLEP

Before writing a PLEP, it is generally advisable to bring up your idea
on the PlasmaPy
[Matrix](https://riot.im/app/#/room/#plasmapy:matrix.org)/[Gitter](
https://gitter.im/PlasmaPy/Lobby) channel and with the Coordinating
Committee and/or subpackage maintainers to get initial feedback. PLEPs
are not necessary for minor changes, which are often best [submitted as
issues](https://github.com/PlasmaPy/PlasmaPy/issues/new) on the
[PlasmaPy GitHub repository](https://github.com/PlasmaPy/PlasmaPy).

A PLEP should contain a clear, concise, and well-organized description
of a new idea or proposal. PLEPs should generally focus on a single
topic. PLEPs should be written to be understandable to general
members of the PlasmaPy community rather than just core contributors
and Coordinating Committee members. However, technical details should
be included when needed (e.g., when describing details about how a
proposed change should be implemented).

Standard PLEPs are generally only needed for major improvements to the
code base such as significant restructuring of the code base or
adoption of a new standard. PLEPs are more likely to be needed for
changes that break backwards compatibility, especially for stable
subpackages in development releases and after the release of version
`1.0.0`. PLEPs are not needed for minor changes.

All new PLEPs should begin with a copy of the PLEP template contained
within the PlasmaPy/PlasmaPy-PLEPs repository. This copy should be
renamed to `PLEP-nnnn.md` where `nnnn` should be the lowest PLEP number
preceded by zeros that has not been tentatively or permanently assigned
by the Coordinating Committee. The template contains a suggested
outline that is most appropriate for a standard PLEP. Not all sections
included in the template are required for every PLEP, and sometimes it
is appropriate to create different sections.

### Amending or superceding a PLEP

PLEPs may be amended or superceded as PlasmaPy grows and changes.

If a topic is already covered by an existing PLEP, then it is often
appropriate to propose an amendment to that PLEP instead of writing a
new PLEP. Amendments should not substantially change the spirit of
the PLEP. Proposed amendments should update the "date last revised"
category in the header. Amendments to PLEPs go through the same
process as newly proposed PLEPs.

When major changes to a PLEP are desired, then it is most appropriate
to propose a new PLEP to supercede the old PLEP. The pull request to
supersede a PLEP should change the "status" category in the header of
the old PLEP to "superseded by PLEP N" where N is the number of the new
PLEP not preceded by zeros.

When PLEPs are amended or superseded, it is generally helpful to request
reviews from the authors of the original PLEP.

Minor changes to a PLEP that do not affect its meaning or intent (e.g.,
formatting changes, fixes to typos, updates to links, minor rewording to
improve clarity, and reversing cosmic ray bit flips) do not need to go
through the full review process, but do require approval by the
Coordinating Committee.

### Submitting a PLEP

All new PLEPs and amendments to PLEPs should be submitted as pull
requests into the PlasmaPy-PLEP repository. The pull request should be
created while the PLEP is being written to allow for greater
transparency and community input during the writing process. In this
case, the sponsor should comment on the pull request and inform the
Coordinating Committee when the proposed PLEP is ready for review.

### Review process

When a new PLEP or an amendment to a PLEP is submitted, the Coordinating
Committee should appoint one of its members to be the PLEP's editor. The
editor is responsible for aiding the sponsor by making sure that the
PLEP follows the accepted standard and facilitating communication
between the sponsor and the Coordinating Committee. The editor and
sponsor may be the same person.

When the sponsor and editor decide that the proposal is ready for
broader discussion, then they should email the PlasmaPy list to
introduce the PLEP and request community feedback. The status of the
PLEP should be changed to "Discussion" at this time. Community
discussion should take place through normal communication channels such
as the Matrix/Gitter channel, on the pull request on GitHub, and video
conferences. Concerns that are raised should be constructive and made in
accordance with the PlasmaPy code of conduct. Important points and
relevant meeting minutes should be recorded as comments on the GitHub
pull request so that the community discussion may be archived. During
the discussion phase, the sponsor should revise the PLEP in order to
address concerns raised by the community. Others may propose changes as
well. The discussion should continue until a general consensus among the
PlasmaPy community has been reached.

The Coordinating Committee is tasked with making the final decision on
the PLEP. A PLEP shall be accepted when approved by at least two-thirds
of the Coordinating Committee.

### PLEP status

The status of a standard or process PLEP may be any of the following:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can an informational PLEP have status or is it omitted?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was wondering about this. The status for informational enhancement proposals for other projects is usually "Discussion" but this doesn't seem quite the best way to go about it. Maybe omitting the status of informational PLEPs would be best.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe. But then explicit is better than implicit, right? Perhaps just 'information' would do?


* **In preparation**: The PLEP is currently being written. Community
input is welcome during this phase so that concerns may be addressed
earlier rather than later.

* **Discussion**: The PLEP is currently being considered and getting
community feedback before a decision has been made. This is the
default status for informational PLEPs that have been completed.

* **Accepted**: The PLEP has been accepted and it will be assigned a
number and merged into the PlasmaPy/PlasmaPy-PLEPs repository. A
decision rationale must be drafted and added to the PLEP by the
sponsor of the PLEP or by someone appointed by the Coordinating
Committee. Features proposed in standard PLEPs may now be
implemented. Process PLEPs come into effect when accepted.

* **Implemented**: The feature discussed in a standard PLEP has been
fully implemented and merged into the main repository. At least
half of the Coordinating Committee must agree that the
implementation (including documentation and tests) is complete. A
summary of the implementation process should be added to the PLEP
when this status is reached. This summary should include links to
the issues and pull requests associated with this PLEP that were
created after the PLEP was accepted.

* **Declined**: The community and Coordinating Committee decided against
a proposed PLEP. A decision rationale should be provided by the
sponsor and/or Coordinating Committee. The PLEP should still be
assigned a number and merged into the main repository. A future PLEP
may supercede this decision.

* **Superseded**: THe PLEP is no longer in effect and has been replaced
by another PLEP.

Informational PLEPs that are being written should have a status of
**in preparation**, and **informational** when it is sufficiently
complete. Informational PLEPs may also have a statuses of **outdated**
when the some of the information is out-of-date and needs updating, or
**obsolete** when the PLEP is no longer needed.