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)
Changes
@@@ -4,6 +4,15 @@ All notable changes to `openvibe-shared`. Versions follow [semver](https://semvebreaking 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@@@ -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"}}@@@ -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": {@@@ -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))';nnew file mode 100644BBinary files /dev/null and b/social/play.jpg differnnew file mode 100644BBinary files /dev/null and b/social/zone.jpg differ@@@ -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');
@@ -4,6 +4,15 @@ All notable changes to `openvibe-shared`. Versions follow [semver](https://semve
@@ -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.
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).
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
## 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
- **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
@@ -104,6 +104,11 @@
@@ -104,6 +104,11 @@
"description": "Go live once, stream everywhere",
"description": "Go live once, stream everywhere",
"icon": "network"
"icon": "network"
},
},
+ "play": {
+ "name": "OpenVibe.Play",
+ "description": "Achievements and leaderboards for every OpenVibe game.",
+ "icon": "network"
+ },
"quest": {
"quest": {
"name": "OpenVibe.Quest",
"name": "OpenVibe.Quest",
"description": "Badges for what you really do",
"description": "Badges for what you really do",
@@ -173,5 +178,10 @@
@@ -173,5 +178,10 @@
"name": "OpenVibe.Work",
"name": "OpenVibe.Work",
"description": "Find work, with an agent on your side",
"description": "Find work, with an agent on your side",
"icon": "network"
"icon": "network"
+ },
+ "zone": {
+ "name": "OpenVibe.Zone",
+ "description": "Private S3-compatible storage for your projects.",
+ "icon": "network"
}
}
}
}
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"name": "openvibe-shared",
"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",
"description": "Shared navbar, footer, themes, icons, legal pages, SEO, auth and analytics for every OpenVibe site",
"main": "index.js",
"main": "index.js",
"bin": {
"bin": {
@@ -44,7 +44,7 @@
@@ -44,7 +44,7 @@
services: 'Services', actor: 'Actor', run: 'Run', watch: 'Watch', node: 'Node', zone: 'Zone', download: 'Download',
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',
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',
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 STYLE_ID = 'ov-shipped-style';
const TEXT = 'var(--text-primary,var(--text,inherit))';
const TEXT = 'var(--text-primary,var(--text,inherit))';
new file mode 100644
new file mode 100644
Binary files /dev/null and b/social/play.jpg differ
Binary files /dev/null and b/social/play.jpg differ
new file mode 100644
new file mode 100644
Binary files /dev/null and b/social/zone.jpg differ
Binary files /dev/null and b/social/zone.jpg differ
@@ -95,6 +95,11 @@ const data = {
@@ -95,6 +95,11 @@ const data = {
assert.strictEqual(sf('www.openvibe.live'), 'live');
assert.strictEqual(sf('www.openvibe.live'), 'live');
assert.strictEqual(sf('example.com'), null);
assert.strictEqual(sf('example.com'), null);
assert.strictEqual(sf('live'), 'live');
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.
// 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' };
globalThis.location = { hostname: 'dev.openvibe.tools' };
const own = document.createElement('a');
const own = document.createElement('a');