New: the AI firewall watches every module and explains each incident in plain words. See how it works

Protections and failed messages

The flow protections that pause loops and failing flows, the emergency stop, failed messages and replay, and the automation alerts.

Flows run unattended, so Hermetry guards them: a flow caught in a loop or failing over and over pauses itself, side effects are rate limited, and messages that could not be run are kept as failed messages for you to replay. This page explains each protection and what you do when one acts.

Flow protections

ProtectionDefaultWhat happens
Runs a minute6,000 runs of one flow in a sliding minuteThe flow pauses itself: a loop is suspected
Failing runs100 failed runs in a rowThe flow pauses itself
Runs at once16 runs of one flow at the same timeFurther runs wait (at most 1,000 per flow; the oldest are dropped beyond that)
Fan-out100 messages sent by one block for one inputThe rest of that block’s messages for that input are dropped
Message size256 KiB per messageThe message is refused (msg_too_big)
Loop guard4 hops of events and Run flow between flows; 512 steps in one runThe chain is cut
Retries used upAt most 5 attempts of an external callThe input becomes a failed message unless the flow catches the error
Repeated messagesA device message seen again within 60 secondsAcknowledged without a run
Too oldA message waiting longer than 5 minutesNot run (device messages still run in their root, marked late)
Device commands a minute30 commands and settings from flows to one deviceThe command is refused (limit)
Repeated notificationsThe same notification to the same person within 10 minutesThat person is left out

Your plan may set other values within fixed bounds. Every time a protection acts it is counted: on the flow’s row (Limited · protection), in the editor (“A flow protection acted on this flow: …”, with the blocks marked), and in the usage card (Flow protections this month). See Flow limits.

A flow that paused itself

A paused flow starts no run until it is resumed. Its row says why:

  • “It paused itself: it ran more often in a minute than this workspace allows, so a loop is suspected.”
  • “It paused itself: too many of its runs failed in a row.”

The managers of automation get a Flow paused itself alert. What to do:

  1. Open the flow and look at Activity > Errors and the Runs of the last minutes.
  2. Fix the cause: break the loop (a flow that triggers itself, a Status trigger watching a block that changes its status on every message), or fix the failing call.
  3. Deploy, then Resume from the flow’s row menu or the editor’s banner. A pause keeps the flow’s memory and waiting messages.

Roots are never paused automatically

A root flow stores the data of every device it serves, so it is exempt from the automatic pause and from Runs at once. If a root fails too often, the organisation’s owners and admins get the critical alert Root flow not paused (“This root flow was not paused, because it stores the data of every device it serves…”), at most once every 6 hours per flow. Fix it quickly: failing runs of a root may mean readings are not stored.

The emergency stop

The emergency stop pauses every running flow of the organisation, on every host, at once, roots included.

  1. In Automation, open the header menu and select Stop every flow.
  2. Read: “Every running flow of this workspace, on every host, is paused at once: device messages, schedules, webhooks and events start no run until you resume. Runs in progress finish. A root flow is paused too, so device data is not stored meanwhile.”
  3. Tick “I understand that nothing runs until the flows are resumed.”, type STOP and confirm.

A banner shows “Emergency stop: n flows are paused…”. To end it, select Resume the flows: every flow the stop paused runs again; a flow that had paused itself stays paused. Both actions are audited.

Use it only when flows are doing harm (sending wrong commands, flooding a partner system). Device data is not stored while it is on.

Failed messages

A message the platform could not run is kept as a failed message (a dead letter). Open them from the flow list’s header menu (Failed messages, all flows of a host) or in the editor (Failed messages, the messages addressed to this flow).

ReasonMeaning
Kept failingDelivered several times without finishing
A call failed every retryAn external call used up its retries and the flow did not catch the error
Waited too longA webhook call or a named timer waited longer than its time-to-live (after an outage). “Replay it to run it now.”
Left unfinished by a redeployIts run did not end before the version it ran on was replaced
Backlog too longToo many messages of the organisation were waiting
Could not be readThe stored input is damaged
Refused by the hostThe host did not accept it

Each row shows First seen, Reason, Error and Tries. View shows the stored input (to people who may debug).

  • Replay puts the message back on the queue with its original ids. “Its run may already have done part of its work: calls, messages or writes it made can happen again.” Blocks that call out send the same idempotency key, so a receiver that deduplicates sees one call.
  • Discard deletes it. It cannot be replayed afterwards.

Each host keeps its own failed messages. At most 10,000 are kept by default; beyond that the oldest are trimmed. At 80 % the managers get the alert Failed messages nearly full, at most once every 6 hours.

A late device message in a root is never a failed message: it is stored. A late schedule tick is simply skipped.

Alerts

Errors and alerts (flow list header menu) shows the automation alerts of the last 6 hours, a row per deployed flow with its errors in 24 hours, failed messages today and recording level, the most frequent errors of 7 days and totals by day.

The Alert rule decides who is told and when:

FieldMeaning
Send alertsOn or off
Errors per minute1 to 10,000
Minutes in a row1 to 19
FlowsNone ticked = all flows
EventsNone ticked = all alert kinds
RecipientsOne member user id per line, at most 100. Empty: the people who may manage automation. E-mail addresses are not accepted.

Alert kinds: Many errors, Calls paused (breaker open), Side effect throttled, Block does not start, Failed messages nearly full, Flow paused itself and Root flow not paused. Root flow not paused is always sent, whatever the rule says, to the owners and admins and the rule’s recipients.

Calls paused (breaker)

A block whose external calls keep failing (an HTTP endpoint that is down) pauses its calls for a while; its messages fail with circuit_open meanwhile. The flow’s events show Calls paused (breaker open) and later Calls resumed (breaker closed). Fix the receiver; the block recovers by itself.