It would be nice if pg_ctl promote supported the -w (wait) option.
How could pg_ctl determine when the promotion has finished?
We could query pg_is_in_recovery(), but that would require database access, which we got rid of in pg_ctl.
We could check when recovery.conf is gone or recovery.done appears. This could work, but I think some people are trying to get rid of these files, so building a feature on that might be a problem? (I think the latest news on that was that the files might be different in this hypothetical future but there would still be a file to prevent re-recovery on restart.)