Skip to content

chore(main): release 0.31.0#1

Open
github-actions[bot] wants to merge 1 commit into
mainfrom
release-please--branches--main--components--wallaby
Open

chore(main): release 0.31.0#1
github-actions[bot] wants to merge 1 commit into
mainfrom
release-please--branches--main--components--wallaby

Conversation

@github-actions
Copy link
Copy Markdown
Contributor

@github-actions github-actions Bot commented Mar 15, 2026

🤖 I have created a release beep boop

0.31.0 (2026-05-31)

⚠ BREAKING CHANGES

  • rename project to Wallabidi

Features

  • @tag :browser system and LiveView integration test suite (500e8a3)
  • add cast_command to BiDi WebSocketClient (efe3e82)
  • add ChromeCDP driver — direct CDP to Chrome, 97% tests passing (5c5be2e)
  • add Lightpanda CDP driver (Phase 1) (30dd7fe)
  • add Lightpanda integration test suite and Phase 2 fixes (a79ae8b)
  • app: start every driver a test run can route to, not just one (fa3c11f)
  • auto-await LiveView patch after click and fill_in (f466429)
  • auto-discover Chrome WebSocket URL from DevTools endpoint (7fc8f63)
  • auto-flush infrastructure at driver boundary (abd7bc3)
  • auto-inject onPatchEnd hook — no app.js changes needed (392f963)
  • auto-propagate Mimic stubs in LiveSandbox, fix optional deps (bb96ea0)
  • auto-start Chrome via Docker when chromedriver not found (6069fc0)
  • automatic Cachex checkout in Feature setup (a3df493)
  • await LiveView connected after navigation (5ab6f90)
  • await_selector handles XPath text queries (12bf4e8)
  • await+find pipeline — MutationObserver + find + filter in 1 RPC (2e9f53c)
  • bench: opt-in CDP send/receive timing instrumentation (7257986)
  • BiDi pipeline find — ops-based find+filter via script.evaluate (12a48ba)
  • BiDi push-based find+click via script.addPreloadScript channel (803fbd2)
  • bidi: N-process chromium-bidi server pool (006108d)
  • Cachex.Sandbox integration — transparent cache isolation (f3c1bd7)
  • CachexSandbox pool for test isolation (0f3e42b)
  • CDP query pipeline — find + filter in one JS evaluation (8dd53a6)
  • chrome test_helper starts all driver backends (7f369f2)
  • ChromeCDP 243/245 tests passing — implement remaining driver features (4225efb)
  • chrome: N-process Chrome server pool (95c8cbf)
  • click_full — classify + prepare_patch + click in 1 RPC (712338f)
  • config-based driver selection with @tag :browser routing (2c8bc9e)
  • deterministic page-ready via loaderId-correlated lifecycle events (96041bb)
  • direct LiveView driver — no browser needed (cb5aa36)
  • Docker networking — Chrome in container reaches host test server (494a422)
  • drivers: make WALLABIDI_DRIVER pin by value; document the CI matrix (4071629)
  • drivers: single capability→driver resolver with a sensible default ladder (727e3b3)
  • event-driven assert_has via await_selector (0c6d2c7)
  • event-driven redirect detection via beforeunload (cb0ffb6)
  • Feature integrates with sandbox_case when available (f629c2b)
  • FunWithFlags.Sandbox integration + Cachex cleanup (1b8c83f)
  • handle full page navigation with BiDi load event (f3ec14b)
  • install: prefer system Chromium; require it on arm64 Linux (1b58c12)
  • install: unify Lightpanda into .browsers/, add scoped install subtasks (6aef4d1)
  • js: extend lazy path to fill_in / clear / set_value / send_keys / has_text / assert_text (54ca81e)
  • js: fuse click pipeline into one W.run round-trip (b26b651)
  • js: fuse fill_in pipeline into one W.run round-trip (f52f8aa)
  • js: fuse has_value? / has_text? into await-style ops (51315ba)
  • js: fuse set_checked + fix lazy element parent (b0b9d28)
  • js: lazy element dispatch via target opcode (Phase 1) (292acba)
  • js: route find-then-discard Browser APIs through lazy path (33bbe61)
  • live_view_driver: native form submit, cross-LV nav, phx-trigger-action (6b0d801)
  • live_view: observe optimistic UI with deferred patch awaits (0.4.0-rc.3) (c3936c7)
  • LiveView driver — 0 failures across all test suites (e3db08c)
  • LiveViewDriver handles static page interactions (398fd43)
  • mix test.browsers for multi-browser CI testing (0d0dc32)
  • MockSandbox plug — propagate Mimic/Mox on HTTP requests too (de98064)
  • Mox support — auto-propagate stubs to LiveView processes (3c2c42b)
  • native Elixir query evaluation for LiveViewDriver (031fa8c)
  • optional SessionPool for browser session reuse (45df6ab)
  • per-operation timing benchmark across CDP, BiDi, LiveView (c06fe21)
  • pipeline classify op + revert deferred classification (f66620d)
  • pipeline click — find + filter + click in 1 RPC (8de785c)
  • pool: Phase 1 session pool — :rebuild strategy on Chrome CDP (ac1ea04)
  • protocol abstraction, LiveView-aware visit for CDP, load test infra (971f738)
  • push-based element finding via Runtime.addBinding (87dac2d)
  • rename project to Wallabidi (d23fcc4)
  • replace chromedriver with chromium-bidi standalone server (6fe32e6)
  • sandbox integration tests pass — all 5 scenarios working (142c4b0)
  • SandboxHelper for Cachex and spawn_link workers (17495d4)
  • streamline Chrome/chromedriver discovery with BrowserPaths (23049e2)
  • test: SlowTestGuard with budgeted runtime tags (67a3b52)
  • text-aware await_selector (89fa40d)
  • three-tier test system — liveview / headless / browser (b4363fe)
  • v2: BiDi click_aware + headless Chrome by default + Protocol routing (33bfb6e)
  • v2: BiDi cookies + execute_script_async + invalid_selector surfacing (927214f)
  • v2: BiDi dialogs (alert/confirm/prompt) + unhandledPromptBehavior (d22cea7)
  • v2: BiDi iframe focus via process-dictionary override (2f1fac8)
  • v2: BiDi mouse + touch + element geometry + element-arg in evaluate (f6f648f)
  • v2: BiDi screenshot + viewport sizing (5d2e7f2)
  • v2: BiDi transport phase A — session bring-up + passthrough (8e7b228)
  • v2: BiDi transport phase B — page-load awaits (51c9347)
  • v2: BiDi transport phase C — bootstrap channel routing (e3e9f4a)
  • v2: BiDi window/tab handles + reuse Chrome's default tab (fce5cd2)
  • v2: BiDiClient — click, set_value, clear, send_keys, page_source (1fd586d)
  • v2: BiDiClient — navigate, evaluate, find, element ops (534d4bd)
  • v2: CDPClient skeleton + first end-to-end test against Lightpanda (043df0f)
  • v2: CDPClient.{current_url, current_path, page_title, page_source} (a98bbf2)
  • v2: CDPClient.{displayed, click} (32d3576)
  • v2: CDPClient.{set_value, clear, send_keys} (eb07ad4)
  • v2: CDPClient.{text, attribute, call_on_element} (f6b3d38)
  • v2: CDPClient.classify/3 — read element's LV interaction class (0a1ce71)
  • v2: CDPClient.click_aware/3 — LV-aware click + post-click await (20eb794)
  • v2: CDPClient.evaluate/2 + V2SessionHelper extraction (dd0f54d)
  • v2: CDPClient.find_elements/3 — push-based via existing Bootstrap (8532eec)
  • v2: CDPClient.navigate/2 (26393c8)
  • v2: CDPClient.visit/2 — navigate + await_page_load combined (5e4adae)
  • v2: cookies, screenshot, window size (c174d31)
  • v2: cross-engine text extraction (1d7fed9)
  • v2: element-scoped find_elements (f69ad2c)
  • v2: event subscribe + Session.await_page_load/4 (d621bd4)
  • v2: file inputs + JS error capture + batched subscribes (13a03e4)
  • v2: frame switching mechanics — frame_stack + executionContextId routing (a979319)
  • v2: honor window_size in V2Driver init + persist via JS fallback (294163b)
  • v2: install bootstrap (window.__w + __wallabidi binding) (9c78952)
  • v2: introduce V2.WebSocket + V2.Session transport modules (f346236)
  • v2: JS error capture, file inputs, click_aware on driver, cookie expiry (e5d55d5)
  • v2: LV-aware patch+ack orchestration in BiDi click_aware (1129035)
  • v2: NavigationTimeoutError on slow nav clicks (4624222)
  • v2: page-ready tracking — get_page_id + await_page_ready_after (ee4b52d)
  • v2: patch-timeout fallback + classification-aware nav errors (bb58e08)
  • v2: pre-click LV-ready wait (0d2ece0)
  • v2: real CDP objectIds in find_elements results (c503b49)
  • v2: Session.register_find/3 + await_find_result/3 (6a0a7ff)
  • v2: SessionStore registration + Feature integration + capabilities passthrough (faece7c)
  • v2: SessionStore registration, scoped find fallback, option clicks (f71e193)
  • v2: single-actor PerSession transport for Lightpanda (249b386)
  • v2: translate WebDriver element-arg refs to CDP objectId in evaluate/3 (925f0b7)
  • v2: V2BiDiDriver shell + Browser dispatch + mix alias (17725fe)
  • v2: V2ChromeDriver + Browser dispatch to V2 stack (49a1280)
  • v2: Wallabidi.V2Driver — full Driver behaviour over V2 stack (2c36642)
  • v2: WebDriver-BiDi POST /session handshake helper (441c9ab)
  • v2: window-switching uses live state, not caller's stale struct (1999409)
  • v2: window/frame handles + nav-timeout + iframe context routing (1db8b4d)
  • visit waits for LiveSocket connection (#7) (d68f612)
  • Wallabidi.Pool — generic browser slot pool, Chrome BiDi migration (a9ea950)
  • Wallabidi.Sandbox plug and Wallabidi.LiveSandbox on_mount hook (28878ad)
  • with_patch_await for all interaction types (7530003)
  • XPath polyfill and unique session IDs for Lightpanda (c8205bf)

Bug Fixes

  • add cleanup_stale_sessions noop to Lightpanda, avoid compile warnings (e4923a7)
  • add CSRF token to test app layout (6327fd2)
  • add Elixir 1.19 Erlang-format dialyzer ignore patterns (541e47f)
  • add native.ex guard_fail to dialyzer ignore (1dc2e36)
  • add timeout to await_patch promise (#4) (f5beaa2)
  • align patch-branch page_ready timeout with navigate-branch (a7269e7)
  • attribute property access, displayed visibility, dialog subscription, object keys (e6d92a5)
  • attribute reads DOM property, defensive session cleanup (866a365)
  • auto-close sessions via on_exit registration (73b918d)
  • await session cleanup to prevent resource leaks (c07c5ff)
  • await_liveview_connected resolves on old LiveView (#4) (8114fae)
  • await_liveview_connected uses pre_url to avoid old LV race (1ba2f98)
  • await_patch detects navigation and returns early (#4) (f6feebc)
  • await_patch resolves "navigated" and waits for LV connected (ab978fb)
  • await_selector bails on navigation (#4) (6004c1f)
  • await_selector re-runs on new page after navigation (#4) (60fdf93)
  • await_selector uses querySelectorAll for text matching (b05e28a)
  • beforeunload in prepare_patch catches redirect during click (aeb3c26)
  • BiDi bootstrap activation + input[image] classification (6a417a4)
  • BiDi full-page navigation — subscribe to page_load, drain before click (5b7c68d)
  • BiDi ResponseParser.extract_value must unwrap {:ok, map} tuples (290b98e)
  • bidi: add --no-sandbox + --disable-dev-shm-usage to BiDi Chrome args (10bb26e)
  • bidi: drop session.subscribe timeout 30s → 12s (d34facd)
  • bidi: library-level retry on session.subscribe timeout (929cb01)
  • bidi: raise session.subscribe timeout to 30s for slow runners (38b9052)
  • bidi: start SessionActor via GenServer.start, retry harder (71add6e)
  • bidi: tolerate mid-suite chromium-bidi crashes (f3a1264)
  • browser: don't double-wait on Chrome CDP/BiDi click (64a9d3c)
  • browser: make await_patch actually wait (dfae35e)
  • browser: make await_patch actually wait (e498714)
  • browser: retire dead :protocol gate; unstick fill_in drain + with_patch_await (0d96fc4)
  • Cachex $callers fix is in 4.1+, not 4.0+ (60c8dd9)
  • call mark_cleanup_started before closing sessions (798edea)
  • cast releaseObject, await page load on patch→navigate transition (5d908f5)
  • CDP client — scoping, send_keys, options, displayed, window size (6031d8a)
  • CDP client compatibility — DOM text walker, attribute properties (8d8f9d9)
  • CDP client send_keys Session guard, window size tracking (7d733a2)
  • Chrome launch args — missing -- prefix and user-data-dir (d949cbd)
  • ChromeCDP 245/245 — eliminate parallel race conditions (564d3cc)
  • CI dialyzer — remove deprecated --halt-exit-status flag, ignore callback_info_missing (5a634f3)
  • CI reduce concurrency, remove browser cache (7593493)
  • ci: boot LiveView driver standalone + retry pool open + install lightpanda (fd9c6c3)
  • ci: drop stale lightpanda :version pin (79a36f6)
  • ci: exclude :browser tests from default mix test (f55f62c)
  • ci: install Chrome for unit_tests job too (79400ac)
  • ci: MIX_ENV=test for lightpanda.install + drop single-cond credo nag (3fa3df0)
  • classify phx-trigger-action forms and JS command lists (007238b)
  • classify unknown/failed bindings as :none, not :patch (#5) (795eb73)
  • clean up dialyzer, elixirc_paths, CI linting (aa53963)
  • clean up stale ChromeDriver sessions on first use (0b80799)
  • click fallback for all non-stale errors (d017c6e)
  • click_aware: split pre/post-click timeouts to prevent 5s stalls (c638a6d)
  • compile deps separately from app to avoid dep warnings (a82d404)
  • compiler warnings, CI lightpanda install, 1.20-rc.4 (7fbcada)
  • defensive end_session — catch already-dead WebSocket (20ac190)
  • DELETE session before closing WebSocket (2fdd597)
  • detect non-LV pages via [data-phx-main] instead of 200ms timeout (347464c)
  • detect redirect after await_patch timeout via URL check (728b9b3)
  • dialyzer ignore for LiveViewDriver guard_fail warnings (7132b8a)
  • dialyzer ignore patterns for Elixir 1.19 warning format (d93b67d)
  • dialyzer xpath_polyfill guard, Lightpanda CI concurrency (ec2fe53)
  • don't call mint_request inside GenServer callbacks (51526cc)
  • don't fail on unused dialyzer filters (cross-version compat) (7672672)
  • don't use link/button selectors as body text search (#4) (c599ef5)
  • drain stale bidi_event messages on session end (7e3b227)
  • drivers: propagate BEAM sandbox metadata via User-Agent on Lightpanda + BiDi (497a14c)
  • drop binary-presence check from lightpanda driver validate (#14) (3943355)
  • eliminate two intermittent CI flakes from concurrent navigation (#15) (3fc9e4c)
  • ensure BiDiClient loaded before function_exported? check (16cc5ab)
  • exclude priv/bidi-server/node_modules from Hex package (#18) (ccc62f3)
  • explicitly end session in on_exit for non-Feature tests (a0c12f5)
  • explicitly end sessions in on_exit before sandbox checkin (376339a)
  • fill_in drains all phx-change patches before returning (#9) (3d7e49a)
  • frame switching, file inputs, capabilities tests, version messages (c2cc876)
  • handle Mint :unknown in DevTools discovery receive loop (3a04dcf)
  • headless=new, Chrome throttling flags, safe classification default (910ffa7)
  • Host header must be localhost for Chrome DevTools discovery (1cdeb92)
  • increase lifecycle timeout test margins for CI (6771e95)
  • increase Lightpanda CDP max connections to 64 (cc7e75c)
  • increase settle defaults to 10s timeout, 1s idle (46a1fc1)
  • Inspect impl avoids Inspect.Algebra internals entirely (2ea18cb)
  • Inspect impl uses Algebra.line() for Elixir 1.19 compat (772451f)
  • Inspect.Algebra compat for Elixir 1.19+, lint env (5063086)
  • install: resolve priv/bidi-server via app_dir + surface npm exit codes (0.4.0-rc.4) (7ec3876)
  • install: robustly parse Chrome install path from npx output (8a9da83)
  • install: silence Lightpanda undefined-module warnings in :dev/:prod (ca6e5d3)
  • isolate DevTools discovery from Agent mailbox (48006af)
  • JS error/log tests — allow async BiDi events to arrive (4791fe0)
  • last 2 test failures — skip invisible click, settle for log timing (17163f9)
  • last 3 integration test failures (04f0672)
  • lifecycle timeout test catches both RuntimeError and EXIT (7b28061)
  • lightpanda 0.2.9 + integration suite + BiDi click race fixes (4f8a0f6)
  • Lightpanda end_session — close WebSocket, skip closeTarget (27f13a0)
  • limit Lightpanda concurrency on CI, fix arg passthrough (efb6d48)
  • LiveView driver — body extraction, index route, visit_endpoint (dcf51ce)
  • LiveView driver — current_url, tags, parse_html (cf9c535)
  • LiveView driver — decode_xpath ordering, click return, native finder (2590af6)
  • LiveView driver — parse_html, text scope, attribute hyphen (0bde740)
  • LiveView driver — text normalization, radio/checkbox click, selected state (69e0625)
  • LiveView driver blank_page?, outerHTML, tag browser-only tests (3027d8c)
  • LiveView static pages, SessionStore tests, outerHTML inspect (8ab6ad9)
  • LiveViewDriver re-reads element HTML and tracks field values (4518630)
  • LV driver path through Browser.fill_in / set_value / has_text / has_value (2d6ba79)
  • monitor LiveView processes instead of fixed sleep (1c33092)
  • move stale session cleanup to app startup (3c67adc)
  • only hide absolutely/fixed positioned off-screen elements (0eab11b)
  • package: include priv/wallabidi.js{,.min.js} in hex tarball (870b3e3)
  • parse session ID from W3C response format (0766a98)
  • phx-change also checks for push vs JS-only (d102e14)
  • pipeline scoped queries — preserve this binding in XPath ops (28c0238)
  • plain form submit classified as :full_page (#6) (c273f9c)
  • polyfill form.reset() for Lightpanda CDP driver (d3080ae)
  • push-based find — selected filter, error propagation, race fix (32187ec)
  • push-based page-ready waiter eliminates click flakiness (2458765)
  • raise NavigationTimeoutError on silent click-through timeouts (9caa5c6)
  • relax lifecycle timeout test assertion and add ExUnit timeout (59c39c6)
  • remote chromedriver improvements (ac8ee0a)
  • remove linter-injected Runtime.addBinding corruption in pipeline.ex classify JS (074c597)
  • remove unused form_html variable (ff64b05)
  • replace all remaining wallaby references with wallabidi (d503255)
  • replace polling click with push-based find + single click eval (50f1310)
  • resolve all Credo --strict issues (de986d2)
  • resolve all credo strict issues (f772088)
  • resolve all test and dialyzer failures (db57512)
  • resolve CI failures — Credo nesting, Docker fallback in lifecycle tests (b795fdd)
  • resolve remaining 23 integration test failures (654f503)
  • resolve_test_driver respects WALLABIDI_DRIVER env (f54911b)
  • run dialyzer in dev env (dialyxir is dev-only dep) (466a37f)
  • run entire linting job in dev env (8ed9ab3)
  • runtime check for SandboxCase instead of compile-time (26a6044)
  • scrollIntoView before click on all code paths (a410043)
  • session pool propagates sandbox metadata on checkout (#3) (fe66fc2)
  • sync bootstrap install in CDP session creation (be19366)
  • tag JS-dependent and wait/retry tests as :headless (1a0de34)
  • test: exclude :headless tests on Lightpanda (c070484)
  • test: point lightpanda dep at locally-patched binary (34be4ea)
  • trace timing test works for all drivers (5086936)
  • transport: send Host: localhost on WebSocket upgrades (ef2d8bd)
  • types: correct dialyzer specs for await_find_result + Session.t (3587c7f)
  • types: resolve dialyzer warnings post-refactor (1c2245a)
  • unused variable warning (grab_error → _) (47b8023)
  • update CI for new test structure and browser install (e84086d)
  • upgrade dialyxir 1.4.3 → 1.4.7 for OTP 28 compatibility (6c3b648)
  • use $callers for Ecto sandbox in LiveView Hook (42589b9)
  • use atom key for goog:chromeOptions Access (8119414)
  • use bare chromedriver image, skip tests when no local chromedriver (8b16ba1)
  • use BiDi network interception for pool user-agent override (#3) (2379a4b)
  • use compile_env guard — zero production overhead (c881dac)
  • use exact OTP version for 1.20-rc (strict requires it) (f7e8837)
  • use file-level credo disable for apply in lightpanda.ex (ab80f18)
  • use Hex package for phoenix_test_only (65e8be0)
  • use JS .click() instead of pointer actions for element clicks (96eceed)
  • use LazyHTML.from_document for full HTML pages (62def29)
  • use sharedReference format for BiDi script arguments (2b7fbf4)
  • v2_driver: await LiveView channel-join after visit, parity w/ Chrome (e3add61)
  • v2: BiDi find timeout fallback + selected/1 (c25f9c8)
  • visibility check no longer rejects off-viewport elements (e8e4895)
  • visit uses wait:interactive and 30s timeout (#8) (08b69a1)
  • wait for liveSocket.main.joinPending before dispatching click (6e007c3)
  • wait for LV server ack on patch-classified click timeout (ad8d0a2)
  • XPath classification and form redirect handling (3daafac)

Performance Improvements

  • cdp: batch send_keys + cast focus_window IIFE (0ef1839)
  • cdp: pipeline install_bootstrap behind single barrier (a696ae7)
  • eliminate about:blank navigate in BiDi session setup (37ec11a)
  • fire-and-forget domain enables, eliminate 4 blocking round-trips (e2a5fe5)
  • fire-and-forget register_js + inline ops in final_check (2554cce)
  • remove --disable-gpu, add anti-throttle features for headless (296f1c8)
  • skip await_patch for JS-only clicks and non-phx forms (#4) (bac0ba0)
  • skip xpath polyfill injection on Chrome (native support) (1603d4f)
  • v2: route V2 click through click_aware (push-based page_ready) (2e836f2)

Reverts


This PR was generated with Release Please. See documentation.

@github-actions github-actions Bot force-pushed the release-please--branches--main--components--wallaby branch 18 times, most recently from 2fa5d45 to a070daa Compare March 18, 2026 01:38
@github-actions github-actions Bot force-pushed the release-please--branches--main--components--wallaby branch 6 times, most recently from f3f11f6 to 81c2557 Compare April 25, 2026 05:59
@github-actions github-actions Bot force-pushed the release-please--branches--main--components--wallaby branch 5 times, most recently from a149a2b to 92fc0a5 Compare May 2, 2026 19:19
@github-actions github-actions Bot force-pushed the release-please--branches--main--components--wallaby branch 6 times, most recently from 259229c to 0fd2241 Compare May 3, 2026 19:38
@github-actions github-actions Bot force-pushed the release-please--branches--main--components--wallaby branch from 0fd2241 to 737a674 Compare May 11, 2026 08:25
@github-actions github-actions Bot force-pushed the release-please--branches--main--components--wallaby branch 3 times, most recently from b3cf97c to 43113e1 Compare May 23, 2026 23:31
@github-actions github-actions Bot force-pushed the release-please--branches--main--components--wallaby branch 16 times, most recently from 5fd2580 to 61ed6f8 Compare May 30, 2026 21:36
@github-actions github-actions Bot force-pushed the release-please--branches--main--components--wallaby branch from 61ed6f8 to 764f67b Compare May 31, 2026 04:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants