# `Nous.Workflow.Edge`
[🔗](https://github.com/nyo16/nous/blob/v0.17.1/lib/nous/workflow/edge.ex#L1)

A directed edge connecting two nodes in a workflow graph.

Edges define execution flow between nodes. They can be unconditional
(sequential), conditional (evaluated against workflow state), or
default (fallback when no conditional edge matches).

## Edge Types

| Type | Behavior |
|------|----------|
| `:sequential` | Always followed (A -> B) |
| `:conditional` | Followed when `condition.(state)` returns `true` |
| `:default` | Followed when no sibling conditional edges match |

## Examples

    Nous.Workflow.Edge.new(%{
      from_id: "search",
      to_id: "synthesize",
      type: :sequential
    })

    Nous.Workflow.Edge.new(%{
      from_id: "evaluate",
      to_id: "publish",
      type: :conditional,
      condition: fn state -> state.data.quality >= 0.8 end
    })

# `edge_type`

```elixir
@type edge_type() :: :sequential | :conditional | :default
```

# `t`

```elixir
@type t() :: %Nous.Workflow.Edge{
  condition: (Nous.Workflow.State.t() -&gt; boolean()) | nil,
  from_id: String.t(),
  id: String.t(),
  label: String.t() | nil,
  metadata: map(),
  to_id: String.t(),
  type: edge_type()
}
```

# `new`

```elixir
@spec new(map()) :: t()
```

Create a new workflow edge.

Required: `:from_id` and `:to_id`.

## Examples

    iex> edge = Nous.Workflow.Edge.new(%{from_id: "a", to_id: "b"})
    iex> edge.type
    :sequential
    iex> is_binary(edge.id)
    true

---

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