From f41a552c2997ac09842c77fbafd415d1ff065d92 Mon Sep 17 00:00:00 2001
From: Shine1i
Date: Mon, 9 Mar 2026 02:53:59 +0100
Subject: [PATCH] feat(recipe-studio): enforce run name validation for full
runs and refine validation UI
---
.../recipe-studio/dialogs/preview-dialog.tsx | 15 ++++++++++++++-
.../recipe-studio/hooks/use-recipe-executions.ts | 13 ++++++++++---
.../features/studio/sections/dataset-section.tsx | 10 +---------
3 files changed, 25 insertions(+), 13 deletions(-)
diff --git a/studio/frontend/src/features/recipe-studio/dialogs/preview-dialog.tsx b/studio/frontend/src/features/recipe-studio/dialogs/preview-dialog.tsx
index 18637b586a..05b2e45874 100644
--- a/studio/frontend/src/features/recipe-studio/dialogs/preview-dialog.tsx
+++ b/studio/frontend/src/features/recipe-studio/dialogs/preview-dialog.tsx
@@ -254,6 +254,8 @@ export function RunDialog({
}: RunDialogProps): ReactElement {
const [advancedOpen, setAdvancedOpen] = useState(false);
const kindLabel = kind === "preview" ? "Preview" : "Full run";
+ const normalizedFullRunName = fullRunName.trim();
+ const isFullRunNameMissing = kind === "full" && normalizedFullRunName.length === 0;
const rowHint =
kind === "preview"
? "How many sample rows to generate for a quick check."
@@ -376,7 +378,13 @@ export function RunDialog({
value={fullRunName}
onChange={(event) => onFullRunNameChange(event.target.value)}
placeholder="Sprint dataset v2"
+ aria-invalid={isFullRunNameMissing}
/>
+ {isFullRunNameMissing ? (
+
+ Run name is required before starting a full run.
+
+ ) : null}
)}
@@ -657,7 +665,12 @@ export function RunDialog({
{validateLoading ? "Validating..." : "Validate recipe"}
-
- Data Recipe output. Eval split unavailable for local datasets.
+ Data Recipe output.
{uploadedFile ? (
-
-
- Path
-
-
- {uploadedFile}
-
-