# `PgFlowDashboard.Migrations.Versions.V03`
[🔗](https://github.com/agoodway/pgflow/blob/v0.3.1/lib/pgflow_dashboard/migrations/versions/v03.ex#L1)

PgFlowDashboard migration version 3.

Bounds a run's `duration_ms` by `failed_at` so a failed run's displayed
duration stops growing. v02 fixed the step-level formula but left the
run-level one in `runs_with_progress` measuring against `NOW()` — a failed
run never gets a `completed_at`, so its duration climbed forever. See
`priv/pgflow_dashboard/sql/versions/v03/v03_up.sql` for the full rationale.

# `down`

```elixir
@spec down(keyword()) :: :ok
```

Rolls back this version's migration by executing the down SQL file.

# `up`

```elixir
@spec up(keyword()) :: :ok
```

Applies this version's migration by executing the up SQL file.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
