# `Whiff.Merge`
[🔗](https://github.com/SinAnima/whiff-elixir/blob/main/lib/whiff/merge.ex#L1)

Deterministic merge of Elixir plugin patches into a native `whiff/1` report.

## Rules (v0.1)

* Preserve native `whiff.schema` / version and core sections.
* Never erase native `security` risk/secret/personal_data fields, `integrity`,
  `diagnostics`, or `embedded`.
* `embedded` patches are rejected.
* `metadata` / `format`: namespaced keys; collisions error unless override mode
  allows the declared field.
* `content`: keywords de-duplicated in deterministic order; scalars native-wins
  in `:augment`, plugin-wins in `:fallback`, declared fields in `:override`.
* Reject atoms, PIDs, structs, references; cap depth and string size.

# `mode`

```elixir
@type mode() :: :fallback | :augment | :override
```

# `merge`

```elixir
@spec merge(map(), map(), keyword()) :: {:ok, map()} | {:error, Whiff.Error.t()}
```

Merge a plugin patch into `report`.

---

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