Core Concepts
Observability
What Loop Engine tracks
Runtime state comes from:
LoopInstancerecords (currentState,status, timestamps)TransitionRecord[]history (who did what, when, and with what evidence)
The observability package computes aggregate metrics and timelines from that data.
LoopMetrics
computeMetrics(instances, history, period) returns:
loopIdperiodtotalInstancesopenInstancesclosedInstanceserrorInstancesavgDurationMsmedianDurationMsp95DurationMscompletionRateguardFailureRateaiActorRatehumanActorRateavgTransitionCount
1import { computeMetrics } from '@loop-engine/observability'Timelines and state residency
Use buildTimeline(instance, history) for a normalized timeline view.
Use getStateResidency(timeline) to see dwell per state:
1"cmt">// @no-typecheck2import { buildTimeline, getStateResidency } from '@loop-engine/observability'3 4const timeline = buildTimeline(instance, history)5const residency = getStateResidency(timeline)State residency highlights bottlenecks (for example loops spending excessive time in OPEN or INVOICE_MATCHED).
Replay and validation
replayLoop(definition, history) validates transition history against a definition:
1"cmt">// @no-typecheck2import { replayLoop } from '@loop-engine/observability'3 4const replay = replayLoop(definition, history)5if (!replay.valid) {6 console.error(replay.errors)7}Use replay for:
- audits
- debugging invalid transitions
- migration validation after definition updates
Devtools
@loop-engine/ui-devtools exports components for local diagnostics:
DevtoolsPanelLoopTimelineEventStreamStateDiagramMetricsCard