A failed inspect or conversion hid the progress panel that held the
conversion log, cleared the selected archives and showed a single line,
so the only evidence of the failure was gone and a multi-GB input had to
be picked again. Compose the message with the phase, the current input,
the target, the libraries tag and the last 150 log lines, and show it in
the error box under "Failure details" so it can be copied into a report.
The report is a pure function in failure-report.mjs and is covered by
node tests.
Every conversion starts with a multi-MB libraries download, but the
worker only sent the phase, so the bar stayed indeterminate and the
percent stayed blank while the transfer ran: it read as a hang on a slow
connection. Send completed and total bytes from the download loop; the
existing 80 ms throttle keeps the messages bounded.
A blocked or offline connection died as a bare "Failed to fetch" during
the release lookup. Name the failure and the fix instead.
The batch summary passed the total file and module counts through the
byte formatter, so two apps with 1519 files and 5 modules showed
"1.5 KiB files" and "5 B modules". Counts are now printed as numbers,
as the per-app list and the single-app summary already do.
Co-Authored-By: Claude Opus 5.5 <[email protected]>