RunJobStartedPayload run.job.started@1

Generated at from openvibe-contracts v0.97.0 and openvibe-sdk v0.26.0.

Version
1.0.0
Owner
run
Visibility
first-party
Status
planned
Compatibility
backward
Decision
ADR-034
Schema
https://openvibe.network/contracts/events/payloads/run.job.started.v1.json

run.job.started v1 (OpenVibe.Run; PLANNED: the Run service does not exist yet, plan T14 R1). The node sent job_started: the process runs. Usage seconds count from started_at. A projection of run.job-read-result@1 without args, inputs, result or output. Envelope: subject { type: job, id: <job_id> }, visibility internal, priority low, actor service:run.

Fields

FieldTypeRequiredDescriptionConstraints
job_idstringyes
  • pattern ^job_[0-9A-HJKMNP-TV-Z]{26}$
project_idstringyes
  • pattern ^prj_[0-9A-HJKMNP-TV-Z]{26}$
requesteridentity.subject-refyes
stateconstyesThe job state (run.job-read-result@1 state).
  • = "running"
classplatform.runtime-classyes
artifactone ofyes
egresshttps://openvibe.network/contracts/run/job-create-request.v1.json#/$defs/egressyes
placementhttps://openvibe.network/contracts/run/job-read-result.v1.json#/$defs/placementyes
timingsobjectyes
  • no other fields
timings.created_atstringyes
  • format date-time
timings.placed_atstringyes
  • format date-time
timings.started_atstringyes
  • format date-time
timings.finished_atnullyes
exitnullyes
usagehttps://openvibe.network/contracts/run/job-read-result.v1.json#/$defs/usageyes
errornullyes

Examples

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

Valid: running
{
  "job_id": "job_01JAB2C3D4E5F6G7H8J9K0MNPQ",
  "project_id": "prj_01JAB2C3D4E5F6G7H8J9K0MNPR",
  "requester": {
    "type": "app",
    "id": "app_01JAB2C3D4E5F6G7H8J9K0MNPV"
  },
  "state": "running",
  "class": "function",
  "artifact": {
    "name": "thumbnail",
    "version": "1.2.0"
  },
  "egress": "none",
  "placement": {
    "node": "dev_01JAB2C3D4E5F6G7H8J9K0MNPT",
    "provider": null,
    "region": "us-west"
  },
  "timings": {
    "created_at": "2026-10-04T10:00:00.000Z",
    "placed_at": "2026-10-04T10:00:00.400Z",
    "started_at": "2026-10-04T10:00:00.650Z",
    "finished_at": null
  },
  "exit": null,
  "usage": {
    "seconds": 0,
    "wall_ms": 0,
    "cpu_ms": null,
    "mem_peak_bytes": null
  },
  "error": null
}
Rejected: without-placement
{
  "job_id": "job_01JAB2C3D4E5F6G7H8J9K0MNPQ",
  "project_id": "prj_01JAB2C3D4E5F6G7H8J9K0MNPR",
  "requester": {
    "type": "app",
    "id": "app_01JAB2C3D4E5F6G7H8J9K0MNPV"
  },
  "state": "running",
  "class": "function",
  "artifact": {
    "name": "thumbnail",
    "version": "1.2.0"
  },
  "egress": "none",
  "placement": null,
  "timings": {
    "created_at": "2026-10-04T10:00:00.000Z",
    "placed_at": "2026-10-04T10:00:00.400Z",
    "started_at": "2026-10-04T10:00:00.650Z",
    "finished_at": null
  },
  "exit": null,
  "usage": {
    "seconds": 0,
    "wall_ms": 0,
    "cpu_ms": null,
    "mem_peak_bytes": null
  },
  "error": null
}

Validate

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