lq check
The only validation verb, and what each of its six checks is for.
lq checkOne command. It is what the editor hook runs after each change, what CLAUDE.md
tells an agent to run before claiming it is done, and what CI runs — the same
code path in all three, so a green local run means a green CI run.
There is deliberately no second verb. Five commands means an agent remembers zero.
The six checks
| Check | What it catches |
|---|---|
| Types | tsc --noEmit. Typed routes, the action builder's state machine, the branded tenant context. |
| Conventions | ESLint: the layering graph, the import ban list, and seven custom rules. |
| Formatting | Prettier. Separate because eslint-config-prettier turns those rules off — lint alone is blind to it. |
| Migrations | Whether the schema and the migration history have diverged. |
| Structure | Cross-file invariants: a table with no policy, a feature with no barrel or no test, an undocumented env var, a route entry that is a client component. |
| Manifest | That .lq/manifest.json is intact and records a template version. |
The Structure check is the one worth understanding, because it is the only one that can see a bug spanning two files. Every finding names the rule and the command that would have produced the right shape — agents act on that far more reliably than on a description of what is wrong.
In the edit loop
lq check --changedScopes to what differs from HEAD. This is what the PostToolUse hook runs, and
it is the thesis made literal: sub-second feedback while the agent is still
editing, rather than a review comment tomorrow.
It reports which checks it skipped. A skipped check has not passed — run the
full lq check before you believe anything.
When it fails
Read the message rather than working around it. Every rule exists because its violation is otherwise silent — that is the bar for adding one.
In particular, do not:
- add an
eslint-disablewithout a--reason (the reason is enforced) - reach for
anyor a non-null!to clear a type error - widen a rule so your code fits
If the fix is not obvious, the fixing-lq-check skill maps each rule code to a
recipe, and /fix-check walks an agent through it.
lq check passing does not mean your feature works. It means the shape is
right. Run your tests too — CLAUDE.md asks for both, and that is not
redundancy.