A scenario whose body ran past about 19 s idled until 45 s after its
start, and twice one never exited and hit the runner's 300 s timeout
after it had passed: something of Chrome outlived Browser.close and kept
its stdout and stderr open.
- scripts/qa/browser.mjs closes Chrome within 5 s, kills its process
group and closes its pipes; the harness then finishes and exits with
the scenario's code. QA_EXIT_DIAGNOSTICS=1 keeps the old ending and
prints the open handles and Chrome's process tree 5 s after finish.
- Every strict page starts with its clock at the 18:30 UTC nearest to
the real time, so Navara's sun is up over the test cities whenever the
acceptance runs; a scenario can ask for its own instant or the real
clock (Wildlife does, for its freshness fixtures).
- The runner records a scenario that passed but did not exit as hung,
kills the whole process group on a timeout, runs a failed scenario
once more and reports one that passes then as flaky, and appends each
run to --history=FILE; scripts/report-acceptance-flake.mjs reads it.