openvibers/openvibe.shared Commits

Shared 4.1.6: Play and Inventory show their own shipped feed; share cards and manifests for Play and Zone (#74)

OP OpenVibers committed 29 days ago · 1538fb95a6 · 7 files, +26 −2

**Play shows its own "Recently shipped", and Play and Zone get share cards and install manifests (openvibe-shared 4.1.6).**

**Found:** while reviewing every home page:
- play.openvibe.network's "Recently shipped on OpenVibe.Play" listed Network's changes. `shipped.js` had no `play` id (nor `inventory`), so it fell back to the host, and `*.openvibe.network` resolves to `network` for an unknown subdomain.
- Play and Zone launched after the last card and icon run. They had no `social/<id>.jpg` and no `icons/sites.json` entry, so their pages had no share card and no install manifest.

**Change:**
- `shipped.js`: `play: 'Play'` and `inventory: 'Inventory'` in `SITE_NAMES`.
- `social/play.jpg` and `social/zone.jpg`, built from their Contracts site blocks (`build-social-cards.js --only play,zone`).
- `icons/sites.json`: rebuilt by `build-icons.js` (37 services). The icon PNGs are byte-identical, since both sites use the network variant.

**Tests:** `shipped.test.js` checks that every id in `icons/sites.json` resolves to itself, and that `play.openvibe.network` and `inventory.openvibe.network` resolve to their own ids. The social, app-icon, serve, assets and package tests pass.

The pin round follows the 4.1.5 round now in flight.

Changes

ddiff --git a/CHANGELOG.md b/CHANGELOG.md
iindex 9b043cf..11a7457 100644
---- a/CHANGELOG.md
++++ b/CHANGELOG.md
@@@ -4,6 +4,15 @@ 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.1.6 — 2026-10-15
++
++- **Play and Inventory show their own "Recently shipped".** `shipped.js` knew no `play` or `inventory` id, so the
++ widget fell back to the page's host and play.openvibe.network listed Network's changes. Both ids are in the registry
++ now, and the test checks that every site in `icons/sites.json` resolves to itself.
++- **Share cards and install manifests for Play and Zone.** `social/play.jpg` and `social/zone.jpg` are drawn from their
++ Contracts site blocks (build-social-cards.js), and `icons/sites.json` names both (build-icons.js; 37 services), so their
++ pages get an `og:image` and an installable manifest like every other site.
++
## 4.1.5 — 2026-10-15
- **Steps line up.** In a row of steps, a step whose text is one line had a gap under its title: the row stretched it to
ddiff --git a/icons/sites.json b/icons/sites.json
iindex 8ef671a..c9ff571 100644
---- a/icons/sites.json
++++ b/icons/sites.json
@@@ -104,6 +104,11 @@
"description": "Go live once, stream everywhere",
"icon": "network"
},
++ "play": {
++ "name": "OpenVibe.Play",
++ "description": "Achievements and leaderboards for every OpenVibe game.",
++ "icon": "network"
++ },
"quest": {
"name": "OpenVibe.Quest",
"description": "Badges for what you really do",
@@@ -173,5 +178,10 @@
"name": "OpenVibe.Work",
"description": "Find work, with an agent on your side",
"icon": "network"
++ },
++ "zone": {
++ "name": "OpenVibe.Zone",
++ "description": "Private S3-compatible storage for your projects.",
++ "icon": "network"
}
}
ddiff --git a/package.json b/package.json
iindex d33ae7c..e6f565a 100644
---- a/package.json
++++ b/package.json
@@@ -1,6 +1,6 @@
{
"name": "openvibe-shared",
-- "version": "4.1.5",
++ "version": "4.1.6",
"description": "Shared navbar, footer, themes, icons, legal pages, SEO, auth and analytics for every OpenVibe site",
"main": "index.js",
"bin": {
ddiff --git a/shipped.js b/shipped.js
iindex 21b0223..fea4b62 100644
---- a/shipped.js
++++ b/shipped.js
@@@ -44,7 +44,7 @@
services: 'Services', actor: 'Actor', run: 'Run', watch: 'Watch', node: 'Node', zone: 'Zone', download: 'Download',
video: 'Video', pics: 'Pics', rent: 'Rent', homes: 'Homes', work: 'Work', food: 'Food', help: 'Help', quest: 'Quest',
website: 'Website', fund: 'Fund', 'media-hub': 'Media Hub', extensions: 'Extensions', contracts: 'Contracts', sdk: 'SDK',
-- shared: 'Shared', examples: 'Examples', publishing: 'Publishing',
++ shared: 'Shared', examples: 'Examples', publishing: 'Publishing', play: 'Play', inventory: 'Inventory',
};
const STYLE_ID = 'ov-shipped-style';
const TEXT = 'var(--text-primary,var(--text,inherit))';
ddiff --git a/social/play.jpg b/social/play.jpg
nnew file mode 100644
iindex 0000000..08a00ed
BBinary files /dev/null and b/social/play.jpg differ
ddiff --git a/social/zone.jpg b/social/zone.jpg
nnew file mode 100644
iindex 0000000..6e95a3d
BBinary files /dev/null and b/social/zone.jpg differ
ddiff --git a/test/shipped.test.js b/test/shipped.test.js
iindex 51e35c8..2edb9ea 100644
---- a/test/shipped.test.js
++++ b/test/shipped.test.js
@@@ -95,6 +95,11 @@ const data = {
assert.strictEqual(sf('www.openvibe.live'), 'live');
assert.strictEqual(sf('example.com'), null);
assert.strictEqual(sf('live'), 'live');
++ // Every site with a share card and app icon (icons/sites.json, from the Contracts site blocks) is a registry id, so its
++ // own feed is the one shown: play.openvibe.network showed Network's changes while 'play' was missing (2026-10-15).
++ for (const id of Object.keys(require('../icons/sites.json'))) assert.strictEqual(sf(id), id, `${id} is a registry id`);
++ assert.strictEqual(sf('play.openvibe.network'), 'play');
++ assert.strictEqual(sf('inventory.openvibe.network'), 'inventory');
// A footer's own site id wins over the page's host; an id that is not a registry id falls back to the host.
globalThis.location = { hostname: 'dev.openvibe.tools' };
const own = document.createElement('a');