# `mix excessibility.digest.compare`
[🔗](https://github.com/lessthanseventy/excessibility/blob/v0.20.0/lib/mix/tasks/excessibility_digest_compare.ex#L1)

Structurally compare two `digest.json` runtime-evidence artifacts.

Reads a `base` and a `head` `digest.json` (as produced by
`mix excessibility.debug`) and reports the structural delta between them:
query fingerprints added/removed/count-changed, plan changes, assign
`term_bytes` deltas, and coverage notes (views/callbacks observed plus
measurement-scope differences).

This task reports evidence only. It emits **no merge verdict and no severity
beyond advisory**, and it **always exits 0** so it can never fail CI. Treat it
as a supplemental, human/AI-readable diff of runtime evidence — not a gate.

## Usage

    # Human-readable markdown (default)
    $ mix excessibility.digest.compare --base base/digest.json --head head/digest.json

    # Machine-readable JSON
    $ mix excessibility.digest.compare --base base/digest.json --head head/digest.json --format json

## Options

- `--base PATH` - Path to the baseline `digest.json` (required)
- `--head PATH` - Path to the candidate `digest.json` (required)
- `--format markdown|json` - Output format (default: `markdown`)

Because a change in *what was measured* is never reported as a regression,
when the two digests measured different signals (e.g. one had Ecto configured
and the other did not) the difference is surfaced as a coverage note rather
than a fabricated query/assign change.

---

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