Fix Releases page unreleased-commit count on stale or git-free installs - #897
Merged
Conversation
The admin enrichment on /release/info ran git against serverDir and never fetched, so a runtime install pinned to a release tag (or with stale origin/main) reported 'No unreleased commits' while the dispatched release workflow would happily release current main. - Resolve the same authoring checkout the release job uses (DISPATCH_RELEASE_AUTHORING_REPO_DIR, serverDir fallback) via a shared resolveAuthoringRepoDir helper - Fetch origin/main + tags in that checkout before comparing - Surface fetch failures as unreleasedFetchError in the API and a warning banner in the UI instead of silently reporting zero; Create release stays available in that state - Non-authoring installs are unchanged: the isAdmin gate already short-circuits before any git runs Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- In-flight release no longer takes over the page: a status banner keeps the page usable, with View progress / Back to releases to jump in and out of the full log view - Create buttons preview the resulting tag (Patch → v0.32.3) and require an inline confirm before triggering the workflow; Promote gets the same confirm treatment - Refresh button + 'checked Ns ago' indicator on Unreleased changes; info requests now pass the release stream client id so slow loads show the server's info-progress steps instead of a bare spinner - When a watched release completes, the page auto-refreshes so just-released commits leave the unreleased list; a stale done job from the stream snapshot no longer resurrects UI on revisit Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Backend (backend-security-review #601): - Coalesce authoring-checkout git fetches: new createAuthoringRemoteRefresher gives /release/info single-flight per checkout plus a 15s freshness TTL, so concurrent admin refreshes share one fetch instead of contending for git ref locks or spawning unbounded 30s subprocesses; failures are also cached for the TTL. Concurrency regression tests included. - Sanitize unreleasedFetchError: the client now gets a fixed message; the raw git error (stderr, paths) goes to the server log only. Frontend (frontend-ux-review #600): - bumpVersion only predicts a tag from an exact stable semver base; a prerelease-suffixed tag shows no preview rather than a wrong promise. - Refresh control is the shared icon Button with an aria-label (32px hit area) instead of a bare 14px SVG. - Release rows wrap so the inline Promote confirmation fits at 320px. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The three full-width release-type cards and the inline confirm panel were heavy, shifted layout when confirming, and left the type buttons clickable behind the open confirmation. Replace with a standard row of compact buttons (version tag inline) and a shadcn Dialog confirm — no layout shift, backdrop blocks interaction while open. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Uh oh!
There was an error while loading. Please reload this page.
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 freeto 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.
Problem
The Releases page could show "No unreleased commits on main" even when a triggered release would ship real commits. The admin enrichment in
/api/v1/release/info(computeAdminExtras) rangit rev-parse/rev-list/logagainstserverDirand never fetched — while the release job itself uses the authoring checkout (DISPATCH_RELEASE_AUTHORING_REPO_DIR) and GitHub Actions releases currentmainregardless. On a runtime install pinned to a release tag, or a maintainer install with staleorigin/main, the page silently reported zero.Fix
resolveAuthoringRepoDir()helper (env var withserverDirfallback), used by both the release job and the admin enrichment so they agree on the checkout.git fetch --tags origin main(30s timeout) in that checkout before comparing.unreleasedFetchErrorin the API and a warning banner in the UI — never silently rendered as "zero unreleased commits". The Create release buttons stay available in that state (mirroring the existingrefMissingbehavior).checkIsAdmin()already returns false whenDISPATCH_RELEASE_AUTHORINGis unset, so no git runs for ordinary users.Releases page UX improvements (second commit)
Validation
resolveAuthoringRepoDirfallbacks.pnpm run check,pnpm run finalize:web, vitest (2424 passed), Playwright E2E (176 passed, 12 skipped) — run after each commit.Idea:
dispatch-ideas/release-page-authoring-checkout-gap🤖 Generated with Claude Code