# `mix threadline.health.coverage`
[🔗](https://github.com/szTheory/threadline/blob/v0.5.0/lib/mix/tasks/threadline.health.coverage.ex#L1)

Shows trigger coverage as reported by `Threadline.Health.trigger_coverage/1`,
with a three-section table (default) or JSON output (`--json`).

Unlike `mix threadline.verify_coverage`, this task is a viewer — it ALWAYS
exits 0, even when uncovered tables exist. Use `mix threadline.verify_coverage`
for the positive-list CI gate.

## Usage

    mix threadline.health.coverage
    mix threadline.health.coverage --json
    mix threadline.health.coverage --schema=NAME

Default output: a three-section TABLE / STATUS / SOURCE table followed by
a `Coverage: N covered, M uncovered, K expected uncovered` summary line.

`--json` emits a JSON object with keys `covered`, `expected_uncovered`,
`schema`, `uncovered`. The `expected_uncovered` value is a list of
`{"table": ..., "source": "baseline" | "config"}` objects so adopters can
filter via `jq '.expected_uncovered[] | select(.source == "config")'`.

`--schema=NAME` validates NAME at the edge (regex + `pg_namespace` lookup)
and raises with `Mix.raise/1` on bad input. NAME must match
`~r/\A[a-z_][a-z0-9_]{0,62}\z/` (PostgreSQL identifier, conservative subset)
AND exist in `pg_namespace`. Default `"public"`.

---

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