Incident Alert Tickets
Incident-alert tickets turn on-call debugging into searchable knowledge: one
Linear ticket per production alert/monitor, one dated section per distinct
root cause. This skill owns lookup, comparison, and the human-gated
write-back; calling skills own the investigation itself. The team SOP is the
Linear document titled "Incident Alert Tickets".
When to Apply
Apply whenever the task is anchored to an alert identity:
- a Datadog monitor ID or title,
- an incident.io alert or INC reference,
- an on-call page ("we got paged for X").
Do not try to detect "incident mode" — the presence of a named alert is the
condition, because the monitor is the ticket key. When an alert identity is
present, the lookup is mandatory; recording is offered after the investigation
and gated on human approval. A customer report or code question with no alert
identity skips this skill.
When multiple alerts fire together (a cascade), run lookup, compare, and
classify for each alert identity — every monitor has its own ticket. If
one root cause explains several alerts, write the full cause section on the
monitor closest to the cause and propose a short dated section on the other
monitors' tickets that links to it.
Ticket Contract
One ticket per monitor (per env when monitors are per-env), titled
[ENV] <Monitor title>, in the Engineering (LFE) team, carrying the
incident-alert label. The label set is the knowledge base.
Regional twins of one monitor (same metric and threshold per env) may share
a single ticket titled [ENV1/ENV2] <Monitor title> when the causes are
region-independent; list each env's monitor ID in the alert header.
The description opens with an alert header: monitor ID, trigger condition,
and how it surfaces (incident.io urgency, auto-resolve behavior).
One dated section per distinct root cause, separated by ---:
## YYYY-MM-DD — <short cause name>
**Recognize it:** <signals that identify this cause: log patterns, span
filters, metric shapes, affected routes>
**How urgent?** <impact, auto-recovery behavior, escalation threshold>
**Fix:** <positive actions only — every "do not X" needs a working
alternative; verified levers, not speculation>
Cause sections are append-only: never rewrite or delete an existing section;
new knowledge gets a new dated block.
The description ends with a ## Your cause is not listed? trailer: it
records firings that were never root-caused and tells the next engineer to
insert new dated sections above it, in the same format.
Keep each cause section to roughly one screen.
A distinct problem discovered during the investigation that is not a cause
of this alert gets its own ticket (bug or incident-alert), cross-linked — do
not mix it into this ticket's cause sections.
Lookup
- List Linear issues carrying the
incident-alert label.
- Match on monitor ID first (tickets carry it in the alert header), then on
monitor title and env.
- Read the matched ticket's cause sections and comments.
Compare and Classify
Compare the current evidence against each cause section's "Recognize it"
signals and classify:
- Known cause — a section matches. Cite the ticket and section in the
analysis; its "Fix" is the starting recommendation. This may end the
investigation before any Datadog sweep.
- New cause on existing ticket — the monitor has a ticket but no section
matches the evidence. Propose appending a dated section.
- No ticket — no ticket matches the monitor. Propose creating one, and file
it once that is approved.
Treat a partial match — some "Recognize it" signals fit, others do not — as a
new cause, never as a known one: do not recommend a documented "Fix"
whose recognition signals only partially match. Name the near-miss section in
the proposed ticket so the human can judge the overlap.
Write-Back
Appending a cause section to a ticket that already exists is a description edit,
which agents do autonomously. A monitor with no ticket needs a parentless one,
which is the single write that asks first — see
linear-agent-writes for the policy this
follows, and read it before your first write.
- Append: do it. Insert the new
----separated dated block after the
existing cause sections, above the Your cause is not listed? trailer; leave
everything else untouched. Mark the block as agent-written in its own text and
label the ticket AI edited. Never reflow or rewrite the human-written prose
around it.
- Create: show it, then file it. Prepare the issue — title
[ENV] <Monitor title>, the incident-alert label, description = alert header,
the first dated cause section, and the Your cause is not listed? trailer —
show it for a go-ahead, and once you have one, create it yourself and label it
AI created. One go-ahead covers the whole run's proposed tickets.
Report what you did either way:
| ID |
Alert / Monitor |
Classification |
Action |
Content |
Action: appended to <key> (AI edited), awaiting your go-ahead,
filed <key> (AI created), or none (known cause).
Content: the dated section, or the full ticket body exactly as it will be
filed — that text is what the go-ahead is given against.
If Linear is unreachable in this environment, say so and return every row as text
ready to paste rather than skipping the write-back silently.
Division of Labor
linear-bug-triage owns bug deduplication
and creation from measured evidence. Incident-alert tickets are per-monitor
runbook knowledge, not defect reports.
- An alert whose root cause is a code bug gets both: the cause section
documents recognition and mitigation, and links the bug ticket that tracks
the durable fix.
1---2name: incident-alert-tickets3description: Read and record root causes in the Linear `incident-alert` knowledge base. Use before and after investigating a named Datadog monitor, incident.io alert or incident, or on-call page to find or record root causes.4---5
6# Incident Alert Tickets
7
8Incident-alert tickets turn on-call debugging into searchable knowledge: one
9Linear ticket per production alert/monitor, one dated section per distinct
10root cause. This skill owns lookup, comparison, and the human-gated
11write-back; calling skills own the investigation itself. The team SOP is the
12Linear document titled "Incident Alert Tickets".
13
14## When to Apply
15
16Apply whenever the task is anchored to an **alert identity**:
17
18- a Datadog monitor ID or title,
19- an incident.io alert or INC reference,
20- an on-call page ("we got paged for X").
21
22Do not try to detect "incident mode" — the presence of a named alert is the
23condition, because the monitor is the ticket key. When an alert identity is
24present, the lookup is mandatory; recording is offered after the investigation
25and gated on human approval. A customer report or code question with no alert
26identity skips this skill.
27
28When multiple alerts fire together (a cascade), run lookup, compare, and
29classify for **each** alert identity — every monitor has its own ticket. If
30one root cause explains several alerts, write the full cause section on the
31monitor closest to the cause and propose a short dated section on the other
32monitors' tickets that links to it.
33
34## Ticket Contract
35
36- One ticket per monitor (per env when monitors are per-env), titled
37 `[ENV] <Monitor title>`, in the Engineering (LFE) team, carrying the
38 `incident-alert` label. The label set is the knowledge base.
39- Regional twins of one monitor (same metric and threshold per env) may share
40 a single ticket titled `[ENV1/ENV2] <Monitor title>` when the causes are
41 region-independent; list each env's monitor ID in the alert header.
42- The description opens with an alert header: monitor ID, trigger condition,
43 and how it surfaces (incident.io urgency, auto-resolve behavior).
44- One dated section per distinct root cause, separated by `---`:
45
46 ```markdown
47 ## YYYY-MM-DD — <short cause name>
48
49 **Recognize it:** <signals that identify this cause: log patterns, span
50 filters, metric shapes, affected routes>
51
52 **How urgent?** <impact, auto-recovery behavior, escalation threshold>
53
54 **Fix:** <positive actions only — every "do not X" needs a working
55 alternative; verified levers, not speculation>
56 ```
57
58- Cause sections are append-only: never rewrite or delete an existing section;
59 new knowledge gets a new dated block.
60- The description ends with a `## Your cause is not listed?` trailer: it
61 records firings that were never root-caused and tells the next engineer to
62 insert new dated sections above it, in the same format.
63- Keep each cause section to roughly one screen.
64- A distinct problem discovered during the investigation that is *not* a cause
65 of this alert gets its own ticket (bug or incident-alert), cross-linked — do
66 not mix it into this ticket's cause sections.
67
68## Lookup
69
701. List Linear issues carrying the `incident-alert` label.
712. Match on monitor ID first (tickets carry it in the alert header), then on
72 monitor title and env.
733. Read the matched ticket's cause sections and comments.
74
75## Compare and Classify
76
77Compare the current evidence against each cause section's "Recognize it"
78signals and classify:
79
80- **Known cause** — a section matches. Cite the ticket and section in the
81 analysis; its "Fix" is the starting recommendation. This may end the
82 investigation before any Datadog sweep.
83- **New cause on existing ticket** — the monitor has a ticket but no section
84 matches the evidence. Propose appending a dated section.
85- **No ticket** — no ticket matches the monitor. Propose creating one, and file
86 it once that is approved.
87
88Treat a partial match — some "Recognize it" signals fit, others do not — as a
89**new cause**, never as a known one: do not recommend a documented "Fix"
90whose recognition signals only partially match. Name the near-miss section in
91the proposed ticket so the human can judge the overlap.
92
93## Write-Back
94
95Appending a cause section to a ticket that already exists is a description edit,
96which agents do autonomously. A monitor with no ticket needs a parentless one,
97which is the single write that asks first — see
98[`linear-agent-writes`](../linear-agent-writes/SKILL.md) for the policy this
99follows, and read it before your first write.
100
101- **Append: do it.** Insert the new `---`-separated dated block after the
102 existing cause sections, above the `Your cause is not listed?` trailer; leave
103 everything else untouched. Mark the block as agent-written in its own text and
104 label the ticket `AI edited`. Never reflow or rewrite the human-written prose
105 around it.
106- **Create: show it, then file it.** Prepare the issue — title
107 `[ENV] <Monitor title>`, the `incident-alert` label, description = alert header,
108 the first dated cause section, and the `Your cause is not listed?` trailer —
109 show it for a go-ahead, and once you have one, create it yourself and label it
110 `AI created`. One go-ahead covers the whole run's proposed tickets.
111
112Report what you did either way:
113
114| ID | Alert / Monitor | Classification | Action | Content |
115| --- | --- | --- | --- | --- |
116
117- `Action`: `appended to <key> (AI edited)`, `awaiting your go-ahead`,
118 `filed <key> (AI created)`, or `none (known cause)`.
119- `Content`: the dated section, or the full ticket body exactly as it will be
120 filed — that text is what the go-ahead is given against.
121
122If Linear is unreachable in this environment, say so and return every row as text
123ready to paste rather than skipping the write-back silently.
124
125## Division of Labor
126
127- [`linear-bug-triage`](../linear-bug-triage/SKILL.md) owns bug deduplication
128 and creation from measured evidence. Incident-alert tickets are per-monitor
129 runbook knowledge, not defect reports.
130- An alert whose root cause is a code bug gets both: the cause section
131 documents recognition and mitigation, and links the bug ticket that tracks
132 the durable fix.