# Incident log timeline explorer

> Trace an interleaved gateway, checkout and ledger log stream. Separate the first timeout symptom from the underlying lock wait and non-idempotent retry.

- Canonical HTML: [https://unrust.dev/tools/async-log-timeline-explorer](https://unrust.dev/tools/async-log-timeline-explorer)
- Markdown representation: [https://unrust.dev/tools/async-log-timeline-explorer/index.md](https://unrust.dev/tools/async-log-timeline-explorer/index.md)

## How to use the tool

Select the gateway timeout budget, downstream ledger commit duration and retry policy. Inspect how the interleaved timestamps shift and compare the HTTP status seen by the caller against the number of committed writes.

## Worked example

When the gateway times out at 400ms while the ledger write takes 650ms, the timeout warning at 400ms is the first caller-visible symptom, not the root cause. Retrying immediately without an idempotency key starts a second transaction while the first is still committing, producing two ledger writes.

```text
10:14:00.120 [LEDGER] WARN: waiting on row lock; commit will take 650ms
10:14:00.400 [GATEWAY] WARN: upstream timeout after 400ms on attempt=1
```

Inputs stay in your browser. These are open learning examples, not scored diagnostic drills.

[Separate the first symptom from the root cause in service logs](https://unrust.dev/blog/trace-first-symptom-vs-root-cause-in-logs/index.md)

[RFC 9110: HTTP idempotent methods and retry safety](https://httpwg.org/specs/rfc9110.html#name-idempotent-methods)

## Practice separating symptoms from root causes

In a log stream, the gateway logs a 504 timeout at 400ms and the database logs a slow commit at 665ms. Why is raising the retry count without an idempotency key dangerous?

A caller timeout cancels the wait on the client side, not necessarily the in-flight work on the downstream database. Retrying a non-idempotent write while the first attempt is still holding locks or committing can duplicate the side effect.

Original open example, not a scored drill. Close tools before an unassisted session.

[Practice reviewing retry and timeout logic](https://unrust.dev/guides/reviewing-retry-logic/index.md)

[Take the free diagnostic](https://unrust.dev/diagnostic/index.md)
