Skip to content

Design: always-visible stabilize preview for prerelease graduation (standing PR) #552

Description

@goosewobbler

Design spike (2026-07). Correcting the framing: the escalation bugs this was scoped around are already fixed, so the remaining work is a UX/graduation feature, not a bug fix.

The bugs are already fixed

So the escalation mechanics work. What's left is the graduation UX — the sampo-derived "always-visible stabilize preview" that makes graduating a prerelease a one-action step and guarantees the stable changelog captures the full prerelease history.

Remaining scope

  1. Always-visible stabilize preview. Alongside the prerelease state, surface "what would the stable release look like right now" — the graduated version(s) + the accumulated stable changelog — so a maintainer graduates with one action instead of reconstructing intent.
  2. Graduation history accumulation. Specify how interim prerelease notes (1.0.0-next.0..N) roll up into the stable 1.0.0 changelog at graduation, so nothing is lost.

Design options (sketch)

  • Option A — in-PR region (lean). A "Stabilize" region in the existing standing-PR body, beside the rk-pre/rk-grad channel toggles and the summary-region (summary-region.ts, already premajor-aware). Graduation = tick rk-grad / merge. Reuses all existing standing-PR / marker / manifest machinery; one control plane, one source of truth.
  • Option B — parallel Stabilize PR (sampo's model). A second always-current PR showing the stable graduation; graduation = merge that PR. Cleaner "one-click merge" semantics, but doubles the PR surface plus marker/manifest bookkeeping, concurrency, and refresh logic.
  • Lean: A. The standing PR is already a rich control plane; a region is far less machinery than a second managed PR. Revisit B only if the one-click-merge UX proves decisive.

Constraints to preserve (the reason to capture this now)

Recommendation

With the escalation bug fixed, the urgent driver is gone — this is now a UX enhancement, not a bug fix. It's appropriately at 0.45.0 (📋 lifecycle) and genuinely optional: the value is "graduation is one action + a guaranteed-complete stable changelog"; the cost is a new standing-PR region + history-rollup plumbing. Detailed design should wait until #544/#545 land (they reshape the plan surface and version inputs this builds on) so it doesn't design against a moving target; this spike captures the direction and the constraints above so that later work is cheap and isn't foreclosed by #544/#545.

Open prioritization question: now that the bugs are fixed, is the stabilize-preview UX worth a 0.45.0 slot, or does it drop to 🔭 later until a consumer actually asks for it? Recommend deciding that when 0.44.0 is in flight, with the constraints above already protected.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions