Use an LLM as a triage copilot on a synthetic incident bundle — alerts, deploy log, metrics, Slack transcript — with one non-negotiable discipline: every claim in the triage report must carry a citation you personally verify against the artifacts.
The bundle contains a planted false lead that the humans in the transcript (and most models) fall for. Commercial AI-SRE tools (incident.io Investigations, PagerDuty SRE Agent, Datadog Bits) produce exactly this kind of cited hypothesis report; the transferable skill is verifying citations before acting, because a wrong-but-confident triage steers a whole incident channel.
~75 minutes hands-on · Core tier (maps to module M3). $0 — any free-tier chat model.
Create incident-2417/ with these four artifacts. Incident: checkout errors on 2026-07-24. Read nothing closely yet — arriving cold is part of the exercise.
// alerts.json
[
{"alert":"PaymentsDBConnectionsHigh","severity":"warning","fired_at":"13:52",
"channel":"#db-alerts-lowpri","summary":"payments-db connection usage > 95% for 5m"},
{"alert":"CheckoutHighErrorRate","severity":"critical","fired_at":"14:07",
"channel":"#oncall","summary":"checkout 5xx rate > 5% for 5m"},
{"alert":"CheckoutLatencyP95","severity":"critical","fired_at":"14:09",
"channel":"#oncall","summary":"checkout p95 > 2s for 5m"}
]
# deploys.log
2026-07-20 09:14 UTC deploy checkout-service v181 (weekly release)
2026-07-24 13:28 UTC config-change report-backfill: FULL_REINDEX=true (data-eng, change #4112)
2026-07-24 13:30 UTC cron start report-backfill run #88 (daily)
2026-07-24 14:02 UTC deploy checkout-service v183 (feature: gift-cards)
2026-07-24 14:15 UTC rollback checkout-service v183 -> v181
2026-07-24 14:27 UTC job kill report-backfill run #88 (ops)
# metrics.csv
time_utc,checkout_error_pct,paydb_conns_used,paydb_conns_max,checkout_p95_ms
13:30,0.2,58,100,210
13:35,0.3,71,100,230
13:40,0.4,83,100,290
13:45,0.9,92,100,400
13:50,1.8,97,100,650
13:55,3.5,100,100,1200
14:00,6.2,100,100,2100
14:05,9.8,100,100,3400
14:10,11.5,100,100,3900
14:15,11.9,100,100,4000
14:20,12.1,100,100,4100
14:25,12.0,100,100,4050
14:30,2.1,64,100,600
14:35,0.3,42,100,220
# slack.txt
[14:08] priya (on-call): checkout error page, 5xx spiking
[14:10] dev-raj: we deployed v183 at 14:02, has to be the gift-card change
[14:11] priya: agreed, timing matches. rolling back
[14:15] priya: rollback done
[14:21] priya: still failing?? error rate not moving
[14:23] meera (dba): payments-db pegged at max connections since ~13:55 btw,
warning fired in #db-alerts-lowpri
[14:26] arjun (data-eng): heads up, we flipped FULL_REINDEX on the daily backfill
today, run started 13:30, holding way more connections than usual
[14:27] meera: killing that job
[14:31] priya: recovering. errors dropping
worksheet.md: claim · citation given · citation checks out? (open the artifact and look) · claim actually supported? · verdict (verified / miscited / unsupported / fabricated). Fill a row for every factual claim in the AI report. Distinguish carefully: a citation can be real while the claim over-reads it — "the v183 deploy caused the errors [deploys.log 14:02]" cites a true line but the line only proves a deploy happened.metrics.csv yourself: when did error rate and DB connections actually start degrading, relative to 14:02? Write one paragraph with three citations proving or refuting deploy causality. If your copilot's #1 hypothesis was the deploy, feed it your paragraph and record whether it revises or rationalizes.triage-report.md): severity, verified timeline, root cause with citation chain (config change 13:28 → cron start 13:30 → connection climb from 13:40 → saturation 13:55 → checkout starvation), contributing factors (warning alert routed to a low-priority channel; anchoring on the most recent deploy), and the action that actually resolved it. AI may critique your draft; the citations are yours."Timing matches" is the weakest form of incident evidence. Degradation that begins before the suspected change exonerates the change — one metrics lookup beats twenty minutes of channel consensus.
Vendor AI-SRE tools advertise cited investigations; the assessment tests whether you treat those citations as claims to verify, not answers to accept.
incident-2417/ with worksheet.md, triage-report.md, and the raw AI transcript. Self-grading rubric (pass = 8/10):
Real incident bundles are stuffed with client identifiers: hostnames, customer names in error messages, internal channel names. Follow-the-sun teams handing off to India shifts should maintain a redaction script (hostnames→role names, customers→tokens) so triage summaries can use approved AI tenancy; if no tenancy is approved, run a local model — triage summarization is well within local-model capability. The worksheet format is identical and doubles as handoff documentation across timezones.
FULL_REINDEX=true on the daily report-backfill (13:28); run #88 (13:30) held far more payments-db connections than normal, climbing from 13:35 and saturating the 100-connection pool by 13:55. Checkout shares that database; starved connections drove 5xx and latency.PaymentsDBConnectionsHigh warning fired into a low-priority channel and was seen 31 minutes late.