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

carlobeltrame / ecamp3 / 29873371212
34%
devel: 43%

Build:
Build:
LAST BUILD BRANCH: investigate/pdf-hang-determinism
DEFAULT BRANCH: devel
Ran 21 Jul 2026 10:22PM UTC
Jobs 2
Files 635
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

21 Jul 2026 09:41PM UTC coverage: 33.791%. First build
29873371212

push

github

carlobeltrame
Fix react-pdf regression by disabling compression

Client-side PDF generation hangs indefinitely (no error) in Firefox when
rendering runs in a web worker. The stream's 'end' event and its final
'data' chunks never arrive, so toBlob() never resolves.

Root cause: react-pdf compresses each PDF object through an async
zlib.createDeflate() stream, and the document only finishes once every
deflate stream has emitted 'end' (its _waiting counter reaches 0). That
whole completion chain rides on pdfkit's bundled process/browser nextTick
polyfill, i.e. setTimeout(0). On a cold HTTP cache the first render's
network fetches race that setTimeout(0) cascade in the Firefox worker and
it stalls at the tail, so the last deflate streams never complete.

The trigger is cold-start timing, not document size: any completed render
cures the session, the cure survives a normal reload (F5) but returns on a
hard reload (Ctrl+F5, cold cache). It reproduces in staging, and only in
Firefox web workers. The mechanism is unchanged between @react-pdf/pdfkit
4.x and 5.x; the recent upgrade merely started tripping a pre-existing
fragility.

Disabling compression bypasses the deflate streams entirely: object bodies
are written synchronously and finalize() runs synchronously from end(), so
completion no longer depends on the setTimeout(0) scheduler. This removes
the racing mechanism rather than masking the missing event. Trade-off is
larger PDF files; acceptable until the scheduler issue is fixed upstream.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

671 of 4489 branches covered (14.95%)

Branch coverage included in aggregate %.

4444 of 10648 relevant lines covered (41.74%)

63.95 hits per line

Jobs
ID Job ID Ran Files Coverage
1 api - 29873371212.1 21 Jul 2026 10:23PM UTC 242
88.23
GitHub Action Run
2 frontend - 29873371212.2 21 Jul 2026 10:22PM UTC 393
16.16
GitHub Action Run
Source Files on build 29873371212
  • Tree
  • List 635
  • 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 #29873371212
  • 16f0f8ab on github
  • Next Build on fix-react-pdf-upgrade (#30006538549)
  • Delete
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