Runtime Evidence
incubatingStatus 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 .
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 athttps://ujg.specs.openuji.org/ed/ns/runtime-evidenceruntime-evidence.context.jsonld: JSON-LD term mappings, published athttps://ujg.specs.openuji.org/ed/ns/runtime-evidence.context.jsonldruntime-evidence.shape.ttl: SHACL validation rules, published athttps://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 oneRuntimeEventin that execution.Execution-level runtime evidence: A record whose
journeyExecutionRefpoints to an execution and whoseruntimeEventRefis omitted.Event-level runtime evidence: A record whose
journeyExecutionRefpoints to an execution and whoseruntimeEventRefpoints to one event in that same execution.
4. Runtime Evidence Model
A RuntimeEvidenceRecord uses:
runtimeEvidence:journeyExecutionRefto identify the owningJourneyExecution.runtimeEvidence:runtimeEventRefto identify oneRuntimeEventin that execution, when the metadata is event-specific.runtimeEvidence:observedByActorRefto identify the observing actor, when known.runtimeEvidence:evidencePayloadfor 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.
@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.
{
"@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.
@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.
Runtime scoped: A
RuntimeEvidenceRecordMUST describe aJourneyExecutionand MAY describe oneRuntimeEventin that execution.Not runtime order: A
RuntimeEvidenceRecordMUST NOT be interpreted as aRuntimeEvent, apreviousIdlink, or a member of the causal Runtime event chain.Runtime preservation: Runtime Evidence MUST NOT change Runtime event ordering, root-event semantics, journey scope resolution, Mapping behavior, or Metrics behavior.
Append-friendly processing: Producers SHOULD process Runtime Evidence beside runtime ingestion and storage, indexed by
journeyExecutionRef, rather than mutatingJourneyExecutioninto a list container.Opaque payload:
evidencePayloadis deployment-owned JSON metadata. Consumers MUST NOT require it for Runtime ordering, state resolution, Mapping, or Metrics behavior.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
{
"@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" }
}
]
}