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

> ## Agent Instructions
> Automate.ax automations are TypeScript programs.
> Use Bun for installation and command examples.
> Use Automate.ax for the product name and automate.ax for the package, CLI, and domain.
> Treat documented public APIs as current; do not invent transitional or deprecated names.

# On issue SLA breached

> Run an automation when Linear reports issue SLA breached.

`linear.onIssueSlaBreached` handles issue SLA breached in the connected Linear workspace.

```ts automations/watch-linear-issue-sla.automation.ts theme={null}
import { automation } from "automate.ax"
import { linear } from "automate.ax/linear"

export default automation("On issue SLA breached", () => {
  const event = linear.onIssueSlaBreached()
  // Update the Linear issue in the on-call queue.
})
```

Optional static `account` defaults to the project binding. Linear webhook triggers require an OAuth connection with read access. The workspace can't change at runtime.

## Trigger data

Returns a `Signal<LinearIssueSlaTrigger>`:

```ts theme={null}
type LinearIssueSlaTrigger = LinearIssue & {
  event: {
    action: "breached"
    createdAt: string
    issueData: LinearIssue
    organizationId: string
    type: "IssueSLA"
    url?: string | null
    webhookId: string
    webhookTimestamp: number
  }
}

interface LinearIssue {
  archivedAt?: string | null
  assignee?: LinearUser | null
  assigneeId?: string | null
  canceledAt?: string | null
  completedAt?: string | null
  createdAt: string
  creator?: LinearUser | null
  creatorId?: string | null
  description?: string | null
  dueDate?: string | null
  estimate?: number | null
  id: string
  identifier: string
  labelIds: string[]
  labels: LinearLabel[]
  number: number
  parentId?: string | null
  priority: number
  priorityLabel: string
  project?: LinearProjectReference | null
  projectId?: string | null
  startedAt?: string | null
  state: LinearWorkflowState
  stateId: string
  subscriberIds: string[]
  team?: LinearTeam | null
  teamId: string
  title: string
  trashed?: boolean | null
  updatedAt: string
  url: string
}

interface LinearUser {
  avatarUrl?: string | null
  email: string
  id: string
  name: string
  url: string
}

interface LinearLabel {
  color: string
  id: string
  name: string
  parentId?: string | null
}

interface LinearProjectReference {
  id: string
  name: string
  url: string
}

interface LinearWorkflowState {
  color: string
  id: string
  name: string
  type: string
}

interface LinearTeam {
  id: string
  key: string
  name: string
}
```

`set` means Linear assigned an SLA, `highRisk` means the issue entered the at-risk window, and `breached` means the SLA deadline passed. The output promotes `issueData` fields and preserves the original provider envelope under `event`. Both objects retain extra Linear fields.
