Skip to content

Commit 5ad83e6

Browse files
committed
feat: rewrite README to describe new rfc process
1 parent b1a427b commit 5ad83e6

File tree

1 file changed

+51
-123
lines changed

1 file changed

+51
-123
lines changed

README.md

Lines changed: 51 additions & 123 deletions
Original file line numberDiff line numberDiff line change
@@ -1,180 +1,108 @@
11
# RFC Process
22

3-
This document describes the RFC process for the [npm
4-
CLI](https://github.com/npm/cli), and provides a way for the [npm CLI
5-
team](https://github.com/orgs/npm/teams/cli-team) and the wider community
6-
to have discussions about the features and direction of the package
7-
manager.
3+
This document describes the RFC process for the [npm CLI](https://github.com/npm/cli), and provides a way for the [npm CLI team](https://github.com/orgs/npm/teams/cli-team) and the wider community to have discussions about the features and direction of the package manager.
84

95
## What is an RFC?
106

11-
The name is a reference to the **IETF's Request For Comments** process, and
12-
involves a document or series of documents which are drafted, reviewed, and
13-
eventually ratified (approved) by the npm team through discussion
14-
among those interested, both within and outside of the npm team.
7+
The name is a reference to the **IETF's Request For Comments** process. In the case of the npm CLI these are implemented in the form of a GitHub issue in this repository. The issue will be drafted, reviewed, discussed and eventually ratified by the npm team with the help of our community members during our RFC review calls.
158

16-
An RFC can propose any change to the npm CLI itself, and may include npm
17-
registry changes meant to support that CLI change.
9+
An RFC can propose any change to the npm CLI itself, and may include npm registry changes meant to support that CLI change. It is also important to be aware that an RFC being ratified does not guarantee that it will be implemented. The npm CLI team welcomes outside contributors, and these approved RFCs are a good way to find tasks to work on.
1810

1911
## Rough Consensus
2012

21-
The development of new features within the npm CLI follows a [Rough
22-
Consensus](https://tools.ietf.org/html/rfc7282) model, similar to the IETF.
13+
The development of new features within the npm CLI follows a [Rough Consensus](https://tools.ietf.org/html/rfc7282) model, similar to the IETF.
2314

24-
The following points are intended to help you understand and participate in
25-
this process productively.
15+
This consensus is gathered from the npm CLI team, as well as all community attendees of RFC review calls as well as community members who choose to comment on an RFC issue. If a community member has an objection, it is appreciated if they are also able to attend an RFC review call in order to have a real time conversation about their concerns.
16+
17+
The following points are intended to help you understand and participate in this process productively.
2618

2719
### Scope of This Process
2820

29-
This RFC process is limited to issues concerning the [npm
30-
cli](https://github.com/npm/cli) and the web services that support it.
21+
This RFC process is limited to issues concerning the [npm CLI](https://github.com/npm/cli).
3122

32-
Of course we operate within a broad community ecosystem, and will often
33-
choose to implement features in a way that is compatible with other package
34-
management tools in the JavaScript community. However, if a given proposal
35-
cannot or will not be implemented by other package managers, that is not in
36-
itself reason enough to abandon a proposal. We are here to make _npm_
37-
better.
23+
Of course we operate within a broad community ecosystem, and will often choose to implement features in a way that is compatible with other package management tools in the JavaScript community. However, if a given proposal cannot or will not be implemented by other package managers, that is not in itself reason enough to abandon a proposal. We are here to make _npm_ better.
3824

39-
### Full Consensus is Not The Goal
25+
### Iterate on Building Blocks
4026

41-
It is not our intention, or within our ability, to accomodate every
42-
possible objection to any given proposal. It _is_ our intention to surface
43-
all such objections, and make an informed decision as to whether the
44-
objection can be addressed, should be accepted, or is reason enough to
45-
abandon the proposal entirely.
27+
Frequently an RFC will be proposed or even fully specified in an ADR, and upon analysis, the feedback might be to cut it into separate RFCs, or implement another proposal first.
4628

47-
We encourage you to participate in these discussions, and to feel free and
48-
comfortable bringing up any objections that you have or can imagine (even
49-
if you don't entirely agree with the objection!)
29+
This can be frustrating at times, but it ensures that we are taking care to improve npm iteratively, with thorough consideration of each step along the way.
5030

51-
Our job together then, is to ensure that the objection is given a fair
52-
hearing, and is fully understood. Then (either in the pull request
53-
comments, or in our OpenRFC meetings), we will decide whether the proposal
54-
should be modified in light of the objection, or the objection should be
55-
ignored, or if the proposal should be abandoned.
31+
## How do I create an RFC?
5632

57-
If an objection is brought up a second time without any relevant changes,
58-
after having already been addressed, then it will be ignored. Only _new_
59-
objections merit new or continued consideration.
33+
* Visit https://github.com/npm/rfcs
34+
* Open a new issue using the RFC template
6035

61-
### Iterate on Building Blocks
36+
## How does review work?
6237

63-
Frequently a feature will be proposed or even fully specified in an RFC,
64-
and upon analysis, the feedback might be to cut it into separate RFCs, or
65-
implement another proposal first.
38+
The official place for discussion for a proposed RFC is its issue. Anyone, both npm collaborators and non-collaborators, may participate in the discussion and ask questions and provide (constructive) feedback. Keep in mind that only npm collaborators are able to ratify the RFC itself, even if other users can comment.
6639

67-
This can be frustrating at times, but it ensures that we are taking care
68-
to improve npm iteratively, with thorough consideration of each step along
69-
the way.
40+
Initial RFC proposals should be reviewed by the npm team and assigned to the agenda of an upcoming RFC discussion within 2 weeks of being opened. It is encouraged for the author of an RFC to attend this call, but if they are not able to for any reason discussions during the call will be summarized in the issue and responses can be gathered asynchronously.
7041

71-
### Implementation as Exploration
42+
All discussions surrounding an RFC are covered by the [npm Code of Conduct](https://www.npmjs.com/policies/conduct). Please keep conversations constructive, civil, and low-temperature. If tensions flare during discussion, the npm team may, at its own discretion, moderate, remove, or edit posts, as well as locking the discussion on that PR or the entire RFCs repository.
7243

73-
Typically, RFCs are discussed and ratified prior to implementation.
74-
However, this is not always the case! Occasionally, we will develop a
75-
feature then write an RFC after the fact to describe and discuss it prior
76-
to merging into the latest npm release.
44+
## How do RFCs get ratified?
7745

78-
Very often, an RFC will be difficult to examine without running code. In
79-
those cases, we may opt to develop a proof of concept (or even fully
80-
production-ready implementation) of an RFC in process, in order to test it
81-
in reality before accepting it.
46+
When the scheduled RFC call takes place, the npm team and the community will read and discuss the changes detailed in the RFC. It is possible that the discussion will be carried over to a future RFC call due to time constraints or needing further discussion. Once there is rough consensus amongst the participants of the call and all objections have been considered, an RFC is considered ratified and will be labeled as "ready for work".
8247

83-
Even when an RFC _is_ accepted, during implementation it is common to note
84-
additional objections, features, or decisions that need to be made. In
85-
these cases, we may propose an amendment to a previously ratified RFC.
48+
It is common for an RFC to require multiple rounds of editing to address concerns brought up in the discussion.
8649

87-
### Final Authority
50+
The RFC may be rejected altogether at the discretion of npm collaborators.
8851

89-
The ultimate authority as to the ratification of any given RFC proposal is
90-
the npm CLI team, as they have ultimate authority over the direction and
91-
development of the actual thing these RFCs are about.
52+
Reasons for this may include, but are not limited to:
9253

93-
## How do I create an RFC?
54+
- Objections are raised that are deemed to be relevant to the npm CLI, and cannot be reasonably addressed within the RFC.
55+
- The feature conflicts with another intended feature, or otherwise does not align with the future development direction of the npm CLI.
56+
- The feature described is prohibitively difficult to implement.
57+
- The feature described is better addressed by an alternate proposal.
9458

95-
* Fork https://github.com/npm/rfcs
96-
* Copy `accepted/0000-template.md` into `accepted/0000-your-rfc-name.md`
97-
* Fill in and edit the template with your proposal
98-
* Submit a PR to the `npm/rfcs` repo
59+
### Full Consensus is Not The Goal
9960

100-
## How does review work?
61+
It is not our intention, or within our ability, to accommodate every possible objection to any given proposal. It _is_ our intention to surface all such objections, and make an informed decision as to whether the objection can be addressed, should be accepted, or is reason enough to abandon the proposal entirely.
10162

102-
The official place for discussion for a proposed RFC is its pull request.
103-
Anyone, both npm collaborators and non-collaborators, may participate in the
104-
discussion and ask questions and provide (constructive) feedback. Keep in mind
105-
that only npm collaborators are able to ratify the RFC itself, even if other
106-
users can comment.
63+
We encourage you to participate in these discussions, and to feel free and comfortable bringing up any objections that you have or can imagine (even if you don't entirely agree with the objection!)
10764

108-
All discussions surrounding an RFC are covered by the [npm Code of
109-
Conduct](https://www.npmjs.com/policies/conduct). Please keep conversations
110-
constructive, civil, and low-temperature. If tensions flare during discussion,
111-
the npm team may, at its own discretion, moderate, remove, or
112-
edit posts, as well as locking the discussion on that PR or the entire RFCs
113-
repository.
65+
Our job together then, is to ensure that the objection is given a fair hearing, and is fully understood. Then (either in the RFC issue comments, or in our OpenRFC meetings), we will decide whether the proposal should be modified in light of the objection, or the objection should be ignored, or if the proposal should be abandoned.
11466

115-
## How do RFCs get ratified?
67+
If an objection is brought up a second time without any relevant changes, after having already been addressed, then it will be ignored. Only _new_ objections merit new or continued consideration.
11668

117-
An RFC is ratified when there is consensus among npm collaborators that it
118-
should be accepted, and all objections have been considered. At that
119-
point, it will be merged into the `latest` branch, and will be considered
120-
"ratified".
69+
### Final Authority
12170

122-
It is common for an RFC to require multiple rounds of editing to address
123-
concerns brought up in the discussion.
71+
The ultimate authority as to the ratification of any given RFC proposal is the npm CLI team, as they have ultimate authority over the direction and development of the npm CLI.
12472

125-
The RFC may be rejected altogether at the discretion of npm collaborators.
126-
Reasons for this may include, but are not limited to:
73+
Generally, RFCs are discussed and ratified prior to implementation. However, this is not always the case! The npm team may choose, at their discretion, to skip the RFC process and go straight to implementation and ADR.
12774

128-
- Objections are raised that are deemed to be relevant to the npm CLI, and
129-
cannot be reasonably addressed within the RFC.
130-
- The feature conflicts with another intended feature, or otherwise does
131-
not align with the future development direction of the npm CLI.
132-
- The feature described is prohibitively difficult to implement.
133-
- The feature described is better addressed by an alternate proposal.
75+
RFCs submitted by community members, unless approved by the npm team, must go through the RFC process first. A community submitted pull request containing an ADR having had no previous RFC and no communication with the npm team will be closed and the author will be instructed to start at the RFC process instead.
13476

13577
## What happens after ratification?
13678

137-
Once an RFC is ratified, the npm team agrees to merge a corresponding PR
138-
implementing the described changes, provided it passes a standard code
139-
review by the maintainers. It is **not** a guarantee of implementation, nor
140-
does it obligate the npm team itself to implement the requested changes.
79+
Once an RFC is ratified, the issue will be labeled as "ready for work". At this point the npm team and the community have agreed that the feature or change discussed in the RFC is desirable. Any member of the npm team or the community in general is free to comment on the issue declaring their intent to be the DRI (Directly Responsible Individual) for the RFC.
14180

142-
Actual integration into the CLI may also be deferred to a later date, or a
143-
later semver-major CLI release, at the npm collaborators' discretion. All
144-
the RFC does is communicate the team's intention to work in a given
145-
direction.
81+
Ratification is not a guarantee of implementation by the npm team, nor anyone in the community. It is only an indicator that if the feature/change were to be implemented, and that implementation passes code review, the npm team will merge the corresponding work. Merging may be deferred to a later date in the case of breaking changes. Timing of the merge is at the discretion of the npm team.
14682

147-
Actual development work on the npm CLI will be ordered based on priorities
148-
and resources that are well outside the scope of this RFC process.
83+
As a DRI, you are responsible for communication with the npm team, as well as overseeing implementation and creation of an ADR (Architectural Decision Record) representing the changes detailed in the RFC. This is the stage where we start discussing implementation details. The npm team is here to help and will do their best to provide open channels of communication with DRIs in order to answer questions and provide advice.
84+
85+
Once a DRI has been assigned, they can begin work on the ADR document as well as implementation. An ADR document is intended to describe in detail what decisions have been made about implementation and why. This document will be submitted as a pull request to this repository using the ADR template. The pull request for the ADR will remain open until implementation is complete and ready to be merged.
14986

15087
### Implementation
15188

152-
When the changes described in an RFC have been implemented and merged into the
153-
relevant repository (and thus, due to be released), the corresponding RFC will
154-
be moved from `accepted/` to `implemented/`.
89+
Implementation pull requests may be opened for review at any time, however please be sure to mark your pull requests as drafts until the implementation is complete and the ADR has been reviewed. The implementation pull request must also include a link to the ADR pull request.
90+
91+
Pull requests containing ADRs will be reviewed within 2 weeks and assigned to the agenda of an upcoming RFC call to discuss the technical implementation. This review may also be repeated depending on feedback and questions.
15592

156-
If you'd like to implement an accepted RFC, please make a PR in the
157-
appropriate repo and mention the RFC in the PR. Feel free to do this even
158-
for work-in-progress code. The npm CLI team will provide guidance to
159-
ensure that the patch meets our standards and addresses the proposed RFC.
93+
After an ADR document is created, and implementation is complete and adheres to the decisions that have been documented, the pull request containing the ADR will be merged. We wait for implementation to be complete so that the ADR can be compared to the implementation at review time and we can ensure that the documentation related to the change is clear and accurate.
16094

16195
### Withdrawal
16296

163-
From time to time npm collaborators will review RFCs awaiting
164-
implementation to ensure their accuracy and relevance. In cases where a
165-
previously ratified RFC is deemed to no longer be a viable candidate for
166-
implementation, an [**amendment section**](withdrawn/0000-template.md) will
167-
be added **to the top** of the document outlining the reason for repeal and
168-
subsequently moved to the `withdrawn/` section of this repository.
97+
From time to time npm collaborators will review RFCs awaiting implementation to ensure their accuracy and relevance. In cases where a previously ratified RFC is deemed to no longer be a viable candidate for implementation, the RFC issue will be closed specifying the reason it is no longer applicable.
98+
99+
If a proposal is withdrawn at the ADR phase, the ADR pull request and any incomplete implementation pull requests will also be closed citing the specific reason. If the reason is that the DRI is no longer available to oversee the implementation, rather than closing the existing pull requests the DRI will be unassigned and the "needs DRI" label will be added. At this point the feature is available for any other community member to volunteer to take over.
169100

170101
## How do I change an RFC after ratification?
171102

172-
RFCs themselves are typically only modified after ratification to address
173-
unanswered questions that may require implementation exploration.
103+
Put simply, you don't. The RFC is intended to convey an idea, not a specific means of creating or consuming the product of that idea. As such it should be somewhat rare for an RFC to change course after it has already been accepted. If this does happen, the npm team may elect to close the initial RFC as superseded by a new issue with a revised idea.
174104

175-
More often, if an RFC has been previously ratified, and either cannot be
176-
implemented as described, or should be superceded by another proposal, it
177-
will be withdrawn as part of another RFC submitted through this process.
105+
An ADR, however, is meant to be a living document and may be edited as often as necessary until implementation is complete and relevant pull requests have been merged.
178106

179107
---
180108

0 commit comments

Comments
 (0)