# Enhancements Playbook
## Important Milestones
### Enhancements Freeze
All enhancements that want to be in the release cycle need to
1. Have their KEP merged in an implementable state
2. KEP must have test plans
3. KEP must have graduation criteria
### Code Freeze
All the enhancements collected after the Enhancements Freeze need to have their code and test PR's merged by this date.
> Note: If any enhancement violates the criteria for the above milestones, they need to file an [exception][1].
## Important Points to Note
- Give importance to understanding the KEP and the conversations around it
- Try to do less shepherding - somebody will still need to work on the enhancement and with what is happening around in the world, it is a tough situation
- The plays below are mere guidelines. Question them, reason them.
- Think of this as a learning opportunity into the world of Kubernetes Features - how things are designed, the thought process and so on.
## Plays
1. Lead announces the start of Enhancement Collection on k-dev.
2. All of the team starts pinging Enhancements owners on the respective [k/enhancements][2] issues. A sample of the message is shown below:
```
Hey there <assignee/owner/author> -- 1.19 Enhancements shadow here. I wanted to check in and see if you think this Enhancement will be graduating in 1.19?
In order to have this part of the release:
1. The KEP PR must be merged in an implementable state
2. The KEP must have test plans
3. The KEP must have graduation criteria.
The current release schedule is:
- Monday, April 13: Week 1 - Release cycle begins
- Tuesday, May 19: Week 6 - Enhancements Freeze
- Thursday, June 25: Week 11 - Code Freeze
- Thursday, July 9: Week 14 - Docs must be completed and reviewed
- Tuesday, August 4: Week 17 - Kubernetes v1.19.0 released
If you do, I'll add it to the 1.19 tracking sheet (http://bit.ly/k8s-1-19-enhancements). Once coding begins please list all relevant k/k PRs in this issue so they can be tracked properly. 👍
Thanks!
```
3. After the above message, the wait for a response begins.
4. If the author confirms being part of the release, check the KEP against the requirements listed above.
a. If the requirements are met, update the tracking sheet column `Enhancement Status -> Tracked`
b. If the requirements are not met, set `Enhancement Status -> At Risk` and follow up with the author pinging them to complete the criteria.
c. In both a. and b. above, set the following columns too:
`Stage -> Alpha/Beta/Stable` depending on what the owner has confirmed
`Stage Status -> Refer` to the notes [below](#Judging-Stage-Status)
d. In addition to the above actions on the tracking sheet, also set the following Github labels on the issue by using the commands shown below and setting the `tracked/yes` label manually from the dropdown.
```
/stage alpha|beta|stable
/milestone v1.19
```
5. If the author confirms that they DONT want to be part of this release,
a. Set `Enhancement Status -> Untracked` if they don't explicitly mention they would part of any specific release.
b. Set `Enhancement Status -> Deferred` if they explicitly mention they would part of any specific release, say 1.20 or 1.21.
c. In addition to the above actions on the tracking sheet, also set the following Github labels on the issue by using the commands shown below and setting the `tracked/no` label manually from the dropdown.
```
/milestone clear (if no release in future is mentioned AND a milestone is already set)
/milestone v1.20|v1.21|... (if specific release in future is mentioned)
```
6. Keep pinging the unresponsive enhancements periodically, let's say, every ~3 days when Enhancements Freeze is more than a week away, or ~2 days if we are within 1 week of the Enhancements Freeze. PS: This is not very hard and fast if this then that. Use the best of your judgement here.
7. On the day of Enhancements Freeze,
a. Lead sends an email that Enhancements Freeze has kicked in
b. all issues `At Risk` are removed from the milestone by clearing the milestone from Github and setting the `tracked/no` label
c. The same issues are pinged that Enhancement Freeze is in action and if they want the enhancement to be part of the release, they would need to file an exception. Sample message below.
```
-- Unfortunately the deadline for the 1.19 Enhancement freeze has passed and the KEP is still missing <something>. For now this is being removed from the milestone and [1.19 tracking sheet](http://bit.ly/k8s-1-19-enhancements). If there is a need to get this in, please file an [enhancement exception](https://github.com/kubernetes/sig-release/blob/master/releases/EXCEPTIONS.md).
```
8. TBD :) (We won't need the plays from this step until Enhancement Freeze kicks in)
Enhancements Collection
---
Day of Enhancements Freeze
---
Code Freeze
---
Day of Code Freeze
---
#### Notes
##### Judging Stage Status
If the feature is graduating to Alpha, the status can either be Net New/Major Change. But usually when features are introduced to Kubernetes, they are not Major Changes.
If the feature is graduating to Beta/Stable, almost always the state is Graduating/Major Change.
One exception to that is some features directly jump the hoop to Beta, in that case, the status can be Net New for even a Beta feature.
Feel free to ask about this when in doubt.
[1]: https://github.com/kubernetes/sig-release/blob/master/releases/EXCEPTIONS.md
[2]: https://github.com/kubernetes/enhancements