Hevy exports workout timestamps as "Jul 5, 2026, 10:21 AM", but the
importer parsed with the hardcoded format "%d %b %Y, %H:%M" and .unwrap()'d
the result. Every import panicked on the first workout's date, aborting the
background job before it could mark the report finished -> the import
appeared stuck forever with no error.
parse_date_string now tries Hevy's actual format (falling back to the old
one) and returns Option; an unparseable workout is reported as a failed item
and skipped instead of panicking. The .unwrap() on CSV row deserialization is
hardened the same way.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>