Skip to main content
@reticlehq/eslint-plugin exists because conventions rot. Someone adds a mutation, forgets the signal, and every verdict for that flow quietly drops a grade. Nothing breaks, the tests still pass, the evidence just gets weaker. A lint rule is the only way a convention survives contact with a deadline. Version 2.8.0. Apache 2.0. Depends on @typescript-eslint/utils. Peer dependency: eslint >= 9.

Exports

The rules

reticle/require-signal-on-mutation

Warns when a store mutation happens without a mapped Reticle signal. Message id: mutationWithoutSignal. Text: store mutation without a mapped Reticle signal. Options (options[0], no additional properties):
The check is scoped per function: a mutation and its signal must live in the same function body.

reticle/no-internal-tags

Errors on internal design-doc reference codes and internal version strings appearing in comments, file names, directory names or test descriptions. Message id: internalTag, with a { tag } placeholder. No options. This one is mostly for contributors to Reticle itself, but the recommended config turns it on for everyone. One config, recommended:
Which is exactly:
recommended enables both rules, and no-internal-tags at error. An older README documented only the first rule, so the second can arrive as a surprise. Enable the rules individually if you want just the signal check.

Why signals are the strongest evidence

What a signal proves that a rendered pixel cannot.
Last modified on August 15, 2026