Skip to content

Commit 1d7b0f9

Browse files
celinvalfeliperodrizhassan-awsadpaco-aws
authored
Update RFC process (rust-lang#2716)
I would like to incorporate a few suggestions to the RFC process and template: 1. Suggest that the first RFC revision should not include implementation details. Thanks @feliperodri for the suggestion. 2. Change the template to (hopefully) clarify what should go in each section. @JustusAdam any suggestions? 3. Change the template to clarify that open questions and future work should be simple lists. 4. Replace `--enable-unstable` by `-Z` flag. The main goal is to try to speed up the process by reducing the scope of the RFC document, breaking it down into multiple steps, and even reduce the need for an RFC entirely. Co-authored-by: Felipe R. Monteiro <[email protected]> Co-authored-by: Zyad Hassan <[email protected]> Co-authored-by: Adrian Palacios <[email protected]>
1 parent c8266bf commit 1d7b0f9

File tree

2 files changed

+70
-35
lines changed

2 files changed

+70
-35
lines changed

rfc/src/intro.md

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@ integrate feedback from developers and users on future changes to Kani, we decid
88

99
You should create an RFC in one of two cases:
1010

11-
1. The change you are proposing would be a "one way door": e.g. a change to the public API, a new feature that would be difficult to modify once released, deprecating a feature, etc.
11+
1. The change you are proposing would be a "one way door": e.g. a major change to the public API, a new feature that would be difficult to modify once released, etc.
1212
2. The change you are making has a significant design component, and would benefit from a design review.
1313

14-
Bugs and smaller improvements to existing features do not require an RFC.
14+
Bugs and improvements to existing features do not require an RFC.
1515
If you are in doubt, feel free to create a [feature request](https://github.com/model-checking/kani/issues/new?assignees=&labels=&template=feature_request.md) and discuss the next steps in the new issue.
1616
Your PR reviewer may also request an RFC if your change appears to fall into category 1 or 2.
1717

@@ -36,6 +36,9 @@ This is the overall workflow for the RFC process:
3636
2. Start from a fork of the Kani repository.
3737
3. Copy the template file ([`rfc/src/template.md`](./template.md)) to `rfc/src/rfcs/<ID_NUMBER><my-feature>.md`.
3838
4. Fill in the details according to the template instructions.
39+
- For the first RFC version, we recommend that you leave the "Software Design" section empty.
40+
- Focus on the user impact and user experience.
41+
Include a few usage examples if possible.
3942
5. Add a link to the new RFC inside [`rfc/src/SUMMARY.md`](https://github.com/model-checking/kani/blob/main/rfc/src/SUMMARY.md)
4043
6. Submit a pull request.
4144
2. Build consensus and integrate feedback.
@@ -44,22 +47,24 @@ This is the overall workflow for the RFC process:
4447
3. If the RFC is not approved, close the PR without merging.
4548
3. Feature implementation.
4649
1. Start implementing the new feature in your fork.
47-
2. It is OK to implement it incrementally over multiple PRs. Just ensure that every pull request has a testable
48-
end-to-end flow and that it is properly tested.
49-
3. In the implementation stage, the feature should only be accessible if the user explicitly passes
50-
`--enable-unstable` as an argument to Kani.
51-
4. Document how to use the feature.
52-
5. Keep the RFC up-to-date with the decisions you make during implementation.
50+
2. Create a new revision of the RFC to add details about the "Software Design".
51+
3. It is OK to implement the feature incrementally over multiple PRs.
52+
Just ensure that every pull request has a testable end-to-end flow and that it is properly tested.
53+
4. In the implementation stage, the feature should only be accessible if the user explicitly passes
54+
`-Z <FEATURE_ID>` as an argument to Kani.
55+
5. Document how to use the feature.
56+
6. Keep the RFC up-to-date with the decisions you make during implementation.
5357
4. Test and Gather Feedback.
5458
1. Fix major issues related to the new feature.
5559
2. Gather user feedback and make necessary adjustments.
56-
3. Add lots of tests.
60+
3. Resolve RFC open questions.
61+
4. Add regression tests to cover all expected behaviors and unit tests whenever possible.
5762
5. Stabilization.
5863
1. Propose to stabilize the feature when feature is well tested and UX has received positive feedback.
59-
2. Create a new PR that removes the `--enable-unstable` guard and that marks the RFC status as "STABLE".
64+
2. Create a new PR that removes the `-Z <FEATURE_ID>` guard and that marks the RFC status as "STABLE".
6065
1. Make sure the RFC reflects the final implementation and user experience.
6166
3. In some cases, we might decide not to incorporate a feature
6267
(E.g.: performance degradation, bad user experience, better alternative).
6368
In those cases, please update the RFC status to "CANCELLED as per <PR_LINK | ISSUE_LINK>" and remove the code
6469
that is no longer relevant.
65-
4. Close the tracking issue.
70+
4. Close the tracking issue.

rfc/src/template.md

Lines changed: 54 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
- **Feature Name:** *Fill me with pretty name and a unique ident. E.g: New Feature (`new_feature`)*
1+
- **Feature Name:** *Fill me with pretty name and a unique ident [^unstable_feature]. Example: New Feature (`new_feature`)*
22
- **Feature Request Issue:** *Link to issue*
33
- **RFC PR:** *Link to original PR*
44
- **Status:** *One of the following: [Under Review | Unstable | Stable | Cancelled]*
@@ -10,47 +10,77 @@
1010

1111
## Summary
1212

13-
Short description of the feature, i.e.: the elevator pitch. What is this feature about?
13+
Short (1-2 sentences) description of the feature. What is this feature about?
1414

1515
## User Impact
1616

17-
Why are we doing this? How will this benefit the final user?
17+
Imagine this as your elevator pitch directed to users as well as Kani developers.
18+
- Why are we doing this?
19+
- Why should users care about this feature?
20+
- How will this benefit them?
21+
- What is the downside?
1822

19-
- If this is an API change, how will that impact current users?
20-
- For deprecation or breaking changes, how will the transition look like?
21-
- If this RFC is related to change in the architecture without major user impact, think about the long term
22-
impact for user. I.e.: what future work will this enable.
23+
If this RFC is related to change in the architecture without major user impact,
24+
think about the long term impact for user.
25+
I.e.: what future work will this enable.
26+
- If you are unsure you need an RFC, please create a feature request issue and discuss the need with other Kani developers.
2327

2428
## User Experience
2529

26-
What is the scope of this RFC? Which use cases do you have in mind? Explain how users will interact with it. Also
27-
please include:
30+
This should be a description on how users will interact with the feature.
31+
Users should be able to read this section and understand how to use the feature.
32+
**Do not include implementation details in this section, neither discuss the rationale behind the chosen UX.**
2833

29-
- How would you teach this feature to users? What changes will be required to the user documentation?
30-
- If the RFC is related to architectural changes and there are no visible changes to UX, please state so.
34+
Please include:
35+
- High level user flow description.
36+
- Any new major functions or attributes that will be added to Kani library.
37+
- New command line options or subcommands (no need to mention the unstable flag).
38+
- List failure scenarios and how are they presented (e.g., compilation errors, verification failures, and possible failed user iterations).
39+
- Substantial changes to existing functionality or Kani output.
3140

32-
## Detailed Design
41+
If the RFC is related to architectural changes and there are no visible changes to UX, please state so.
42+
No further explanation is needed.
3343

34-
This is the technical portion of the RFC. Please provide high level details of the implementation you have in mind:
44+
## Software Design
3545

36-
- What are the main components that will be modified? (E.g.: changes to `kani-compiler`, `kani-driver`, metadata,
37-
installation...)
38-
- How will they be modified? Any changes to how these components communicate?
39-
- Will this require any new dependency?
46+
This is the beginning of the technical portion of the RFC.
47+
From now on, your main audience is Kani developers, so it's OK to assume readers know Kani architecture.
48+
49+
Please provide a high level description your design.
50+
51+
- What are the main components that will be modified? (E.g.: changes to `kani-compiler`, `kani-driver`, metadata, proc-macros, installation...)
52+
- Will there be changes to the components interface?
53+
- Any changes to how these components communicate?
4054
- What corner cases do you anticipate?
4155

56+
**We recommend you to leave this empty for the first version of your RFC**.
57+
4258
## Rationale and alternatives
4359

44-
- What are the pros and cons of this design?
60+
This is the section where you discuss the decisions you made.
61+
62+
- What are the pros and cons of the UX? What would be the alternatives?
4563
- What is the impact of not doing this?
46-
- What other designs have you considered? Why didn't you choose them?
64+
- Any pros / cons on how you designed this?
4765

4866
## Open questions
4967

50-
- Is there any part of the design that you expect to resolve through the RFC process?
51-
- What kind of user feedback do you expect to gather before stabilization? How will this impact your design?
68+
List of open questions + an optional link to an issue that captures the work required to address the open question.
69+
Capture the details of each open question in their respective issue, not here.
70+
71+
Example:
72+
- Is there any use case that isn't handled yet?
73+
- Is there any part of the UX that still needs some improvement?
74+
75+
Make sure all open questions are addressed before stabilization.
76+
77+
## Out of scope / Future Improvements
78+
79+
*Optional Section*: List of extensions and possible improvements that you predict for this feature that is out of
80+
the scope of this RFC.
5281

53-
## Future possibilities
82+
Feel free to add as many items as you want, but please refrain from adding too much detail.
83+
If you want to capture your thoughts or start a discussion, please create a feature request.
84+
You are welcome to add a link to the new issue here.
5485

55-
What are natural extensions and possible improvements that you predict for this feature that is out of the
56-
scope of this RFC? Feel free to brainstorm here.
86+
[^unstable_feature]: This unique ident should be used to enable features proposed in the RFC using `-Z <ident>` until the feature has been stabilized.

0 commit comments

Comments
 (0)