Linear Bug Triage
Use this skill after a bug or regression candidate has measured evidence. This
skill owns Linear search, deduplication, evidence comments, and filing new
issues once a human says yes; the calling skill owns deciding whether the signal
is issue-worthy.
What This Skill May Write
Every write carries a label and is marked as agent-written in the text, and only
three write shapes are permitted at all.
linear-agent-writes is the authority for that
policy; read it before your first write and prefer it over this summary wherever
they differ.
For this skill it resolves to:
- An evidence comment on an issue that already exists: propose, then post.
Show the comment body in the findings table, get a yes (one go-ahead can cover
the whole set), then post it and label that issue
AI commented. Mark the
comment body as agent-written.
- A new top-level issue: ask once, then file it. A bug cluster surfaced by a
review has no parent, and a parentless ticket needs a go-ahead. Take one
go-ahead for the whole set, or for named rows — never one question per
candidate.
So present the findings table either way: it is what the go-ahead is given
against, and it is the report afterwards. One row per candidate:
- Candidate / cluster name.
- Environments.
- Service and route/resource.
- Recent window measurement.
- Baseline measurement.
- Delta / regression summary.
- Key evidence links — the ones Required Evidence below asks for.
- Action:
awaiting your go-ahead with the exact comment or ticket body,
commented <issue key> once approved and posted, or filed <issue key>
once a row is approved and created.
Never present an awaiting your go-ahead row without the exact title and body
you intend to land underneath it — that text is what is being approved.
Deduplicate first, so comments land on the right issue.
If Linear is unreachable in this environment, say so plainly and return every row
as text ready to paste. Do not skip the handoff silently.
Required Evidence
For each candidate, gather:
- Recent window and baseline window as absolute time ranges with timezone.
- Measured signal: counts, rates, p50/p95/p99 latency, trace samples,
flamegraphs, monitor thresholds, or benchmark deltas.
- Affected environments, services, routes/resources, status codes, and top error
messages.
- Datadog links for logs, spans, traces, metrics, dashboards, or flamegraphs
used as evidence.
- The exact text
No measurements found for requested measurements that are
unavailable.
Do not create or comment based on guesses, unsupported impact claims, or missing
measurements alone.
Deduplication
Always, before writing anything:
- Search Linear for related open issues using exact error text, route/resource,
service, environment, monitor name, and observability link keywords.
- Search recently closed or canceled issues if the error is recurring or the
wording is distinctive.
- If a related issue exists, put a concise evidence comment in the findings
table as
awaiting your go-ahead. Post it and label AI commented only
after the go-ahead (one yes can cover the whole set).
- If no related issue exists, prepare the issue in the format below and put it
in the findings table as
awaiting your go-ahead. File it once the go-ahead
comes, and update the row to filed <issue key>.
Existing Issue Comments
For related existing issues, after a yes, add only:
- Recent window and baseline window.
- Measured delta or
No measurements found for unavailable signals.
- Affected environments, services, routes/resources, and top error messages.
- The evidence links from Required Evidence.
Do not add fix suggestions, root-cause guesses, implementation notes, owner
assignments, or next steps.
New Issue Format
The shape to prepare, show for the go-ahead, and then file:
- State/status
Triage; pass the Linear state explicitly on creation and do not
rely on workspace defaults.
- Label
bug.
- Additional existing labels that match the evidence, such as affected service,
environment, API, ingestion, latency, ClickHouse, Postgres, integrations, or
observability labels. Query labels first and use the repository/team's exact
label names.
- Concise title:
bug: <service or route> <measured symptom> in <envs>.
- Concise body, evidence-only:
Recent window: <absolute time range and timezone>
Baseline: <absolute time range and timezone>
Signal:
- <count/rate/latency delta with env/service/route>
- <"No measurements found" for missing requested measurements>
Evidence:
- Datadog logs: <url>
- Datadog spans/traces: <url>
- Datadog metrics, dashboard, or latency graph: <url>
Related Linear search:
- <brief search terms used and result>
Do not include fix suggestions, root-cause guesses, implementation notes, owner
assignments, or next steps unless the user explicitly asks outside the Linear
issue or comment.
1---2name: linear-bug-triage3description: Use this skill after a bug or regression candidate has measured evidence to document them within linear.4---56# Linear Bug Triage78Use this skill after a bug or regression candidate has measured evidence. This9skill owns Linear search, deduplication, evidence comments, and filing new10issues once a human says yes; the calling skill owns deciding whether the signal11is issue-worthy.1213## What This Skill May Write1415Every write carries a label and is marked as agent-written in the text, and only16three write shapes are permitted at all.17[`linear-agent-writes`](../linear-agent-writes/SKILL.md) is the authority for that18policy; read it before your first write and prefer it over this summary wherever19they differ.2021For this skill it resolves to:2223- **An evidence comment on an issue that already exists: propose, then post.**24 Show the comment body in the findings table, get a yes (one go-ahead can cover25 the whole set), then post it and label that issue `AI commented`. Mark the26 comment body as agent-written.27- **A new top-level issue: ask once, then file it.** A bug cluster surfaced by a28 review has no parent, and a parentless ticket needs a go-ahead. Take one29 go-ahead for the whole set, or for named rows — never one question per30 candidate.3132So present the findings table either way: it is what the go-ahead is given33against, and it is the report afterwards. One row per candidate:3435- Candidate / cluster name.36- Environments.37- Service and route/resource.38- Recent window measurement.39- Baseline measurement.40- Delta / regression summary.41- Key evidence links — the ones *Required Evidence* below asks for.42- Action: `awaiting your go-ahead` with the exact comment or ticket body,43 `commented <issue key>` once approved and posted, or `filed <issue key>`44 once a row is approved and created.4546Never present an `awaiting your go-ahead` row without the exact title and body47you intend to land underneath it — that text is what is being approved.48Deduplicate first, so comments land on the right issue.4950If Linear is unreachable in this environment, say so plainly and return every row51as text ready to paste. Do not skip the handoff silently.5253## Required Evidence5455For each candidate, gather:5657- Recent window and baseline window as absolute time ranges with timezone.58- Measured signal: counts, rates, p50/p95/p99 latency, trace samples,59 flamegraphs, monitor thresholds, or benchmark deltas.60- Affected environments, services, routes/resources, status codes, and top error61 messages.62- Datadog links for logs, spans, traces, metrics, dashboards, or flamegraphs63 used as evidence.64- The exact text `No measurements found` for requested measurements that are65 unavailable.6667Do not create or comment based on guesses, unsupported impact claims, or missing68measurements alone.6970## Deduplication7172Always, before writing anything:73741. Search Linear for related open issues using exact error text, route/resource,75 service, environment, monitor name, and observability link keywords.762. Search recently closed or canceled issues if the error is recurring or the77 wording is distinctive.783. If a related issue exists, put a concise evidence comment in the findings79 table as `awaiting your go-ahead`. Post it and label `AI commented` only80 after the go-ahead (one yes can cover the whole set).814. If no related issue exists, prepare the issue in the format below and put it82 in the findings table as `awaiting your go-ahead`. File it once the go-ahead83 comes, and update the row to `filed <issue key>`.8485## Existing Issue Comments8687For related existing issues, after a yes, add only:8889- Recent window and baseline window.90- Measured delta or `No measurements found` for unavailable signals.91- Affected environments, services, routes/resources, and top error messages.92- The evidence links from *Required Evidence*.9394Do not add fix suggestions, root-cause guesses, implementation notes, owner95assignments, or next steps.9697## New Issue Format9899The shape to prepare, show for the go-ahead, and then file:100101- State/status `Triage`; pass the Linear state explicitly on creation and do not102 rely on workspace defaults.103- Label `bug`.104- Additional existing labels that match the evidence, such as affected service,105 environment, API, ingestion, latency, ClickHouse, Postgres, integrations, or106 observability labels. Query labels first and use the repository/team's exact107 label names.108- Concise title: `bug: <service or route> <measured symptom> in <envs>`.109- Concise body, evidence-only:110111```markdown112Recent window: <absolute time range and timezone>113Baseline: <absolute time range and timezone>114115Signal:116- <count/rate/latency delta with env/service/route>117- <"No measurements found" for missing requested measurements>118119Evidence:120- Datadog logs: <url>121- Datadog spans/traces: <url>122- Datadog metrics, dashboard, or latency graph: <url>123124Related Linear search:125- <brief search terms used and result>126```127128Do not include fix suggestions, root-cause guesses, implementation notes, owner129assignments, or next steps unless the user explicitly asks outside the Linear130issue or comment.