> ## Documentation Index
> Fetch the complete documentation index at: https://docs.rootly.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Automating Jira Issues with Rootly Workflows

> Automate Jira issue creation and updates from Rootly incidents using Smart Defaults or custom workflow automation with project, fields, and label support.

Rootly gives you two ways to automate Jira issue creation and updates. Smart Defaults provides instant, zero-configuration automation. Custom Workflows let you add conditions, multiple actions, and advanced routing logic.

## Automation Options

<CardGroup cols={2}>
  <Card title="Smart Defaults" icon="bolt">
    **Setup fast and effortless**

    Automatically create and manage Jira issues at incident start using pre-configured settings
  </Card>

  <Card title="Custom Workflow" icon="bars-staggered">
    Use workflows for conditional or advanced Jira issue automation
  </Card>
</CardGroup>

***

## Smart Defaults

Smart Defaults let you automatically generate a Jira issue whenever an incident begins — without building a workflow. New Rootly accounts have Smart Defaults enabled automatically. Existing accounts have it off by default to avoid conflicting with existing workflows.

To configure Smart Defaults, go to **Integrations → Jira → Configure**.

<AccordionGroup>
  <Accordion title="Webhook" icon="webhook">
    Configure webhooks in your Jira Admin using this endpoint to allow updates made in Jira to reflect back in Rootly.

    <Note>
      See [Setting Up Jira Webhook](/integrations/jira/installation#setting-up-the-jira-webhook) for detailed steps.
    </Note>

    <img alt="Jira webhook URL configuration in Rootly" src="https://mintcdn.com/rootly/AeBVvOHy0V3r_SuA/images/integrations/jira/workflows/image-1.png?fit=max&auto=format&n=AeBVvOHy0V3r_SuA&q=85&s=189ace69ce7897a73bb49812d3628dd2" width="901" height="183" data-path="images/integrations/jira/workflows/image-1.png" />
  </Accordion>

  <Accordion title="Jira Ticket for Incidents" icon="ticket">
    This section controls how Jira tickets are created from Rootly incidents.

    <img alt="Jira ticket configuration panel for incidents" src="https://mintcdn.com/rootly/AeBVvOHy0V3r_SuA/images/integrations/jira/workflows/image-2.png?fit=max&auto=format&n=AeBVvOHy0V3r_SuA&q=85&s=8bd61f19c9376e52ab3984e3efba7cdd" width="1116" height="438" data-path="images/integrations/jira/workflows/image-2.png" />

    <ParamField body="Create Jira ticket for all new incidents" type="toggle">
      Automatically create a Jira ticket in the specified project as soon as an incident is declared in Rootly.
    </ParamField>

    <ParamField body="Project Key" type="select">
      The Jira project where tickets will be created. If you need to route tickets to different projects based on conditions, disable this and use custom workflows instead.
    </ParamField>

    <ParamField body="Issue Type" type="select">
      The type of Jira issue to create. Options are pulled from the project specified in Project Key.
    </ParamField>

    <ParamField body="Issue Status" type="select">
      The initial status of the new ticket. Options are pulled from the selected project and issue type.
    </ParamField>

    <ParamField body="Title / Summary" type="string">
      The Summary field of the Jira ticket. Defaults to `{{ incident.title }}`. Supports Liquid syntax.
    </ParamField>

    <ParamField body="Description" type="string">
      The Description field of the Jira ticket. Defaults to `{{ incident.summary }}`. Supports Liquid syntax.
    </ParamField>

    <ParamField body="Default Assignee" type="string">
      Assign the Jira ticket to a user by email address. If blank, the ticket is assigned to the incident creator. Supports Liquid syntax.
    </ParamField>

    <ParamField body="Auto-bookmark Jira ticket in Slack" type="toggle">
      Automatically create a bookmark to the Jira ticket in the incident's Slack channel for quick access.
    </ParamField>

    <ParamField body="Update Jira ticket when incident is updated" type="toggle">
      Automatically update the matching Jira ticket whenever the incident is updated. This is one-way: changes flow from Rootly to Jira only.
    </ParamField>
  </Accordion>

  <Accordion title="Jira Ticket for Action Items" icon="list-check">
    This section controls how Jira subtasks are created from Rootly action items.

    <img alt="Jira subtask configuration for action items" src="https://mintcdn.com/rootly/AeBVvOHy0V3r_SuA/images/integrations/jira/workflows/image-3.png?fit=max&auto=format&n=AeBVvOHy0V3r_SuA&q=85&s=0847b6b1025ef38d6bd861b04f78742f" width="986" height="406" data-path="images/integrations/jira/workflows/image-3.png" />

    <ParamField body="Create Jira subtask ticket for action items" type="toggle">
      Automatically create a Jira subtask under the parent Jira ticket every time a new action item is created in Rootly.
    </ParamField>

    <ParamField body="Subtask Type" type="select">
      Leave this field **blank**. Jira subtasks can only be one type. This field will be expanded in a future release.
    </ParamField>

    <ParamField body="Subtask Status" type="select">
      The initial status of the new subtask. Options are pulled from the project specified in Project Key.
    </ParamField>

    <ParamField body="Update Jira subtask ticket for action items" type="toggle">
      Automatically update the matching Jira subtask whenever an action item is updated. This is one-way: changes flow from Rootly to Jira only.
    </ParamField>

    <ParamField body="Match action item priority" type="toggle">
      Automatically set the Jira subtask priority to match the action item priority in Rootly.
    </ParamField>
  </Accordion>
</AccordionGroup>

<Note>
  Use Smart Defaults when you want instant, built-in Jira issue automation without touching workflows. Build a workflow when you need conditions, custom triggers, multiple actions, or more advanced issue routing.
</Note>

***

## Custom Workflows

Custom workflows give you full control over when and how Jira issues are created or updated. You can filter by severity, service, environment, and more — or chain multiple Jira actions together in a single workflow.

<Steps>
  <Step title="Create a new workflow">
    Open **Rootly → Workflows → Create Workflow** and choose the workflow type that matches your use case.

    <img alt="Rootly workflows page" src="https://mintcdn.com/rootly/AeBVvOHy0V3r_SuA/images/integrations/jira/workflows/image-4.png?fit=max&auto=format&n=AeBVvOHy0V3r_SuA&q=85&s=c841181b889b4efdd3b06ea860a0d38a" width="877" height="171" data-path="images/integrations/jira/workflows/image-4.png" />

    <img alt="Create workflow button" src="https://mintcdn.com/rootly/AeBVvOHy0V3r_SuA/images/integrations/jira/workflows/image-5.png?fit=max&auto=format&n=AeBVvOHy0V3r_SuA&q=85&s=d0e6f4359b0ab097c7d5dc22c0c526d6" width="1165" height="578" data-path="images/integrations/jira/workflows/image-5.png" />

    <img alt="Workflow type selection showing Incident, Retrospective, and Pulse options" src="https://mintcdn.com/rootly/AeBVvOHy0V3r_SuA/images/integrations/jira/workflows/image-6.png?fit=max&auto=format&n=AeBVvOHy0V3r_SuA&q=85&s=37a7874305a90ada8414f576346c08ac" width="1365" height="630" data-path="images/integrations/jira/workflows/image-6.png" />
  </Step>

  <Step title="Configure triggers">
    Triggers define when the workflow runs. Choose the event that should create or update a Jira issue.

    <img alt="Workflow trigger configuration options" src="https://mintcdn.com/rootly/AeBVvOHy0V3r_SuA/images/integrations/jira/workflows/image-triggers.png?fit=max&auto=format&n=AeBVvOHy0V3r_SuA&q=85&s=2ccaab29def0a05f837c56126fe8d364" width="621" height="305" data-path="images/integrations/jira/workflows/image-triggers.png" />

    | Trigger                         | What it does                                             |
    | ------------------------------- | -------------------------------------------------------- |
    | **Incident Created**            | Creates a Jira issue as soon as a new incident is opened |
    | **Incident Updated**            | Fires when fields like severity or status change         |
    | **Incident Status Changed**     | Triggers when the incident moves to a specific status    |
    | **Incident Commander Assigned** | Fires once someone takes ownership                       |
    | **Manual Trigger**              | Run manually from the UI when needed                     |

    <Tip>
      Choose the trigger that fires only when you actually need a Jira issue. Avoid creating issues earlier than necessary.
    </Tip>
  </Step>

  <Step title="Add conditions">
    Conditions let you control when the workflow should run after it's been triggered. This keeps your Jira project clean by limiting automation to the incidents that matter.

    <img alt="Workflow conditions panel showing filter options" src="https://mintcdn.com/rootly/AeBVvOHy0V3r_SuA/images/integrations/jira/workflows/image-condition.png?fit=max&auto=format&n=AeBVvOHy0V3r_SuA&q=85&s=10f8770a804c0232142919caf4a13f29" width="626" height="334" data-path="images/integrations/jira/workflows/image-condition.png" />

    Common condition setups:

    * **Severity-based** — Only create Jira issues for SEV-1 or SEV-2 incidents
    * **Team or service filters** — Only fire for incidents impacting specific teams or services
    * **Incident type** — Ensure the workflow only runs when the Kind is set to Incident
    * **Environment** — Trigger only for customer-facing or production-impacting incidents

    <Tip>
      Use conditions to avoid unnecessary Jira issues and keep the workflow focused.
    </Tip>
  </Step>

  <Step title="Add a Jira action">
    Actions are the steps that run when the workflow fires. Click **Add Action**, then search for **Jira** to see the available actions.

    <img alt="Add action button in workflow editor" src="https://mintcdn.com/rootly/AeBVvOHy0V3r_SuA/images/integrations/jira/workflows/image-7.png?fit=max&auto=format&n=AeBVvOHy0V3r_SuA&q=85&s=98fb9b72cfdbcc16bd6a81e6a018b013" width="677" height="221" data-path="images/integrations/jira/workflows/image-7.png" />

    <img alt="Jira action search in action picker" src="https://mintcdn.com/rootly/AeBVvOHy0V3r_SuA/images/integrations/jira/workflows/image-8.png?fit=max&auto=format&n=AeBVvOHy0V3r_SuA&q=85&s=13174bfb5d75fbcf710ea56c1d11d984" width="895" height="376" data-path="images/integrations/jira/workflows/image-8.png" />

    #### Create Jira Issue

    Creates a new Jira issue for an incident or retrospective.

    <img alt="Create Jira Issue action configuration" src="https://mintcdn.com/rootly/AeBVvOHy0V3r_SuA/images/integrations/jira/workflows/image-9.png?fit=max&auto=format&n=AeBVvOHy0V3r_SuA&q=85&s=f4d6dfbd916a3a7977b411112d078624" width="672" height="606" data-path="images/integrations/jira/workflows/image-9.png" />

    <ParamField body="Name" type="string">
      Optional label for this action. Does not affect behavior.
    </ParamField>

    <ParamField body="Project Key" type="select">
      The Jira project where the issue will be created.
    </ParamField>

    <ParamField body="Issue Type" type="select">
      The type of Jira issue to create (e.g., Bug, Task, Story). Options are pulled from the selected project.
    </ParamField>

    <ParamField body="Summary / Title" type="string">
      Title of the Jira issue. Supports Liquid syntax (e.g., `{{ incident.title }}`).
    </ParamField>

    <ParamField body="Description" type="string">
      Detailed description. Supports Liquid syntax (e.g., `{{ incident.summary }}`).
    </ParamField>

    <ParamField body="Priority" type="select">
      Priority of the Jira issue (e.g., High, Medium, Low).
    </ParamField>

    <ParamField body="Status" type="select">
      Initial status of the issue. Options are pulled from the selected project and issue type.
    </ParamField>

    <ParamField body="Labels" type="array">
      Jira labels to categorize the issue. Supports multiple values.
    </ParamField>

    <ParamField body="Due Date" type="string">
      Optional due date. Supports Liquid syntax or fixed dates.
    </ParamField>

    <ParamField body="Reporter (email address)" type="string">
      The reporter for the Jira issue. Defaults to the incident creator. Supports Liquid syntax.
    </ParamField>

    <ParamField body="Assignee (email address)" type="string">
      The assignee for the Jira issue. Supports Liquid syntax.
    </ParamField>

    <ParamField body="Skip on Failure" type="toggle">
      Prevents the workflow from stopping if this action fails.
    </ParamField>

    <ParamField body="Enabled" type="toggle">
      Toggle this action on or off, useful when testing.
    </ParamField>

    <Info>
      Use Rootly's [Liquid Variable Explorer](https://rootly.com/account/help/liquid-explorer) to test variables before using them in your workflow.
    </Info>

    #### Update Jira Issue

    Updates an existing Jira issue. You must reference the issue using `{{ incident.jira_issue_id }}` in the **Jira Issue to Update** field.

    <Warning>
      This action only works if a Jira issue has already been created and linked to the incident.
    </Warning>

    <Info>
      The Update Jira Issue action also works inside [Action Item Workflows](/workflows/action-item-workflows). When paired with the `Action Item Updated` trigger, it's the canonical way to enrich Jira tickets created via **Export to ticketing** with incident context (Rootly URL, severity, services, etc.) — see [Linking Exported Tasks Back to the Incident](/incidents/action-items/adding-action-items-via-web-ui#linking-exported-tasks-back-to-the-incident). In an action item workflow, use `{{ action_item.jira_issue_id }}` instead of the incident-side variable.
    </Info>

    #### Create Jira Subtask

    Creates a subtask under an existing Jira issue. Reference the parent issue using `{{ incident.jira_issue_id }}` in the **Parent Jira Issue** field. The **Project Key** must match the one used to create the parent issue.

    <Note>
      This action is intended for action items or sub-incidents.
    </Note>
  </Step>

  <Step title="Name and save the workflow">
    Give your workflow a descriptive name (e.g., "Create Jira Issue on SEV-1 Incident"), then click **Create Workflow**.
  </Step>
</Steps>

***

## Jira Native Field Mapping

Some Jira fields behave differently than standard custom fields. This section explains how to correctly map Rootly fields to Jira's **native** fields.

<Warning>
  These mappings go in the **Custom Fields Mapping** section of the Jira action, not the API Payload section.
</Warning>

<AccordionGroup>
  <Accordion title="Labels (Native Jira Field)">
    Jira's native Labels field uses a different syntax than custom label-type fields.

    **Map Rootly services to Jira Labels:**

    ```json theme={null}
    "customfield_12345": {{ incident.service_slugs | join: ","}}
    ```

    **Map a Rootly custom multi-select to Jira Labels:**

    ```json theme={null}
    "customfield_10033": {{ incident.custom_fields | find: 'custom_field.slug', 'your_custom_field_slug' | get: 'selected_options' | map: 'value' | join: "," }}
    ```

    <Note>
      Replace `customfield_12345` with your actual Jira field ID. Find field IDs in **Jira Settings → Issues → Custom Fields**.
    </Note>
  </Accordion>

  <Accordion title="Team (Native Jira Field)">
    Jira's native Team field is stored as a custom field but only allows a single team selection.

    **Map a static Jira Team ID:**

    ```json theme={null}
    "customfield_10001": "<jira_team_id>"
    ```

    **Map Rootly's first team dynamically:**

    ```json theme={null}
    "customfield_10001": "{{ incident.raw_groups[0] | get: 'description' }}"
    ```

    <Info>
      This example assumes you store the corresponding Jira Team ID in the Rootly team's description field. Adjust based on how your teams are configured.
    </Info>
  </Accordion>
</AccordionGroup>

***

## Custom Fields Mapping

The **Custom Fields Mapping** section lets you map Rootly incident data to Jira custom fields dynamically.

<img alt="Advanced tab for custom field mapping in Jira action" src="https://mintcdn.com/rootly/AeBVvOHy0V3r_SuA/images/integrations/jira/workflows/image-10.png?fit=max&auto=format&n=AeBVvOHy0V3r_SuA&q=85&s=dd7245df4a153f62d209002a80c4dcdf" width="716" height="580" data-path="images/integrations/jira/workflows/image-10.png" />

### What You Need

| Item                | Where to Find It                                                                             |
| ------------------- | -------------------------------------------------------------------------------------------- |
| **Jira Field ID**   | Jira Settings → Issues → Custom Fields → Click field → ID in URL (e.g., `customfield_12345`) |
| **Field Type**      | Same location, check the field type (text, select, multi-select, etc.)                       |
| **Rootly Property** | Use the [Liquid Variable Explorer](https://rootly.com/account/help/liquid-explorer)          |

<Info>
  For detailed instructions on finding Jira field IDs, see [Atlassian's documentation](https://confluence.atlassian.com/jirakb/how-to-find-id-for-custom-field-s-744522503.html).
</Info>

### Field Type Mappings

<AccordionGroup>
  <Accordion title="Text and Paragraph Fields">
    ```json theme={null}
    // Rootly native field → Jira text
    "customfield_12345": "{{ incident.functionalities }}"

    // Rootly custom field → Jira text
    "customfield_12345": "{{ incident.custom_fields | find: 'custom_field.slug', 'your-slug' | get: 'selected_options' | map: 'value' }}"
    ```
  </Accordion>

  <Accordion title="Single Select Fields">
    Note the `{ "value": ... }` wrapper required by Jira:

    ```json theme={null}
    // Rootly team name → Jira single select
    "customfield_12345": { "value": "{{ incident.raw_groups | first | get: 'name' }}" }

    // Rootly custom field → Jira single select
    "customfield_12345": { "value": "{{ incident.custom_fields | find: 'custom_field.slug', 'your_slug' | get: 'selected_options' | map: 'value' }}" }
    ```
  </Accordion>

  <Accordion title="Multi-Select Fields">
    **Simple approach (Rootly custom multi-select):**

    ```json theme={null}
    "customfield_12345": {{ incident.custom_fields | find: 'custom_field.slug', 'your_slug' | get: 'selected_options' | to_values }}
    ```

    **Manual array building (Rootly native fields):**

    ```liquid theme={null}
    {% assign functions = incident.functionalities %}
    {% assign array = "" %}
    {% for function in functions %}
    {% assign item = '{"value":"' | append: function | append: '"}' %}
    {% assign array = array | append: item | append: "," %}
    {% endfor %}
    {% capture final_array %}[{{ array | remove_last: ',' }}]{% endcapture %}
    "customfield_12345": {{ final_array }}
    ```
  </Accordion>

  <Accordion title="Labels Fields (Custom)">
    For Jira custom fields of type "Labels" (different from the native Labels field):

    ```json theme={null}
    // Rootly services → Jira custom labels
    "customfield_12345": {{ incident.service_slugs | to_json }}

    // Rootly custom multi-select → Jira custom labels
    "customfield_10033": {{ incident.custom_fields | find: 'custom_field.slug', 'your_slug' | get: 'selected_options' | map: 'value' | to_json }}
    ```
  </Accordion>

  <Accordion title="Number Fields">
    ```json theme={null}
    "customfield_26117": {{ incident.custom_fields | find: 'custom_field.slug', 'your_slug' | get: 'selected_options.value' }}
    ```
  </Accordion>

  <Accordion title="Date/Time Fields">
    Must use ISO 8601 format:

    ```json theme={null}
    // Rootly incident start time → Jira datetime
    "customfield_10030": "{{ incident.started_at | date: '%FT%T%:z' }}"

    // Rootly custom datetime → Jira datetime
    "customfield_26218": "{{ incident.custom_fields | find: 'custom_field.slug', 'your_slug' | get: 'selected_options.value' | date: '%Y-%m-%dT%H:%M:%S.%d%z' }}"
    ```
  </Accordion>

  <Accordion title="User Fields">
    **Single user:**

    ```json theme={null}
    {% assign jira_email = incident.roles | find: 'incident_role.slug', 'incident-commander' | get: 'user.email' %}
    "customfield_20825": { "id": "{{ team.jira_users | where: 'email', jira_email | first | get: 'account_id' }}" }
    ```

    **Multiple users:**

    ```json theme={null}
    {% assign jira_email = incident.roles | find: 'incident_role.slug', 'incident-commander' | get: 'user.email' %}
    "customfield_20825": [{ "id": "{{ team.jira_users | where: 'email', jira_email | first | get: 'account_id' }}" }]
    ```
  </Accordion>
</AccordionGroup>

### How to Test Your Mapping

1. Create a test incident in Rootly
2. Run your workflow manually
3. Check the Jira issue to verify fields are populated correctly
4. If errors occur, go to **Workflows → Your Workflow → ... → View Runs** to see the error details

***

## API Payload

The **API Payload** section provides direct access to Jira's REST API for advanced field updates not available through Custom Fields Mapping.

<Info>
  API Payload uses Jira's [update issue REST API](https://developer.atlassian.com/server/jira/platform/updating-an-issue-via-the-jira-rest-apis-6848604/). Fields use verb-based operations: `set`, `add`, and `remove`.
</Info>

### When to Use API Payload

| Use Case                 | Use API Payload                     |
| ------------------------ | ----------------------------------- |
| Set priority dynamically | Yes                                 |
| Add comments             | Yes (Update Jira Issue action only) |
| Link issues together     | Yes                                 |
| Set native Labels field  | Yes                                 |
| Set Components field     | Yes                                 |
| Map custom fields        | No, use Custom Fields Mapping       |

### API Payload Examples

<AccordionGroup>
  <Accordion title="Set Priority Based on Severity">
    ```liquid theme={null}
    {% if incident.severity_slug == 'sev0' %}
      { "priority": [ { "set": { "name" : "High" } } ] }
    {% elsif incident.severity_slug == 'sev1' %}
      { "priority": [ { "set": { "name" : "Medium" } } ] }
    {% elsif incident.severity_slug == 'sev2' %}
      { "priority": [ { "set": { "name" : "Low" } } ] }
    {% endif %}
    ```
  </Accordion>

  <Accordion title="Add Comments">
    Add a comment to an existing Jira issue. Only works with the **Update Jira Issue** action.

    ```json theme={null}
    {
      "comment": [
        {
          "add": {
            "body": "Incident {{ incident.title }} has been updated. Current status: {{ incident.status }}"
          }
        }
      ]
    }
    ```

    <Warning>
      Comments can only be added to existing issues. Use this with the Update Jira Issue action, not Create.
    </Warning>
  </Accordion>

  <Accordion title="Link Issues Together">
    **"Relates to" link:**

    ```json theme={null}
    {
      "issuelinks": [
        {
          "add": {
            "type": { "name": "Relates", "outward": "relates to" },
            "outwardIssue": { "id": "{{ incident.jira_issue_id }}" }
          }
        }
      ]
    }
    ```

    **Custom "Action item for" link:**

    ```json theme={null}
    {
      "issuelinks": [
        {
          "add": {
            "type": { "name": "Action", "outward": "action item for" },
            "outwardIssue": { "id": "{{ incident.jira_issue_id }}" }
          }
        }
      ]
    }
    ```
  </Accordion>

  <Accordion title="Set Native Labels Field">
    ```json theme={null}
    {
      "labels": [{ "set": ["incident", "production", "{{ incident.severity }}"] }]
    }
    ```
  </Accordion>

  <Accordion title="Set Components Field">
    ```liquid theme={null}
    {% assign components = incident.services %}
    {
      "components": [
        {
          "set": [
          {% for component in components %}
            { "name": "{{ component }}" }{% unless forloop.last %},{% endunless %}
          {% endfor %}
          ]
        }
      ]
    }
    ```

    <Warning>
      Component names must match exactly between Rootly and Jira. If a component doesn't exist in Jira, the update will fail.
    </Warning>
  </Accordion>
</AccordionGroup>

### API Payload Verbs

| Verb     | Description               | Example                                          |
| -------- | ------------------------- | ------------------------------------------------ |
| `set`    | Replace the current value | `{ "labels": [{ "set": ["label1"] }] }`          |
| `add`    | Add to current values     | `{ "comment": [{ "add": { "body": "text" } }] }` |
| `remove` | Remove specific values    | `{ "labels": [{ "remove": "old-label" }] }`      |

***

## Debugging

To view error details, locate the workflow in Rootly, then select **... → View Runs → View**.

| Error                                              | Cause                                                         | Fix                                                       |
| -------------------------------------------------- | ------------------------------------------------------------- | --------------------------------------------------------- |
| `issue_id cannot be null.`                         | The Jira issue you're trying to update doesn't exist yet      | Ensure the Create action runs before the Update action    |
| `"customfield_12345": "Custom Field is required."` | A required Jira custom field isn't being populated            | Add a mapping for the field, or make it optional in Jira  |
| `unexpected token at '{ "customfield_10032": }'`   | Custom mapping syntax is invalid                              | Fix your JSON syntax                                      |
| `Specify a valid project ID or key`                | The selected Project Key isn't available in the Jira instance | Reselect the Jira instance, then reselect the Project Key |
| `The issue type selected is invalid.`              | The selected issue type doesn't exist in the project          | Reselect the Project Key, then reselect the Issue Type    |

***

## Best Practices

* **Name workflows clearly.** Use names like `Create Bug on High-Priority Incident` or `Update Jira Issue on Resolution` so the intent is obvious.
* **Keep logic simple.** Avoid overly complex conditions or chained automations — simpler workflows are easier to debug.
* **Test in a sandbox project.** Before applying to production, trigger test incidents to verify issues are created and updated as expected.
