Skip to content

v0.2.0 — contracts, CDP engines, and things that were declared but did not work

Choose a tag to compare

@aidonerightcorp aidonerightcorp released this 10 Aug 00:13
· 67 commits to main since this release

The theme of this release is capabilities that were declared and did not work — the
worst state for a capability table to be in, because the validator accepts your spec and
the failure arrives much later.

Highlights

Every engine actually runs. 126 verified engine × binary × display combinations, up
from 51, each one launched against a served page rather than read off a table. Playwright,
Patchright, playwright-stealth, rebrowser, Selenium, undetected-chromedriver, SeleniumBase,
Botasaurus, Camoufox, nodriver, zendriver, pydoll — plus engine=http, which needs no
browser at all. Chromium, Chrome, Firefox, WebKit and Brave, headless, headed and xvfb.

Contracts, enforced. A node's declarations are load-bearing: the linter decides whether
a graph verifies its mutations by trusting mutates, and the scheduler parallelises on
reads/writes. A node that misdeclares itself does not fail — it silently switches those
checks off. Declarations are now checked at import, at composition, and at run time.

Two diagrams. browsergraph planes draws the architecture: a task decomposes into
planes, each offering interchangeable candidates, and the chosen route moves as evidence
arrives. browsergraph space draws the configuration space — click stealth=undetected
and five engines grey out at once.

Notebooks work. Jupyter, Kaggle and Colab run every cell inside an asyncio loop, which
Playwright's sync API refuses. The adapter is now driven from a worker thread, so
engine=playwright works in a notebook with no setup — screenshots and video included.

browsergraph bootstrap. Probe, pip, browser binary, system libraries, a Chrome
already on PATH — re-launching after every step, because an installer's exit code is not
evidence that a browser starts.

Fixed

  • A failed Playwright launch poisoned the whole interpreter for every later call.
  • Escalation never reached its alternatives; an unbounded retry burned every attempt on the
    engine that had just failed.
  • Selenium could not drive Firefox at all — a snap wrapper script plus Chrome's flag syntax.
  • Every Firefox session leaked a geckodriver process; a snap-confined process cannot be
    signalled even by its owner, and selenium swallows its own teardown failure.
  • The default LLMConfig returned HTTP Error 404 against a healthy Ollama.
  • Phone extraction invented a number on python.org, whose homepage prints a Fibonacci series.
  • focus reported negative savings, and doctor reported a working engine as missing.

Full detail in CHANGELOG.md.

Install

pip install "browsergraph[playwright] @ git+https://github.com/aidonerightcorp/browsergraph.git"
browsergraph bootstrap
browsergraph doctor

Or run the whole tour on Kaggle
without installing anything.

618 tests, mypy and ruff clean.