main's #598 added a port pre-flight to scripts/e2e-local.sh while this branch was
in review, and theirs is strictly better than the one I had here:
- it probes BOTH bound ports. The app binds a SECOND (streaming) listener that
defaults to 8409 regardless of ETV_UI_PORT, so my single-port check could
certify a port free while the run still died binding 8409. That also means
this PR's CI step (ETV_UI_PORT=8410) was only working because the curl step's
server had already been killed — #598's fix, defaulting ETV_STREAMING_PORT to
the given port, is what makes it correct rather than lucky. A real latent bug
in my work, surfaced by their change.
- it REPORTS rather than reaps, which is the #586 rule.
Keeping mine would leave two divergent port checks on the same concern.
Also records the app's SINGLE-INSTANCE guard, which is independent of ports: a
stray instance blocks a run whatever port you choose, so 'pick another port' is
not a workaround. Kill the leftover BY PID (#586).
Refs #445#586