It’s mostly all automatic in my experience. As with most things mercurial (compared to git), it just does what you expect
Subrepos are checked out automatically.
Pushing the super project ensures sub projects it references are pushed first.
It will prevent you from committing the super project state when a subrepo has uncommitted changes (and tell you which subrepo)