UJG / Editor's Draft /
GitHub
Table of Contents
  • 1Overview
  • 2Normative Artifacts
  • 3Terminology
  • 4Runtime Evidence Model
  • 5Non-Goals
  • 6Ontology
  • 7JSON-LD Context
  • 8Validation
  • 9Minimal Example
W3C Community Group Draft Report

Runtime Evidence

incubating

Status of this Document

This report was published by the User Journal Graph Community Group . It is not a W3C Standard nor is it on the W3C Standards Track. Please note that under the W3C Community Contributor License Agreement (CLA) there is a limited opt-out and other conditions apply. Learn more about W3C Community and Business Groups .

Last Update
2026-06-18
Editors
  • Seva Dolgopolov
Group
User Journal Graph Community Group
Repository
View Source
License
W3C-Software-and-Document

1. Overview

This optional module defines append-friendly metadata records for Runtime executions.

Runtime remains the UJG observation channel. A RuntimeEvidenceRecord is not a second event stream: it is an addressable metadata node that points back to a JourneyExecution and, when needed, one RuntimeEvent. Producers can ingest and store these records alongside runtime data without mutating the JourneyExecution into a container of records.

The module is intentionally narrow. It does not define generic evidence about arbitrary UJG nodes, provenance graphs, redaction vocabularies, confidence scoring, signing, trust policy, or audit-log retention.

2. Normative Artifacts

This module is published through the following artifacts:

  • runtime-evidence.ttl: ontology, published at https://ujg.specs.openuji.org/ed/ns/runtime-evidence

  • runtime-evidence.context.jsonld: JSON-LD term mappings, published at https://ujg.specs.openuji.org/ed/ns/runtime-evidence.context.jsonld

  • runtime-evidence.shape.ttl: SHACL validation rules, published at https://ujg.specs.openuji.org/ed/ns/runtime-evidence.shape

Examples in this page compose the Core, Graph, Runtime, Actor, and Runtime Evidence contexts.

3. Terminology

  • RuntimeEvidenceRecord: An addressable metadata record for a JourneyExecution, and optionally for one RuntimeEvent in that execution.

  • Execution-level runtime evidence: A record whose journeyExecutionRef points to an execution and whose runtimeEventRef is omitted.

  • Event-level runtime evidence: A record whose journeyExecutionRef points to an execution and whose runtimeEventRef points to one event in that same execution.

4. Runtime Evidence Model

A RuntimeEvidenceRecord uses:

  • runtimeEvidence:journeyExecutionRef to identify the owning JourneyExecution.

  • runtimeEvidence:runtimeEventRef to identify one RuntimeEvent in that execution, when the metadata is event-specific.

  • runtimeEvidence:observedByActorRef to identify the observing actor, when known.

  • runtimeEvidence:evidencePayload for opaque JSON metadata that is useful to the producer or deployment.

This module intentionally does not reuse runtime:executionId on RuntimeEvidenceRecord. executionId remains the Runtime property that associates RuntimeEvent nodes with an append-only event chain. Runtime Evidence uses journeyExecutionRef so evidence metadata can be indexed by execution without changing Runtime core.

If runtimeEventRef is present, the referenced event MUST belong to the same JourneyExecution as journeyExecutionRef. If runtimeEventRef is omitted, the record describes the execution as a whole.

5. Non-Goals

Runtime Evidence does not define:

  • runtime event order

  • root-event semantics

  • mapping conformance

  • metrics semantics

  • redaction or confidence vocabularies

  • cryptographic signing

  • trust scoring

  • audit-log retention

  • payload redaction algorithms

6. Ontology

The normative Runtime Evidence ontology is defined below and is published at https://ujg.specs.openuji.org/ed/ns/runtime-evidence.

turtle
@prefix ujg: <https://ujg.specs.openuji.org/ed/ns/core#> .
@prefix ujgactor: <https://ujg.specs.openuji.org/ed/ns/actor#> .
@prefix ujgruntime: <https://ujg.specs.openuji.org/ed/ns/runtime#> .
@prefix ujgrtevidence: <https://ujg.specs.openuji.org/ed/ns/runtime-evidence#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix dct: <http://purl.org/dc/terms/> .

<https://ujg.specs.openuji.org/ed/ns/runtime-evidence#> a owl:Ontology ;
  rdfs:label "UJG Runtime Evidence Editor's Draft Vocabulary"@en ;
  dct:description "UJG Runtime Evidence ontology declaration" .

### Classes

ujgrtevidence:RuntimeEvidenceRecord a owl:Class ;
  rdfs:subClassOf ujg:Node .

### Properties

ujgrtevidence:journeyExecutionRef a owl:ObjectProperty ;
  rdfs:domain ujgrtevidence:RuntimeEvidenceRecord ;
  rdfs:range ujgruntime:JourneyExecution .

ujgrtevidence:runtimeEventRef a owl:ObjectProperty ;
  rdfs:domain ujgrtevidence:RuntimeEvidenceRecord ;
  rdfs:range ujgruntime:RuntimeEvent .

ujgrtevidence:observedByActorRef a owl:ObjectProperty ;
  rdfs:domain ujgrtevidence:RuntimeEvidenceRecord ;
  rdfs:range ujgactor:Actor .

ujgrtevidence:evidencePayload a owl:DatatypeProperty ;
  rdfs:domain ujgrtevidence:RuntimeEvidenceRecord ;
  rdfs:range rdf:JSON .
@prefix ujg: <https://ujg.specs.openuji.org/ed/ns/core#> .
@prefix ujgactor: <https://ujg.specs.openuji.org/ed/ns/actor#> .
@prefix ujgruntime: <https://ujg.specs.openuji.org/ed/ns/runtime#> .
@prefix ujgrtevidence: <https://ujg.specs.openuji.org/ed/ns/runtime-evidence#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix dct: <http://purl.org/dc/terms/> .

<https://ujg.specs.openuji.org/ed/ns/runtime-evidence#> a owl:Ontology ;
  rdfs:label "UJG Runtime Evidence Editor's Draft Vocabulary"@en ;
  dct:description "UJG Runtime Evidence ontology declaration" .

### Classes

ujgrtevidence:RuntimeEvidenceRecord a owl:Class ;
  rdfs:subClassOf ujg:Node .

### Properties

ujgrtevidence:journeyExecutionRef a owl:ObjectProperty ;
  rdfs:domain ujgrtevidence:RuntimeEvidenceRecord ;
  rdfs:range ujgruntime:JourneyExecution .

ujgrtevidence:runtimeEventRef a owl:ObjectProperty ;
  rdfs:domain ujgrtevidence:RuntimeEvidenceRecord ;
  rdfs:range ujgruntime:RuntimeEvent .

ujgrtevidence:observedByActorRef a owl:ObjectProperty ;
  rdfs:domain ujgrtevidence:RuntimeEvidenceRecord ;
  rdfs:range ujgactor:Actor .

ujgrtevidence:evidencePayload a owl:DatatypeProperty ;
  rdfs:domain ujgrtevidence:RuntimeEvidenceRecord ;
  rdfs:range rdf:JSON .

7. JSON-LD Context

The normative Runtime Evidence JSON-LD context is defined below and is published at https://ujg.specs.openuji.org/ed/ns/runtime-evidence.context.jsonld.

json-ld
{
  "@context": {
    "@version": 1.1,

    "ujgrtevidence": "https://ujg.specs.openuji.org/ed/ns/runtime-evidence#",
    "runtimeEvidence": "https://ujg.specs.openuji.org/ed/ns/runtime-evidence#",

    "RuntimeEvidenceRecord": "ujgrtevidence:RuntimeEvidenceRecord",

    "journeyExecutionRef": {
      "@id": "ujgrtevidence:journeyExecutionRef",
      "@type": "@id"
    },
    "runtimeEventRef": {
      "@id": "ujgrtevidence:runtimeEventRef",
      "@type": "@id"
    },
    "observedByActorRef": {
      "@id": "ujgrtevidence:observedByActorRef",
      "@type": "@id"
    },
    "evidencePayload": {
      "@id": "ujgrtevidence:evidencePayload",
      "@type": "@json"
    }
  }
}
{
  "@context": {
    "@version": 1.1,

    "ujgrtevidence": "https://ujg.specs.openuji.org/ed/ns/runtime-evidence#",
    "runtimeEvidence": "https://ujg.specs.openuji.org/ed/ns/runtime-evidence#",

    "RuntimeEvidenceRecord": "ujgrtevidence:RuntimeEvidenceRecord",

    "journeyExecutionRef": {
      "@id": "ujgrtevidence:journeyExecutionRef",
      "@type": "@id"
    },
    "runtimeEventRef": {
      "@id": "ujgrtevidence:runtimeEventRef",
      "@type": "@id"
    },
    "observedByActorRef": {
      "@id": "ujgrtevidence:observedByActorRef",
      "@type": "@id"
    },
    "evidencePayload": {
      "@id": "ujgrtevidence:evidencePayload",
      "@type": "@json"
    }
  }
}

8. Validation

The normative Runtime Evidence SHACL shape is defined below and is published at https://ujg.specs.openuji.org/ed/ns/runtime-evidence.shape.

turtle
@prefix ujgactor: <https://ujg.specs.openuji.org/ed/ns/actor#> .
@prefix ujgruntime: <https://ujg.specs.openuji.org/ed/ns/runtime#> .
@prefix ujgrtevidence: <https://ujg.specs.openuji.org/ed/ns/runtime-evidence#> .
@prefix ujgrtevidenceshape: <https://ujg.specs.openuji.org/ed/ns/runtime-evidence.shape#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix sh: <http://www.w3.org/ns/shacl#> .

ujgrtevidenceshape:RuntimeEvidenceRecordShape a sh:NodeShape ;
  sh:targetClass ujgrtevidence:RuntimeEvidenceRecord ;
  sh:nodeKind sh:IRI ;

  sh:property [
    sh:path ujgrtevidence:journeyExecutionRef ;
    sh:class ujgruntime:JourneyExecution ;
    sh:nodeKind sh:IRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;

  sh:property [
    sh:path ujgrtevidence:runtimeEventRef ;
    sh:class ujgruntime:RuntimeEvent ;
    sh:nodeKind sh:IRI ;
    sh:maxCount 1 ;
  ] ;

  sh:property [
    sh:path ujgrtevidence:observedByActorRef ;
    sh:class ujgactor:Actor ;
    sh:nodeKind sh:IRI ;
    sh:maxCount 1 ;
  ] ;

  sh:property [
    sh:path ujgrtevidence:evidencePayload ;
    sh:datatype rdf:JSON ;
    sh:maxCount 1 ;
  ] ;

  sh:sparql [
    a sh:SPARQLConstraint ;
    sh:message "A RuntimeEvidenceRecord runtimeEventRef must reference a RuntimeEvent in the same JourneyExecution as journeyExecutionRef." ;
    sh:select """
      SELECT $this
      WHERE {
        $this ujgrtevidence:journeyExecutionRef ?execution ;
              ujgrtevidence:runtimeEventRef ?event .
        ?event ujgruntime:executionId ?eventExecution .
        FILTER (?eventExecution != ?execution)
      }
    """ ;
  ] .
@prefix ujgactor: <https://ujg.specs.openuji.org/ed/ns/actor#> .
@prefix ujgruntime: <https://ujg.specs.openuji.org/ed/ns/runtime#> .
@prefix ujgrtevidence: <https://ujg.specs.openuji.org/ed/ns/runtime-evidence#> .
@prefix ujgrtevidenceshape: <https://ujg.specs.openuji.org/ed/ns/runtime-evidence.shape#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix sh: <http://www.w3.org/ns/shacl#> .

ujgrtevidenceshape:RuntimeEvidenceRecordShape a sh:NodeShape ;
  sh:targetClass ujgrtevidence:RuntimeEvidenceRecord ;
  sh:nodeKind sh:IRI ;

  sh:property [
    sh:path ujgrtevidence:journeyExecutionRef ;
    sh:class ujgruntime:JourneyExecution ;
    sh:nodeKind sh:IRI ;
    sh:minCount 1 ;
    sh:maxCount 1 ;
  ] ;

  sh:property [
    sh:path ujgrtevidence:runtimeEventRef ;
    sh:class ujgruntime:RuntimeEvent ;
    sh:nodeKind sh:IRI ;
    sh:maxCount 1 ;
  ] ;

  sh:property [
    sh:path ujgrtevidence:observedByActorRef ;
    sh:class ujgactor:Actor ;
    sh:nodeKind sh:IRI ;
    sh:maxCount 1 ;
  ] ;

  sh:property [
    sh:path ujgrtevidence:evidencePayload ;
    sh:datatype rdf:JSON ;
    sh:maxCount 1 ;
  ] ;

  sh:sparql [
    a sh:SPARQLConstraint ;
    sh:message "A RuntimeEvidenceRecord runtimeEventRef must reference a RuntimeEvent in the same JourneyExecution as journeyExecutionRef." ;
    sh:select """
      SELECT $this
      WHERE {
        $this ujgrtevidence:journeyExecutionRef ?execution ;
              ujgrtevidence:runtimeEventRef ?event .
        ?event ujgruntime:executionId ?eventExecution .
        FILTER (?eventExecution != ?execution)
      }
    """ ;
  ] .

The rules below define the remaining module semantics beyond the structural constraints captured by the SHACL shape.

  1. Runtime scoped: A RuntimeEvidenceRecord MUST describe a JourneyExecution and MAY describe one RuntimeEvent in that execution.

  2. Not runtime order: A RuntimeEvidenceRecord MUST NOT be interpreted as a RuntimeEvent, a previousId link, or a member of the causal Runtime event chain.

  3. Runtime preservation: Runtime Evidence MUST NOT change Runtime event ordering, root-event semantics, journey scope resolution, Mapping behavior, or Metrics behavior.

  4. Append-friendly processing: Producers SHOULD process Runtime Evidence beside runtime ingestion and storage, indexed by journeyExecutionRef, rather than mutating JourneyExecution into a list container.

  5. Opaque payload: evidencePayload is deployment-owned JSON metadata. Consumers MUST NOT require it for Runtime ordering, state resolution, Mapping, or Metrics behavior.

  6. Graceful degradation: Consumers that do not implement this module MAY ignore Runtime Evidence semantics, but SHOULD preserve recognized JSON-LD data during read-transform-write when possible.

9. Minimal Example

json
{
  "@context": [
    "https://ujg.specs.openuji.org/ed/ns/core.context.jsonld",
    "https://ujg.specs.openuji.org/ed/ns/graph.context.jsonld",
    "https://ujg.specs.openuji.org/ed/ns/runtime.context.jsonld",
    "https://ujg.specs.openuji.org/ed/ns/actor.context.jsonld",
    "https://ujg.specs.openuji.org/ed/ns/runtime-evidence.context.jsonld"
  ],
  "@id": "https://example.com/ujg/runtime-evidence/execution-12345.jsonld",
  "@type": "UJGDocument",
  "nodes": [
    {
      "@id": "urn:actor:server-observer",
      "@type": "Actor"
    },
    {
      "@id": "urn:journey:checkout",
      "@type": "Journey",
      "label": "Checkout",
      "startStateRef": "urn:state:shipping-form",
      "stateRefs": ["urn:state:shipping-form"]
    },
    {
      "@id": "urn:state:shipping-form",
      "@type": "State",
      "label": "Shipping form"
    },
    {
      "@id": "urn:execution:12345",
      "@type": "JourneyExecution"
    },
    {
      "@id": "urn:journey-instance:checkout:12345",
      "@type": "JourneyInstance",
      "journeyRef": "urn:journey:checkout"
    },
    {
      "@id": "urn:event:12345:100",
      "@type": "RuntimeEvent",
      "executionId": "urn:execution:12345",
      "stateRef": "urn:state:shipping-form",
      "journeyInstanceRef": "urn:journey-instance:checkout:12345",
      "payload": { "action": "surface.enter" }
    },
    {
      "@id": "urn:runtime-evidence:execution-accepted",
      "@type": "RuntimeEvidenceRecord",
      "journeyExecutionRef": "urn:execution:12345",
      "observedByActorRef": "urn:actor:server-observer",
      "evidencePayload": { "source": "server-ingest", "status": "accepted" }
    },
    {
      "@id": "urn:runtime-evidence:event-100-observed",
      "@type": "RuntimeEvidenceRecord",
      "journeyExecutionRef": "urn:execution:12345",
      "runtimeEventRef": "urn:event:12345:100",
      "observedByActorRef": "urn:actor:server-observer",
      "evidencePayload": { "source": "server-ingest", "record": "event-observed" }
    }
  ]
}
{
  "@context": [
    "https://ujg.specs.openuji.org/ed/ns/core.context.jsonld",
    "https://ujg.specs.openuji.org/ed/ns/graph.context.jsonld",
    "https://ujg.specs.openuji.org/ed/ns/runtime.context.jsonld",
    "https://ujg.specs.openuji.org/ed/ns/actor.context.jsonld",
    "https://ujg.specs.openuji.org/ed/ns/runtime-evidence.context.jsonld"
  ],
  "@id": "https://example.com/ujg/runtime-evidence/execution-12345.jsonld",
  "@type": "UJGDocument",
  "nodes": [
    {
      "@id": "urn:actor:server-observer",
      "@type": "Actor"
    },
    {
      "@id": "urn:journey:checkout",
      "@type": "Journey",
      "label": "Checkout",
      "startStateRef": "urn:state:shipping-form",
      "stateRefs": ["urn:state:shipping-form"]
    },
    {
      "@id": "urn:state:shipping-form",
      "@type": "State",
      "label": "Shipping form"
    },
    {
      "@id": "urn:execution:12345",
      "@type": "JourneyExecution"
    },
    {
      "@id": "urn:journey-instance:checkout:12345",
      "@type": "JourneyInstance",
      "journeyRef": "urn:journey:checkout"
    },
    {
      "@id": "urn:event:12345:100",
      "@type": "RuntimeEvent",
      "executionId": "urn:execution:12345",
      "stateRef": "urn:state:shipping-form",
      "journeyInstanceRef": "urn:journey-instance:checkout:12345",
      "payload": { "action": "surface.enter" }
    },
    {
      "@id": "urn:runtime-evidence:execution-accepted",
      "@type": "RuntimeEvidenceRecord",
      "journeyExecutionRef": "urn:execution:12345",
      "observedByActorRef": "urn:actor:server-observer",
      "evidencePayload": { "source": "server-ingest", "status": "accepted" }
    },
    {
      "@id": "urn:runtime-evidence:event-100-observed",
      "@type": "RuntimeEvidenceRecord",
      "journeyExecutionRef": "urn:execution:12345",
      "runtimeEventRef": "urn:event:12345:100",
      "observedByActorRef": "urn:actor:server-observer",
      "evidencePayload": { "source": "server-ingest", "record": "event-observed" }
    }
  ]
}

Copyright © 2026 the Contributors to the ujg/modules/runtime-evidence, published by the User Journal Graph Community Group under the W3C Community Contributor License Agreement (CLA) . A human-readable summary is available.

generated by Speculator