{"id":43,"date":"2026-02-18T14:55:00","date_gmt":"2026-02-18T14:55:00","guid":{"rendered":"https:\/\/demo.fasterthemes.com\/mywiki-wordpress-theme\/building-automation-rules\/"},"modified":"2026-02-18T14:55:00","modified_gmt":"2026-02-18T14:55:00","slug":"building-automation-rules","status":"publish","type":"post","link":"https:\/\/demo.fasterthemes.com\/mywiki-wordpress-theme\/building-automation-rules\/","title":{"rendered":"Building automation rules"},"content":{"rendered":"<p class=\"has-large-font-size\">Automation rules are if-this-then-that, scoped to a project. They run server-side, near-real-time, with no external dependencies.<\/p>\n<h2>The structure<\/h2>\n<p>Every rule has:<\/p>\n<ul>\n<li><strong>Trigger<\/strong> \u2014 what starts the rule. Task created, status changed, due date passed, comment added, custom-field updated.<\/li>\n<li><strong>Conditions<\/strong> (optional) \u2014 narrow the trigger. <em>Only when priority is High.<\/em><\/li>\n<li><strong>Actions<\/strong> \u2014 what happens. One or many.<\/li>\n<\/ul>\n<h2>Worked example: bug triage<\/h2>\n<p>&#8220;When a task is created with the <code>#bug<\/code> tag, assign it to the on-call engineer, set priority to High, and post a notification in #bugs.&#8221;<\/p>\n<pre><code>Trigger:    Task created\nConditions: Tag includes #bug\nActions:    Set assignee \u2192 @oncall_rotation\n            Set priority \u2192 High\n            Post to Slack \u2192 #bugs<\/code><\/pre>\n<p>Rules like this one shave hours off triage every week without anyone having to remember to do it.<\/p>\n<h2>Triggers reference<\/h2>\n<ul>\n<li><strong>Task created<\/strong><\/li>\n<li><strong>Task updated<\/strong> \u2014 fires on any change; use conditions to narrow<\/li>\n<li><strong>Status changed<\/strong> \u2014 fires on transitions; can scope to specific from\/to<\/li>\n<li><strong>Assignee changed<\/strong><\/li>\n<li><strong>Due date approaching<\/strong> \u2014 fires N days\/hours before due date<\/li>\n<li><strong>Due date passed<\/strong> \u2014 fires once at the moment a task becomes overdue<\/li>\n<li><strong>Comment added<\/strong><\/li>\n<li><strong>Tag added \/ removed<\/strong><\/li>\n<li><strong>Custom field changed<\/strong> \u2014 per-field, per-value<\/li>\n<li><strong>Schedule<\/strong> \u2014 cron-style, runs without a task event<\/li>\n<\/ul>\n<h2>Actions reference<\/h2>\n<ul>\n<li>Set assignee, status, priority, due date<\/li>\n<li>Add or remove tags<\/li>\n<li>Set or clear custom field<\/li>\n<li>Move to section \/ project<\/li>\n<li>Add subtask (with templating)<\/li>\n<li>Post comment<\/li>\n<li>Send Slack message<\/li>\n<li>Send email<\/li>\n<li>Trigger webhook (with custom payload)<\/li>\n<li>Create related task<\/li>\n<\/ul>\n<h2>Loop protection<\/h2>\n<p>Rules can fire other rules. To prevent runaway chains, Lattica caps a single trigger event at 10 cascading rule executions. If you build something that hits the cap, the audit log marks the chain as truncated and emails the rule&#8217;s creator.<\/p>\n<h2>Testing<\/h2>\n<p>Every rule has a <strong>Test<\/strong> button that runs it against a sample task you select, without making any changes. Use it before activating \u2014 and especially before changing a rule that&#8217;s already live.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Triggers, conditions, actions, loop protection, and a worked example for bug triage automation.<\/p>\n","protected":false},"author":0,"featured_media":44,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[26,57,19],"class_list":["post-43","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-api-automations","tag-automation","tag-rules","tag-workflow"],"_links":{"self":[{"href":"https:\/\/demo.fasterthemes.com\/mywiki-wordpress-theme\/wp-json\/wp\/v2\/posts\/43","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/demo.fasterthemes.com\/mywiki-wordpress-theme\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/demo.fasterthemes.com\/mywiki-wordpress-theme\/wp-json\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/demo.fasterthemes.com\/mywiki-wordpress-theme\/wp-json\/wp\/v2\/comments?post=43"}],"version-history":[{"count":0,"href":"https:\/\/demo.fasterthemes.com\/mywiki-wordpress-theme\/wp-json\/wp\/v2\/posts\/43\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/demo.fasterthemes.com\/mywiki-wordpress-theme\/wp-json\/wp\/v2\/media\/44"}],"wp:attachment":[{"href":"https:\/\/demo.fasterthemes.com\/mywiki-wordpress-theme\/wp-json\/wp\/v2\/media?parent=43"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/demo.fasterthemes.com\/mywiki-wordpress-theme\/wp-json\/wp\/v2\/categories?post=43"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/demo.fasterthemes.com\/mywiki-wordpress-theme\/wp-json\/wp\/v2\/tags?post=43"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}