# `Runic.Workflow.ComponentAdded`
[🔗](https://github.com/zblanco/runic/blob/main/lib/workflow/component_added.ex#L1)

Serializable construction event used to rebuild a workflow from its log.

Executable components use `closure`; nested workflows use a versioned
`workflow_definition` that retains their boundary ports and child build log.
`input_ports` and `output_ports` retain contracts applied outside the source
expression that originally constructed an executable component.
The `source` and `bindings` fields remain as a compatibility path for older
component events.

# `t`

```elixir
@type t() :: %Runic.Workflow.ComponentAdded{
  bindings: map(),
  closure: Runic.Closure.t() | nil,
  connections: [Runic.Workflow.Connection.t()] | nil,
  hash: term(),
  input_ports: keyword() | nil,
  name: String.t() | atom(),
  output_ports: keyword() | nil,
  source: term() | nil,
  to: term(),
  workflow_definition: Runic.Workflow.Definition.t() | nil
}
```

---

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