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

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

session.endedSessionEnded #

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

FieldTypeDefault
outcomestr | 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()
dut_serialstr''
dut_part_numberstr | NoneNone
dut_revisionstr | NoneNone
dut_lot_numberstr | NoneNone
product_idstr | NoneNone
product_namestr | NoneNone
product_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]{}
channel_refslist[str][]

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-DUT) events #

slot.startedSlotStarted #

Emitted when a DUT slot begins execution.

FieldTypeDefault
slot_idstrrequired
dut_serialstrrequired

slot.completedSlotCompleted #

Emitted when a DUT 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.dut_scannedDutScanned #

FieldTypeDefault
dut_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
inputsdict[str, Any]{}
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
vector_outcomestr | NoneNone
inputsdict[str, Any]{}
outputsdict[str, Any]{}
node_idstr | NoneNone
filestr | NoneNone
modulestr | NoneNone
class_namestr | NoneNone
functionstr | 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
unitsstr | NoneNone
outcomestr | NoneNone
limit_lowfloat | NoneNone
limit_highfloat | NoneNone
limit_nominalfloat | NoneNone
limit_comparatorstr | NoneNone
characteristic_idstr | NoneNone
spec_refstr | NoneNone
dut_pinstr | NoneNone
fixture_connectionstr | NoneNone
instrument_namestr | NoneNone
instrument_resourcestr | NoneNone
instrument_channelstr | NoneNone
inputsdict[str, Any]{}
outputsdict[str, Any]{}
customdict[str, Any]{}

test.recordRecordEvent #

A key/value record emitted by harness.record().

FieldTypeDefault
step_namestrrequired
step_indexintrequired
keystrrequired
valueAnyrequired

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.readInstrumentRead #

Emitted when a driver read method is called via proxy.

FieldTypeDefault
instrument_rolestrrequired
channel_idstrrequired
methodstrrequired
valueAnyNone
unitsstr | NoneNone
resourcestr''

instrument.setInstrumentSet #

Emitted when a driver set method is called via proxy.

FieldTypeDefault
instrument_rolestrrequired
channel_idstrrequired
attributestrrequired
valueAnyNone
unitsstr | NoneNone
resourcestr''

instrument.configureInstrumentConfigure #

Emitted when a driver configure method is called via proxy.

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

Diagnostic events #

diagnostic.warningDiagnosticWarning #

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

diagnostic.errorDiagnosticError #

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

Stream events #

stream.startedStreamStarted #

FieldTypeDefault
stream_idUUIDrequired
formatstr''
pathstr | NoneNone

stream.endedStreamEnded #

FieldTypeDefault
stream_idUUIDrequired

stream.frame_indexStreamFrameIndex #

FieldTypeDefault
stream_idUUIDrequired
frame_countint0

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, STREAM_EVENTS, DIALOG_EVENTS) are also exported from litmus.data.events for subscribers that filter by category.

See also #