Create the PR with the title and body passed explicitly: `gh pr create --title "Fix the login redirect" --body "What changed and why"`. Expected: gh prints the new pull request URL instead of the validation error.

If your script builds the title from a variable, print it before creating: an unset or empty variable is the usual cause, because `--title "$TITLE"` with an empty TITLE sends a blank title that looks identical in the command line. Expected: the variable expands to a non-empty string.

If you use --fill, check the commit it reads with `git log -1 --pretty=%s`. An empty or whitespace-only commit subject becomes an empty title. Either amend the commit message or drop --fill and pass --title yourself. Expected: the subject line is a real sentence.

If you use the editor flow (-e or the interactive prompt), the first line of the file is the title. A leading blank line or a file that starts with the body makes the title blank. Put the title on line one. Expected: the saved file starts with the title text.

After a failed interactive create, gh offers to recover the input. Re-run with the --recover flag it printed, fix the title line, and submit again instead of retyping the body. Expected: the recovered draft opens with your previous input.

Confirm before you submit in scripts with `gh pr create --dry-run` plus your flags. Expected: the printed details show the exact non-empty title that will be sent.