feat(github): name every rollout member unambiguously - #1272
Draft
aparajon wants to merge 3 commits into
Draft
Conversation
A rollout member is identified by its deployment and target together, but
the deployment alone is what the plan comment, check summary, apply comment
and CLI progress have been showing. Once one deployment can address several
targets, two members render under the same name, and a label that points at
another member ("waiting for X", "halted by X") no longer identifies one.
routing.DisplayNames is the single naming rule every surface now uses: a
member is named by its deployment alone unless that deployment addresses
more than one distinct target in the rollout, in which case every member of
that deployment is named deployment/target. Keying on distinct targets is
what keeps a keyed or sharded apply — several operations of one deployment
against the same target — named by the deployment, where the extra half
would be noise that still did not tell the operations apart.
presentation.Derive resolves each member's name once and hands it to every
consumer, including the labels that reference a sibling and the suggested
next action. The apply comment's per-member detail bodies move from a
name-keyed map to a slice paired positionally with the model, since a map
collapses two members of one deployment onto one body.
The independent-planning contract also reaches the wording: an errored
member reads "could not plan" where targets hold their own schemas and
"could not verify" where they are expected to mirror each other.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why this matters
A rollout member is its deployment and its target together, but the deployment alone is what every operator-facing surface shows. Once one deployment can address several targets, two members render under the same name — and a label that points at another member ("waiting for X", "halted by X") stops identifying one of them at all.
The lookups behind those surfaces were already keyed by that name, which is a defect that predates multi-target: a keyed or sharded apply has several operations per deployment today, and a by-name lookup returns whichever one it finds first.
What it does
routing.DisplayNamesbecomes the single naming rule every surface uses:Keying on distinct targets rather than member count is what keeps a keyed or sharded apply — several operations of one deployment against the same target — named by the deployment, where the extra half would be noise that still did not tell the operations apart.
presentation.Deriveresolves each member's name once and returns one entry per input operation in input order, so every consumer pairs by index instead of looking a name up:The apply comment's per-member details move from a name-keyed map to a positional slice, and the CLI progress and watch-TUI by-name lookups become index lookups. An errored member's wording also follows the contract it was planned under: a mirrored member "could not verify" (its diff could not be confirmed against the reviewed plan), an independent member "could not plan" (it has no plan at all).
Plan comment — an independent member that could not be planned
Apply status comment — three members, one deployment addressing two targets
CLI progress — members named in full, next-action pointing at a specific member
How it moves us toward the northstar
A4a's multi-target rejection was as much a UX constraint as a routing one: a rollout the operator cannot read is not one we can let them run. This is the presentation half — every surface can now name each member of a
ResolveTargetsresult unambiguously, using one rule rather than five copies of a convention.Opened by Claude (Fable 5).