The entry point for every workflow graph. Each graph must have exactly one trigger activity, which executes when the graph's subscribes topic receives a message (via hotMesh.pub or hotMesh.pubsub).

The trigger initializes the job, sets its unique ID and key, binds the incoming payload as the trigger's output data, and transitions to adjacent activities defined in the transitions section.

app:
id: myapp
version: '1'
graphs:
- subscribes: order.placed # the trigger fires when this topic receives a message
publishes: order.processed # emitted when the graph completes
expire: 120

activities:
t1:
type: trigger
entity: '{$self.input.data.entityType}'
job:
maps:
myField: '{$self.output.data.inputField}'
stats:
id: '{$self.input.data.workflowId}'
key: '{$self.input.data.parentId}'
parent: '{$self.input.data.originJobId}'
adjacent: '{$self.input.data.parentJobId}'

process:
type: worker
topic: order.process

transitions:
t1:
- to: process
  • Job ID Resolution: If stats.id is provided, it resolves via @pipe expressions against the input data. Otherwise a UUID is generated.
  • Duplicate Detection: If a job with the same ID already exists, a DuplicateJobError is thrown (unless it's a crash-recovery scenario).
  • Pending Mode: When invoked with { pending: <seconds> }, the trigger creates the job but does not transition to children until resumed.
  • Crash Recovery: Uses a 3-step inception protocol with GUID ledger to ensure atomic job creation survives process crashes.

TriggerActivity for the TypeScript interface

Hierarchy (view full)

Constructors

Properties

adjacencyList: StreamData[]
adjacentIndex: number = 0
code: number = 200
context: JobState
guidLedger: number = 0
logger: ILogger
status: StreamStatus = StreamStatus.SUCCESS

Methods

  • if the job is created/deleted/created with the same key, the 'gid' ensures no stale messages (such as sleep delays) enter the workstream. Any message with a mismatched gid belongs to a prior job and can safely be ignored/dropped.

    Parameters

    • jobGID: string
    • OptionalmsgGID: string

    Returns void

  • unhandled activity errors (activities that return an ERROR StreamMessage status and have no adjacent children to transition to) are bound to the job

    Parameters

    • data: Record<string, unknown>

    Returns void

  • if the parent (spawner) chose not to await, emit the job_id as the data payload { job_id }

    Returns Promise<void>

  • Executes the 3-step Leg1 protocol for Category B activities (Leg1-only with children, e.g., Hook passthrough, Signal, Interrupt-another). Uses the incoming Leg1 message GUID as the GUID ledger key.

    Step A: setState + notarizeLeg1Completion + step1 markers (transaction 1) Step B: publish children + step2 markers + setStatusAndCollateGuid (transaction 2) Step C: if edge → runJobCompletionTasks + step3 markers + finalize (transaction 3)

    Parameters

    • delta: number

    Returns Promise<boolean>

    true if this transition caused the job to complete

  • Executes the 3-step Leg2 protocol using GUID ledger for crash-safe resume. Each step bundles durable writes with its concluding digit update in a single transaction.

    Parameters

    • delta: number
    • shouldFinalize: boolean

    Returns Promise<boolean>

    true if this transition caused the job to complete

  • Leg1 entry verification for Category B activities (Leg1-only with children). Returns true if this is a resume (Leg1 already completed on a prior attempt). On resume, loads the GUID ledger for step-level resume decisions.

    Returns Promise<boolean>

  • Upon entering leg 2 of a duplexed activity. Increments both the activity ledger (+1) and GUID ledger (+1). Stores the GUID ledger value for step-level resume decisions.

    Returns Promise<number>