How to have "say" wait when used in a series of pipes?
Turns out all I had to do was consume all of stdin at the start of my script... I don't want it to process stdin as it's received, but when the entire previous command in the pipe chain completes.
So my stage_complete.sh script is simply this, which works for my use case!
stage_complete.sh
#!/usr/bin/env bash

OUT=$(cat -)

MSG=&quot;$*&quot;
say &quot;$MSG&quot;

echo &quot;$OUT&quot;

Note: I figured this out by asking the question in another stack exchange (unix), over here