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

Helpers for decoding and inspecting `whiff/1` reports (string-keyed maps).

# `append_extractor_diag`

```elixir
@spec append_extractor_diag(map(), map()) :: map()
```

Append an extractor/analyzer diagnostic entry.

# `decode`

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

Decode JSON bytes from the NIF into a string-keyed map.

# `native_covered?`

```elixir
@spec native_covered?(map()) :: boolean()
```

True when native extraction appears to have run a covering extractor for the
identified format (not mere magic detection).

Low-confidence heuristic text hits without `extension_matches` are **not**
treated as covered — proprietary extensions often look like plain text to
upstream, and Elixir `:fallback` Whiffers must still run for those.

# `schema_version`

```elixir
@spec schema_version() :: String.t()
```

The schema identifier written to `whiff.schema`.

# `top_level_sections`

```elixir
@spec top_level_sections() :: [String.t()]
```

Stable top-level section names.

---

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