# `WorkflowStem.Loader`
[🔗](https://github.com/fosferon/workflow_stem/blob/main/lib/workflow_stem/loader.ex#L1)

Loads and compiles workflow specs (maps) into an internal IR (data).

This does not generate Elixir modules. For UI-authored workflows loaded from disk,
the stem interprets the IR using static profile pipelines.

# `compile_to_ir`

```elixir
@spec compile_to_ir(WorkflowStem.Types.spec()) ::
  {:ok, WorkflowStem.Types.ir()} | {:error, term()}
```

# `get_or_compile`

```elixir
@spec get_or_compile(
  WorkflowStem.Types.tenant_id(),
  WorkflowStem.Types.workflow_handle(),
  map()
) ::
  {:ok, WorkflowStem.Types.ir()} | {:error, term()}
```

# `load_from_artifact`

```elixir
@spec load_from_artifact(
  WorkflowStem.Types.tenant_id(),
  WorkflowStem.Types.workflow_handle(),
  map()
) ::
  {:ok, WorkflowStem.Types.spec()} | {:error, term()}
```

# `validate_spec`

```elixir
@spec validate_spec(WorkflowStem.Types.spec()) :: :ok | {:error, term()}
```

---

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