# `mix joby_kit.lint`
[🔗](https://github.com/jobycorp/joby_kit/blob/v0.2.0/lib/mix/tasks/joby_kit.lint.ex#L1)

Verifies the JobyKit wrapper contract for this app.

Checks every component registered in the host's `DesignManifest`:

  * Every entry points at a real Phoenix function component
    (`:manifest_drift`).
  * Every wrapper carries `data-component="Module.function"` on its
    root element (`:missing_data_component`).
  * Every wrapper declares `attr :rest, :global`
    (`:missing_rest_global`).

Plus two sweeps across the host's source tree:

  * any function that carries `data-component=...` but is not
    registered in the manifest (`:unregistered_wrapper`) — i.e.
    wrappers invisible to `/design.json` and to agents.
  * any raw `<button>`/`<input>`/`<textarea>`/`<select>` in `.heex`
    or `~H` blocks outside a wrapper definition (`:raw_html_primitive`).
    Silence per-line with `<%!-- jobykit:allow-raw-html --%>` (heex)
    or `# jobykit:allow-raw-html` on the preceding `.ex` line.

## Usage

    mix joby_kit.lint
    mix joby_kit.lint --format json
    mix joby_kit.lint --manifest MyAppWeb.DesignManifest
    mix joby_kit.lint --paths "lib/**/components/**/*.ex"
    mix joby_kit.lint --strict      # warnings count as failures

## Options

  * `--manifest` — manifest module to lint. Defaults to
    `<App>Web.DesignManifest` derived from `mix.exs`.
  * `--paths` — glob pattern(s) to scan for unregistered wrappers
    and raw HTML primitives. Repeatable. Defaults to `lib/**/*.ex`
    and `lib/**/*.heex`.
  * `--format` — `text` (default) or `json`.
  * `--strict` — exit non-zero on warnings as well as errors.

## Exit codes

  * `0` — clean.
  * `1` — at least one error (or any violation under `--strict`).

---

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