# HARN-LNT-059 — project rule-engine or native lint rule

## What it means

A project-supplied rule matched here. This is not a built-in lint: it is a
structural rule (a `*.toml` pattern from the project's `[rules] ruleDirs`) run
through the linter via the rule engine (`harn-rules`), a `.lint.harn` script
rule loaded from `ruleDirs`, or a trusted native rule library loaded from
`[rules] nativeRuleDirs`.

The message, severity, and any suggested fix come from the matched rule. The
diagnostic's reported rule id is the project rule's id, so you filter it with
`disable_rules` (or `[lint]` config) by that id, exactly like a built-in.

## Why it fires

The project declared one or more rule directories:

```toml
[rules]
ruleDirs = ["rules"]
nativeRuleDirs = ["native-rules"]
```

and a rule in one of them matched this code. Declarative rules pair a structural
`pattern` with a `message`; script rules return findings from `lint(source)`;
native rules emit diagnostics through the `harn_lint::native` ABI. Rules that
carry a fix surface it as a machine-applicable lint fix.

## How to fix

- Address the issue the rule describes (see the rule's `message`).
- If the rule carries a fix, `harn lint --fix` applies it. Declarative codemod
  fixes can also be applied by `harn codemod`.
- To silence it, disable the rule by its id, or remove/adjust the rule in your
  `ruleDirs` / `nativeRuleDirs`.

## See also

- The rule engine: `harn scan`, `harn codemod`, and the `harn-rules` skill.
- Project rule discovery: `[rules] ruleDirs` and `nativeRuleDirs` in
  `harn.toml`.
