Description
From slack (summarized):
Is the KEP freeze "you must have all KEP changes merged" or "You must have all intended-to-change KEPs in the sheet"?
For example: I have some KEPs which we WANT to move from Alpha->Beta or Beta->GA, but the code to do those things is not done yet and MIGHT slip. I don't want to change KEP stage
text until we know whether it is in or not, and that won't be until well after the enhancement freeze.
That's not an exception - that's the norm, I think.
I think the only sane interpretation is that the KEP deadline indicates which KEPs are being tracked, but every KEP should be considered "at risk" until stage changes, and when stage changes, that should be authoritative. What I DON'T want is to have to remember to revert changes to a KEP if the code misses the release. That will fail and leave ambiguous results.
Do we need a 2-phase commit - a distinction between target and actual?
We need clarity on the enhancement freeze - what EXACTLY is the deadline for? What sorts of KEP changes are allowed after the enhancement freeze?
Rey said "Enhancements Freeze indicates which KEPs are being tracked ... What the release team looks for in Enhancements Freeze is for the KEP to be marked as "implementable", has the correct stage for the release, ... and an approved PRR"
This says to me that if I want to move to GA in 1.23, I update the KEP to say GA
for stage. If the code doesn't make it, we have a KEP that is ambiguous (or flat out lying). Expecting people to come back and revert the stage
is unrealistic.
IMO - stage should be a trailing indicator. Updating stage should be on the success path, not on the failure path.
Some SIGs/reviewers are resetting the status to implemented/implementable for each stage. I don't think that was the intention.
Between stage
, milestone
, and status
there's overlap and ambiguity. For example, let's look at a new KEP.
It starts as:
stage: alpha
status: provisional
alpha:
beta:
ga:
We iterate on that and it ultimately gets approved:
stage: alpha
status: implementable
alpha: v1.X
beta: v1.Y
ga: v1.Z
Development work happens and we release v1.X. Given the above fields, I can assume that this KEP is alpha in v1.X. But if, for some reason, the code missed the boat, someone has to go back and edit the KEP to change alpha
, beta
, and ga
. That is prone to failure, and if it is forgotten, then people might take the wrong result.
I think we should instead do soemthing like:
stage: prealpha
status: provisional
alpha:
beta:
ga:
which gets approved to:
stage: prealpha
status: implementable
alpha: v1.X
beta: v1.Y
ga: v1.Z
When we release v1.X, we can update this to:
stage: alpha
status: implementable
alpha: v1.X
beta: v1.Y
ga: v1.Z
This means that someone has to touch the KEP - the same as before, but the failure mode is better. People won't accidentally assume it is ready to use. It would stay in this state until all the code for beta is merged, at which point it becomes:
stage: beta
status: implementable
alpha: v1.X
beta: v1.Y
ga: v1.Z
Obviously, we could model this other ways. E.g. we could have a per-stage status:
status:
alpha: implemented
beta: implementable