Skip to content

browsergraph 0.3.0 — the universal graph model

Choose a tag to compare

@aidonerightcorp aidonerightcorp released this 10 Aug 12:51
· 54 commits to main since this release

Six stages, fourteen sub-steps, 3,802,314,700,800 routes — and a search that says how much of the space it actually looked at.

Install without PyPI (the wheel is attached and verified in a clean virtualenv):

pip install https://github.com/aidonerightcorp/browsergraph/releases/download/v0.3.0/browsergraph-0.3.0-py3-none-any.whl
browsergraph capabilities
browsergraph workbench -o studio.html

Explore it live: https://aidonerightcorp.github.io/browsergraph/

Added

  • The universal graph model — portable node manifests, atomic candidates, ordered stages, complete routes, typed feedback channels and optimization profiles, with a validator that returns every problem rather than the first. Plain English: HOW_IT_WORKS.md.
  • Sub-steps — stages decompose recursively. "Acquire inputs" is three decisions, not one, and drawing it flat hid 44,343× of the search space.
  • Policy gating and route search — policy gates before anything is scored; greedy, beam or exhaustive, always reporting coverage.
  • Receipts — route, spec, environment, per-step timing, artifacts with content hashes, and a pasteable replay line. Written for failures too.
  • A capability handshake — engines declare what they can do; a graph is checked before a browser launches, and the refusal names the engines that could run it.
  • Fourteen nodes — press, select, upload, download, frames, cookies, viewport, PDF, plus wait_stable, a11y_tree, assert_text, assert_url, attribute, count.
  • A model router — ten roles routed to the right model with a recorded reason.
  • OCR — five interchangeable backends, and a check that caught a WebKit render that laid out perfectly and drew not one glyph.

Fixed

  • Every objective profile ranked identically — raw values were combined, so latency in the thousands swamped quality in [0,1]. "Balanced" was secretly speed-only.
  • Beam search bought nothing — it matched plain greedy at width 1, 8, 32, 128 and 512.
  • Ranking was O(n²), making exhaustive search correct and unreachable.
  • The chromedriver came from PATH, not from the browser being launched.
  • Playwright's frame switch was decorative.

859 tests, mypy and ruff clean.