# `Tempo.Schedule.Slot`
[🔗](https://github.com/kipcole9/tempo/blob/v0.20.0/lib/tempo/schedule/slot.ex#L1)

A solved task in a `Tempo.Schedule` — when the task is scheduled and
how much room it has to move.

`start`/`finish` are the *early* schedule (the earliest the task can
begin and end); `latest_start`/`latest_finish` are the *late* schedule
(the latest it can begin and end without making the plan infeasible).
A task is on the **critical path** when its early and late starts
coincide — it has zero slack, so any slip delays the whole project (a
task pinned by an anchor counts: it cannot move at all).

The late schedule and `critical?` are determined only when something
bounds how late the task can run — a deadline downstream, or an anchor
on the task itself. When nothing does, `latest_start`/`latest_finish`
and `critical?` are `nil`: the early start is known, but the task's
latest position is open.

# `t`

```elixir
@type t() :: %Tempo.Schedule.Slot{
  critical?: boolean() | nil,
  finish: Tempo.t() | nil,
  id: term(),
  latest_finish: Tempo.t() | nil,
  latest_start: Tempo.t() | nil,
  start: Tempo.t() | nil
}
```

---

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