# The request timeline in `jadpo dev`

`jadpo dev` records every request it serves and prints one line for each,
with its request id. `jadpo trace <request id>` shows that request's whole
timeline: the route, the caller, the actions and queries with their SQL,
rows and timings, the writes, the events emitted, the subscribers run, the
calls to outside services, and the outcome. It is like a development log
that also gives each query's source line. It is built from the spans, the
timed steps of a trace, that Jadpo already records
([Telemetry](telemetry.md)).

```text
$ jadpo dev
listening on http://localhost:3000
req_0b1e  POST /todos/0192…/complete   409 todo_mutation_conflict   41 ms
req_0b1f  GET /todos                   200   9 ms   3 queries

$ jadpo trace req_0b1e
POST /todos/0192…/complete   409 todo_mutation_conflict   41 ms   as user 0192…a7
  route    domains/planning/routes/todos.jadpo:31
  action   complete_todo                   domains/planning/actions/complete_todo.jadpo:4
    query  Todo.get           3 ms  1 row  SELECT … FROM todos WHERE id = $1 AND deleted_at IS NULL
    write  Todo.update        2 ms  0 rows (expected revision 7, found 8)
    fail   TodoMutationConflict           complete_todo.jadpo:9
  rolled back; no events emitted
```

## What the SQL shows

SQL is shown with placeholders. Its parameters follow the rule for a
failure's internal fields in logs ([Logging](logging.md)):
identifiers, numbers, enums, booleans and times are shown as values, and
text as a keyed hash, so you can tell two values apart without seeing
either.

## Where timelines are kept

The last 500 timelines are kept in `build/dev/`, which Jadpo generates and
you never commit. Production records the same spans and sends them through
OpenTelemetry ([Telemetry](telemetry.md)), so you
view them in whatever tool your team already uses.

## What gets flagged

A request that runs several queries for one call, or runs a query with no
index to use, is flagged on its line. These are the same problems the
query report flags, the report `jadpo check` writes to `build/report/`
([Tools for agents](tools-for-agents.md)).

## Provider calls in the timeline

Calls to a provider, an outside service such as Stripe, appear in the
timeline with their inputs and answers in full and where each answer came
from: `recording`, `generated`, `scripted` or `sandbox`
([Provider calls in development](provider-calls-in-development-jadpo-calls.md)).

An action can make several calls that change something at a provider.
For such an action, the timeline shows each step's state: recorded, sent,
answered, replayed or in doubt
([Several changing calls in one action](several-changing-calls-in-one-action.md)).
