What can be checked automatically

Part of this catalog is already enforced by a lint rule, so it belongs in CI rather than in a review. The rest is multi-line behaviour spread over a file, which no linter can match and a person or an agent has to recognise. Knowing which half a migration falls into is most of deciding how to tackle it.

8 rules a linter already finds

Turn these on and stop reviewing them by hand. This catalog names the rule rather than reimplementing the check, the same way it points at guides rather than copying them.

All of them at once, in an eslint config:

114 shapes that need a person or a model

No package is installed for any of these, so nothing matches in a package.json either. They are stateful and spread over a file, which is why no lint rule covers them. An agent reading the code can, which is what the skill and the MCP server are for.

  • Accordions
  • Animating from JavaScript
  • Animating to height auto
  • Auto-growing textareas
  • Balanced headings
  • Base64 encoding
  • Cancelling async work
  • Carousels
  • Choosing a plural form
  • Colour manipulation
  • Copy and paste
  • Cross-tab messaging
  • Custom select menus
  • Date and time pickers
  • Element size queries
  • Enter and exit transitions
  • File pickers and drop zones
  • Focus trapping
  • Form validation
  • Fullscreen toggling
  • Generating UUIDs
  • Human-readable durations
  • jQuery
  • Keeping the screen awake
  • Knowing when a webfont has loaded
  • Light and dark theming
  • Masonry layouts
  • Modal dialogs
  • Multi-line text truncation
  • Mutexes and critical sections
  • Natural and locale-aware sorting
  • Passkeys in the browser
  • Prefetching the next page
  • Relative time formatting
  • Reordering a list by dragging
  • Saving a generated file
  • Scroll chaining and body scroll lock
  • Scroll-triggered animations
  • Scrolling an element into view
  • Sharing to other apps
  • Smooth scrolling and scroll-to-anchor
  • Stripping accents from text
  • Styled scrollbars
  • Tab visibility
  • Tooltips, dropdowns and popovers
  • Touch and pointer gestures

Not this tool's job

Three questions near this one, each better answered somewhere else. Reimplementing them here would be worse than pointing at them.

knip
Unused dependencies, exports and files. It reads npm scripts, config files and plugin names, which is what makes an "unused" claim trustworthy rather than a guess.
Biome useBaseline
The opposite direction to this catalog. It stops you using a feature before your target browsers have it, where this tells you a feature is finally old enough to replace a library.
eslint-plugin-compat
Checks calls against your browserslist. Useful alongside a finding here that reads as newly available.