A typo that killed every stage before stage one
Declarative pipelines compile before they run
Pipeline syntax errors do not fail a stage — they fail before stages exist.
My Jenkinsfile called emailtext instead of emailext, and was missing the commas between arguments.
That was not an email bug. A declarative pipeline is compiled as Groovy before anything executes, so the parse error meant not a single stage ran.
Two more in the same file
docker build -t $IMAGE_NAMEwas missing its trailing.build context- A
docker runwas split across lines with no\continuation, so the shell read it as two separate commands
Takeaway
If the stage view is empty, suspect the Jenkinsfile itself rather than the steps inside it.