# `Gust.Application`

Starts the Gust OTP application and wires the supervision tree.

Gust orchestrates DAG execution, scheduling, and runtime infrastructure. This
module builds the child list based on the environment and runtime flags so the
right workers are started (or skipped) for the current mode.

## Environment behavior

### Test
In `test`, DAG runtime workers are disabled to keep test runs fast and
deterministic. The DAG loader, cron scheduler, and run restarter are not
started, so tests can use Repo and Ecto helpers without background execution.

### Dev
In `dev`, Gust enables live DAG reloading. The file monitor watches the
configured `dags/` directory and triggers reloads on changes.

### Prod
In `prod`, the full runtime is enabled: DAG loading, cron scheduling, run
restarts, supervisors, and core infrastructure such as Registry, Repo, Vault,
and PubSub.

## Boot control (`PHX_SERVER`)

Gust only boots the DAG runtime when the Phoenix server is running. This keeps
`iex -S mix` sessions safe and quiet by default.

The decision is based on:

* `Application.get_env(:gust, :boot_dag)`
* the `PHX_SERVER` environment variable

If `PHX_SERVER` is `"true"` or `"1"`, Gust assumes a web server is running and
starts the full DAG subsystem. Otherwise, DAG orchestration stays disabled.

## DAG folder validation

Outside of `test`, Gust validates that the configured DAG folder exists at
startup. If it is missing, the application fails fast.

---

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