# `mix tack.quality`
[🔗](https://github.com/giggleton/pica/blob/v0.1.0/dev/mix/tasks/tack.quality.ex#L1)

The pre-commit quality gate, run as one command — the project's `mix quality` alias.

    mix quality            # locally: every step, formatting the tree first
    mix quality --check    # CI: the same steps minus the formatting write

Each step is its own `mix` subprocess with an explicit `MIX_ENV` where it needs one, so the env
never flips mid-gate (`mix test` builds in `:test`, the rest in `:dev` — separate `_build` dirs,
warmed by the compile steps first). It **stops at the first failing step** and exits non-zero,
so the failing step's output is the last thing printed and a `❌ … FAILED` banner is the final
line — legible even if the run is (wrongly) piped through `tail`.

**Run it bare — never pipe it through `tail`, `head` or `grep`.** A pipe hides the failing
step's output and, worse, makes the shell report the *pipe's* exit status (`0`), masking the
gate's non-zero failure. To iterate on one check, run that single `mix` task directly.

The steps come from the `quality_steps` project key in `mix.exs`; see `Tack.Quality` for
the shape, and the project's `CLAUDE.md` for what each step is for.

---

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