yggdrasil RFCs
Welcome to the RFC repository for the yggdrasil framework! This repository contains the proposals and discussions for changes, improvements and new features within the yggdrasil framework.
Introduction to RFCs
RFCs (Request for Comments), are a series of documents used to discuss and define standards for core components of the yggdrasil framework. They help the team discuss and set standards for the core components of the framework, while maintaining an organised structure. In addition to providing comprehensive documentation, these documents also encapsulate the reasoning, design process, and guiding philosophy behind these components.
The RFC process serves a dual purpose: It encourages collaboration and transparency, while also serving as a valuable educational resource for existing and future contributors. This resource helps aids in understanding the framework's evoluation and principles, making it a crucial resource for anyone who wants to be a part of the framework's development!
RFC Process
This section describes the RFC process for the yggdrasil framework.
When you need to follow this process
You need to follow this process if you intend to introduce "substantial" changes or additions to the framework or the RFC process itself. A "substantial" change or addition refers to a modification or proposal that has a significant impact on the framework, its design or functionality.
TODO: provide examples
Some changes do not require an RFC:
- Rephrasing, reorganizing, refactoring, or otherwise "changing shape does not change meaning".
- Additions that strictly improve objective, numerical quality criteria (warning removal, speedup, trap more errors, etc.)
If you submit a pull request to implement a new feature without going through the RFC process, it may be closed with a polite request to submit an RFC first.
What the proces is
In short, to introduce major changes or additions to the yggdrasil framework, one must first get the RFC merged into the RFC repository as a markdown file. At that point the RFC is "active" and may be implemented in the framework.
The process consists of the following steps:
-
Create a new branch on the rfc repository, make sure it follows the contributing guidelines.
-
Copy
000-template.mdtorfc/000-my-feature.md(where my feature is descriptive!).Don't assign an RFC number yet; This is going to be the PR number and we'll rename the file accordingly if the RFC is accepted!
-
Fill in the RFC. Put care into the details for a swifty process!
-
Submit a pull request. As a pull request the RFC will receive design feedback from the rest of the team, and the author should be prepared to revise it in response.
-
Now that your RFC has an open pull request, you can use the issue number of the PR to update your
000-prefix to that number. -
Once a consensus has been reached, the RFC will be merged and the implementation will be planned.
todo: structure this overview
- Feature Name: (fill me in with a unique ident,
awesome_new_feature) - Start Date: (fill me in with today's date, YYYY-MM-DD)
- RFC PR: IntelligentRoboticsLab/yggdrasil-rfcs#000
- yggdrasil Issue: IntelligentRoboticsLab/yggdrasil#000
Summary
One paragraph explanation of the feature.
Motivation
Why are we doing this? What use cases does it support? What is the expected outcome?
Guide-level explanation
Explain the proposal as if it was already included in the framework and you were teaching it to another developer. That generally means:
- Introducing new named concepts.
- Explaining the feature largely in terms of examples.
- Explaining how developers should think about the feature, and how it should impact the way they use the framework. It should explain the impact as concretely as possible.
- If applicable, provide sample error messages, deprecation warnings, or migration guidance.
- Discuss how this impacts the ability to read, understand, and maintain framework code. Code is read and modified far more often than written; will the proposed feature make code easier to maintain?
For implementation-oriented RFCs (e.g. for compiler internals), this section should focus on how compiler contributors should think about the change, and give examples of its concrete impact. For policy RFCs, this section should provide an example-driven introduction to the policy, and explain its impact in concrete terms.
Drawbacks
Why should we not do this?
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?
Unresolved questions
- What parts of the design do you expect to resolve through the RFC process before this gets merged?
- What parts of the design do you expect to resolve through the implementation of this feature before stabilization?
- 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?