openvibers/openvibe.shared Commits

4.106.1: the OpenVibe mark opens the site switcher again, on every site (#271)

OP OpenVibers committed 10 days ago · fb3817c742 · 7 files, +38 −5

site-switcher.js (4.48.0) was never in files.js's BROWSER list, and sites serve /shared/* from that list only:
the mark loaded it on the first tap, the site answered 404 (found on openvibe.live) and the switcher never
opened. It is on the list now; test/browser-files-complete.test.js fails when a browser file loads a file
of this package that no list serves.

Changes

ddiff --git a/CHANGELOG.md b/CHANGELOG.md
iindex 5cb52c9..b123908 100644
---- a/CHANGELOG.md
++++ b/CHANGELOG.md
@@@ -4,6 +4,13 @@ All notable changes to `openvibe-shared`. Versions follow [semver](https://semve
breaking change to any exported module, browser global or served file name is a new major.
A release is the git tag `vX.Y.Z`; consumers pin the tag's tarball (see README).
++## 4.106.1 — 2026-11-02
++
++- **The OpenVibe mark opens the site switcher again, on every site.** `site-switcher.js` (4.48.0) was never in
++ `files.js`'s `BROWSER` list, and sites serve `/shared/*` from that list only: the mark loaded it on the first tap, the
++ site answered 404 and the switcher never opened. It is on the list now. `test/browser-files-complete.test.js` fails
++ when a browser file loads a file of this package that no list serves.
++
## 4.106.0 — 2026-11-02
- **The ghost cursor** (`motion.js` `[data-ov-ghost]`, MOTION-1): a scene shows how it is used. An arrow walks to each
ddiff --git a/README.md b/README.md
iindex f737ec1..2b7070e 100644
---- a/README.md
++++ b/README.md
@@@ -2,7 +2,7 @@
> Versioned UI, the OpenVibe Frame (the navbar, footer and "shipped" views every site sits in), SEO, legal and release-client packages every OpenVibe site renders.
--**Status:** alpha, v4.106.0 (every release is a tag; see [CHANGELOG.md](CHANGELOG.md)). Every deployed
++**Status:** alpha, v4.106.1 (every release is a tag; see [CHANGELOG.md](CHANGELOG.md)). Every deployed
consumer installs a tagged release and none keeps a vendored copy
([docs/migration-plan.md](docs/migration-plan.md) is done); each repository's `package.json` names
the tag it pins.
ddiff --git a/STATUS.json b/STATUS.json
iindex bed2429..2cdb3a4 100644
---- a/STATUS.json
++++ b/STATUS.json
@@@ -4,7 +4,7 @@
"code": true,
"wave": "W2",
"package": "openvibe-shared",
-- "version": "4.106.0",
++ "version": "4.106.1",
"plan": "OpenVibe End-to-End Realignment & Implementation Plan, revision 3 (20 Sep 2026)",
"deployed": false,
"deployment": "none of its own: a package released as git tags; OpenVibe.Network serves /shared/* from its pinned tag, and a site can serve its own pinned copy (openvibe-shared/serve)",
ddiff --git a/files.js b/files.js
iindex 6140478..2db0832 100644
---- a/files.js
++++ b/files.js
@@@ -25,6 +25,7 @@ const BROWSER = Object.freeze([
'dock-vibe.js', // the Dock's Vibe tab (L48 V2); dock.js loads it the first time the tab opens
'dock-timer.js', // the Dock's timer (L48 R2); dock.js loads it while a timer runs or its menu opens
'account-switcher.js',
++ 'site-switcher.js', // the OpenVibe mark's site switcher (4.48.0); navbar.js loads it on the first tap. Missing from this list until 4.106.1, so every site answered 404 for it and the mark did nothing
'user-card.js',
'ov-mark.js', // the OV brand mark drop-in
'ov-glyphs.js', // the network's own icons in place of Font Awesome's (built from glyphs.js; navbar.js loads it)
ddiff --git a/package-lock.json b/package-lock.json
iindex c6194e0..b737326 100644
---- a/package-lock.json
++++ b/package-lock.json
@@@ -1,12 +1,12 @@
{
"name": "openvibe-shared",
-- "version": "4.106.0",
++ "version": "4.106.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "openvibe-shared",
-- "version": "4.106.0",
++ "version": "4.106.1",
"license": "MIT",
"dependencies": {
"jsonwebtoken": "^9.0.0",
ddiff --git a/package.json b/package.json
iindex c065e36..38867ba 100644
---- a/package.json
++++ b/package.json
@@@ -1,6 +1,6 @@
{
"name": "openvibe-shared",
-- "version": "4.106.0",
++ "version": "4.106.1",
"description": "Shared navbar, footer, themes, icons, legal pages, SEO, auth and analytics for every OpenVibe site",
"main": "index.js",
"bin": {
ddiff --git a/test/browser-files-complete.test.js b/test/browser-files-complete.test.js
nnew file mode 100644
iindex 0000000..13fb1f0
---- /dev/null
++++ b/test/browser-files-complete.test.js
@@@ -0,0 +1,25 @@
++'use strict';
++// Every file a browser file loads is itself served. Sites serve /shared/* from files.js's lists only (a name not on a
++// list answers 404), so a script that loads a sibling the lists leave out fails on every site. site-switcher.js was
++// left out from 4.48.0 to 4.106.0: the OpenVibe mark loaded it on the first tap, every site answered 404, and the
++// switcher never opened.
++// node test/browser-files-complete.test.js
++const assert = require('assert');
++const fs = require('fs');
++const path = require('path');
++const files = require('../files');
++
++const ROOT = path.join(__dirname, '..');
++const served = new Set([...files.BROWSER, ...(files.STYLES || []), ...(files.FONTS || []), ...(files.IMAGES || [])]);
++const missing = [];
++files.BROWSER.forEach((name) => {
++ const src = fs.readFileSync(path.join(ROOT, name), 'utf8');
++ // A quoted file name of this package (sibling('x.js'), a <script src>, a <link href>): if it is a file here, it is served.
++ for (const m of src.matchAll(/['"]([a-z][a-z0-9-]+\.(?:js|css))['"]/g)) {
++ const n = m[1];
++ if (n !== name && !served.has(n) && fs.existsSync(path.join(ROOT, n))) missing.push(`${name} loads ${n}`);
++ }
++});
++assert.deepStrictEqual([...new Set(missing)], [], 'files a browser file loads but no site serves');
++assert.ok(files.BROWSER.includes('site-switcher.js'), 'the mark\'s switcher is served');
++console.log('browser files complete: all checks passed');