HostReleasePublishedPayload host.release.published@1
Generated at from
openvibe-contracts v0.76.0 and
openvibe-sdk v0.20.1.
- Version
- 1.0.0
- Owner
- host
- Visibility
- public
- Status
- active
- Compatibility
- backward
- Decision
- ADR-016
- Schema
https://openvibe.network/contracts/events/payloads/host.release.published.v1.json
host.release.published v1 (roadmap WS-P task 9, ADR-016 amendment 1). A network service's release went live. OpenVibe.Host's operator plane (lib/announce.js) publishes it after `ovhost deploy|rollback <service>` went live and for `ovhost announce <service>` (services deployed by their own scripts: Live, Tools, Sites, OpenRe, Games). Envelope: subject { type: release, id: <service>:<release> }, visibility public (signed-out browsers get it over Events realtime), priority low, actor service:host. Open tabs whose /release.json names `service` (openvibe-shared release-watch 1.17.0, topics=host.release.published) check it when `release` is not the one they run. It carries identifiers only, never what changed. At most one per service and release unless an operator forces it; a retry reuses the event_id. Tenant sites' activations are host.deploy.activated, not this.
Fields
| Field | Type | Required | Description | Constraints |
|---|---|---|---|---|
service | string | yes | The service id the pages' /release.json names (registry.release-manifest@1 `service`): live, tools, or a Sites placeholder's id such as news. |
|
release | string | yes | The release id that service's /release.json reports now (registry.release-manifest@1 `release`). A client compares it with the release it runs, treating a hex prefix of the other as the same release. |
|
commit | string | null | yes | The deployed commit when it is known and `release` is its prefix, or what the operator passed; null otherwise (a Sites placeholder's release is a page hash). |
|
origin | string | null | yes | The public origin the release serves (https://openvibe.live): the inventory's origin or the service manifest's publicOrigin; null when neither is known. |
|
deployed_at | string | yes | When Host announced it (UTC); after `ovhost deploy`, just after the service answered ready. |
|
components | object | Optional. The component versions /release.json reported (registry.release-manifest 1.1.0 `components`, kind and version only). | ||
rollback | const | Present after `ovhost rollback`: the release is an older one. |
|
Examples
From the contract's own test fixtures: valid ones validate, rejected ones must fail.
Valid: live-release
{
"service": "live",
"release": "d4e849f2",
"commit": "d4e849f2a1b3c5d7e9f0a2b4c6d8e0f1a3b5c7d9",
"origin": "https://openvibe.live",
"deployed_at": "2026-09-26T08:00:05.000Z",
"components": {
"shell": {
"kind": "script",
"version": "3f2a9c1b7d4e"
},
"server": {
"kind": "server",
"version": "a1b2c3d4e5f6"
}
}
}Valid: rollback-no-origin
{
"service": "tools",
"release": "858845c0e1d2",
"commit": "858845c0e1d2f3a4b5c6d7e8f9a0b1c2d3e4f5a6",
"origin": null,
"deployed_at": "2026-09-26T08:02:00.000Z",
"rollback": true
}Valid: sites-placeholder
{
"service": "news",
"release": "56eb30198d36",
"commit": null,
"origin": "https://openvibe.news",
"deployed_at": "2026-09-26T08:01:00.000Z"
}Rejected: a-tenant-activation
{
"project_id": "prj_01JAB2C3D4E5F6G7H8J9K0MNPQ",
"site_id": "site_01JAB2C3D4E5F6G7H8J9K0MNPR",
"site": "my-site",
"deploy_id": "dpl_01JAB2C3D4E5F6G7H8J9K0MNPS",
"previous_deploy_id": null,
"rollback": false
}Rejected: carries-a-tenant-field
{
"service": "live",
"release": "d4e849f2",
"commit": null,
"origin": "https://openvibe.live",
"deployed_at": "2026-09-26T08:00:05.000Z",
"site_id": "site_01JAB2C3D4E5F6G7H8J9K0MNPR"
}Rejected: component-bad-kind
{
"service": "live",
"release": "d4e849f2",
"commit": null,
"origin": null,
"deployed_at": "2026-09-26T08:00:05.000Z",
"components": {
"shell": {
"kind": "binary",
"version": "1"
}
}
}Rejected: origin-with-path
{
"service": "live",
"release": "d4e849f2",
"commit": null,
"origin": "https://openvibe.live/updates",
"deployed_at": "2026-09-26T08:00:05.000Z"
}Rejected: release-not-hex
{
"service": "live",
"release": "v1.2.3",
"commit": null,
"origin": "https://openvibe.live",
"deployed_at": "2026-09-26T08:00:05.000Z"
}Rejected: release-rollback-false
{
"service": "live",
"release": "d4e849f2",
"commit": null,
"origin": null,
"deployed_at": "2026-09-26T08:00:05.000Z",
"rollback": false
}Validate
const contracts = require('openvibe-contracts');
contracts.validate('host.release.published@1', value); // { valid, errors: [{ path, message }] }