Documented here for others (and probably future me :winking_face: ):
First up, create the following fields:
-
Created: “Created time” type field with time
-
Last Modified: “Last modified time” field w/ time
-
LastModifiedOrCreated: Formula field
IF({Last Modified}, {Last Modified}, Created)
-
LastAutomationRun: Date field w/ time (updated by Automation only; lock it, if you can)
-
RunAutomationReset: Checkbox field (Automation only; locked)
-
RunAutomation: Formula field
IF(RunAutomationReset, FALSE(), OR(NOT(LastAutomationRun), DATETIME_DIFF({Last Modified}, LastAutomationRun) > 10))

The Automation itself should use the Trigger ‘when a record matches conditions’ and will need two subsequent Update record actions. (Hint: be sure to put your scripts after these steps - if your script fails and the other steps don’t run, your record will be stuck with RunAutomation
on & won’t trigger the automation anymore.)

Trigger with “When RunAutomation
= 1”:

Then add the 2 Update record steps. The first sets the RunAutomationReset
to true (which sets RunAutomation
to false:

The second sets RunAutomationReset
back to false & updates LastAutomationRun
using LastModifiedOrCreated
:

RunAutomation: The linchpin of the whole setup is OR(NOT(LastAutomationRun), DATETIME_DIFF({Last Modified}, LastAutomationRun) > 10)
. The first clause NOT(LastAutomationRun)
will be 1 when the record is first created. The second clause DATETIME_DIFF({Last Modified}, LastAutomationRun) > 10
will be 1 whenever a field is modified more than 10 seconds after the last automation run.
Unfortunately this buffer is needed because the timestamps never end up being equal. Timestamp equality could probably be achieved if the “Last modified” field only took into account certain fields, but if you choose to use specific fields, when you add a new field, you’ll need to edit the “Last modified” field to have it count. I’ve seen a difference of up to 7 seconds from a single run, but they’re mostly 2-5 seconds, so hopefully 10 is long enough to avoid recursive triggering and short enough to allow all legit edits in your application. ¯\_(ツ)_/¯
RunAutomationReset: This field is toggled by the Automation, meaning RunAutomation
is always reset. Without this, if the Automation run takes longer than the next edit, the record will be permanently stuck with RunAutomation
on and will never trigger another Automation run (to trigger the automation, the record needs to not match the conditions first).
LastModifiedOrCreated: This field ensures we always have a timestamp to put into LastAutomationRun, even if the record is new. If your automation uses a script, it’s probably better to make this choice there & avoid the extra field.
I made an example base, but when you copy it, it won’t have the automation, hence the instructions and explanation above.
Thanks and credit once again to @kuovonne!