Follow-up on review feedback. The previous commit consolidated four of the six
Live benchmark parsers and left these two on their own hand-rolled `arg()`,
which was the inconsistency the first pass was meant to remove.
- benchmark-live-control.mjs and benchmark-live-init.mjs parsed --iterations
with Number(), so a non-numeric value became NaN and `index < NaN` ran the
benchmark zero times before failing on the metrics file. They also accepted
only the space-separated form, so --iterations=20 silently measured the
default. Both now use parseArgs + positiveIntFlag, which throws on a value
that was clearly meant as a number.
- benchmark-live-control.mjs read the metrics file with no handling for the case
where the run produced nothing: a missing file surfaced as a raw ENOENT stack
and a malformed line as a bare SyntaxError. Report both with a diagnostic
naming the file and the env var that populates it.
- summarize() now reports a `samples` count and nulls instead of letting
percentile() read past an empty array, where the NaN serialized to null and a
report of nothing measured looked like a real measurement.
Prepared with AI assistance under maintainer direction.
Co-Authored-By: Claude <noreply@anthropic.com>
Restore foreground/background polling as the primary harness architecture, add progressive publication and framework-safe previews, and harden quality and regression coverage. The experimental app-server runtime is intentionally excluded.\n\nPrepared with AI assistance under maintainer direction.