- Goals
- Inspiration
- Implementation
- Some examples of efforts which should follow the RFC process
- Tracking RFC progress through the release cycle
- Customization of the RFC process and exceptions
- there should be a place to write high quality release notes for upcoming changes
- release notes should not be tied to an individual pull request (PR) given that large features may be split over multiple pull requests, especially when a change is back ported to older release branches
- it should be easier to see whether an effort is being actively worked on or is still in the design phase
- having to apply and reapply labels to issues changing their stability phase is mostly busy work
- in general producing high quality blog posts requires summarizing technical information for less technical audiences, however, it is very difficult to source this material without contacting developers directly
- there should be one place to link discussion threads about a change
- SIGs should be able to approve or reject a proposed change, GitHub Issues have poor support for this given the limited number of states a GitHub Issue can be in {open|closed}
- the design proposal for a requested change should be collocated with other information about a proposed change
- high level design considerations should be discussed before detailed design and implementation plans
- SIGs should only be required to update documents with useful information (e.g motivation for change, high level description of the change for release notes, high level design considerations, detailed design and implementation plan, stability criteria)
- improvement of
git
"muscles": familiarity withgit
is a skill that pays dividends while GitHub Issue management not so much
- we should avoid the use of proprietary tools (GitHub Issues, Google Sheets) as much as possible for an OSS project
- it should be clear where the default place for efforts is tracked
The rust rfc process
The idea of a "feature" will be expanded to a "request for comment" (RFC) process. The RFC process should be used to track all changes made to Kubernetes including development processes. An RFC should follow a standard template:
-
links:
- to implementation issue(s) (to be filled out later)
- to PR for initial RFC (self reference to maintain link to PR discussion)
- to PR for detailed design (self reference to maintain link to PR discussion)
- to RFC specific mailing list discussion
-
responsible SIG(s):
- what SIG(s) are responsible for reviewing the change and owning its maintenance
-
summary:
- high level description of change which is high enough quality (grammar, spelling, clarity) to serve as the release note for the change
-
motivation:
- why do we believe this change is important
- what benefits would the change provide
- what are some examples of how the change would be consumed
- high level design goals
-
detailed design:
- the technical information required for someone to implement the change
- this section will probably vary significantly by SIG. For example the proposed changes to the API review process would likely fit within the detailed design section
-
graduation criteria
- what criteria will be used to evaluate the stability of a software feature introduction; what metrics will be used to evaluate the success of a process change
-
drawbacks (optional):
- what are the trade offs we know we are making with the accepted detailed design and why are we willing to accept them
-
alternatives (optional):
- is this RFC an extension or revision of a previously accepted RFC
- are there other approaches to satisfying the same motivation
-
unresolved questions (optional):
- questions we could not reach consensus on but prevent implementation or things we just don't know yet
-
mentor(s) (optional):
- who is willing and able to offer support to the implementer(s) of the RFC so we can grow our community of contributors
I believe a reasonable expectation would be to have sections (1 - 4) fully filled out and agreed upon
before an RFC is allowed to merge into kubernetes/rfcs
which would signal acceptance of the problem
identified in the motivation. After merge the author(s) of an RFC should work with the responsible
SIG(s) to flesh out a detailed design (what we currently use design proposals for) and fill out sections
(5 - 9) at which time work can begin on an implementation. Section (10) should be filled out at the same
time as sections (1 - 4). Implementation of an RFC will involve one or more PRs which should reference the
tracking issue(s) for the RFC.
Once the RFC process is finalized and approved kubernetes/features
will be drained of existing issues and new
changes will be approved through the RFC process.
- any code change which would produce a release note
- feature deprecation
- changes which require node drain
- changes to the release process
- changes to test infrastructure
- extraction of component from
kubernetes/kubernetes
- transfer of a repository to the
{kubernetes, kubernetes-incubator}
GitHub organization - governance changes
- change to the RFC process itself
- change will require operator action before or after upgrade
We are all greatly indebted to @idvoretskyi for all the hard done in maintaining the features tracking spreadsheet for the last several releases, however, given several requests for different ways to visualize efforts in progress it may be easier to store RFC progress snapshots in version control and allow community members to build tooling as desired.
It is proposed to extend the current set of issue status labels to cover the status of documentation
(e.g docs/update-required
, docs/in-review
, docs/approved
) working under the assumption that
release notes will be derived from the RFC linked from the implementation issue.
It is also proposed to create a standard template for a release status document which will be checked into version control and shared with the community during the release cycle. These release status reports will list the status of the implementation of RFCs by SIG. The status reports will also have RFCs broken down by documentation status with the goal of driving the number of RFCs which are open per SIG as well as the number of RFCs required updated documentation burns down to zero as the release date approaches. The status reports should contain links to GitHub queries so that creating updated reports is simple.
Ideally the work to update the release status report will be shared among SIG members independent of the Release Team. It may also be possible to generalize the idea of a release status report in order to provide source material for efforts like this week in rust
SIGs should be able to provide their own RFC process which is closely tailored to their domain, however, SIGs should specify in their chartering documents which RFC process they will use and what exceptions will be made for minor changes submitted with a simple PR