Skip to content

v0.51.8

Choose a tag to compare

@dmellok dmellok released this 20 Jun 00:43

Fixed

  • Send → Webpage no longer renders external URLs as a blank page (most visibly with JS-driven SPAs; the underlying defect also cost every external URL render a ~15 s stall). Two compounding bugs in app/renderer.py:

    1. wait_for_function("window.__tesseraeComposed === true") was firing on every render. That signal is set by composer.js after dashboard cells mount; on external URLs it never fires, so the wait always burned the full 15 s timeout before falling through.
    2. wait_until="load" was used for all renders, which fires before SPAs hydrate. Reddit-style React-shell sites screenshotted an empty document.

    RenderRequest gains an is_composer flag (default True, set False by Push.push_webpage). External URLs now skip the composer-mount wait and use a hybrid wait: goto on load (ad-heavy news sites don't hard-fail at navigation) followed by a best-effort 8 s wait_for_load_state("networkidle") so SPAs get time to hydrate.

    Measured (cold render, 1600×1200):

    URL Before After
    example.com 15.6 s 1.0 s
    wikipedia 17.0 s 7.6 s
    bbc.com/news 23.8 s 15.9 s
    arstechnica 3-retry hard fail 17.1 s, renders
    theguardian 3-retry hard fail 34.2 s, renders
  • Caveat (not fixed): reddit.com still renders as a near-blank page because Cloudflare's bot gate serves Playwright a "You've been blocked by network security" page regardless of wait strategy. Server-side block; routing around it would need either stealth-flavoured Chromium or an RSS fetch fallback, both larger changes.