Skip to content

fetch: hang on pages where load never fires #808

Description

@XDLCS

Steps to reproduce

moli fetch --dump json --wait-until done --timeout 30000 https://habr.com/en/articles/

Expected

A best-effort snapshot of the page (it is fully usable in a real browser at this point).

Actual

Error: failed to fetch `https://habr.com/en/articles/`
Reason: fetch readiness timed out after 30000 ms while waiting for load

Zero bytes of output. --wait domcontentloaded, domstable, and networkidle all time out as well, because readiness is anchored to load completion.

Analysis

On this page (habr.com/en/articles/), document.readyState reaches "interactive" and stays there forever — load never fires. Chrome 154 behaves the same way (it also never fires load), but Chrome users still see the content because the page is usable at the interactive stage. moli treats "load did not fire" as "give the user nothing".

document.readyState === "interactive" is readable throughout, so the fallback is feasible with data moli already has.

This is the single largest cause of fetch failures in our 192-URL public-web regression pool (~90 domains).

Suggestion

On readiness timeout, fall back to a best-effort snapshot at the DOMContentLoaded/interactive stage instead of aborting with zero output.

Environment

  • moli 1.1.10 (9b2f86b), Linux
  • Verified 2026-09-24, direct network and via proxy, same result

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions