Skip to content

Commit 0ef2c3f

Browse files
authored
Merge pull request #38 from suraj813/rfc-process
RFC-0024-Process-for-RFC-Shepherding
2 parents c236fe0 + 2f14b6a commit 0ef2c3f

File tree

4 files changed

+361
-2
lines changed

4 files changed

+361
-2
lines changed

README.md

Lines changed: 67 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,67 @@
1-
# rfcs
2-
PyTorch RFCs (experimental)
1+
# PyTorch RFCs
2+
3+
The RFC (request for comments) is a structured document that allows community members
4+
to propose an idea to everyone before it is implemented. RFCs enable stakeholders
5+
to be aware and confident about the direction PyTorch is evolving in.
6+
7+
Many changes, including bug fixes and documentation improvements can be
8+
implemented and reviewed via the normal GitHub pull request workflow on the main PyTorch repo.
9+
10+
RFCs are more suitable for design proposals that are too large to discuss on a feature-request issue,
11+
like adding a new abstraction, or if a discussion about the tradeoffs involved in a new addition are non-trivial.
12+
13+
If you are unsure whether something should be an RFC or a feature-request issue,
14+
please open an issue in the main PyTorch repository first to discuss.
15+
16+
17+
## What the process is
18+
In short, to get a major feature added to PyTorch, one must first get the RFC
19+
merged into the RFC repository as a markdown file. At that point the RFC is
20+
"active" and may be implemented with the goal of eventual inclusion into PyTorch.
21+
22+
- Fork the rfcs repo: https://github.com/pytorch/rfcs
23+
- Copy `RFC-0000-template.md` to `RFC-00xx-my-feature.md`, or write your own open-ended proposal. Put care into the details.
24+
- Submit a pull request titled `RFC-00xx-my-feature`.
25+
- Assign the `draft` label while composing the RFC. You may find it easier to use a WYSIWYG editor (like Google Docs) when working with a few close collaborators; feel free to use whatever platform you like. Ideally this document is publicly visible and is linked to from the PR.
26+
- When opening the RFC for general discussion, copy your document into the `RFC-00xx-my-feature.md` file on the PR and assign the `commenting` label.
27+
- Build consensus for your proposal, integrate feedback and revise it as needed, and summarize the outcome of the discussion via a [resolution template](https://github.com/pytorch/rfcs/blob/rfc-process/RFC-0000-template.md#resolution).
28+
- If the RFC is idle here (no activity for 2 weeks), assign the label `stalled` to the PR.
29+
- Once the discussion has settled, assign a new label based on the level of support:
30+
- `accepted` if a decision has been made in the RFC
31+
- `draft` if the author needs to rework the RFC’s proposal
32+
- `shleved `if there are no plans to move ahead with the current RFC’s proposal
33+
- A state of `accepted` means that the core team has agreed in principle to the proposal, and it is ready for implementation.
34+
- The author (or any interested developer) should next open a tracking issue on Github corresponding to the RFC.
35+
- This tracking issue should contain the implementation next steps. Link to this tracking issue on the RFC (in the Resolution > Next Steps section)
36+
- Once all relevant PRs are merged, the RFC’s status label can be finally updated to `closed`.
37+
38+
39+
## Build consensus
40+
Before working on an RFC, it might be useful to gauge interest by posting on either [PyTorch Issues](https://github.com/pytorch/pytorch/issues), the [developer forum](https://dev-discuss.pytorch.org/c/rfc-chatter), or the [Slack channel](https://bit.ly/ptslack). Identifying interested stakeholders ([CODEOWNERS](https://github.com/pytorch/pytorch/blob/master/CODEOWNERS)) early on can ease consensus building.
41+
42+
43+
## Implementing an RFC
44+
Every accepted RFC has an associated issue tracking its implementation in the PyTorch repository; thus that
45+
associated issue can be assigned a priority via the triage process that the team uses for all issues.
46+
47+
The author of an RFC is not obligated to implement it. Of course, the RFC
48+
author (like any other developer) is welcome to post an implementation for
49+
review after the RFC has been accepted.
50+
51+
If you are interested in working on the implementation for an accepted RFC, but
52+
cannot determine if someone else is already working on it, feel free to ask
53+
(e.g. by leaving a comment on the associated issue).
54+
55+
56+
## RFC Rejection
57+
Some RFC pull requests are tagged with the "shelved" label when they are
58+
closed (as part of the rejection process). An RFC closed with "shelved" is
59+
marked as such because we want neither to think about evaluating the proposal
60+
nor about implementing the described feature until some time in the future, and
61+
we believe that we can afford to wait until then to do so.
62+
63+
## Inspiration
64+
PyTorch's RFC process owes inspiration to the [Rust RFC Process](https://github.com/rust-lang/rfcs) and [React RFC Process](https://github.com/reactjs/rfcs/), and the [Artsy RFC process](https://github.com/artsy/README/blob/main/playbooks/rfcs.md#resolution) for the resolution template.
65+
66+
## License
67+
By contributing to rfcs, you agree that your contributions will be licensed under the LICENSE file in the root directory of this source tree.

RFC-0000-template.md

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
2+
3+
<details>
4+
<summary>Instructions - click to expand</summary>
5+
6+
- Fork the rfcs repo: https://github.com/pytorch/rfcs
7+
- Copy `RFC-0000-template.md` to `RFC-00xx-my-feature.md`, or write your own open-ended proposal. Put care into the details.
8+
- Submit a pull request titled `RFC-00xx-my-feature`.
9+
- Assign the `draft` label while composing the RFC. You may find it easier to use a WYSIWYG editor (like Google Docs) when working with a few close collaborators; feel free to use whatever platform you like. Ideally this document is publicly visible and is linked to from the PR.
10+
- When opening the RFC for general discussion, copy your document into the `RFC-00xx-my-feature.md` file on the PR and assign the `commenting` label.
11+
- Build consensus for your proposal, integrate feedback and revise it as needed, and summarize the outcome of the discussion via a [resolution template](https://github.com/pytorch/rfcs/blob/rfc-process/RFC-0000-template.md#resolution).
12+
- If the RFC is idle here (no activity for 2 weeks), assign the label `stalled` to the PR.
13+
- Once the discussion has settled, assign a new label based on the level of support:
14+
- `accepted` if a decision has been made in the RFC
15+
- `draft` if the author needs to rework the RFC’s proposal
16+
- `shelved` if there are no plans to move ahead with the current RFC’s proposal. We want neither to think about evaluating the proposal
17+
nor about implementing the described feature until some time in the future.
18+
- A state of `accepted` means that the core team has agreed in principle to the proposal, and it is ready for implementation.
19+
- The author (or any interested developer) should next open a tracking issue on Github corresponding to the RFC.
20+
- This tracking issue should contain the implementation next steps. Link to this tracking issue on the RFC (in the Resolution > Next Steps section)
21+
- Once all relevant PRs are merged, the RFC’s status label can be finally updated to `closed`.
22+
23+
</details>
24+
25+
26+
27+
28+
29+
# [Title]
30+
31+
**Authors:**
32+
* @nickname
33+
* @nickname
34+
35+
36+
## **Summary**
37+
A short paragraph or bullet list that quickly explains what you're trying to do.
38+
39+
40+
## **Motivation**
41+
What motivates this proposal and why is it important?
42+
How should users and developers think about this feature, how would it impact the way PyTorch is used?
43+
Explain impact and value of this feature
44+
45+
46+
## **Proposed Implementation**
47+
This is the bulk of the RFC. Explain the design in enough detail for somebody familiar with PyTorch to understand, and for somebody familiar with the implementation to implement.
48+
This should get into specifics and corner-cases, and include examples of how the feature is used, and how it will interact with other features. Any new terminology should be defined here.
49+
Consider:
50+
* using examples and diagrams to help illustrate your ideas.
51+
* including code examples, if you're proposing an interface or system contract.
52+
* linking to project briefs or wireframes that are relevant.
53+
54+
55+
## **Metrics **
56+
What are the main metrics to measure the value of this feature?
57+
58+
59+
## **Drawbacks**
60+
Are there any reasons why we should not do this? Here we aim to evaluate risk and check ourselves.
61+
62+
Please consider:
63+
* is it a breaking change?
64+
* Impact on UX
65+
* implementation cost, both in terms of code size and complexity
66+
* integration of this feature with other existing and planned features
67+
68+
69+
## **Alternatives**
70+
What other designs have been considered? What is the impact of not doing this?
71+
72+
73+
## **Prior Art**
74+
Discuss prior art (both good and bad) in relation to this proposal:
75+
* Does this feature exist in other libraries? What experience has their community had?
76+
* What lessons can be learned from other implementations of this feature?
77+
* Published papers or great posts that discuss this
78+
79+
80+
## **How we teach this**
81+
* What names and terminology work best for these concepts and why? How is this idea best presented?
82+
* Would the acceptance of this proposal mean the PyTorch documentation must be re-organized or altered?
83+
* How should this feature be taught to existing PyTorch users?
84+
85+
86+
## **Unresolved questions**
87+
* What parts of the design do you expect to resolve through the RFC process before this gets merged?
88+
* What parts of the design do you expect to resolve through the implementation of this feature before stabilization?
89+
* What related issues do you consider out of scope for this RFC that could be addressed in the future independently of the solution that comes out of this RFC?
90+
91+
92+
## Resolution
93+
We decided to do it. X% of the engineering team actively approved of this change.
94+
95+
### Level of Support
96+
Choose one of the following:
97+
* 1: Overwhelming positive feedback.
98+
* 2: Positive feedback.
99+
* 3: Majority Acceptance, with conflicting Feedback.
100+
* 4: Acceptance, with Little Feedback.
101+
* 5: Unclear Resolution.
102+
* 6: RFC Rejected.
103+
* 7: RFC Rejected, with Conflicting Feedback.
104+
105+
106+
#### Additional Context
107+
Some people were in favor of it, but some people didn’t want it for project X.
108+
109+
110+
### Next Steps
111+
Will implement it.
112+
113+
114+
#### Tracking issue
115+
<github issue URL>
116+
117+
118+
#### Exceptions
119+
Not implementing on project X now. Will revisit the decision in 1 year.

0 commit comments

Comments
 (0)