Bug fix: findRunFile returned the oldest timestamped report.html instead of the latest. When report was run twice (e.g., after adding backend logs), push uploaded the stale first HTML while run.json had the current data.
Root cause: readdirSync().find() returns the first match. Timestamped files sort chronologically, so the first match is the oldest.
Fix: Changed to filter().sort() and return the last (latest) match.
Test: 5 new tests for findRunFile (333 total).
Fixes the L3c3ZDTrZt report where HTML showed 651 entries (app only) but JSON had 1000 entries (app + backend + step).