Apply the same small stability fixes to the modern and legacy compare scripts:
report malformed nested JSON through the structured parse-error path, reject
directory comparisons that produce no matching JSON files, use the supported
pipe table format for old tabulate versions, and retitle the summary plot as a
GPU timing change.
Add regression coverage for the modern comparator error paths and output
formatting.
Emit absolute sidecar paths in bulk-debug rows so generated debug scripts can
be replayed from a different working directory.
Also include duplicate state occurrence information in --plot-along series keys
for both modern and legacy comparators, preventing later duplicate states from
overwriting earlier plotted series.
Add regression coverage for absolute bulk-debug paths and duplicate plot-along
series.
Tighten missing-dependency install hints so compare-only dependencies point
to cuda-bench[compare] and plotting/dataframe dependencies point to
cuda-bench[plot], instead of defaulting every script to the broader tools
extra.
Also harden nvbench_compare_legacy by reporting missing or skipped state
summaries as UNKNOWN rows instead of silently dropping them, and by converting
missing axis metadata into the existing JSON-structure error path rather than
leaking StopIteration.
Finally, consolidate duplicate finite-number predicates in both compare
scripts so duration formatting and numeric validation share the same helper.