Canonical lifecycle event emitted by the SDK post-commit.

event_id is stable across replays:

  • Escalation transitions: ${id}:${verb}:${updated_at_iso} — unique per transition; a re-claim after release gets a new updated_at.
  • Engine / worker events: ${app_id}:${verb}:${ts}.

data carries the full committed row (escalation entry) or lifecycle metadata (engine/worker). Consumers cherry-pick what they need; nothing is pre-projected so the shape is future-proof.

interface SystemEvent {
    app_id: string;
    data: Record<string, unknown>;
    event_id: string;
    namespace: string;
    origin_id?: string;
    parent_id?: string;
    span_id?: string;
    topic?: string;
    trace_id?: string;
    ts: string;
    type: string;
    workflow_id?: string;
}

Properties

app_id: string
data: Record<string, unknown>

Full committed row for escalation events; lifecycle metadata for engine/worker events. Each dependent cherry-picks fields for its own event shape.

event_id: string

Stable, unique ID per durable transition.

namespace: string
origin_id?: string
parent_id?: string
span_id?: string
topic?: string
trace_id?: string
ts: string

ISO timestamp at emit time (wall-clock, post-commit).

type: string

Canonical topic string.

Class Pattern
escalation system.escalation.{id}.{verb}
engine system.engine.{appId}.{verb}
worker system.worker.{taskQueue}.{verb}
workflow_id?: string