openvibers/openvibe.contracts Commits

0.239.0: graph.link@1, report.metric@1, site.neighbourhood (#247)

OP OpenVibers committed 15 days ago · 1c3ba294d2 · 102 files, +470 −138

Changes

ddiff --git a/CHANGELOG.md b/CHANGELOG.md
iindex 318d26af..ee7ae737 100644
---- a/CHANGELOG.md
++++ b/CHANGELOG.md
@@@ -4,6 +4,13 @@ All notable changes to `openvibe-contracts`. Releases are git tags (`vX.Y.Z`) th
from `https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/<tag>`. Before v0.30.0,
the notes were in the tag and commit messages (`git tag -n1`).
++## 0.239.0 — 2026-10-28
++
++- Added `graph.link@1` (`from`, `rel`, `to` OVRN relation) for the planned object graph. The `graph.link.created` event waits for a producing service.
++- Added `report.metric@1` from OpenVibe.Report's `docs/report.metric.v1.json` proposal, including exclusive UTC day and 7/30/90-day window forms. Report v1 currently reads upstream numbers and does not publish metric rows.
++- Added the optional `site.neighbourhood` field to `registry.service-manifest@1` (1.2.0), last in each of the 48 service site blocks. The seven ids match OpenVibe.Shared `rooms.js` and Network's neighbourhood menu.
++- Today already had all three live `today.event.*` outbox payloads and fixtures. Today, Report, Design, Domains and Vision already have manifests; Website is served by Space, so no duplicate service manifest was added.
++
## 0.238.0 — 2026-10-28
- **OpenVibe.Bench** (`bench`, live at bench.openvibe.services, port 5230, database `ov_bench`): the shared AI
ddiff --git a/contracts/catalog.json b/contracts/catalog.json
iindex 557afa2a..745392d2 100644
---- a/contracts/catalog.json
++++ b/contracts/catalog.json
@@@ -89,7 +89,7 @@
},
{
"id": "registry.service-manifest",
-- "version": "1.1.0",
++ "version": "1.2.0",
"owner": "network",
"schema": "registry/service-manifest.v1.json",
"visibility": "public",
@@@ -7802,6 +7802,24 @@
"visibility": "first-party",
"compatibility": "backward",
"status": "active"
++ },
++ {
++ "id": "graph.link",
++ "version": "1.0.0",
++ "owner": "graph",
++ "schema": "graph/link.v1.json",
++ "visibility": "public",
++ "compatibility": "backward",
++ "status": "active"
++ },
++ {
++ "id": "report.metric",
++ "version": "1.0.0",
++ "owner": "report",
++ "schema": "report/metric.v1.json",
++ "visibility": "public",
++ "compatibility": "backward",
++ "status": "active"
}
]
}
ddiff --git a/contracts/graph/link.v1.json b/contracts/graph/link.v1.json
nnew file mode 100644
iindex 00000000..0138cc08
---- /dev/null
++++ b/contracts/graph/link.v1.json
@@@ -0,0 +1,14 @@
++{
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/graph/link.v1.json",
++ "title": "GraphLink",
++ "description": "graph.link@1: a directed, typed relation between canonical OpenVibe object names (plan 2026-10-28 section 4.1). The owning service supplies the OVRNs and relation; no graph producer is live yet.",
++ "type": "object",
++ "additionalProperties": false,
++ "required": ["from", "rel", "to"],
++ "properties": {
++ "from": { "type": "string", "pattern": "^ovrn:[a-z][a-z0-9-]*:.+$", "maxLength": 512 },
++ "rel": { "type": "string", "pattern": "^[a-z][A-Za-z0-9]{0,63}$", "description": "Typed relation, for example derivedFrom, on, soldBy or cites." },
++ "to": { "type": "string", "pattern": "^ovrn:[a-z][a-z0-9-]*:.+$", "maxLength": 512 }
++ }
++}
ddiff --git a/contracts/registry/service-manifest.v1.json b/contracts/registry/service-manifest.v1.json
iindex 43ff4bdd..5e2fa114 100644
---- a/contracts/registry/service-manifest.v1.json
++++ b/contracts/registry/service-manifest.v1.json
@@@ -187,6 +187,10 @@
},
"relationships": {
"$ref": "product.v1.json#/$defs/relationships"
++ },
++ "neighbourhood": {
++ "enum": ["streams", "games", "answers", "make", "shop", "people", "build"],
++ "description": "The room's launcher group in OpenVibe.Shared rooms.js and OpenVibe.Network frame/sites.js; optional so older manifests retain their meaning."
}
}
},
ddiff --git a/contracts/report/metric.v1.json b/contracts/report/metric.v1.json
nnew file mode 100644
iindex 00000000..e0fd361d
---- /dev/null
++++ b/contracts/report/metric.v1.json
@@@ -0,0 +1,23 @@
++{
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/report/metric.v1.json",
++ "title": "ReportMetric",
++ "description": "report.metric@1: one count computed or ingested by Report, with a UTC day or a window. Money values come from Billing's API; Report does not derive them. Mirrors OpenVibe.Report docs/report.metric.v1.json on origin/main.",
++ "type": "object",
++ "required": ["metric", "scope", "scope_id", "value", "unit", "source"],
++ "additionalProperties": false,
++ "properties": {
++ "metric": { "type": "string", "pattern": "^[a-z][a-z0-9_]{1,60}$" },
++ "scope": { "enum": ["network", "site", "channel", "stream"] },
++ "scope_id": { "type": "string", "minLength": 1, "maxLength": 200 },
++ "day": { "type": "string", "format": "date" },
++ "window_days": { "type": "integer", "enum": [7, 30, 90] },
++ "value": { "type": "number" },
++ "unit": { "enum": ["count", "seconds", "minutes", "bits", "cents", "milliseconds", "percent"] },
++ "source": { "type": "string", "minLength": 1, "maxLength": 40 }
++ },
++ "oneOf": [
++ { "required": ["day"], "not": { "required": ["window_days"] } },
++ { "required": ["window_days"], "not": { "required": ["day"] } }
++ ]
++}
ddiff --git a/fixtures/graph.link/invalid/missing-target.json b/fixtures/graph.link/invalid/missing-target.json
nnew file mode 100644
iindex 00000000..e474ee15
---- /dev/null
++++ b/fixtures/graph.link/invalid/missing-target.json
@@@ -0,0 +1,4 @@
++{
++ "from": "ovrn:meme:prj_01J0000000000000000000000A:meme/mem_01K0000000000000000000000B",
++ "rel": "derivedFrom"
++}
ddiff --git a/fixtures/graph.link/valid/derived-from.json b/fixtures/graph.link/valid/derived-from.json
nnew file mode 100644
iindex 00000000..2ff37f1a
---- /dev/null
++++ b/fixtures/graph.link/valid/derived-from.json
@@@ -0,0 +1,5 @@
++{
++ "from": "ovrn:meme:prj_01J0000000000000000000000A:meme/mem_01K0000000000000000000000B",
++ "rel": "derivedFrom",
++ "to": "ovrn:video:prj_01J0000000000000000000000A:clip/clp_01K0000000000000000000000C"
++}
ddiff --git a/fixtures/report.metric/invalid/both-periods.json b/fixtures/report.metric/invalid/both-periods.json
nnew file mode 100644
iindex 00000000..f8a8fb17
---- /dev/null
++++ b/fixtures/report.metric/invalid/both-periods.json
@@@ -0,0 +1,10 @@
++{
++ "metric": "pageviews",
++ "scope": "network",
++ "scope_id": "network",
++ "day": "2026-10-28",
++ "window_days": 7,
++ "value": 147,
++ "unit": "count",
++ "source": "network-stats"
++}
ddiff --git a/fixtures/report.metric/valid/day.json b/fixtures/report.metric/valid/day.json
nnew file mode 100644
iindex 00000000..13324c0e
---- /dev/null
++++ b/fixtures/report.metric/valid/day.json
@@@ -0,0 +1,9 @@
++{
++ "metric": "pageviews",
++ "scope": "site",
++ "scope_id": "network",
++ "day": "2026-10-28",
++ "value": 147,
++ "unit": "count",
++ "source": "network-stats"
++}
ddiff --git a/fixtures/report.metric/valid/window.json b/fixtures/report.metric/valid/window.json
nnew file mode 100644
iindex 00000000..69b251b3
---- /dev/null
++++ b/fixtures/report.metric/valid/window.json
@@@ -0,0 +1,9 @@
++{
++ "metric": "watch_minutes",
++ "scope": "channel",
++ "scope_id": "carol",
++ "window_days": 7,
++ "value": 312.5,
++ "unit": "minutes",
++ "source": "live"
++}
ddiff --git a/generated/json-schema/bundle.json b/generated/json-schema/bundle.json
iindex 8f09db2a..fbf4c05e 100644
---- a/generated/json-schema/bundle.json
++++ b/generated/json-schema/bundle.json
@@@ -708,7 +708,7 @@
}
},
"registry.service-manifest": {
-- "version": "1.1.0",
++ "version": "1.2.0",
"owner": "network",
"status": "active",
"schema": {
@@@ -900,6 +900,18 @@
},
"relationships": {
"$ref": "product.v1.json#/$defs/relationships"
++ },
++ "neighbourhood": {
++ "enum": [
++ "streams",
++ "games",
++ "answers",
++ "make",
++ "shop",
++ "people",
++ "build"
++ ],
++ "description": "The room's launcher group in OpenVibe.Shared rooms.js and OpenVibe.Network frame/sites.js; optional so older manifests retain their meaning."
}
}
},
@@@ -87561,6 +87573,134 @@
}
}
}
++ },
++ "graph.link": {
++ "version": "1.0.0",
++ "owner": "graph",
++ "status": "active",
++ "schema": {
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/graph/link.v1.json",
++ "title": "GraphLink",
++ "description": "graph.link@1: a directed, typed relation between canonical OpenVibe object names (plan 2026-10-28 section 4.1). The owning service supplies the OVRNs and relation; no graph producer is live yet.",
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "from",
++ "rel",
++ "to"
++ ],
++ "properties": {
++ "from": {
++ "type": "string",
++ "pattern": "^ovrn:[a-z][a-z0-9-]*:.+$",
++ "maxLength": 512
++ },
++ "rel": {
++ "type": "string",
++ "pattern": "^[a-z][A-Za-z0-9]{0,63}$",
++ "description": "Typed relation, for example derivedFrom, on, soldBy or cites."
++ },
++ "to": {
++ "type": "string",
++ "pattern": "^ovrn:[a-z][a-z0-9-]*:.+$",
++ "maxLength": 512
++ }
++ }
++ }
++ },
++ "report.metric": {
++ "version": "1.0.0",
++ "owner": "report",
++ "status": "active",
++ "schema": {
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/report/metric.v1.json",
++ "title": "ReportMetric",
++ "description": "report.metric@1: one count computed or ingested by Report, with a UTC day or a window. Money values come from Billing's API; Report does not derive them. Mirrors OpenVibe.Report docs/report.metric.v1.json on origin/main.",
++ "type": "object",
++ "required": [
++ "metric",
++ "scope",
++ "scope_id",
++ "value",
++ "unit",
++ "source"
++ ],
++ "additionalProperties": false,
++ "properties": {
++ "metric": {
++ "type": "string",
++ "pattern": "^[a-z][a-z0-9_]{1,60}$"
++ },
++ "scope": {
++ "enum": [
++ "network",
++ "site",
++ "channel",
++ "stream"
++ ]
++ },
++ "scope_id": {
++ "type": "string",
++ "minLength": 1,
++ "maxLength": 200
++ },
++ "day": {
++ "type": "string",
++ "format": "date"
++ },
++ "window_days": {
++ "type": "integer",
++ "enum": [
++ 7,
++ 30,
++ 90
++ ]
++ },
++ "value": {
++ "type": "number"
++ },
++ "unit": {
++ "enum": [
++ "count",
++ "seconds",
++ "minutes",
++ "bits",
++ "cents",
++ "milliseconds",
++ "percent"
++ ]
++ },
++ "source": {
++ "type": "string",
++ "minLength": 1,
++ "maxLength": 40
++ }
++ },
++ "oneOf": [
++ {
++ "required": [
++ "day"
++ ],
++ "not": {
++ "required": [
++ "window_days"
++ ]
++ }
++ },
++ {
++ "required": [
++ "window_days"
++ ],
++ "not": {
++ "required": [
++ "day"
++ ]
++ }
++ }
++ ]
++ }
}
}
}
ddiff --git a/generated/openapi/actor.json b/generated/openapi/actor.json
iindex 9aa1b0fa..91da1b78 100644
---- a/generated/openapi/actor.json
++++ b/generated/openapi/actor.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Actor API",
-- "version": "0.238.0",
-- "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.239.0",
++ "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.239.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/ai.json b/generated/openapi/ai.json
iindex 0701677b..8822e4a7 100644
---- a/generated/openapi/ai.json
++++ b/generated/openapi/ai.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.AI API",
-- "version": "0.238.0",
-- "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.239.0",
++ "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.239.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/bench.json b/generated/openapi/bench.json
iindex 8201487f..cfba3245 100644
---- a/generated/openapi/bench.json
++++ b/generated/openapi/bench.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Bench API",
-- "version": "0.238.0",
-- "description": "Routes of OpenVibe.Bench as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.239.0",
++ "description": "Routes of OpenVibe.Bench as the OpenVibe contracts describe them (openvibe-contracts 0.239.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/billing.json b/generated/openapi/billing.json
iindex 15b394e0..1d4d9d71 100644
---- a/generated/openapi/billing.json
++++ b/generated/openapi/billing.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Billing API",
-- "version": "0.238.0",
-- "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.239.0",
++ "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.239.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/blog.json b/generated/openapi/blog.json
iindex 4364cda1..ecfa1b9e 100644
---- a/generated/openapi/blog.json
++++ b/generated/openapi/blog.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Blog API",
-- "version": "0.238.0",
-- "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.239.0",
++ "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.239.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/bot.json b/generated/openapi/bot.json
iindex d4244f05..f318cef2 100644
---- a/generated/openapi/bot.json
++++ b/generated/openapi/bot.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Bot API",
-- "version": "0.238.0",
-- "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.239.0",
++ "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.239.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/chat.json b/generated/openapi/chat.json
iindex b204a4c4..6a9fc1d8 100644
---- a/generated/openapi/chat.json
++++ b/generated/openapi/chat.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Chat API",
-- "version": "0.238.0",
-- "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.239.0",
++ "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.239.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/codes.json b/generated/openapi/codes.json
iindex bc9c1c4f..d1644200 100644
---- a/generated/openapi/codes.json
++++ b/generated/openapi/codes.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Codes API",
-- "version": "0.238.0",
-- "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.239.0",
++ "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.239.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/community.json b/generated/openapi/community.json
iindex 01c2b802..c8fab8c6 100644
---- a/generated/openapi/community.json
++++ b/generated/openapi/community.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Community API",
-- "version": "0.238.0",
-- "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.239.0",
++ "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.239.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/coupons.json b/generated/openapi/coupons.json
iindex 353743b0..896b7d61 100644
---- a/generated/openapi/coupons.json
++++ b/generated/openapi/coupons.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Coupons API",
-- "version": "0.238.0",
-- "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.239.0",
++ "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.239.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/deals.json b/generated/openapi/deals.json
iindex baa02df3..a1a2e055 100644
---- a/generated/openapi/deals.json
++++ b/generated/openapi/deals.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Deals API",
-- "version": "0.238.0",
-- "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.239.0",
++ "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.239.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/domains.json b/generated/openapi/domains.json
iindex 82fb0d64..193f31a0 100644
---- a/generated/openapi/domains.json
++++ b/generated/openapi/domains.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Domains API",
-- "version": "0.238.0",
-- "description": "Routes of OpenVibe.Domains as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.239.0",
++ "description": "Routes of OpenVibe.Domains as the OpenVibe contracts describe them (openvibe-contracts 0.239.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/events.json b/generated/openapi/events.json
iindex ae483d7d..7a6133fe 100644
---- a/generated/openapi/events.json
++++ b/generated/openapi/events.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Events API",
-- "version": "0.238.0",
-- "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.239.0",
++ "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.239.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/food.json b/generated/openapi/food.json
iindex 63b9def8..d9af5a8d 100644
---- a/generated/openapi/food.json
++++ b/generated/openapi/food.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Food API",
-- "version": "0.238.0",
-- "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.239.0",
++ "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.239.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/games.json b/generated/openapi/games.json
iindex 0f1025eb..08834382 100644
---- a/generated/openapi/games.json
++++ b/generated/openapi/games.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Games API",
-- "version": "0.238.0",
-- "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.239.0",
++ "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.239.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/host.json b/generated/openapi/host.json
iindex dda78630..0374e8df 100644
---- a/generated/openapi/host.json
++++ b/generated/openapi/host.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Host API",
-- "version": "0.238.0",
-- "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.239.0",
++ "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.239.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/inventory.json b/generated/openapi/inventory.json
iindex f16c8e84..36de6cd2 100644
---- a/generated/openapi/inventory.json
++++ b/generated/openapi/inventory.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Inventory API",
-- "version": "0.238.0",
-- "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.239.0",
++ "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.239.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/live.json b/generated/openapi/live.json
iindex 6a7d676b..4178507b 100644
---- a/generated/openapi/live.json
++++ b/generated/openapi/live.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Live API",
-- "version": "0.238.0",
-- "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.239.0",
++ "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.239.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/media-hub.json b/generated/openapi/media-hub.json
iindex 5500ab2a..b2eb0cb3 100644
---- a/generated/openapi/media-hub.json
++++ b/generated/openapi/media-hub.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.MediaHub API",
-- "version": "0.238.0",
-- "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.239.0",
++ "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.239.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/media.json b/generated/openapi/media.json
iindex 35cea5e7..d165d6ea 100644
---- a/generated/openapi/media.json
++++ b/generated/openapi/media.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Media API",
-- "version": "0.238.0",
-- "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.239.0",
++ "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.239.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/network.json b/generated/openapi/network.json
iindex eafe2e0f..f4bdc609 100644
---- a/generated/openapi/network.json
++++ b/generated/openapi/network.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Network API",
-- "version": "0.238.0",
-- "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.239.0",
++ "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.239.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/news.json b/generated/openapi/news.json
iindex db4f69c9..8a9fe20f 100644
---- a/generated/openapi/news.json
++++ b/generated/openapi/news.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.News API",
-- "version": "0.238.0",
-- "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.239.0",
++ "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.239.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/openre.json b/generated/openapi/openre.json
iindex 01199130..40be05e4 100644
---- a/generated/openapi/openre.json
++++ b/generated/openapi/openre.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenRestream API",
-- "version": "0.238.0",
-- "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.239.0",
++ "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.239.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/play.json b/generated/openapi/play.json
iindex 10976db2..47c4d104 100644
---- a/generated/openapi/play.json
++++ b/generated/openapi/play.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Play API",
-- "version": "0.238.0",
-- "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.239.0",
++ "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.239.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/quest.json b/generated/openapi/quest.json
iindex 2924ab4c..f1205ffb 100644
---- a/generated/openapi/quest.json
++++ b/generated/openapi/quest.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Quest API",
-- "version": "0.238.0",
-- "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.239.0",
++ "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.239.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/reviews.json b/generated/openapi/reviews.json
iindex 1ca2fc15..6d28be3e 100644
---- a/generated/openapi/reviews.json
++++ b/generated/openapi/reviews.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Reviews API",
-- "version": "0.238.0",
-- "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.239.0",
++ "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.239.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/run.json b/generated/openapi/run.json
iindex af4c3e88..13fdbb8a 100644
---- a/generated/openapi/run.json
++++ b/generated/openapi/run.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Run API",
-- "version": "0.238.0",
-- "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.239.0",
++ "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.239.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/search.json b/generated/openapi/search.json
iindex b9af96c5..834181db 100644
---- a/generated/openapi/search.json
++++ b/generated/openapi/search.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Search API",
-- "version": "0.238.0",
-- "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.239.0",
++ "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.239.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/services.json b/generated/openapi/services.json
iindex 4293723f..683b5e21 100644
---- a/generated/openapi/services.json
++++ b/generated/openapi/services.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Services API",
-- "version": "0.238.0",
-- "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.239.0",
++ "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.239.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/sources.json b/generated/openapi/sources.json
iindex b64bb36a..eab27bc3 100644
---- a/generated/openapi/sources.json
++++ b/generated/openapi/sources.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Sources API",
-- "version": "0.238.0",
-- "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.239.0",
++ "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.239.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/space.json b/generated/openapi/space.json
iindex b9b63892..ad0984ee 100644
---- a/generated/openapi/space.json
++++ b/generated/openapi/space.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Space API",
-- "version": "0.238.0",
-- "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.239.0",
++ "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.239.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/tips.json b/generated/openapi/tips.json
iindex 85674a6d..428beb6c 100644
---- a/generated/openapi/tips.json
++++ b/generated/openapi/tips.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Tips API",
-- "version": "0.238.0",
-- "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.239.0",
++ "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.239.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/tools.json b/generated/openapi/tools.json
iindex 2cbee3e2..5c5a8af5 100644
---- a/generated/openapi/tools.json
++++ b/generated/openapi/tools.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Tools API",
-- "version": "0.238.0",
-- "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.239.0",
++ "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.239.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/trade.json b/generated/openapi/trade.json
iindex 2d906942..c8c35b04 100644
---- a/generated/openapi/trade.json
++++ b/generated/openapi/trade.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Trade API",
-- "version": "0.238.0",
-- "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.239.0",
++ "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.239.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/vip.json b/generated/openapi/vip.json
iindex 94d1330c..47226444 100644
---- a/generated/openapi/vip.json
++++ b/generated/openapi/vip.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.VIP API",
-- "version": "0.238.0",
-- "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.239.0",
++ "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.239.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/vision.json b/generated/openapi/vision.json
iindex 4e7e275d..3dcfba2b 100644
---- a/generated/openapi/vision.json
++++ b/generated/openapi/vision.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Vision API",
-- "version": "0.238.0",
-- "description": "Routes of OpenVibe.Vision as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.239.0",
++ "description": "Routes of OpenVibe.Vision as the OpenVibe contracts describe them (openvibe-contracts 0.239.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/watch.json b/generated/openapi/watch.json
iindex 5c149572..c68688ab 100644
---- a/generated/openapi/watch.json
++++ b/generated/openapi/watch.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Watch API",
-- "version": "0.238.0",
-- "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.239.0",
++ "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.239.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/wiki.json b/generated/openapi/wiki.json
iindex c1f678ef..22c13fb5 100644
---- a/generated/openapi/wiki.json
++++ b/generated/openapi/wiki.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Wiki API",
-- "version": "0.238.0",
-- "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.239.0",
++ "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.239.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/work.json b/generated/openapi/work.json
iindex 7476056d..8bfc21d7 100644
---- a/generated/openapi/work.json
++++ b/generated/openapi/work.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Work API",
-- "version": "0.238.0",
-- "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.239.0",
++ "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.239.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/zone.json b/generated/openapi/zone.json
iindex 57ebeccb..2f431c74 100644
---- a/generated/openapi/zone.json
++++ b/generated/openapi/zone.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Zone API",
-- "version": "0.238.0",
-- "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.239.0",
++ "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.239.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/typescript/index.d.ts b/generated/typescript/index.d.ts
iindex f97a2fb9..2199a4c9 100644
---- a/generated/typescript/index.d.ts
++++ b/generated/typescript/index.d.ts
@@@ -234,7 +234,7 @@ export interface Problem {
[k: string]: unknown | undefined;
}
--/** [email protected] (owner: network) */
++/** [email protected] (owner: network) */
/**
* What a service is, where it lives and what it offers. The ecosystem registry is built from these, not from hard-coded route maps.
*/
@@@ -2033,6 +2033,10 @@ export interface ServiceManifest {
*/
statusApi?: string;
};
++ /**
++ * The room's launcher group in OpenVibe.Shared rooms.js and OpenVibe.Network frame/sites.js; optional so older manifests retain their meaning.
++ */
++ neighbourhood?: "streams" | "games" | "answers" | "make" | "shop" | "people" | "build";
};
capabilities: string[];
eventsProduced: string[];
@@@ -213580,3 +213584,33 @@ export interface BenchRatingChangedPayload {
provisional?: boolean;
at: string;
}
++
++/** [email protected] (owner: graph) */
++/**
++ * graph.link@1: a directed, typed relation between canonical OpenVibe object names (plan 2026-10-28 section 4.1). The owning service supplies the OVRNs and relation; no graph producer is live yet.
++ */
++export interface GraphLink {
++ from: string;
++ /**
++ * Typed relation, for example derivedFrom, on, soldBy or cites.
++ */
++ rel: string;
++ to: string;
++}
++
++/** [email protected] (owner: report) */
++/**
++ * report.metric@1: one count computed or ingested by Report, with a UTC day or a window. Money values come from Billing's API; Report does not derive them. Mirrors OpenVibe.Report docs/report.metric.v1.json on origin/main.
++ */
++export type ReportMetric = {
++ metric: string;
++ scope: "network" | "site" | "channel" | "stream";
++ scope_id: string;
++ day?: string;
++ window_days?: 7 | 30 | 90;
++ value: number;
++ unit: "count" | "seconds" | "minutes" | "bits" | "cents" | "milliseconds" | "percent";
++ source: string;
++} & {
++ [k: string]: unknown | undefined;
++};
ddiff --git a/manifests/services/actor.json b/manifests/services/actor.json
iindex 434b48b7..0183bafc 100644
---- a/manifests/services/actor.json
++++ b/manifests/services/actor.json
@@@ -90,6 +90,7 @@
"tagline": "Agents that work while you are away",
"what": "Agents that run tasks for you, now or on a schedule, on OpenVibe's own agent or another platform's, on your computers and robots when you allow it, with every result checked and its cost shown.",
"legalProfile": "ugc",
-- "position": 23
++ "position": 23,
++ "neighbourhood": "make"
}
}
ddiff --git a/manifests/services/ai.json b/manifests/services/ai.json
iindex da84e9df..1c890d04 100644
---- a/manifests/services/ai.json
++++ b/manifests/services/ai.json
@@@ -108,6 +108,7 @@
"question": "How is AI paid for?",
"answer": "At cost: each project has quotas and budgets, and every run records its model, usage and cost."
}
-- ]
++ ],
++ "neighbourhood": "build"
}
}
ddiff --git a/manifests/services/bench.json b/manifests/services/bench.json
iindex 30ce24b7..4d0a25a1 100644
---- a/manifests/services/bench.json
++++ b/manifests/services/bench.json
@@@ -100,6 +100,7 @@
"tagline": "One AI benchmark and comparison engine for every room.",
"what": "The shared AI benchmark and comparison engine: kinds, pinned rounds, blind judgements, elo/pareto/cost boards, an open dataset per kind and private evals.",
"legalProfile": "tools",
-- "position": 47
++ "position": 47,
++ "neighbourhood": "build"
}
}
ddiff --git a/manifests/services/blog.json b/manifests/services/blog.json
iindex 4aa12a3f..d0ab05db 100644
---- a/manifests/services/blog.json
++++ b/manifests/services/blog.json
@@@ -38,7 +38,8 @@
"question": "Can I follow a blog without an account?",
"answer": "Yes. Every blog has RSS, Atom and JSON feeds."
}
-- ]
++ ],
++ "neighbourhood": "answers"
},
"capabilities": [
"blog.blog.create",
ddiff --git a/manifests/services/bot.json b/manifests/services/bot.json
iindex 76c3cbf3..1a3bf759 100644
---- a/manifests/services/bot.json
++++ b/manifests/services/bot.json
@@@ -24,7 +24,8 @@
"tagline": "Drive any robot from your browser",
"what": "Pair a robot with one pasted command and drive it from any browser, by keyboard, gamepad or on-screen joystick, from its own page or under a live stream, with roles, limits and an emergency stop on every command.",
"legalProfile": "games",
-- "position": 21
++ "position": 21,
++ "neighbourhood": "make"
},
"capabilities": [
"bot.robot.read",
ddiff --git a/manifests/services/cam.json b/manifests/services/cam.json
iindex be709e4e..f379be57 100644
---- a/manifests/services/cam.json
++++ b/manifests/services/cam.json
@@@ -78,6 +78,7 @@
"tagline": "Your camera, your cameras, and Live's cam button",
"what": "The camera app with a timer, burst, grid and on-device filter; a private wall for the cameras you own, shared through revocable viewer grants; and the stills Live's cam button takes, every photo saved to Pics.",
"legalProfile": "ugc",
-- "position": 46
++ "position": 46,
++ "neighbourhood": "streams"
}
}
ddiff --git a/manifests/services/chat.json b/manifests/services/chat.json
iindex af2d289d..fb3306e4 100644
---- a/manifests/services/chat.json
++++ b/manifests/services/chat.json
@@@ -149,6 +149,7 @@
"question": "Can I send pictures?",
"answer": "Yes. Pictures in rooms and server channels go through OpenVibe.Pics and show inline."
}
-- ]
++ ],
++ "neighbourhood": "people"
}
}
ddiff --git a/manifests/services/codes.json b/manifests/services/codes.json
iindex 3103e7c6..e15d64aa 100644
---- a/manifests/services/codes.json
++++ b/manifests/services/codes.json
@@@ -38,7 +38,8 @@
"question": "Where is the code?",
"answer": "On GitHub under OpenVibers, open source like the rest of OpenVibe, with read mirrors on OpenVibe Git at git.openvibe.codes."
}
-- ]
++ ],
++ "neighbourhood": "make"
},
"capabilities": [
"codes.task.start",
ddiff --git a/manifests/services/community.json b/manifests/services/community.json
iindex de5d6ce2..c2463aa1 100644
---- a/manifests/services/community.json
++++ b/manifests/services/community.json
@@@ -75,7 +75,8 @@
"question": "Are comments on other sites hosted here?",
"answer": "Yes. Comments on Live recordings and clips, blog posts and hosting plans are OpenVibe.Community threads, so one account and one moderation team cover them all."
}
-- ]
++ ],
++ "neighbourhood": "people"
},
"lifecycle": {
"liveness": {
ddiff --git a/manifests/services/coupons.json b/manifests/services/coupons.json
iindex 3d5d80f4..7e9d26be 100644
---- a/manifests/services/coupons.json
++++ b/manifests/services/coupons.json
@@@ -70,7 +70,8 @@
"question": "Where do the codes come from?",
"answer": "From people who share them and from permitted merchant and deal feeds, matched to the shop and pages they apply to."
}
-- ]
++ ],
++ "neighbourhood": "shop"
},
"capabilities": [
"coupons.coupon.submit",
ddiff --git a/manifests/services/deals.json b/manifests/services/deals.json
iindex f9f7a286..01fe446f 100644
---- a/manifests/services/deals.json
++++ b/manifests/services/deals.json
@@@ -74,7 +74,8 @@
"question": "Do you get paid for deals?",
"answer": "Some links may be affiliate links, and they are marked as such. They never change the order or what is shown."
}
-- ]
++ ],
++ "neighbourhood": "shop"
},
"capabilities": [
"deals.offer.submit",
ddiff --git a/manifests/services/design.json b/manifests/services/design.json
iindex ad011bb2..6bdd4bcd 100644
---- a/manifests/services/design.json
++++ b/manifests/services/design.json
@@@ -68,6 +68,7 @@
"tagline": "Make it yours",
"what": "Try any OpenVibe theme on a Live channel, a Chat room and a shop at once, change its colours with contrast checks that must pass, use it on every site, and step back to any earlier look.",
"legalProfile": "account",
-- "position": 39
++ "position": 39,
++ "neighbourhood": "make"
}
}
ddiff --git a/manifests/services/domains.json b/manifests/services/domains.json
iindex 42016618..cd47e771 100644
---- a/manifests/services/domains.json
++++ b/manifests/services/domains.json
@@@ -75,6 +75,7 @@
"tagline": "Name it, price it, run it",
"what": "Every ending and every registrar for a name, with what you will really pay over 1, 3 and 5 years, the renewal traps flagged, and each domain's public history.",
"legalProfile": "info",
-- "position": 37
++ "position": 37,
++ "neighbourhood": "make"
}
}
ddiff --git a/manifests/services/events.json b/manifests/services/events.json
iindex 3546a4a0..d66d6963 100644
---- a/manifests/services/events.json
++++ b/manifests/services/events.json
@@@ -87,6 +87,7 @@
"tagline": "Events your services can count on.",
"what": "Publish an event once and every subscriber gets it, signed, retried and replayable: webhooks, a pull API with a cursor, dead letters and realtime streams for the browser.",
"legalProfile": "tools",
-- "position": 31
++ "position": 31,
++ "neighbourhood": "build"
}
}
ddiff --git a/manifests/services/exchange.json b/manifests/services/exchange.json
iindex 4c9e31b7..4b60a104 100644
---- a/manifests/services/exchange.json
++++ b/manifests/services/exchange.json
@@@ -82,6 +82,7 @@
"tagline": "Trade what people make",
"what": "Free and swap listings for agents, MCP tools, templates, themes, game assets and creator services, each with a permission passport, conformance tests, a sandbox dry run, install with the passport snapshot and one-tap revoke.",
"legalProfile": "ugc",
-- "position": 44
++ "position": 44,
++ "neighbourhood": "shop"
}
}
ddiff --git a/manifests/services/food.json b/manifests/services/food.json
iindex 075aefa4..04dc4fe2 100644
---- a/manifests/services/food.json
++++ b/manifests/services/food.json
@@@ -88,6 +88,7 @@
"tagline": "What should we eat?",
"what": "Find food banks and budget grocers near you, plan a week of meals for your household and budget, get recipe ideas from what is in your cupboard, and search every delivery app at once.",
"legalProfile": "tools",
-- "position": 24
++ "position": 24,
++ "neighbourhood": "shop"
}
}
ddiff --git a/manifests/services/fun.json b/manifests/services/fun.json
iindex 5f016020..ee322aa4 100644
---- a/manifests/services/fun.json
++++ b/manifests/services/fun.json
@@@ -83,6 +83,7 @@
"tagline": "Something to do, alone, together, or live",
"what": "IRL quest boards on Live, a local guide from OpenStreetMap and group plans the group votes on; add the winner to your own Today.",
"legalProfile": "ugc",
-- "position": 45
++ "position": 45,
++ "neighbourhood": "games"
}
}
ddiff --git a/manifests/services/games.json b/manifests/services/games.json
iindex 86d80f61..0d670d7c 100644
---- a/manifests/services/games.json
++++ b/manifests/services/games.json
@@@ -39,7 +39,8 @@
"question": "Is my progress saved?",
"answer": "Yes. Leaderboards, achievements and cloud saves come from OpenVibe.Play, so your progress follows your account."
}
-- ]
++ ],
++ "neighbourhood": "games"
},
"capabilities": [
"games.mod.manage",
ddiff --git a/manifests/services/help.json b/manifests/services/help.json
iindex ee289d08..42c10f90 100644
---- a/manifests/services/help.json
++++ b/manifests/services/help.json
@@@ -80,6 +80,7 @@
"tagline": "Answers for every OpenVibe site",
"what": "Every OpenVibe site in one help centre: what each one does, its common questions, and a ticket to a person when the answer is not there.",
"legalProfile": "account",
-- "position": 25
++ "position": 25,
++ "neighbourhood": "people"
}
}
ddiff --git a/manifests/services/host.json b/manifests/services/host.json
iindex d2bb1186..46ca5207 100644
---- a/manifests/services/host.json
++++ b/manifests/services/host.json
@@@ -91,7 +91,8 @@
"question": "Where do the benchmarks come from?",
"answer": "From people running YABS on their own servers with a one-time link from openvibe.host/catalog/benchmarks/new. A result keeps the CPU, memory and disk, Geekbench scores with their public link, fio disk speeds, iperf3 network speeds and the city and network. Never the server's address, and never who ran it on the public page."
}
-- ]
++ ],
++ "neighbourhood": "make"
},
"capabilities": [
"host.catalog.manage"
ddiff --git a/manifests/services/inventory.json b/manifests/services/inventory.json
iindex c0d5652d..346d4648 100644
---- a/manifests/services/inventory.json
++++ b/manifests/services/inventory.json
@@@ -114,6 +114,7 @@
"question": "Can I buy, sell or trade items?",
"answer": "No. Items are never bought, sold, traded or turned into money."
}
-- ]
++ ],
++ "neighbourhood": "people"
}
}
ddiff --git a/manifests/services/live.json b/manifests/services/live.json
iindex 9446724a..ddee0c40 100644
---- a/manifests/services/live.json
++++ b/manifests/services/live.json
@@@ -43,7 +43,8 @@
"question": "What is The Rundown?",
"answer": "A write-up of what streamers talked about, from their own speech: the topics, each streamer's take in their own words with a link to the moment, every stream as an episode with a recap and chapters, and crossovers when streamers name each other. It replaced the Arena on 19 October 2026: no beefs, ratings or rankings."
}
-- ]
++ ],
++ "neighbourhood": "streams"
},
"capabilities": [
"live.analytics.read",
ddiff --git a/manifests/services/media-hub.json b/manifests/services/media-hub.json
iindex 5224aa88..1abb7da3 100644
---- a/manifests/services/media-hub.json
++++ b/manifests/services/media-hub.json
@@@ -7,7 +7,11 @@
"name": "OpenVibe.MediaHub",
"status": "alpha",
"repository": "OpenVibers/OpenVibe.MediaHub",
-- "domains": ["openvibe.video", "openvibe.download", "openvibe.pics"],
++ "domains": [
++ "openvibe.video",
++ "openvibe.download",
++ "openvibe.pics"
++ ],
"publicOrigin": "https://openvibe.video",
"exposure": {
"state": "live",
@@@ -97,6 +101,7 @@
"tagline": "Videos, pictures and your files",
"what": "A 25 GB drive with share links and folder backups (openvibe.download), videos you upload or record with AI captions, chapters and the AI cut, plus Live's recordings (openvibe.video), and pictures with embed links, albums, any size and format, and alt text (openvibe.pics).",
"legalProfile": "hosting",
-- "position": 20
++ "position": 20,
++ "neighbourhood": "streams"
}
}
ddiff --git a/manifests/services/media.json b/manifests/services/media.json
iindex b46c2d85..eab3c398 100644
---- a/manifests/services/media.json
++++ b/manifests/services/media.json
@@@ -35,7 +35,8 @@
"question": "Who can see my uploads?",
"answer": "You choose for each one: public, unlisted (only people with the link) or private."
}
-- ]
++ ],
++ "neighbourhood": "build"
},
"capabilities": [
"media.access_key.manage",
ddiff --git a/manifests/services/meme.json b/manifests/services/meme.json
iindex b6e47283..745fffbb 100644
---- a/manifests/services/meme.json
++++ b/manifests/services/meme.json
@@@ -75,6 +75,7 @@
"tagline": "The internet's meme database",
"what": "Every entry in the open meme database cites the chat line or VOD second it came from, follows the later uses on a timeline, and keeps a status. Vote for meme of the week, caption a template, and report what needs fixing.",
"legalProfile": "ugc",
-- "position": 42
++ "position": 42,
++ "neighbourhood": "games"
}
}
ddiff --git a/manifests/services/network.json b/manifests/services/network.json
iindex 205e407a..25edac61 100644
---- a/manifests/services/network.json
++++ b/manifests/services/network.json
@@@ -43,7 +43,8 @@
"question": "Can I link my other accounts?",
"answer": "Yes. Link platforms like Twitch, YouTube or Kick to your OpenVibe account, and unlink them whenever you like."
}
-- ]
++ ],
++ "neighbourhood": "people"
},
"capabilities": [
"identity.subject.resolve",
ddiff --git a/manifests/services/news.json b/manifests/services/news.json
iindex 69817577..82526de8 100644
---- a/manifests/services/news.json
++++ b/manifests/services/news.json
@@@ -74,7 +74,8 @@
"note": "What is happening across OpenVibe."
}
]
-- }
++ },
++ "neighbourhood": "answers"
},
"capabilities": [
"news.story.create",
ddiff --git a/manifests/services/openre.json b/manifests/services/openre.json
iindex 5cbd8e41..b87b991a 100644
---- a/manifests/services/openre.json
++++ b/manifests/services/openre.json
@@@ -114,7 +114,8 @@
"note": "How the restream paths work."
}
]
-- }
++ },
++ "neighbourhood": "streams"
},
"capabilities": [
"openre.stream.read",
ddiff --git a/manifests/services/play.json b/manifests/services/play.json
iindex 94cbf05d..28f38ceb 100644
---- a/manifests/services/play.json
++++ b/manifests/services/play.json
@@@ -101,6 +101,7 @@
"question": "What happens to a guest's progress?",
"answer": "When a guest signs in, the game adopts them and their unlocks and scores become the person's."
}
-- ]
++ ],
++ "neighbourhood": "build"
}
}
ddiff --git a/manifests/services/quest.json b/manifests/services/quest.json
iindex 8e618e7b..4a45f719 100644
---- a/manifests/services/quest.json
++++ b/manifests/services/quest.json
@@@ -111,6 +111,7 @@
"tagline": "Badges for what you really do",
"what": "One quest log across every OpenVibe site: real things you do on the network complete quests that pay badges and OpenCoins, and developer apps add quests on their own events.",
"legalProfile": "account",
-- "position": 27
++ "position": 27,
++ "neighbourhood": "games"
}
}
ddiff --git a/manifests/services/rent.json b/manifests/services/rent.json
iindex a1b376b9..8f60dd6a 100644
---- a/manifests/services/rent.json
++++ b/manifests/services/rent.json
@@@ -7,7 +7,10 @@
"name": "OpenVibe.Rent",
"status": "alpha",
"repository": "OpenVibers/OpenVibe.Rent",
-- "domains": ["openvibe.rent", "openvibe.homes"],
++ "domains": [
++ "openvibe.rent",
++ "openvibe.homes"
++ ],
"publicOrigin": "https://openvibe.rent",
"exposure": {
"state": "live",
@@@ -83,6 +86,7 @@
"tagline": "Every rental site, one search",
"what": "Search Craigslist, Facebook Marketplace, Zillow, Apartments.com, Zumper and more at once for apartments, houses, rooms, stays, commercial space, parking, storage and cars, next to affordable housing from HUD and listings people post here.",
"legalProfile": "ugc",
-- "position": 28
++ "position": 28,
++ "neighbourhood": "shop"
}
}
ddiff --git a/manifests/services/report.json b/manifests/services/report.json
iindex 4ed01a24..f0ee7c1b 100644
---- a/manifests/services/report.json
++++ b/manifests/services/report.json
@@@ -58,7 +58,7 @@
"none": "no claims: one process serves the site"
}
},
-- "notes": "Port 5080, unit openvibe-report.service. The Report room (plan 2026-10-28 \u00a75.4): the network's open numbers, The Rundown (what streamers talked about) and each stream's after-show report, in one place. v1 is a stateless front over OpenVibe.Network's open stats (/api/v1/stats) and OpenVibe.Live's Rundown and recap APIs; v2 makes Report the analytics authority (Network's analytics move here, Live's recap and Rundown jobs move here, the external SDK).",
++ "notes": "Port 5080, unit openvibe-report.service. The Report room (plan 2026-10-28 §5.4): the network's open numbers, The Rundown (what streamers talked about) and each stream's after-show report, in one place. v1 is a stateless front over OpenVibe.Network's open stats (/api/v1/stats) and OpenVibe.Live's Rundown and recap APIs; v2 makes Report the analytics authority (Network's analytics move here, Live's recap and Rundown jobs move here, the external SDK).",
"health": "/api/health",
"ready": "/api/ready",
"internalOrigin": "http://127.0.0.1:5080",
@@@ -68,6 +68,7 @@
"tagline": "Every number on OpenVibe, honest",
"what": "The network's numbers open to everyone, what streamers talked about in The Rundown, and every stream's after-show report, each number with its definition and its date.",
"legalProfile": "info",
-- "position": 38
++ "position": 38,
++ "neighbourhood": "answers"
}
}
ddiff --git a/manifests/services/reviews.json b/manifests/services/reviews.json
iindex ebf1a538..5d199213 100644
---- a/manifests/services/reviews.json
++++ b/manifests/services/reviews.json
@@@ -74,7 +74,8 @@
"note": "Community threads are the first stop."
}
]
-- }
++ },
++ "neighbourhood": "answers"
},
"capabilities": [
"reviews.entity.resolve",
ddiff --git a/manifests/services/run.json b/manifests/services/run.json
iindex 5c915427..005be307 100644
---- a/manifests/services/run.json
++++ b/manifests/services/run.json
@@@ -137,6 +137,7 @@
"answer": "Yes. Its event stream shows each state change and the node's output as it happens."
}
],
-- "keywords": "openvibe run, job runner, run jobs on nodes, sandbox api, per-second metering"
++ "keywords": "openvibe run, job runner, run jobs on nodes, sandbox api, per-second metering",
++ "neighbourhood": "build"
}
}
ddiff --git a/manifests/services/search.json b/manifests/services/search.json
iindex 64a4cb3b..5aa42ada 100644
---- a/manifests/services/search.json
++++ b/manifests/services/search.json
@@@ -74,7 +74,7 @@
],
"window": "automatic only while ovhost waits for readiness after the restart (30 s in host.example.json); manual afterwards, as long as no blocker applies",
"blockers": {
-- "none": "the schema code only adds (CREATE \u2026 IF NOT EXISTS, ADD COLUMN; no DROP, RENAME or table rebuild), which an older release ignores"
++ "none": "the schema code only adds (CREATE … IF NOT EXISTS, ADD COLUMN; no DROP, RENAME or table rebuild), which an older release ignores"
}
},
"contracts": {
@@@ -101,6 +101,7 @@
"question": "Why is a page missing?",
"answer": "Search lists only what its site marks public and indexable. Private, draft and noindex pages never appear, and a page removed from its site leaves Search too."
}
-- ]
++ ],
++ "neighbourhood": "answers"
}
}
ddiff --git a/manifests/services/services.json b/manifests/services/services.json
iindex 6be9d4e0..ad3777f4 100644
---- a/manifests/services/services.json
++++ b/manifests/services/services.json
@@@ -91,6 +91,7 @@
"tagline": "Build on OpenVibe",
"what": "The developer platform: projects, apps, keys, grants and usage; API, contract, SDK and event docs; OAuth and webhook tools, playgrounds and app releases.",
"legalProfile": "ugc",
-- "position": 7
++ "position": 7,
++ "neighbourhood": "build"
}
}
ddiff --git a/manifests/services/space.json b/manifests/services/space.json
iindex 452aefa0..d4251070 100644
---- a/manifests/services/space.json
++++ b/manifests/services/space.json
@@@ -61,7 +61,8 @@
"question": "Can I share my space?",
"answer": "A space runs in your editor with a live preview, and OpenVibe staff publish spaces at their own addresses. Publishing for everyone opens once the network's abuse handling and its designated DMCA agent are in place."
}
-- ]
++ ],
++ "neighbourhood": "make"
},
"capabilities": [
"space.site.manage",
ddiff --git a/manifests/services/surf.json b/manifests/services/surf.json
iindex c22cf1ef..213d925c 100644
---- a/manifests/services/surf.json
++++ b/manifests/services/surf.json
@@@ -68,6 +68,7 @@
"tagline": "Ride, browse, watch",
"what": "Ride Counter-Strike-style surf maps in the browser against the clock, let an agent surf the web for you and report back with its sources, or lean back and surf what is on across OpenVibe.",
"legalProfile": "account",
-- "position": 41
++ "position": 41,
++ "neighbourhood": "games"
}
}
ddiff --git a/manifests/services/tips.json b/manifests/services/tips.json
iindex ba5e2da7..ce111206 100644
---- a/manifests/services/tips.json
++++ b/manifests/services/tips.json
@@@ -79,7 +79,8 @@
"question": "How do I get the money?",
"answer": "Tips arrive as Vibes you can cash out, under the network’s cash-out rules (from 500 Vibes, after a 14-day hold)."
}
-- ]
++ ],
++ "neighbourhood": "people"
},
"capabilities": [
"tips.profile.get",
ddiff --git a/manifests/services/today.json b/manifests/services/today.json
iindex 65e40c49..968eb573 100644
---- a/manifests/services/today.json
++++ b/manifests/services/today.json
@@@ -87,6 +87,7 @@
"tagline": "Everything happening for you, today",
"what": "Stream schedules, reminders that find you on any OpenVibe site, calendar feeds for your own calendar app, and a morning brief, all in one place.",
"legalProfile": "account",
-- "position": 40
++ "position": 40,
++ "neighbourhood": "answers"
}
}
ddiff --git a/manifests/services/tools.json b/manifests/services/tools.json
iindex 9e437b29..72eb897c 100644
---- a/manifests/services/tools.json
++++ b/manifests/services/tools.json
@@@ -38,7 +38,8 @@
"question": "What kinds of tools are there?",
"answer": "Hundreds: video, audio and image converters, document tools, developer utilities and more, each with its own page on openvibe.tools or a tool subdomain."
}
-- ]
++ ],
++ "neighbourhood": "make"
},
"capabilities": [
"tools.analytics.read",
ddiff --git a/manifests/services/trade.json b/manifests/services/trade.json
iindex 75e0d6ca..794ce2ea 100644
---- a/manifests/services/trade.json
++++ b/manifests/services/trade.json
@@@ -78,7 +78,8 @@
"note": "Deal discovery is the sibling room."
}
]
-- }
++ },
++ "neighbourhood": "shop"
},
"capabilities": [
"trade.instrument.resolve",
ddiff --git a/manifests/services/vip.json b/manifests/services/vip.json
iindex 1846978d..3f10292d 100644
---- a/manifests/services/vip.json
++++ b/manifests/services/vip.json
@@@ -79,7 +79,8 @@
"question": "What happens when a plan changes?",
"answer": "A change publishes a new version. Members keep the version they joined while their membership lasts, and every version stays public in the plan’s terms history."
}
-- ]
++ ],
++ "neighbourhood": "people"
},
"capabilities": [
"vip.plan.create",
ddiff --git a/manifests/services/vision.json b/manifests/services/vision.json
iindex ba28e4e3..9ae70270 100644
---- a/manifests/services/vision.json
++++ b/manifests/services/vision.json
@@@ -80,6 +80,7 @@
"tagline": "See with the best model for the job",
"what": "Ask a picture a question, read its text with a local engine, compare models side by side with cost and latency, or point the UI check at a page to find overflow, cut-off text, low contrast, overlap and layering faults.",
"legalProfile": "ugc",
-- "position": 43
++ "position": 43,
++ "neighbourhood": "answers"
}
}
ddiff --git a/manifests/services/watch.json b/manifests/services/watch.json
iindex a67f7bca..0c27ed88 100644
---- a/manifests/services/watch.json
++++ b/manifests/services/watch.json
@@@ -101,6 +101,7 @@
"tagline": "Know the moment it changes",
"what": "Watch a page, a feed or a JSON API and get told when the value you care about changes or crosses the line you set, checked politely on your cadence.",
"legalProfile": "tools",
-- "position": 29
++ "position": 29,
++ "neighbourhood": "build"
}
}
ddiff --git a/manifests/services/wiki.json b/manifests/services/wiki.json
iindex 460a6643..6047287e 100644
---- a/manifests/services/wiki.json
++++ b/manifests/services/wiki.json
@@@ -38,7 +38,8 @@
"question": "What does 'Not yet reviewed by a person' mean?",
"answer": "The page was written with AI assistance. It stays readable with that label, and out of search engines and network search until a person reviews it."
}
-- ]
++ ],
++ "neighbourhood": "answers"
},
"capabilities": [
"wiki.space.create",
ddiff --git a/manifests/services/work.json b/manifests/services/work.json
iindex df2d05db..f15b4f5c 100644
---- a/manifests/services/work.json
++++ b/manifests/services/work.json
@@@ -83,6 +83,7 @@
"tagline": "Find work, with an agent on your side",
"what": "Job listings from open job boards in one search, saved searches that tell you what is new, and an application tracker where your agent helps you prepare.",
"legalProfile": "info",
-- "position": 26
++ "position": 26,
++ "neighbourhood": "shop"
}
}
ddiff --git a/manifests/services/zone.json b/manifests/services/zone.json
iindex 049298fa..cad327c6 100644
---- a/manifests/services/zone.json
++++ b/manifests/services/zone.json
@@@ -91,6 +91,7 @@
"tagline": "Private S3-compatible storage for your projects.",
"what": "Named storage zones for each project and environment: buckets that the AWS SDKs, rclone and backup tools reach over S3, with access keys you scope to a zone and quotas you set.",
"legalProfile": "ugc",
-- "position": 36
++ "position": 36,
++ "neighbourhood": "build"
}
}
ddiff --git a/package-lock.json b/package-lock.json
iindex 4238c36d..922bfd72 100644
---- a/package-lock.json
++++ b/package-lock.json
@@@ -1,12 +1,12 @@
{
"name": "openvibe-contracts",
-- "version": "0.214.1",
++ "version": "0.239.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "openvibe-contracts",
-- "version": "0.214.1",
++ "version": "0.239.0",
"license": "AGPL-3.0-only",
"dependencies": {
"ajv": "^8.17.1",
ddiff --git a/package.json b/package.json
iindex 1cba177b..b7df3ccd 100644
---- a/package.json
++++ b/package.json
@@@ -1,6 +1,6 @@
{
"name": "openvibe-contracts",
-- "version": "0.238.0",
++ "version": "0.239.0",
"description": "Machine-readable contracts for the OpenVibe network: schemas, manifests, ids, error envelope, capability checks.",
"main": "index.js",
"types": "generated/typescript/index.d.ts",