# `Tempo.Schedule.ScheduledTask`
[🔗](https://github.com/elixir-tempo/tempo_network/blob/v1.0.0/lib/tempo/schedule/scheduled_task.ex#L1)

A task in a solved `Tempo.Schedule` — when it runs and how far it can
move.

`early` is the task's early schedule, the interval from the earliest
it can start to the earliest it can finish; `late` is its late
schedule, from the latest it can start to the latest it can finish
without making the plan infeasible. A task is on the **critical path**
when the two start together — it has no slack, so any slip delays the
whole project (a task with a fixed start counts: it cannot move at
all).

The late schedule and `critical?` are known only when something bounds
how late the task can run — a deadline downstream, or a fixed start on
the task itself. When nothing does, `late` and `critical?` are `nil`:
the early schedule is known, but the task's latest position is open.
A plan with no fixed start or `:not_before` date anywhere has no early
schedule either, and `early` is `nil` too.

# `t`

```elixir
@type t() :: %Tempo.Schedule.ScheduledTask{
  critical?: boolean() | nil,
  early: Tempo.t() | nil,
  id: term(),
  late: Tempo.t() | nil
}
```

---

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