NetworkStatusIncident network.status-incident@1

Generated at from openvibe-contracts v0.76.0 and openvibe-sdk v0.20.1.

Version
1.0.0
Owner
network
Visibility
first-party
Status
active
Compatibility
backward
Schema
https://openvibe.network/contracts/network/status-incident.v1.json

network.status-incident@1 (roadmap WS-N task 12): one incident or maintenance window on openvibe.network/status, public. An incident moves investigating → identified → monitoring → resolved; a maintenance window scheduled → in_progress → completed. Each change adds an update with its message; the newest state is the incident's. Services are registry ids. Messages are plain text written for people (no internal hostnames, secrets or personal data).

Fields

FieldTypeRequiredDescriptionConstraints
idstringyes
  • pattern ^inc_[0-9A-HJKMNP-TV-Z]{26}$
kindenumyes
  • one of "incident", "maintenance"
titlestringyes
  • minLength 3
  • maxLength 140
severityenumIncidents only.
  • one of "minor", "major", "critical"
stateenumyes
  • one of "investigating", "identified", "monitoring", "resolved", "scheduled", "in_progress", "completed"
servicesarray of stringyes
  • maxItems 40
  • items: pattern ^[a-z][a-z0-9-]{1,39}$
starts_atstringyes
  • format date-time
ends_atstring | nullWhen it ended, or a maintenance window's planned end.
  • format date-time
updatesarray of objectyes
  • minItems 1
  • maxItems 100
  • items: no other fields
updates[].atstringyes
  • format date-time
updates[].stateenumyes
  • one of "investigating", "identified", "monitoring", "resolved", "scheduled", "in_progress", "completed"
updates[].messagestringyes
  • minLength 1
  • maxLength 2000
created_atstringyes
  • format date-time
updated_atstringyes
  • format date-time

Examples

From the contract's own test fixtures: valid ones validate, rejected ones must fail.

Valid: incident
{
  "id": "inc_01JAB2C3D4E5F6G7H8J9K0MNPQ",
  "kind": "incident",
  "title": "Live streams stall on start",
  "severity": "major",
  "state": "identified",
  "services": [
    "live"
  ],
  "starts_at": "2026-09-26T16:00:00Z",
  "ends_at": null,
  "updates": [
    {
      "at": "2026-09-26T16:00:00Z",
      "state": "investigating",
      "message": "New streams take a minute to start."
    },
    {
      "at": "2026-09-26T16:10:00Z",
      "state": "identified",
      "message": "A restart left the ingest socket unbound; rebinding."
    }
  ],
  "created_at": "2026-09-26T16:00:00Z",
  "updated_at": "2026-09-26T16:10:00Z"
}
Valid: maintenance
{
  "id": "inc_01JAB2C3D4E5F6G7H8J9K0MNPQ",
  "kind": "maintenance",
  "title": "Media storage move",
  "state": "scheduled",
  "services": [
    "media"
  ],
  "starts_at": "2026-09-28T03:00:00Z",
  "ends_at": "2026-09-28T04:00:00Z",
  "updates": [
    {
      "at": "2026-09-26T16:00:00Z",
      "state": "scheduled",
      "message": "Uploads pause for up to an hour."
    }
  ],
  "created_at": "2026-09-26T16:00:00Z",
  "updated_at": "2026-09-26T16:00:00Z"
}
Rejected: unknown-state
{
  "id": "inc_01JAB2C3D4E5F6G7H8J9K0MNPQ",
  "kind": "incident",
  "title": "x",
  "state": "broken",
  "services": [],
  "starts_at": "2026-09-26T16:00:00Z",
  "updates": [],
  "created_at": "2026-09-26T16:00:00Z",
  "updated_at": "2026-09-26T16:00:00Z"
}

Validate

const contracts = require('openvibe-contracts');
contracts.validate('network.status-incident@1', value);   // { valid, errors: [{ path, message }] }