# `Mnemosyne.Graph.Changeset`
[🔗](https://github.com/edlontech/mnemosyne/blob/main/lib/mnemosyne/graph/changeset.ex#L1)

Batched mutations for the knowledge graph.

A changeset accumulates node additions and link operations that can
be applied atomically to a `Mnemosyne.Graph`.

# `t`

```elixir
@type t() :: %Mnemosyne.Graph.Changeset{
  additions: [struct()],
  links: [{String.t(), String.t(), Mnemosyne.Graph.Edge.edge_type()}],
  metadata: %{required(String.t()) =&gt; Mnemosyne.NodeMetadata.t()}
}
```

# `add_link`

```elixir
@spec add_link(t(), String.t(), String.t(), Mnemosyne.Graph.Edge.edge_type()) :: t()
```

Records a typed link between two node IDs in the changeset.

# `add_node`

```elixir
@spec add_node(
  t(),
  struct()
) :: t()
```

Appends a node to the changeset's addition list.

# `merge`

```elixir
@spec merge(t(), t()) :: t()
```

Merges two changesets by concatenating their additions, links, and metadata maps.

# `new`

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

Creates an empty changeset.

# `put_metadata`

```elixir
@spec put_metadata(t(), String.t(), Mnemosyne.NodeMetadata.t()) :: t()
```

Associates metadata with a node ID in the changeset.

---

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