-
Notifications
You must be signed in to change notification settings - Fork 31
Adopt the CEP process #1
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
Merged
marc-casperlabs
merged 30 commits into
casper-network:master
from
marc-casperlabs:mbr/process
Aug 21, 2020
Merged
Changes from 19 commits
Commits
Show all changes
30 commits
Select commit
Hold shift + click to select a range
f7799db
Import intial template, copied from https://github.com/rust-lang/rfcs
marc-casperlabs f149c7f
Alter template to suitable for CasperLabs projects
marc-casperlabs dc5b5b5
Create first draft of RFC creation RFC
marc-casperlabs 92fd1d7
RFC0001 is adopt-rfc-process
marc-casperlabs 5e0a343
Move creation of the "rendered" link to after assigning a number
marc-casperlabs f36d349
Add note about keeping discussions on GitHub
marc-casperlabs a242240
Fix markdown lint issue in `README.md`
marc-casperlabs 01f325e
Change delimiter for bullet point from `-` to `*`
marc-casperlabs 7aa1ea1
Note drawback of not being able to assign RFC beforehand
marc-casperlabs ca8c135
Change all references of RFCs to CEPs
marc-casperlabs a8150a4
Define CEP in the `README.md`
marc-casperlabs c60c6c1
Fix spelling mistakes stemming from RFC->CEP rename
marc-casperlabs e1ecf16
Update text/0001-adopt-cep-process.md
marc-casperlabs 45f03c5
Update text/0001-adopt-cep-process.md
marc-casperlabs 60d1a10
Update text/0001-adopt-cep-process.md
marc-casperlabs cd7e93a
Update text/0001-adopt-cep-process.md
marc-casperlabs 8611ecd
Update text/0001-adopt-cep-process.md
marc-casperlabs d89f44e
Update text/0001-adopt-cep-process.md
marc-casperlabs 8747a76
Update text/0001-adopt-cep-process.md
marc-casperlabs db14135
Update text/0001-adopt-cep-process.md
marc-casperlabs 108ed5e
Update text/0001-adopt-cep-process.md
marc-casperlabs b4d02a6
Update 0000-template.md
marc-casperlabs 96d0639
Update text/0001-adopt-cep-process.md
marc-casperlabs ee32ec4
Update text/0001-adopt-cep-process.md
marc-casperlabs fd03be3
Update 0000-template.md
marc-casperlabs b4600d8
Make it clear that we are creating a PR only for a CEP with some subs…
marc-casperlabs 8513ebd
Fix some whitespace errors
marc-casperlabs 851c580
Add `LICENSE` file
marc-casperlabs 45e354b
Replace `README.md` with link to `CEP0001`
marc-casperlabs 3f48b41
No more pirate code
marc-casperlabs File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,87 @@ | ||
# Title | ||
|
||
## Summary | ||
|
||
[summary]: #summary | ||
|
||
CEP PR: [casperlabs/ceps#0000](https://github.com/casperlabs/ceps/pull/0000) | ||
|
||
One paragraph explanation of the feature. | ||
|
||
## Motivation | ||
|
||
[motivation]: #motivation | ||
|
||
Why are we doing this? What use cases does it support? What is the expected outcome? | ||
|
||
## Guide-level explanation | ||
|
||
[guide-level-explanation]: #guide-level-explanation | ||
|
||
Explain the proposal as if it was already approved and implemented. That generally means: | ||
|
||
- Introducing new named concepts. | ||
- Explaining the feature largely in terms of examples. | ||
|
||
For implementation-oriented CEPs (e.g. for node internals), this section should focus on how other developers should think about the change, and give examples of its concrete impact. For policy CEPs, this section should provide an example-driven introduction to the policy, and explain its impact in concrete terms. | ||
|
||
## Reference-level explanation | ||
|
||
[reference-level-explanation]: #reference-level-explanation | ||
|
||
This is the technical portion of the CEP. Explain the design in sufficient detail that: | ||
|
||
- Its interaction with other features is clear. | ||
- It is reasonably clear how the feature would be implemented. | ||
- Corner cases are dissected by example. | ||
|
||
The section should return to the examples given in the previous section, and explain more fully how the detailed proposal makes those examples work. | ||
|
||
## Drawbacks | ||
|
||
[drawbacks]: #drawbacks | ||
|
||
Why should we *not* do this? | ||
|
||
## Rationale and alternatives | ||
|
||
[rationale-and-alternatives]: #rationale-and-alternatives | ||
|
||
- Why is this design the best in the space of possible designs? | ||
- What other designs have been considered and what is the rationale for not choosing them? | ||
- What is the impact of not doing this? | ||
|
||
A very important thing to list here is ideas that were discarded in the process, as these tend to crop up again after a while. Describing them here saves time as it allows people discussing those ideas again in the future to point to refer to this document. | ||
marc-casperlabs marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
## Prior art | ||
|
||
[prior-art]: #prior-art | ||
|
||
Discuss prior art, both the good and the bad, in relation to this proposal. | ||
A few examples of what this can include are: | ||
|
||
- For development focused proposals: Does this feature exist in other applications and what experience have their community had? | ||
- For community proposals: Is this done by some other community and what were their experiences with it? | ||
- For other teams: What lessons can we learn from what other communities have done here? | ||
- Papers: Are there any published papers or great posts that discuss this? If you have some relevant papers to refer to, this can serve as a more detailed theoretical background. | ||
|
||
This section is intended to encourage you as an author to think about the lessons from other languages, provide readers of your CEP with a fuller picture. | ||
|
||
## Unresolved questions | ||
|
||
[unresolved-questions]: #unresolved-questions | ||
|
||
- What parts of the design do you expect to resolve through the CEP process before this gets merged? | ||
- What related issues do you consider out of scope for this CEP that could be addressed in the future independently of the solution that comes out of this CEP? | ||
|
||
## Future possibilities | ||
|
||
[future-possibilities]: #future-possibilities | ||
|
||
Think about what the natural extension and evolution of your proposal would be and how it would affect the project as a whole in a holistic way. Try to use this section as a tool to more fully consider all possible interactions with the project and language in your proposal. Also consider how the this all fits into the roadmap for the project and of the relevant sub-team. | ||
marc-casperlabs marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
This is also a good place to "dump ideas", if they are out of scope for the CEP you are writing but otherwise related. | ||
|
||
If you have tried and cannot think of any future possibilities, you may simply state that you cannot think of anything. | ||
|
||
Note that having something written down in the future-possibilities section is not a reason to accept the current or a future CEP; such notes should be in the section on motivation or rationale in this or subsequent CEPs. The section merely provides additional information. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,7 @@ | ||
# RFCs | ||
# Casper Enhancement Proposals | ||
|
||
This is an empty repository. Content will follow soon. | ||
Please see [CEP0001](text/0001-adopt-cep-process.md) on how to create a CEP. | ||
|
||
## Copyright | ||
|
||
The `0000-template.md` file has been taken from the [Rust RFCs](https://github.com/rust-lang/rfcs) repository and is licensed under the MIT license. Please see the linked repository for the original file and licensing details. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,86 @@ | ||
# Adopt the CEP process | ||
|
||
## Summary | ||
|
||
[summary]: #summary | ||
|
||
CEP PR: [casperlabs/ceps#0001](https://github.com/casperlabs/ceps/pull/0001) | ||
|
||
Make specifications, ideas and implementation guidelines more developer friendly and accessible through the introduction of an easy to use CEPs process. | ||
|
||
## Motivation | ||
|
||
[motivation]: #motivation | ||
|
||
To standardize on a single unified process for capturing and specifying proposals for enhancements to our software. | ||
|
||
There is a need for a reasonably lightweight process to discuss and adopt ideas, not only on the tech side, but governance and economics as well. We want this process to serve those behind these ideas and those implementing them first, instead of being caught in project management tooling. If possible, it should also be friendly to outside contributors, setting a low barrier for them to contribute feedback or their own ideas. | ||
|
||
Typical usecases are the discussion of refactoring or design decisions of the software, policies for governance, or schemes cooked up by the economics team. | ||
|
||
By introducing a little bit of formality, we hope to keep these designs fun and stave off the introduction of more restrictive processes. Creating CEPs should be easy using Markdown and GitHub, tools that everyone is already familiar with. | ||
|
||
We are largely based on the [Rust RFC process](https://github.com/rust-lang/rfcs), albeit simplified. This document will tell you all you need to know about creating a CEP. | ||
marc-casperlabs marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
## How to create a CEP | ||
|
||
[guide-level-explanation]: #guide-level-explanation | ||
|
||
Any CEP (short for "request for comments") starts out with an idea. Some ideas are small enough to be exhaustively discussed in a short Slack conversation before making it into a pull request, there is no need to create a CEP for these. However, if the discussions grows in size and requires feedback from multiple people, this is the process: | ||
marc-casperlabs marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
1. Fork the CEP repo at [casperlabs/ceps](https://github.com/casperlabs/ceps). | ||
2. Create a new branch for your CEP on your private repo, name it accordingly, e.g. `my-new-proposal`. | ||
3. Copy the `0000-template.md` from the root to `text/0000-my-new-proposal.md`. | ||
4. Edit the file, creating the first draft of the CEP. | ||
5. Create a pull request to the CEP repo at [casperlabs/ceps](https://github.com/casperlabs/ceps). This PR will have a number, which is the official CEP number. | ||
marc-casperlabs marked this conversation as resolved.
Show resolved
Hide resolved
|
||
6. Add one commit immediately that updates the file name and links inside the CEP with the assigned number. Afterwards, add a "Rendered" link pointing to the branch-latest file via GitHub on your CEPs branch for easier reading (e.g. `https://github.com/yourgitusername/CEPs/blob/my-new-proposal/text/1234-my-new-proposal.md`) | ||
|
||
### Discussion and merging | ||
|
||
The CEP now enters the discussion period. Invite people to review it by requesting reviews and/or messaging them directly. The ensuing discussion may result in proposed changes, which should be addressed through additional commits. | ||
|
||
Feedback and comments to the PR should be handled via GitHub to capture the discussion for later reference. | ||
|
||
Once a CEP is finished and has at least one approval, it can be merged. When deciding whose approvals are required for a merge, there is no hard rule - instead think about the teams impacted by this change and try to get at least one representative of each to sign off on this. If you do not know whom to invite, ask anyone in the project for a suitable reviewer. | ||
marc-casperlabs marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
The prescribed process ends here. How proposed features and changes make it into the product is currently unspecified. | ||
|
||
### Free-form | ||
|
||
Note that the process is somewhat free-form, this very first CEP already deviates from the template. The latter, like the pirate code, should be seen as more of a guideline than a hard rule. | ||
marc-casperlabs marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
## Drawbacks | ||
|
||
[drawbacks]: #drawbacks | ||
|
||
The goal of this process is to unify and replace previous approaches on other content sharing platforms. If the other previous approaches are not abandoned in favor of this one, this attempt at unification will effectively be dead on arrival having merely exacerbated the problem it was meant to solve. | ||
|
||
Another is potential growth of the process, making it become cumbersome. Any extension to this CEP itself should keep this in mind. | ||
|
||
While suggested, it is not possible to make the branch contain the CEP number, since it is assigned only by the time the PR is made, for which the branch already needs to exist. This is also why the seperate step updating the docs is required. | ||
|
||
## Rationale and alternatives | ||
|
||
[rationale-and-alternatives]: #rationale-and-alternatives | ||
|
||
Some of the existing infrastructure could accomodate this process at least partially: | ||
|
||
### Wiki/Confluence | ||
|
||
The internal confluence or any other Wiki could also handle some of this process, however they are typically lacking the sophisticated change tracking that is inherit in revision control systems like git. While this feature typically comes with a UX hit due to complexity, the fact that all people working on the project are familiar with developer tools makes this a non-issue. | ||
marc-casperlabs marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
### docs.casperlabs.io | ||
|
||
The docs repository is for outside-facing, polished documentation. People reading it are typically not concerned about new ideas that are still under discussion or not implemented yet, and do not want to read about refactorings of node internals. | ||
|
||
## Prior art | ||
|
||
[prior-art]: #prior-art | ||
|
||
The process is heavily based on [Rust's RFC process](https://github.com/rust-lang/rfcs) process, which seems to have worked well for the project. Other projects like NEAR [have adopted a copy of it](https://github.com/nearprotocol/NEPs/) as well. | ||
|
||
## Future possibilities | ||
|
||
[future-possibilities]: #future-possibilities | ||
|
||
Future work could include automating some tooling around the process, i.e. creating an automatic [mdbook](https://github.com/rust-lang/mdBook) and publishing it to GitHub pages. |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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.
Having started in on CEP-0003, I now realise that this is confusing.
The case in point is the sentence "In general, any serialized object is prefixed with a short tag indicating its type, regardless of the chosen serialization format."
I immediately thought "that's wrong", wasted some time writing a comment with examples to point out the error, and then realised further on that you meant that any serialized object should be prefixed by a tag.
Don't you think it'd be more natural to describe the proposed changes as proposed changes rather than changes which have already happened? I'd imagine most CEPs will want to refer to the current state of the code, and that will be difficult to disambiguate from changes suggested in the CEP if we adopt this style.
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 genuinely don't know, this is copied from the Rust project almost verbatim. It has the nice benefit of stating the actual status quo once it becomes implemented (and then being obsolete again when outdated ;))
How strongly do you feel about this? I can see your points, but they would take a little getting used to. On the other hand, I am assuming the Rust project does it this way for a reason...
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 don't feel overly strongly, but it's surprising the Rust project specifies it. I glanced at a couple of their RFCs and found them to be talking in terms of "should be", "will be", etc. rather than "is".
Maybe this is just one of those rules which makes so little sense that nobody actually follows it?
Either way, I'm happy to leave this if you prefer and we can always revisit in the future.
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 certainly won't fault anyone for doing so. It's a bit counterintuitive, for sure.