-
-
Notifications
You must be signed in to change notification settings - Fork 3.6k
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
RFC: Create an RFC Process #1662
Conversation
We should also discuss doing rfcs in a separate repo for a clean separation between implementation and spec (like rust does). |
Yeah, there's probably no need to carry rfcs around with the source. |
I don't like this: it increases friction, makes it harder to notice / check for RFCs that need attention and makes cross-linking way more annoying. Github's autocomplete issue numbers are such a time saver and that will just stop working if we use a seperate repo. |
That's a great point. Would only accepted PRs be merged into the repo? I guess it could also be useful for project history. Why did rust separate the rfcs? |
Add Alice's suggested modifications. Co-authored-by: Alice Cecile <[email protected]>
Summarizing discussion on Discord. Arguments in favor of One Repo
Arguments in Favor of Two Repos
Tangential Points
|
This one seems like it is going to get more burdensome over time, especially if we start to test examples in some headless renderer.
I think this alone is enough reason. Splitting all the meta discussion into a focused repo would prevent a good amount of cruft and clutter. Something else to add in favor, is org members might be given extra permissions in the rfc repo, which cart might not be comfortable giving to the source repo. Not sure how significant this is, but it might mean more administrative work could be offloaded from cart. Edit: @alice-i-cecile, we can continue to work on the RFC template, the issue of where to host it won't be a blocker until we have consensus that the RFC template is good. |
Wouldn't a git submodule address most of the listed concerns? |
I'm not sure there's any way to get RFC examples to compile: by definition the required Bevy features don't exist ;) You could force people to mock out all of the new infrastructure but that sounds awful and pointless. |
Oh, I meant that we wouldn't even be using the CI, so the amount of waste it adds is only going to go up in time as we add more tests. |
That actually makes a ton of sense. What do you think @alice-i-cecile ? |
Seems sensible on its surface, but I worry about increased complexity and clutter still. I'm also not experienced enough with CI / git submodules to verify if it would work on a technical level. However: quote from helpful Rust Discord user:
|
So, the other main issue we need to answer on this is "what needs an RFC, and what should I do if I just want to submit code". Consensus is that simple PRs that implement:
should be fully excluded from the RFC process. IMO, new features should generally go through the RFC process if any of:
@cart indicated that he would rather start the process overly strict for the 0.6 cycle, and then loosen back up as seems warranted. @jamadazi's request was that the RFC process not be mandatory before new code PRs can be submitted. With that in mind, I think we should support two workflows. The design-first workflow is more thoughtful and easier on Cart, but the implementation-first workflow is better for simple features and imposes less overhead. Design-first Workflow
Implementation-first Workflow
|
Just wanna say, I really like this. 😍 The way you have described the workflows makes perfect sense to me and i think it would work well. 👍 |
I'm thrilled to hear that: you're a great representative of the "process-lite" crowd and it's important that we don't make the bar / overhead too high. |
👋 helpful discord user here, I'd like to expand on why I think submodules were a bad choice for rust-lang/rust specifically. A lot of these don't apply to bevy, mostly I just feel like ranting 😆
The alternative that rust-lang/rust is currently looking at is subtrees (rust-lang/rust#82208, rust-lang/rust#70651), which have different tradeoffs. They lose the benefit of 1, because all the history is kept in-tree, but 2 and 3 go away because you use normal git commands to make changes and don't have any enforced ordering. The main downside is that they are still mildly buggy (gitgitgadget/git#493), but that should only pop up for repos with lots of git history. Like submodules, you'll need to occasionally sync the RFCs repo downstream; if you modify the RFCs in-tree, you'll need to sync them back upstream. For bevy specifically, you could also use neither and just have the folder in-tree. This isn't practical for rust-lang/rust because the tools have their own issue trackers and different reviewers than the main repository. |
I believe that any changes to bevy's development process (1) should {improve,optimize,streamline} the workflow for {cart,reviewers,authors}, but also importantly (2) must not introduce any significant barriers to entry and overhead for contributions. I am of the very strong opinion that (2) is more important than (1). If a proposal makes it more difficult or intimidating for people to contribute, it should not be accepted, no matter how much efficiency it would gain / how much work it would save for cart or reviewers. We should try to come up with proposals that can accomplish as much of (1) as can be done without compromising on (2). Bevy has greatly benefited from its community and low barriers to entry and contribution. IMO maintaining that is essential to bevy's success. |
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.
Nit: I would recommend rearranging lines with manual linebreaks until they come out at around 100 (or should it be 70) symbols.
Re: design-first / implementation-first: agreed, it would be best if we allowed for both. Ideally, the "cut-off" point is not a rule either, and instead something that's decided on per-feature basis. It should be noted that implementation-first workflow should not exempt the PR in question from providing a basic breakdown, ideally with an example or at least a link to the new tests/APIs/docs serving the same purpose. |
I think we could try and be a little more welcoming, with something like that near the beginning:
|
Should we include PR templates as part of this discussion, or in a follow-up? I'd like to have one for each of:
|
I think that will be better suited for a separate issue, and that we should keep this focused on the RFC template and process. I don't believe those are required for the RFC process to work, but would certainly be nice to have. |
Co-authored-by: Alexander Sepity <[email protected]> Co-authored-by: Alice Cecile <[email protected]>
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.
Some simple formatting improvements.
For the curious, I've used this PR as the base for my own RFC process / template for my game design work. I went with an archived / active split within the development repository to better fit the small team. (There's no license in the repo yet, but consider this my Official Binding Blessing to use any of the RFC-related content in that repo under the MIT License.) |
Co-authored-by: Alice Cecile <[email protected]>
A common pattern that I'm seeing in my planned RFC's is the need to compare several paths forward. The existing template doesn't cover it well; I think there's a good case for a second one. For a real example of this pattern, see #1471. |
Are you suggesting everything after the
|
Not quite: the pattern is different enough that I think it warrants an alternative template to better fit the use case. For example, you want to define a common set of metrics then evaluate all of the proposals across it. I'll work on my own version of this for Leafwing Studios then link it here in a couple days :) |
Hey @alice-i-cecile, any progress on the aforementioned RFC version you were working on? I think we are at a good enough place here that we can kick this off as soon as 0.5 is merged, if cart is happy with this. I'll update the first post to summarize the state of this PR. |
Delayed due to illness mostly. I don't think it's worth blocking the rest of the RFC process on: we can handle it internally on the RFC repo once that's made.
Agreed. I expect that we'll actually want PR templates for this repo as part of this PR, and then strip the RFC template from this PR and move it into the new repo. |
I've made a temp RFC repo for now. Feel free to use it and open PRs against it if you'd like; with the understanding that we'll need to migrate soon. Cart, when you're migrating, feel free to download and steal (rather than forking) that repo; I'm going to do my best to implement everything the official Bevy RFC repo should need in terms of files. |
Thanks @alice-i-cecile. |
Great work here everyone! I'm pretty much caught up now. In general I agree with the decisions made here. My biggest nits are:
|
Great. I can get behind all of these. We can revisit e.g. the proposal comparisons if we find a compelling need later. I'll make the changes in the draft repo for you to save you some time :) |
I'm on board with the nits. My preference, based on the feedback here, is to err on the side of keeping a light touch with the RFC process. We can always add constraints to the process in the future, but there's no sense making things complex out of the gate. I'd also like to avoid the perception that this represents Bevy becoming bureaucratic and process-heavy. |
Just to note that I like it when big projects add the RFC number (which can just be the PR number that merges the initial RFC) in the file name. This allows you to quickly |
Completely agree. That was my immediate concern when adding an RFC process to bevy was first proposed. I made sure to push back vocally. 😄 I think we now all seem to agree about this and the current proposal seems like it would work well for the "casual" and "freeform" nature of bevy. AIUI, it's mostly an option available to be invoked when necessary/beneficial, to give structure to community design discussions. It's also why I think we should avoid introducing further "processes" and "bureaucracy", like ADRs or whatever. I see that cart agrees. 🙂 |
The Bevy RFC process is now live! Great work everyone! |
Large PRs that are either complex or out of scope of current "focus area" efforts can often sit around, gated by feedback from cart. Creating an RFC process would give the community a useful tool to discuss complex proposals, especially if the proposed PR has implications for features that will get built on top.
A standard format would make it more likely that all the information needed to make a decision is accounted for and in a predictable format for cart and the broader community to digest. The intent here is not to create burden for contributors, but give the community a way of making headway on big decisions without PRs rotting in the queue.
I'd like to collaborate on a template, and discuss this meta-RFC here! We can make this RFC into the first RFC as a way of testing out the process. I've copied the Rust RFC template, per @alice-i-cecile's recommendation, as a starting point.
Edit 2021-04-01:
Current Status
Summary
We have consensus on:
Next Steps