e602225d86
The self-test grew a branch that spawns a Python child so pytest could prove progress advances during one. It doesn't need to: /progress is answered from its own runspace, so the existing hold already blocks the main thread, and the spawn only exercised Invoke-HermesStep, which nothing here changes. The Windows test now asserts the invariant instead of the self-test's stage string, and the posix half -- previously untested, and the half that broke -- gets real coverage: serve-ui.py's wire shape, and posix.sh driven end to end with a stub `hermes` that reports which stage was on screen while it ran.