You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
+⚡ Deploy completed for billing-worker version v2.4.1 · deployment-controller
109
+
```
110
+
111
+
```bash
92
112
raglogs ask 'why did stripe fail?'
93
113
```
94
114
@@ -107,12 +127,11 @@ raglogs ask 'why did stripe fail?'
107
127
108
128
`explain` answers **what happened**.
109
129
`timeline` shows **how it unfolded**.
130
+
`compare` shows **what changed**.
110
131
111
-
Together they work like `git log` and `git blame` — but for incidents.
132
+
Together they work like `git log`, `git blame`, `git diff` — but for incidents.
112
133
113
-
Both outputs are fully deterministic. No LLM required.
114
-
115
-
`ask` answers **questions you didn’t think to ask ahead of time**.
134
+
All three outputs are fully deterministic. No LLM required.
116
135
117
136
---
118
137
@@ -158,6 +177,8 @@ raglogs init
158
177
raglogs ingest ./sample_data/sample_incident
159
178
raglogs explain --since 1h
160
179
raglogs timeline --since 2h
180
+
raglogs compare --since 30m --baseline 24h
181
+
raglogs ask 'why did stripe fail?'
161
182
```
162
183
163
184
Or with Make:
@@ -361,6 +382,65 @@ No LLM required. The timeline is assembled entirely from cluster timestamps and
361
382
362
383
---
363
384
385
+
### `raglogs compare`
386
+
387
+
Diffs two time windows by their cluster sets. Shows exactly which error patterns appeared, disappeared, intensified, or resolved between a current window and a baseline.
`--since 30m --baseline 24h` compares the last 30 minutes against the equivalent 30-minute window from 24 hours ago — the most useful form during an active incident.
400
+
401
+
| Flag | Description |
402
+
|---|---|
403
+
|`--since`| Incident window size, e.g. `30m`, `1h`|
404
+
|`--baseline`| Offset to baseline window, e.g. `24h`, `7d`|
405
+
|`--window-a-from/to`| Explicit start/end for window A (ISO 8601) |
406
+
|`--window-b-from/to`| Explicit start/end for window B (ISO 8601) |
407
+
|`--service`| Filter both windows to one service |
408
+
|`--env`| Filter both windows to one environment |
409
+
|`--format`|`text` or `json`|
410
+
411
+
**Output sections**
412
+
413
+
| Symbol | Meaning |
414
+
|---|---|
415
+
|`+`| New cluster — present in A, absent in B |
416
+
|`-`| Disappeared — present in B, gone in A |
417
+
|`↑`| Increased — in both, count grew by more than 50% |
418
+
|`↓`| Decreased — in both, count shrank by more than 50% |
419
+
|`+⚡`| New trigger — deploy or restart only seen in A |
420
+
|`-⚡`| Dropped trigger — deploy or restart only seen in B |
421
+
422
+
**Output**
423
+
424
+
```
425
+
Incident comparison
426
+
427
+
Window A (now): 2026-03-16 15:17:42 UTC → 2026-03-16 15:47:42 UTC
428
+
Window B (baseline): 2026-03-15 15:17:42 UTC → 2026-03-15 15:47:42 UTC
429
+
430
+
New error clusters
431
+
+ Stripe signature verification failed for endpoint /webhooks/stripe 86 events
432
+
+ POST /api/checkout 500 Internal Server Error — upstream billing error 20 events
+⚡ Deploy completed for billing-worker version v2.4.1 · deployment-controller
438
+
```
439
+
440
+
Individual webhook retry events (`evt_XXXXXX`) and queue-depth lines are deduplicated into single entries before diffing. No LLM required.
441
+
442
+
---
443
+
364
444
### `raglogs clusters`
365
445
366
446
Lists the top log clusters in a time window ranked by importance score. Useful for exploration and understanding dominant event families without running a full explain.
@@ -597,7 +677,7 @@ Evidence Assembly
597
677
LLM (optional) or Deterministic Templates
598
678
│
599
679
▼
600
-
Incident Summary + Timeline
680
+
Incident Summary · Timeline · Diff
601
681
```
602
682
603
683
### Normalization
@@ -651,6 +731,10 @@ A trigger candidate is promoted to "likely trigger" when it precedes the primary
651
731
652
732
Secondary clusters are classified by message content: queue/backlog growth becomes `symptom`, 500 errors and latency spikes become `effect`. Repeated webhook retry events (individual `evt_XXXXXX` lines) are deduplicated into a single count. Effects that appear to have started before the primary error — due to data noise — are floored to the primary's first occurrence to preserve causal ordering.
653
733
734
+
### Window diffing
735
+
736
+
`raglogs compare` runs clustering independently on both windows, then diffs the resulting fingerprint sets. Before diffing, each cluster set is collapsed: all `evt_XXXXXX` retry clusters merge into a single entry, and all queue-depth lines merge into one. The collapsed maps are then diffed by fingerprint, with counts compared to determine direction (new, disappeared, increased, decreased). Trigger candidates are normalized by message prefix to handle version strings, so `v2.4.1` and `v2.3.9` both resolve as "deploy" without creating spurious diffs.
737
+
654
738
### Confidence scoring
655
739
656
740
Confidence is derived from measurable signals, not from LLM output:
0 commit comments