Problem
The main-line Switchover writer tracked in #10649 must persist a durable dispatch claim before invoking a non-idempotent lifecycle action. A release-1.0 controller taking over or receiving a rollback must recognize that claim and refuse to redispatch the action.
ProgressStatusDetail.message is human-readable display text and cannot carry protocol version, request identity, token, or dispatch state. Main and release readers need one explicit, optional, versioned status API.
Scope
Backport the reader-side v1 contract to release-1.0:
- add and document the optional structured dispatch status and regenerate API artifacts;
- validate the exact OpsRequest UID, logical component/sharding key, source instance, optional candidate, and writer token;
- continue observation only for
Resolved;
- fail closed for
Claimed, OutcomeUnknown, unknown versions/states, and identity mismatches;
- keep
message display-only;
- keep the pre-protocol legacy path only when structured dispatch state is absent;
- do not create or mutate dispatch claims.
This issue covers only the release-1.0 reader. The main writer remains blocked until supported reader backports and their CRDs are merged and released, and the writer uses the same v1 field.
Implementation: #10680
Problem
The main-line Switchover writer tracked in #10649 must persist a durable dispatch claim before invoking a non-idempotent lifecycle action. A release-1.0 controller taking over or receiving a rollback must recognize that claim and refuse to redispatch the action.
ProgressStatusDetail.messageis human-readable display text and cannot carry protocol version, request identity, token, or dispatch state. Main and release readers need one explicit, optional, versioned status API.Scope
Backport the reader-side v1 contract to release-1.0:
Resolved;Claimed,OutcomeUnknown, unknown versions/states, and identity mismatches;messagedisplay-only;This issue covers only the release-1.0 reader. The main writer remains blocked until supported reader backports and their CRDs are merged and released, and the writer uses the same v1 field.
Implementation: #10680