From 1fc329b123eeb4ffa2c78ec43e8225c1eb97c1c0 Mon Sep 17 00:00:00 2001 From: Josh Wright Date: Wed, 14 Oct 2026 19:43:29 -0400 Subject: [PATCH] Hide promoted files from beta picker --- src/lib/script-library.ts | 6 +++++- src/routes/betas/new/+page.svelte | 10 ++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/lib/script-library.ts b/src/lib/script-library.ts index 9fb5d2d..c264271 100644 --- a/src/lib/script-library.ts +++ b/src/lib/script-library.ts @@ -38,7 +38,11 @@ export function scriptStatus(s: LibraryScript): ScriptStatus { if (s.latestVersion.id === s.current_version_id) return 'promoted'; return s.latestVersion.state === 'test-failed' ? 'failed' : s.latestVersion.state; } -export function canTest(s: LibraryScript): boolean { +export function canTest(s: { + runningBetaId: number | null; + latestVersion: { id: number } | null; + current_version_id: number | null; +}): boolean { return ( s.runningBetaId === null && s.latestVersion !== null && diff --git a/src/routes/betas/new/+page.svelte b/src/routes/betas/new/+page.svelte index 5aa3612..afade2c 100644 --- a/src/routes/betas/new/+page.svelte +++ b/src/routes/betas/new/+page.svelte @@ -23,7 +23,7 @@ } from '$lib/beta-draft.js'; import { coverageSummary, requirementSummary } from '$lib/beta-plan-summary.js'; import { artifactVersionLabel } from '$lib/artifact-version.js'; - import { parseBetaSelection, mapLabel } from '$lib/script-library.js'; + import { canTest, parseBetaSelection, mapLabel } from '$lib/script-library.js'; import { fleetIdentity, freshServer } from '$lib/fleet-overview.js'; import { fleetServers as sharedFleet, fleetError, refreshFleet } from '$ui/stores/fleet.js'; import { serverTimeNow } from '$ui/stores/servers.js'; @@ -95,7 +95,13 @@ const editable = $derived(canOperate($page.data?.user?.role)); const fleetServers = $derived($sharedFleet); const eligibleFiles = $derived( - scripts.filter((file) => file.runningBetaId === null && file.latestVersion !== null) + scripts.filter( + (file) => + canTest(file) || + // Exact-version links and drafts may still target an older unpromoted upload. + (file.runningBetaId === null && + picks.some((pick) => pick.scriptId === file.id && versionsFor(pick).length > 0)) + ) ); const filesReady = $derived( picks.length > 0 &&