openvibers/openvibe.network Commits

Network: openvibe-contracts v0.108.0 — Watch runs, four resource indexes active. (#72)

OP OpenVibers committed 7 Oct 2026 · 1f065afd43 · 6 files, +11 −11

* Network: openvibe-contracts v0.108.0 — Watch runs, four resource indexes active.

Network pins openvibe-contracts v0.108.0: OpenVibe.Watch runs (alpha, internal on loopback :4730) and the resource indexes of Host, Events, Codes and Media are active capabilities.

- package.json / lockfile v0.107.0 -> v0.108.0; STATUS.json, README.
- test/registry-exposure.test.js: PINNED watch internal; exposure summary internal 11 / placeholder 5.

Tests: registry-exposure (direct), frame, home-front-door, registry-ecosystem, registry-manifest-fixture, cells-registry: passed (--strict).

* registry-ecosystem: Watch left the planned list (it runs, internal, contracts 0.108.0).

Changes

ddiff --git a/README.md b/README.md
iindex a2d14558..2e8a32bc 100644
---- a/README.md
++++ b/README.md
@@@ -48,7 +48,7 @@ Identity and account service for the OpenVibe network. Manages user accounts, OA
## Depends on
--- `openvibe-contracts` v0.107.0 (registry manifests, capability checks), `openvibe-sdk` v0.28.0 (PostgreSQL
++- `openvibe-contracts` v0.108.0 (registry manifests, capability checks), `openvibe-sdk` v0.28.0 (PostgreSQL
and Valkey adapters, events, per-actor limits, universal telemetry), `openvibe-shared` v2.10.1, pinned by release tarball
- OpenVibe.Events (Network's outbox relay; the events it consumes), OpenVibe.AI (the `network.site_copy`
workflow), OpenVibe.Blog (the changelog feed it proxies)
ddiff --git a/STATUS.json b/STATUS.json
iindex 1235a822..2e5ed1bd 100644
---- a/STATUS.json
++++ b/STATUS.json
@@@ -6,7 +6,7 @@
"runtime": "node 22, express, PostgreSQL 18 (openvibe-sdk/db, async) + Valkey 9",
"port": 4000,
"domain": "openvibe.network (with auth., api., admin., my. and themes.openvibe.network in its manifest)",
-- "contracts": "openvibe-contracts v0.107.0",
++ "contracts": "openvibe-contracts v0.108.0",
"capabilities": [
"identity.subject.resolve",
"mods.grant.manage",
ddiff --git a/package-lock.json b/package-lock.json
iindex ae509ff8..d951b5af 100644
---- a/package-lock.json
++++ b/package-lock.json
@@@ -21,7 +21,7 @@
"iovalkey": "^0.4.0",
"jsonwebtoken": "^9.0.0",
"multer": "^1.4.5-lts.1",
-- "openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.107.0",
++ "openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.108.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.28.0",
"openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v2.10.1",
"pg": "^8.23.0",
@@@ -1556,9 +1556,9 @@
}
},
"node_modules/openvibe-contracts": {
-- "version": "0.107.0",
-- "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.107.0",
-- "integrity": "sha512-bttjTDLzCfHFtq5h0EkBaPspVV6U934jj5Hz7RViIh2UTiC2Xzy3d6AnHLsEomVyTwaiwg9veNiO+eZTZ0lxsg==",
++ "version": "0.108.0",
++ "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.108.0",
++ "integrity": "sha512-T07n7B482/XIdSD3ikehPGHFUTWsyGaeLCF2SerWsKD1V09s1RYs7TD9+Y2z7vdxYjSYhQPMHr1r2xP3F9xIbA==",
"license": "AGPL-3.0-only",
"dependencies": {
"ajv": "^8.17.1",
ddiff --git a/package.json b/package.json
iindex de605019..f44d5d35 100644
---- a/package.json
++++ b/package.json
@@@ -30,7 +30,7 @@
"iovalkey": "^0.4.0",
"jsonwebtoken": "^9.0.0",
"multer": "^1.4.5-lts.1",
-- "openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.107.0",
++ "openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.108.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.28.0",
"openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v2.10.1",
"pg": "^8.23.0",
ddiff --git a/test/registry-ecosystem.test.js b/test/registry-ecosystem.test.js
iindex 83af7475..f4154ecb 100644
---- a/test/registry-ecosystem.test.js
++++ b/test/registry-ecosystem.test.js
@@@ -77,8 +77,8 @@ const { createEcosystemRegistry } = require('../server/registry/ecosystem');
assert.strictEqual(inCat('events'), 'platform'); assert.strictEqual(inCat('ai'), 'platform'); assert.strictEqual(inCat('sources'), 'platform');
assert.strictEqual(inCat('sdk'), 'library'); assert.strictEqual(inCat('contracts'), 'library');
assert.strictEqual(inCat('examples'), 'repository');
-- // 'planned' = exposure placeholder: Contracts 0.83.0's media-hub and space, v0.87-v0.90's zone and run, v0.95.0's services, v0.102.0's watch (charter only, nothing runs)
-- assert.deepStrictEqual(cats.planned.services.map(x => x.id).sort(), ['media-hub', 'run', 'services', 'space', 'watch', 'zone']);
++ // 'planned' = exposure placeholder: Contracts 0.83.0's media-hub and space, v0.87-v0.90's zone and run, v0.95.0's services (charter only, nothing runs). Watch left it in v0.108.0 (it runs, internal).
++ assert.deepStrictEqual(cats.planned.services.map(x => x.id).sort(), ['media-hub', 'run', 'services', 'space', 'zone']);
const liveRow = cats.site.services.find(x => x.id === 'live');
assert.strictEqual(liveRow.runtime, 'down'); assert.ok(liveRow.checked_at, 'rows carry the last check');
r = await get('/api/v1/registry/categories/library');
ddiff --git a/test/registry-exposure.test.js b/test/registry-exposure.test.js
iindex 5eb0850c..f8d830ce 100644
---- a/test/registry-exposure.test.js
++++ b/test/registry-exposure.test.js
@@@ -25,7 +25,7 @@ const PINNED = {
// openvibe-contracts v0.95.0: OpenVibe.Services is a charter only (the T13 control plane).
services: 'placeholder',
// openvibe-contracts v0.102.0: OpenVibe.Watch is a charter only (plan T18).
-- watch: 'placeholder',
++ watch: 'internal', // OpenVibe.Watch runs on loopback since 2026-10-07 (contracts 0.108.0)
sdk: 'library', shared: 'library', contracts: 'library', publishing: 'library',
examples: 'repository',
};
@@@ -110,7 +110,7 @@ const ready = [200, { ready: true, status: 'ready', failed: [], degraded: [], ch
assert.strictEqual(sBy.shared.label, `not running (library, released v${require('openvibe-shared/package.json').version})`);
// Contracts 0.83.0 added two placeholder services (media-hub, space), v0.86-v0.90 Bot (live) and two more (zone, run),
// v0.95.0 Services; none is retired
-- assert.deepStrictEqual(st.exposure_summary, { live: 16, internal: 10, library: 4, repository: 1, placeholder: 6, retired: 0 });
++ assert.deepStrictEqual(st.exposure_summary, { live: 16, internal: 11, library: 4, repository: 1, placeholder: 5, retired: 0 });
// The page: no row for a service whose domain serves a placeholder shows a bare "Up".
const html = await fetch(base + '/status').then(x => x.text());