-
Notifications
You must be signed in to change notification settings - Fork 107
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
An RFC for creating an RFC process. :) #1543
Conversation
This PR itself is our first RFC. :)
Thank you! I have a few questions as someone unfamiliar with the RFC process -
|
Co-authored-by: Jaisurya Nanduri <[email protected]>
Yes, the RFC mechanism will be the Kani process going forward.
Yes. We expect every RFC to be public since the changes would be made public too. For changes that are still under development, it might make sense to open a "Draft" RFC
If an RFC is not accepted, the next steps are up to the author (much like when a paper is not accepted by a peer review process). Depending on their judgement, they can abandon the RFC, start a new RFC with a different approach, or revise their current approach to address the reviewer feedback. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We should add the RFC to the PR template
rfcs/src/intro.md
Outdated
This is the overall workflow for the RFC process: | ||
|
||
```toml | ||
Create RFC ──> Receive Feedback ──> Accepted? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You might want to note the recieve feedback
/revise
loop.
Also, the Implement
-> Revise RFC
feedback edge
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I added the first. The second I added a note to the item below (I'm worried that the diagram is getting too complicated). Is that OK?
rfcs/src/intro.md
Outdated
|
||
1. Create an RFC | ||
1. Start from a fork of the Kani repository. | ||
2. Copy the template file ([`rfcs/src/template.md`](./template.md)) to `rfcs/src/<my-feature>.md`. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I like having numbered RFCs. Perhaps say copy to rfcs/src/<ID_NUMBER><my-feature>.md
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I added the ID_NUMBER. Any suggestion on how this will be assigned? We can either try to increment based on existing RFCs and open RFCs or we can use the tracking issue number.
rfcs/src/intro.md
Outdated
2. Build consensus and integrate feedback. | ||
1. RFCs should get approved by at least 2 members of the `kani-developers` team. | ||
2. Once the RFC has been approved, update the RFC status and merge the PR. | ||
3. If the RFC is not approved, close the PR without merging. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If the RFC is not approved, replace status of the RFC with a template saying "Closed as per PR blah"
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actually, I think that's ok.
Co-authored-by: Daniel Schwartz-Narbonne <[email protected]>
rfcs/src/intro.md
Outdated
## When to create an RFC | ||
|
||
As a rule of thumb you should create an RFC if you are making changes that impact the user experience. New | ||
APIs, new features, as well as depreciation, should follow an RFC process. We also ask for substantial architectural |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
IMO, we should be explicit about a lighter-weight process option here. Changes are usually going to be:
- Simple enough to not need an RFC
- Complex enough to merit discussion and get consensus on design choices, but perhaps as a github issue rather than an RFC proper.
- Important enough to merit an RFC-like process, especially when it comes to soliciting customer feedback.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would prefer start with 2 modes only. For the case where it merit discussion and get consensus, I would prefer using an RFC PR instead of an issue. It's OK if the RFC document is fairly small.
We can adjust as we go.
rfcs/src/intro.md
Outdated
3. Fill in the details according to the template intructions. | ||
4. Submit a pull request. | ||
2. Build consensus and integrate feedback. | ||
1. RFCs should get approved by at least 2 members of the `kani-developers` team. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think it's kani-devs
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I actually removed the group name here. I still need to figure out a way to enforce this without changing all our PRs.
rfcs/src/template.md
Outdated
- Will this require any new dependency? | ||
- What are the corner cases you antecipate? | ||
|
||
# Rationale and alternatives |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This could just be part of "Detailed design".
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hummm... That's an interesting point. I can see that in some cases that would make sense.
The reason I believe this is not inside "Detailed Design" because the "Rationale and alternatives" may go beyond the implementation details. In some cases, the alternative could be providing a completely different user experience to achieve the same purpose. Like this rust RFC.
Does it make sense?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, it does.
For the record, I was looking to reduce the number of sections here as I don't think Kani is more complex than the Rust compiler, and in my opinion Kani's RFCs shouldn't be more complex than Rust's RFCs neither. That said, we don't have any RFC experience at the moment so it's hard to tell if this is too much. Let's revisit this in the future, when we've had some RFCs (in particular, at least one coming from external contributors) so we can get some feedback based on their experience.
rfcs/src/intro.md
Outdated
4. Document how to use the feature. | ||
4. Stabilization. | ||
1. After the feature has been implemented, start the stabilization process. | ||
2. Gather user feedback and make necessary adjustments. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We should define some criteria to stabilize a feature. This reads like "Stabilize right away after implementing it", when in practice we will wait for a feature to be stabilized after a period. Recent bug reports or short periods after implementation should all delay the stabilization of a feature.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah, I totally agree. Any suggestions?
I would prefer keeping it lightweight for now. Something like creating a PR that marks the RFC as stable and remove the --enable-unstable
requirement. In the description of the PR, the developer states why they believe the feature can be marked as stable and we go from there. I guess we could add a minimum "bake" time like 2 releases.
I think for the rust project, they have two different process which is more heavy weight. This includes writing a report and starting an FCP (final comment period).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I added a stage between "Implementation" and "Stabilization". Let me know what you think.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for adding another stage. I think that makes clear there is not an immediate path to stabilization, while at the same time keeping the process lightweight as we want.
Co-authored-by: Adrian Palacios <[email protected]>
@danielsn I added the "proof-of-concept" field, but I'm having second thoughts on this one. Developers will likely link this against some branch in their fork and this branch will likely be deleted. I think it would make more sense to add that link to the PR description itself. What do you think? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for doing this!
rfcs/src/template.md
Outdated
- Will this require any new dependency? | ||
- What are the corner cases you antecipate? | ||
|
||
# Rationale and alternatives |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, it does.
For the record, I was looking to reduce the number of sections here as I don't think Kani is more complex than the Rust compiler, and in my opinion Kani's RFCs shouldn't be more complex than Rust's RFCs neither. That said, we don't have any RFC experience at the moment so it's hard to tell if this is too much. Let's revisit this in the future, when we've had some RFCs (in particular, at least one coming from external contributors) so we can get some feedback based on their experience.
rfcs/src/intro.md
Outdated
4. Document how to use the feature. | ||
4. Stabilization. | ||
1. After the feature has been implemented, start the stabilization process. | ||
2. Gather user feedback and make necessary adjustments. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for adding another stage. I think that makes clear there is not an immediate path to stabilization, while at the same time keeping the process lightweight as we want.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ship it, let's try it and see how it goes.
One last question: this creates the /rfcs/
directory (should it be just /rfc/
perhaps?) but nothing links to it. Should we add a link from our regular docs to the "rfc book" ?
Great question! I am happy to rename it to I like the idea of adding a link to it from our regular docs. Initially I wanted to make sure they would play nice to each other, but I was able to test that in my fork, and I don't see why not. Should I just add a link in the Summary table? |
I like A link from the summary works for me. |
Unfortunately, a link from the summary won't work. I'll add a link under Project Status for now. Let me know if you have any other suggestion. |
1- Renamed rfcs/ to rfc/ 2- Small tweaks with the template format to make it cleaner. 3- Added a list to the RFC Book from the user document.
Description of changes:
I am creating this PR to gather feedback on the following:
I would like to suggest that we do start a light-weight RFC process. In this PR, I included a suggestion of a process and a suggestion of a template. Finally, this PR also creates a book of RFCs under
kani/rfcs
.My reasoning here is that the RFC process will:
The main drawback is the time overhead to write the RFC and iterating over the feedback. So we should aim to make this a lightweight process. The RFC doesn't have to answer all questions and it can be updated as we go.
Resolved issues:
N/A
Call-outs:
I am suggesting that RFCs require at least 2 approvals, but I haven't looked into how we could enforce it yet.
Testing:
How is this change tested? N/A
Is this a refactor change? N/A
Checklist
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 and MIT licenses.