Event types reference #

Every record in the Litmus event log inherits from EventBase. This page enumerates every event class, its event_type discriminator string, and the fields the class adds beyond the base.

The tables below are generated from source — src/litmus/data/events.py. To regenerate after touching the models, run:

uv run python scripts/generate_reference_docs.py event-types

The pre-commit hook runs the same generator in --check mode, so source / docs drift fails the commit.

Base fields (every event) #

FieldTypeDefault
idUUIDvia uuid4()
occurred_atdatetimevia _utcnow()
received_atdatetime | NoneNone
session_idUUIDvia uuid4()
run_idUUID | NoneNone
derivedboolFalse

event_type is the discriminator — every subclass declares it as a Literal with a fixed string value (shown as the section heading below).

Session events #

session.startedSessionStarted #

Emitted once at the start of a session (interactive or test orchestrator).

FieldTypeDefault
session_typestr'test_run'
station_idstr | NoneNone
station_namestr | NoneNone
station_typestr | NoneNone
station_locationstr | NoneNone
station_hostnamestr | NoneNone
pidint | NoneNone
clientstrvia _detect_client()
operator_idstr | NoneNone
operator_namestr | NoneNone
fixture_idstr | NoneNone
slot_countint1
process_uuidstr | NoneNone
idle_lease_secondsfloat | NoneNone
abandon_grace_secondsfloat | NoneNone
abandon_reasonstr | NoneNone

session.endedSessionEnded #

Emitted at the end of a session. Must NOT carry run_id.

FieldTypeDefault
reasonstr | NoneNone

Run events #

run.startedRunStarted #

Emitted once per test run. Contains full run context.

FieldTypeDefault
station_idstr | NoneNone
station_namestr | NoneNone
station_typestr | NoneNone
station_locationstr | NoneNone
station_hostnamestr | NoneNone
slot_idstr | NoneNone
slot_indexint | NoneNone
pidint | NoneNone
clientstrvia _detect_client()
uut_serialstr''
uut_part_numberstr | NoneNone
uut_revisionstr | NoneNone
uut_lot_numberstr | NoneNone
part_idstr | NoneNone
part_namestr | NoneNone
part_revisionstr | NoneNone
operator_idstr | NoneNone
operator_namestr | NoneNone
fixture_idstr | NoneNone
test_phasestr | NoneNone
project_namestr | NoneNone
git_commitstr | NoneNone
git_branchstr | NoneNone
git_remotestr | NoneNone
environment_jsonstr | NoneNone
custom_metadatadict[str, Any]{}

run.endedRunEnded #

Emitted at the end of a test run.

FieldTypeDefault
outcomestr | NoneNone

run.materializedRunMaterialized #

Emitted by a materializer after a run's state has been written to a durable, query-optimized backend.

FieldTypeDefault
materializerstrrequired
destinationstrrequired
materialized_atdatetimevia _utcnow()
row_countsdict[str, int] | NoneNone

Slot (multi-UUT) events #

slot.startedSlotStarted #

Emitted when a UUT slot begins execution.

FieldTypeDefault
slot_idstrrequired
uut_serialstrrequired

slot.completedSlotCompleted #

Emitted when a UUT slot finishes execution.

FieldTypeDefault
slot_idstrrequired
outcomestrrequired
error_messagestr | NoneNone

sync.arrivedSyncArrived #

Emitted by a child process when it reaches a named sync point.

FieldTypeDefault
slot_idstrrequired
namestrrequired

sync.releaseSyncRelease #

Emitted by the orchestrator to unblock all slots at a sync point.

FieldTypeDefault
namestrrequired

Fixture events #

fixture.instrument_connectedInstrumentConnected #

Emitted when an instrument is connected and identified.

FieldTypeDefault
rolestrrequired
instrument_idstrrequired
driverstr | NoneNone
resourcestrrequired
protocolstr'visa'
manufacturerstr | NoneNone
modelstr | NoneNone
serialstr | NoneNone
firmwarestr | NoneNone
cal_duestr | NoneNone
cal_laststr | NoneNone
cal_certificatestr | NoneNone
cal_labstr | NoneNone
mockedboolFalse

fixture.identity_verifiedIdentityVerified #

FieldTypeDefault
rolestrrequired
expecteddict[str, Any]{}
actualdict[str, Any]{}
matchesboolTrue
mismatcheslist[str][]

fixture.calibration_warningCalibrationWarning #

FieldTypeDefault
rolestrrequired
instrument_idstrrequired
days_until_dueint | NoneNone
messagestr''

fixture.uut_scannedUutScanned #

FieldTypeDefault
uut_serialstrrequired
scan_sourcestr | NoneNone

fixture.instrument_disconnectedInstrumentDisconnected #

Emitted when an instrument is disconnected during teardown.

FieldTypeDefault
rolestrrequired
instrument_idstrrequired

Test events #

test.step_startedStepStarted #

FieldTypeDefault
step_namestrrequired
step_indexintrequired
step_pathstr''
parent_pathstr''
descriptionstr | NoneNone
vector_indexint0
retryint0
inputsdict[str, Any]{}
input_unitsdict[str, str]{}
node_idstr | NoneNone
filestr | NoneNone
modulestr | NoneNone
class_namestr | NoneNone
functionstr | NoneNone

test.step_endedStepEnded #

FieldTypeDefault
step_namestrrequired
step_indexintrequired
step_pathstr''
parent_pathstr''
outcomestr | NoneNone
vector_indexint0
retryint0
vector_outcomestr | NoneNone
inputsdict[str, Any]{}
outputsdict[str, Any]{}
input_unitsdict[str, str]{}
output_unitsdict[str, str]{}
output_pinsdict[str, str]{}
node_idstr | NoneNone
filestr | NoneNone
modulestr | NoneNone
class_namestr | NoneNone
functionstr | NoneNone

test.vector_startedVectorStarted #

An in-body loop vector is entered (Mode 2: the vectors fixture or a run_vector loop). One per iteration, so every vector — including ones that record no measurement — announces itself, closing the data-less-vector gap and the offline/streaming drift.

FieldTypeDefault
step_namestrrequired
step_indexintrequired
step_pathstr''
vector_indexint0
retryint0
inputsdict[str, Any]{}
input_unitsdict[str, str]{}
node_idstr | NoneNone

test.vector_endedVectorEnded #

Completion of an in-body loop vector (Mode 2). Carries the vector's verdict and its observations, mirroring StepEnded at vector grain.

FieldTypeDefault
step_namestrrequired
step_indexintrequired
step_pathstr''
vector_indexint0
retryint0
outcomestr | NoneNone
inputsdict[str, Any]{}
outputsdict[str, Any]{}
input_unitsdict[str, str]{}
output_unitsdict[str, str]{}
output_pinsdict[str, str]{}
node_idstr | NoneNone

test.measurementMeasurementRecorded #

A single measurement. Normalized: carries only measurement-specific fields.

FieldTypeDefault
step_namestrrequired
step_indexintrequired
step_pathstr''
vector_indexint0
retryint0
measurement_namestrrequired
measurement_timestampdatetime | NoneNone
valuefloat | NoneNone
unitstr | NoneNone
outcomestr | NoneNone
limit_lowfloat | NoneNone
limit_highfloat | NoneNone
limit_nominalfloat | NoneNone
limit_comparatorstr | NoneNone
characteristic_idstr | NoneNone
spec_refstr | NoneNone
uut_pinstr | NoneNone
fixture_connectionstr | NoneNone
instrument_namestr | NoneNone
instrument_resourcestr | NoneNone
instrument_channelstr | NoneNone
inputsdict[str, Any]{}
outputsdict[str, Any]{}

test.observationObservation #

Emitted by Context.observe(key, value).

FieldTypeDefault
step_namestr''
step_indexint0
step_pathstr''
vector_indexint0
retryint0
namestrrequired
valueAnyNone
unitstr | NoneNone
uut_pinstr | NoneNone

test.steps_discoveredStepsDiscovered #

Emitted after instruments connect, before steps execute.

FieldTypeDefault
itemslist[dict[str, str | int | None]][]

Route (switching) events #

route.closedRouteClosed #

Emitted when switch channels are closed to activate a route.

FieldTypeDefault
connection_namestrrequired
switch_rolestrrequired
channelslist[str]required

route.openedRouteOpened #

Emitted when switch channels are opened to deactivate a route.

FieldTypeDefault
connection_namestrrequired
switch_rolestrrequired
channelslist[str]required

Instrument (proxy traffic) events #

instrument.setInstrumentSet #

Emitted when a driver set method is called via proxy.

FieldTypeDefault
instrument_rolestrrequired
channel_idstrrequired
attributestrrequired
valueAnyNone
unitstr | NoneNone
resourcestr''

instrument.configureInstrumentConfigure #

Emitted when a driver configure method is called via proxy.

FieldTypeDefault
instrument_rolestrrequired
methodstrrequired
parametersdict[str, Any]{}
resourcestr''

Channel (lifecycle) events #

channel.startedChannelStarted #

A channel received its first sample in this session.

FieldTypeDefault
channel_idstrrequired
unitstr | NoneNone
instrument_rolestr | NoneNone
methodstr | NoneNone
resourcestr | NoneNone

channel.endedChannelEnded #

A channel was sealed for this session.

FieldTypeDefault
channel_idstrrequired
reasonstrrequired

channel.checkpointChannelCheckpoint #

Low-rate liveness + progress marker from an active channel producer.

FieldTypeDefault
uristrrequired
sample_offsetint0

Diagnostic events #

diagnostic.warningDiagnosticWarning #

FieldTypeDefault
sourcestr''
messagestr''
detailsdict[str, Any]{}

diagnostic.errorDiagnosticError #

FieldTypeDefault
sourcestr''
messagestr''
detailsdict[str, Any]{}

File events #

file.startedFileStarted #

Emitted when a FileStore streaming sink opens.

FieldTypeDefault
file_idUUIDrequired
namestr''
formatstr''

file.endedFileEnded #

Emitted when a FileStore streaming sink closes.

FieldTypeDefault
file_idUUIDrequired
uristr | NoneNone
size_bytesint | NoneNone

file.checkpointFileCheckpoint #

Low-rate liveness + progress marker from an active file sink.

FieldTypeDefault
uristrrequired
byte_offsetint0

Dialog events #

dialog.openedDialogOpened #

Emitted when an operator dialog is shown, pausing test execution.

FieldTypeDefault
dialog_idUUIDrequired
dialog_typestrrequired
titlestrrequired
messagestrrequired
step_namestr | NoneNone
blockingboolTrue

dialog.respondedDialogResponded #

Emitted when an operator dialog receives a response.

FieldTypeDefault
dialog_idUUIDrequired
dialog_typestrrequired
response_typestrrequired
duration_secondsfloatrequired
valuestr | NoneNone
choiceint | NoneNone

Discriminated union #

Every event class above is folded into the Event discriminated union for deserialization:

from litmus.data.events import Event
 
event = Event.model_validate(json_payload)   # picks the right subclass by event_type

ALL_EVENTS (a set of every class) and the per-category sets (SESSION_EVENTS, RUN_EVENTS, SLOT_EVENTS, FIXTURE_EVENTS, TEST_EVENTS, ROUTE_EVENTS, INSTRUMENT_EVENTS, DIAGNOSTIC_EVENTS, FILE_EVENTS, DIALOG_EVENTS) are also exported from litmus.data.events for subscribers that filter by category.

See also #