• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

HSF / phoenix / 35056971269
50%
master: 38%

Build:
Build:
LAST BUILD BRANCH: main
DEFAULT BRANCH: master
Ran 16 Sep 2026 04:51AM UTC
Jobs 1
Files 59
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

16 Sep 2026 04:47AM UTC coverage: 48.9%. Remained the same
35056971269

push

github

web-flow
fix(ui-components): defer object URL revoke in panel downloads (#1031)

`URL.createObjectURL` hands the browser a handle to the blob, and the anchor
click that follows starts the download asynchronously. Revoking the URL in the
same synchronous task can therefore tear the blob down before the browser has
taken its own reference, cancelling the download.

`saveFile` already defers its revoke to the next tick for exactly this reason,
with a comment saying so. Three UI panels hand-roll the same download instead of
calling it and revoke synchronously:

- kinematics panel "Export TSV"
- masterclass panel "Export results"
- session pill ".phnxreplay" download

The user clicks export and, depending on blob size and browser, either gets the
file or silently gets nothing. Larger exports fail more often, since a bigger
blob gives the browser a wider window in which to lose the race.

PR #992 fixed `saveFile` and stated these call sites "all revoke correctly".
They do revoke, which is why they were passed over, but they revoke in the wrong
task - so the leak was fixed there while this race stayed live here.

Defer the revoke with `setTimeout` in all three, matching `saveFile`. The
kinematics and masterclass anchors are also hidden and removed after the click,
as `saveFile` does, so an unstyled anchor never lands in the layout.

Added tests asserting the URL is not revoked synchronously and is revoked after
the tick. The kinematics and masterclass "not revoked synchronously" cases fail
before this change; the session-pill suite is new.

Fixes #1030

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>

885 of 2131 branches covered (41.53%)

Branch coverage included in aggregate %.

3337 of 6503 relevant lines covered (51.31%)

203.87 hits per line

Jobs
ID Job ID Ran Files Coverage
1 35056971269.1 16 Sep 2026 04:51AM UTC 59
48.9
GitHub Action Run
Source Files on build 35056971269
  • Tree
  • List 59
  • Changed 0
  • Source Changed 0
  • Coverage Changed 0
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #35056971269
  • beafa893 on github
  • Prev Build on main (#35056838490)
  • Next Build on main (#37201205154)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc