Hypothesis
The external-tools phase is slow because three independent npm audit subprocesses run serially. Parallelizing only those network-bound subprocesses should reduce wall time without changing output order or check semantics.
Baseline
Ten clean Bunsen runs completed in 25.30 seconds median. A line-timestamp trace localized 20.14 seconds to External Tools. The three audit gaps were 6.55, 6.77, and 6.98 seconds.
Candidate
A bounded ThreadPoolExecutor runs at most four audit jobs concurrently and collects futures in declaration order. Output remains deterministic.
Baseline25.30 s
Candidate11.99 s
Result
- 10/10 measured candidate runs passed.
- Candidate median: 11.99 seconds.
- Improvement: 52.6%.
- Three concurrency/order tests passed; Ruff passed.
- The full
tests/hermes_clirun was stopped after 2h27m at 83%. It was already red and had made no log progress for more than five minutes while repeatedly spawningagent-browser --version. The partial log is retained under SHA-256150f9e5171350077e3f140f8515961da147837b5012466b30f5f717ac6268fbc. - The candidate remains HOLD and is not installed on Herman. Promotion requires a fresh, bounded CI-equivalent run that terminates green.
Falsifier
Reject this candidate if a clean full-suite run shows output-order changes, missed audit results, or new subprocess failures attributable to the parallel block.