Skip to content

Commit 02f329e

Browse files
adding docs/proposals/ folder and sample template
Signed-off-by: Chris Hein <[email protected]>
1 parent 19e72eb commit 02f329e

File tree

1 file changed

+202
-0
lines changed

1 file changed

+202
-0
lines changed

docs/proposals/YYYYMMDD-template.md

Lines changed: 202 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,202 @@
1+
---
2+
title: proposal Template
3+
authors:
4+
- "@janedoe"
5+
reviewers:
6+
- "@janedoe"
7+
creation-date: yyyy-mm-dd
8+
last-updated: yyyy-mm-dd
9+
status: provisional|implementable|implemented|deferred|rejected|withdrawn|replaced
10+
see-also:
11+
- "/docs/proposals/20190101-we-heard-you-like-proposals.md"
12+
- "/docs/proposals/20190102-everyone-gets-a-proposal.md"
13+
replaces:
14+
- "/docs/proposals/20181231-replaced-proposal.md"
15+
superseded-by:
16+
- "/docs/proposals/20190104-superceding-proposal.md"
17+
---
18+
19+
# Title
20+
- Keep it simple and descriptive.
21+
- A good title can help communicate what the proposal is and should be considered as part of any review.
22+
23+
<!-- BEGIN Remove before PR -->
24+
To get started with this template:
25+
1. **Make a copy of this template.**
26+
Copy this template into `docs/proposals/` and name it `YYYYMMDD-my-title.md`, where `YYYYMMDD` is the date the proposal was first drafted.
27+
1. **Fill out the required sections.**
28+
1. **Create a PR.**
29+
Aim for single topic PRs to keep discussions focused.
30+
If you disagree with what is already in a document, open a new PR with suggested changes.
31+
32+
The canonical place for the latest set of instructions (and the likely source of this file) is [here](/docs/proposals/YYYYMMDD-proposal-template.md).
33+
34+
The `Metadata` section above is intended to support the creation of tooling around the proposal process.
35+
This will be a YAML section that is fenced as a code block.
36+
See the proposal process for details on each of these items.
37+
38+
<!-- END Remove before PR -->
39+
40+
## Table of Contents
41+
42+
A table of contents is helpful for quickly jumping to sections of a proposal and for highlighting
43+
any additional information provided beyond the standard proposal template.
44+
[Tools for generating](https://github.com/ekalinin/github-markdown-toc) a table of contents from markdown are available.
45+
46+
- [Title](#title)
47+
- [Table of Contents](#table-of-contents)
48+
- [Summary](#summary)
49+
- [Motivation](#motivation)
50+
- [Goals](#goals)
51+
- [Non-Goals](#non-goals)
52+
- [Proposal](#proposal)
53+
- [User Stories [optional]](#user-stories-optional)
54+
- [Story 1](#story-1)
55+
- [Story 2](#story-2)
56+
- [Implementation Details/Notes/Constraints [optional]](#implementation-detailsnotesconstraints-optional)
57+
- [Risks and Mitigations](#risks-and-mitigations)
58+
- [Design Details](#design-details)
59+
- [Test Plan](#test-plan)
60+
- [Graduation Criteria](#graduation-criteria)
61+
- [Examples](#examples)
62+
- [Alpha -> Beta Graduation](#alpha---beta-graduation)
63+
- [Beta -> GA Graduation](#beta---ga-graduation)
64+
- [Removing a deprecated flag](#removing-a-deprecated-flag)
65+
- [Upgrade / Downgrade Strategy](#upgrade--downgrade-strategy)
66+
- [Version Skew Strategy](#version-skew-strategy)
67+
- [Implementation History](#implementation-history)
68+
- [Drawbacks [optional]](#drawbacks-optional)
69+
- [Alternatives [optional]](#alternatives-optional)
70+
- [Infrastructure Needed [optional]](#infrastructure-needed-optional)
71+
72+
## Summary
73+
74+
The `Summary` section is incredibly important for producing high quality user-focused documentation such as release notes or a development roadmap.
75+
It should be possible to collect this information before implementation begins in order to avoid requiring implementors to split their attention between writing release notes and implementing the feature itself.
76+
77+
A good summary is probably at least a paragraph in length.
78+
79+
## Motivation
80+
81+
This section is for explicitly listing the motivation, goals and non-goals of this proposal.
82+
83+
- Describe why the change is important and the benefits to users.
84+
- The motivation section can optionally provide links to [experience reports](https://github.com/golang/go/wiki/ExperienceReports)
85+
to demonstrate the interest in a proposal within the wider Kubernetes community.
86+
87+
### Goals
88+
89+
- List the specific goals of the proposal.
90+
- How will we know that this has succeeded?
91+
92+
### Non-Goals/Future Work
93+
94+
- What is out of scope for this proposal?
95+
- Listing non-goals helps to focus discussion and make progress.
96+
97+
## Proposal
98+
99+
This is where we get down to the nitty gritty of what the proposal actually is.
100+
101+
- What is the plan for implementing this feature?
102+
- What data model changes, additions, or removals are required?
103+
- Provide a scenario, or example.
104+
- Use diagrams to communicate concepts, flows of execution, and states.
105+
106+
[PlantUML](http://plantuml.com) is the preferred tool to generate diagrams,
107+
place your `.plantuml` files under `images/` and run `make diagrams` from the docs folder.
108+
109+
### User Stories
110+
111+
- Detail the things that people will be able to do if this proposal is implemented.
112+
- Include as much detail as possible so that people can understand the "how" of the system.
113+
- The goal here is to make this feel real for users without getting bogged down.
114+
115+
#### Story 1
116+
117+
#### Story 2
118+
119+
### Implementation Details/Notes/Constraints
120+
121+
- What are some important details that didn't come across above.
122+
- What are the caveats to the implementation?
123+
- Go in to as much detail as necessary here.
124+
- Talk about core concepts and how they releate.
125+
126+
### Risks and Mitigations
127+
128+
- What are the risks of this proposal and how do we mitigate? Think broadly.
129+
- How will UX be reviewed and by whom?
130+
- How will security be reviewed and by whom?
131+
- Consider including folks that also work outside the SIG or subproject.
132+
133+
## Alternatives
134+
135+
The `Alternatives` section is used to highlight and record other possible approaches to delivering the value proposed by a proposal.
136+
137+
## Upgrade Strategy
138+
139+
If applicable, how will the component be upgraded? Make sure this is in the test plan.
140+
141+
Consider the following in developing an upgrade strategy for this enhancement:
142+
- What changes (in invocations, configurations, API use, etc.) is an existing controller required to make on upgrade in order to keep previous behavior?
143+
- What changes (in invocations, configurations, API use, etc.) is an existing controller required to make on upgrade in order to make use of the enhancement?
144+
145+
## Additional Details
146+
147+
### Test Plan [optional]
148+
149+
**Note:** *Section not required until targeted at a release.*
150+
151+
Consider the following in developing a test plan for this enhancement:
152+
- Will there be e2e and integration tests, in addition to unit tests?
153+
- How will it be tested in isolation vs with other components?
154+
155+
No need to outline all of the test cases, just the general strategy.
156+
Anything that would count as tricky in the implementation and anything particularly challenging to test should be called out.
157+
158+
All code is expected to have adequate tests (eventually with coverage expectations).
159+
Please adhere to the [Kubernetes testing guidelines][testing-guidelines] when drafting this test plan.
160+
161+
[testing-guidelines]: https://git.k8s.io/community/contributors/devel/sig-testing/testing.md
162+
163+
### Graduation Criteria [optional]
164+
165+
**Note:** *Section not required until targeted at a release.*
166+
167+
Define graduation milestones.
168+
169+
These may be defined in terms of API maturity, or as something else. Initial proposal should keep
170+
this high-level with a focus on what signals will be looked at to determine graduation.
171+
172+
Consider the following in developing the graduation criteria for this enhancement:
173+
- [Maturity levels (`alpha`, `beta`, `stable`)][maturity-levels]
174+
- [Deprecation policy][deprecation-policy]
175+
176+
Clearly define what graduation means by either linking to the [API doc definition](https://kubernetes.io/docs/concepts/overview/kubernetes-api/#api-versioning),
177+
or by redefining what graduation means.
178+
179+
In general, we try to use the same stages (alpha, beta, GA), regardless how the functionality is accessed.
180+
181+
[maturity-levels]: https://git.k8s.io/community/contributors/devel/sig-architecture/api_changes.md#alpha-beta-and-stable-versions
182+
[deprecation-policy]: https://kubernetes.io/docs/reference/using-api/deprecation-policy/
183+
184+
### Version Skew Strategy [optional]
185+
186+
If applicable, how will the component handle version skew with other components? What are the guarantees? Make sure
187+
this is in the test plan.
188+
189+
Consider the following in developing a version skew strategy for this enhancement:
190+
- Does this enhancement involve coordinating behavior in the control plane and in the kubelet? How does an n-2 kubelet without this feature available behave when this feature is used?
191+
- Will any other components on the node change? For example, changes to CSI, CRI or CNI may require updating that component before the kubelet.
192+
193+
## Implementation History
194+
195+
- [ ] MM/DD/YYYY: Proposed idea in an issue or [community meeting]
196+
- [ ] MM/DD/YYYY: Compile a Google Doc following the CAEP template (link here)
197+
- [ ] MM/DD/YYYY: First round of feedback from community
198+
- [ ] MM/DD/YYYY: Present proposal at a [community meeting]
199+
- [ ] MM/DD/YYYY: Open proposal PR
200+
201+
<!-- Links -->
202+
[community meeting]: https://docs.google.com/document/d/1Ih-2cgg1bUrLwLVTB9tADlPcVdgnuMNBGbUl4D-0TIk

0 commit comments

Comments
 (0)