The hardest part of early incident response is not finding evidence — it is ordering it. Three log sources with three clock skews, three timestamp formats, and three notions of "the event" have to become one narrative before anyone can reason about the attack.
Tier: Core · Workflow area: Incident response, DFIR & CTI
This playbook uses an LLM to merge and sequence disparate logs into a timeline, with a hard rule: every event in the narrative must cite the raw log line it came from, and unsupported connective tissue is flagged, not invented.
Skip AI when a single source already tells the whole story in order — reading it is faster than merging.
Normalize timestamps to one zone before merging. Clock skew is the silent killer of timelines. Convert every source to UTC (or one agreed zone) and note the skew you corrected for each source, so the model orders on a common clock.
Provide the raw logs as citable evidence. Paste the (sample/redacted) log excerpts with a source tag on each block. The model must reference these lines; it cannot order what it cannot see.
Prompt for a cited, gap-aware timeline.
Reconstruct a single chronological timeline from these log sources
(sample data, all timestamps already normalized to UTC). For each event:
- timestamp | source | what happened | RAW LINE it came from.
Order strictly by timestamp. Do NOT infer causation between events unless the
logs show it; if you believe two events are linked but the logs do not prove
it, put it under "Hypotheses (unconfirmed)" separately.
List any time gaps where you would expect evidence but see none.
[EDR] ...
[FIREWALL] ...
[AUTH] ...
Expected output: a single ordered table where every row quotes a raw line, plus separate "Hypotheses" and "Gaps" sections. The separation keeps proven facts apart from the model's storytelling.
Verify each event against its raw line. Walk the timeline and confirm every quoted raw line actually exists in the source and actually says what the summary claims. The citation makes this a quick lookup rather than a re-investigation.
Investigate the gaps and hypotheses yourself. The "Gaps" list points you at missing telemetry to go collect; the "Hypotheses" list is where you apply human judgment about causation. Neither goes into the confirmed timeline until you prove it.
Promote only verified events to the case timeline. The authoritative timeline contains only rows you re-confirmed against raw evidence.
A model orders events fluently and will invent the causal glue between them. Keep proven, cited events strictly separate from unconfirmed hypotheses — the narrative is only as good as its worst-verified line.
Incident logs are among the most sensitive data a client owns — they describe a live or recent breach. Run the reconstruction on a local Ollama model or the client's sanctioned endpoint inside their environment, never a personal account. Redact hostnames, usernames, and internal IPs to stable placeholders before prompting; timeline ordering depends on timestamps and event structure, which survive redaction. Do the timestamp normalization with local DFIR tooling so raw times never leave the boundary. Keep the confirmed timeline in the client's case system, and treat the "Gaps" list as a collection plan for their responders, not something to resolve with assumptions.