Release 1.17.0
26 Sep 2026 · pinned package [email protected]
Release notifications in release-watch.js (roadmap WS-P task 9, ADR-016 amendment 1). When a release goes live, OpenVibe.Host publishes host.release.published to OpenVibe.Events (contract host.release.published@1, openvibe-contracts 0.58.0; ovhost deploy and ovhost announce). The event is public, has subject release and carries service, release, commit and origin. Tabs now hear about a release within seconds instead of at their next poll:
- One stream per tab. release-watch opens one EventSource, without credentials, on
https://events.openvibe.network/realtime/stream?topics=host.release.published, once the page's release and service are known. - Which events count. Only those for the page's service:
OVReleaseConfig.service, the meta tag'sdata-service, else/release.json'sservice. - Generations. The tab ignores the release it runs, the one it already knows from
/release.jsonand one already queued (a hex prefix of the other counts as the same release). It also ignores a repeated event id and a seq at or below the last one seen. - Coalescing. A new release runs the usual
check(true)after a random 0–20 s delay, so tabs do not all fetch at once. Everything arriving while that check is pending collapses into it, and after a check there are 30 s of quiet, after which whatever arrived meanwhile gets one more check. The update plan, the prompt and the safe-reload rules are unchanged. - Gaps. An
event: gap(events missed while away) also runs a coalesced check. - Account switches. The events are public, so
openvibe-auth-changedchanges nothing, and a second load of the script still returns early, so there is never a second EventSource. - Hidden tabs. A tab hidden for 5 minutes closes its stream: the poll and the check on becoming visible cover it, and it reopens on return with
last_event_id. - Failures. An error closes the stream at once, rather than letting the browser retry every 3 s, and it reopens after 30 s, doubling to 15 minutes, with jitter. After 6 failures in a row only polling is left until the browser comes back online.
- Polling. Unchanged throughout (focus, visibility,
online, every 10 minutes). Without EventSource, or when Events cannot be reached, nothing else changes. - Configuration. The default URL applies on https pages.
OVReleaseConfig.eventsUrlor the meta tag'sdata-eventssets another URL, andfalseor"off"turns it off. Events answershttps://*.openvibe.*origins and those in itsREALTIME_CORS_ORIGINS; elsewhere the stream fails and backs off. - CSP. A site's Content-Security-Policy must allow the Events origin in
connect-src, as Live and Community already do. Otherwise the browser refuses the stream and logs that refusal once. release-watch sees thesecuritypolicyviolationfor its URL, stops (stateblocked) and stays on polling. Addhttps://events.openvibe.networktoconnect-src, or setdata-events="off", when you move a site to this release. - State.
OVRelease.state().realtimereports{ state, service, url, events, ignored, checks, failures, lastSeq }.
release-watch.js is 4.7 KB brotli (was 3.2 KB). Its budget in test/release-update.test.js moves from 3.5 KB to 5 KB for this.
release-compat openPage() also takes globals (extra window properties, such as a fake EventSource or a Math with a fixed random). It adds timeouts() (the pending delays), fireTimeouts(filter), dispatch(type) and timeoutsSet.
Tests are in test/release-watch-realtime.test.js. Additive.
PagesRules
Rules39 The account lives in the menu's You tab, not in a dropdown.20 Status is a word, never colour alone.