# `Runic.Workflow.Events.JoinCompleted`
[🔗](https://github.com/zblanco/runic/blob/main/lib/workflow/events/join_completed.ex#L1)

Derived event emitted when a Join node has all required branches satisfied.

Produced during `apply_runnable/2`'s coordination finalization step,
NOT during `execute/2`. Contains the result fact (collected join values)
which gets logged into the graph and connected with a `:produced` edge.

During replay via `apply_event/2`, this event is folded directly without
re-deriving — the completion check only runs during live execution.

# `t`

```elixir
@type t() :: %Runic.Workflow.Events.JoinCompleted{
  join_hash: term(),
  result_ancestry: {term(), term()} | nil,
  result_fact_hash: term(),
  result_value: term(),
  weight: non_neg_integer()
}
```

---

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