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"}
-