Release 1.16.0
26 Sep 2026 · pinned package [email protected]
openvibe-shared/browser-harness (roadmap WS-Q task 3, WS-T tasks 3 and 4): Live's browser smoke suite, generalised for any site. It drives headless Chrome over the DevTools protocol with Node's own WebSocket (Node 22+, no dependency), one browser context per route. run({ base, routes, widths, checks, navigation, … }) checks every route at 390, 768 and 1280 px: the HTTP status (a route can expect 404), console errors (exceptions, console.error, failed loads, CSP), horizontal overflow (naming the elements) and scripts requested twice. With JavaScript off it checks the visible text (200 characters), exactly one absolute canonical link (a noindex page may have none), and that JSON-LD parses and its headline or name is in the visible text. For an ItemList, at least 80% of the item names must be visible. axe-core runs at the widest width: serious and critical violations fail, moderate is reported. Once per site, A → B → A navigation runs five times, clicking a link when there is one so a single-page app navigates in place. After a forced GC it samples heap, DOM nodes, listeners and documents (Performance.getMetrics), plus live intervals, pending timeouts and open WebSockets (a probe installed before page scripts). A measure fails when it grows past its budget from lap 2 to the last lap and is still growing (BUDGETS). CPU, requests and bytes over 5 idle seconds are reported, not failed. ignoreErrors rules are counted per label, never dropped silently. format() gives text or Markdown, and summarize() gives per-check counts. axe-core is not vendored: an installed axe-core is used, else 4.13.0 comes from jsDelivr, checked against a pinned sha384 (the same bytes as the npm tarball) and cached. test/browser-harness-chrome.test.js runs it in real Chrome against a fixture and skips without Chrome. Additive.
Fix: the selected filter chip of the shared update log (shipped.js, every site's /updates) was white on --accent (3.67:1). It now uses --accent-strong / --on-accent-strong (4.5:1 or better in every theme), like the navbar's Sign In button. The harness found it.
Rules94 A site's name opens its pages, and a way to every site.10 A change is New, Improved or Fixed, and says so with a small mark.31 One navbar per page, owned by the shared Frame.