Commit Graph

18 Commits

Author SHA1 Message Date
Aiden Bai 8c2f03aea9 feat: make React cleanup first-class (#1624)
* feat: make React cleanup first-class

* refactor: remove editor integrations

* fix: harden React cleanup analysis

* fix: detect default export duplication roots

* fix: unwrap typed duplication roots

* feat: add opt-in project analysis rules

* fix: canonicalize project analysis paths

* fix: harden project analysis precision

* fix: recognize cross-platform project entries

* fix: eliminate project analysis false positives

* fix: harden project analysis reachability

* fix: canonicalize project analysis inputs

* fix: resolve project analysis review findings

* fix: eliminate residual project analysis false positives

* fix: ignore commented registry previews

* fix: eliminate project analysis false positives

* fix: normalize project analysis paths across platforms

* fix: normalize Nextra theme path identity

* test: canonicalize convention fixture paths

* fix: preserve project analysis provenance

* fix: harden project analysis precision

* fix: honor project analysis boundaries

* fix: recognize conditional config plugins

* fix: recognize executable project references

* fix: recognize Stencil tool contracts

* fix: recognize nested tool references

* fix: recognize project setup contracts

* fix: recognize generated and local package consumers

* fix: recognize static template package references

* fix: recognize nested package runtime contracts

* fix: close project analysis parser gaps

* fix: parse project conventions structurally

* refactor: replace structural scanners with parsers

* fix: recognize functional Next CSS config

* fix: close remaining project analysis gaps

* fix: apply tag filters to project analysis

* fix: preserve embedded source positions

* fix: validate static config helper bindings

* fix: bound runtime directory discovery

* fix: close final dependency analysis gaps

* fix: preserve declaration dependency references

* chore: refresh generated rule metadata

* fix: make project analysis portable and bounded

* test: stabilize cleanup scaling guard

* refactor: parse project syntax with oxc

* fix: normalize native filesystem paths

* fix: separate path identity from report paths

* fix: match project files by filesystem identity

* fix: match build glob files by package identity

* fix: use native path keys for file identity

* fix: canonicalize Windows file identities

* fix: canonicalize package ownership paths

* test: inspect Windows path identities

* test: trace Windows package ownership

* fix: keep Windows path identities consistent

* fix: classify test contracts by normalized path

* fix: scope test contracts by canonical package path

* fix: keep test package graphs conservative

* test: keep React complexity advisory
2026-08-13 16:26:08 -07:00
Aiden Bai bea01b8cf5 feat(r3f): add material rendering diagnostics (#1633) 2026-08-12 15:40:07 -07:00
Aiden Bai 86add14268 fix: honor project scope in Git hook scans (#1516) 2026-07-29 16:54:20 -07:00
Aiden Bai f5f13b877a feat(rules): add version-aware React Router diagnostics (#1411) 2026-07-20 13:43:35 -07:00
Aiden Bai e6a155763e feat(plugin): detect Zustand state mutation (#1410)
* feat(plugin): detect Zustand state mutation

* fix(rule): follow Zustand snapshot branches

* fix(rule): skip imperative Zustand caches

* fix(rule): honor Zustand replacement uncertainty

* fix(rule): scope Zustand snapshot notifiers

* fix(rule): follow conditional Zustand notifiers

* fix(rule): track nested Zustand snapshot paths

* fix(rule): analyze Zustand setState updaters

* fix(rule): preserve Zustand notifier provenance

* fix(rule): respect Zustand rebind branches

* fix(rule): match nested Zustand branches

* fix(rule): close Zustand control-flow gaps

* fix(rule): order Zustand notifiers

* fix(rule): gate conditional Zustand notifiers

* fix(rule): track nested Zustand alias spreads

* fix(rule): connect bound Zustand updater reads

* fix(rule): preserve nested Zustand notifier paths

* fix(rule): gate Immer store updaters

* fix(rule): prove Zustand collection mutations

* fix(rule): order nested Zustand notifications
2026-07-19 23:54:49 -07:00
Aiden Bai cc2d1685ee feat(core): add Zustand rule foundation (#1399)
* feat(core): detect Zustand version capabilities

* docs(rules): research Zustand rule portfolio

* refactor(plugin): centralize Zustand provenance

* fix(rules): share precise Zustand store shape resolution

* fix(rules): resolve split curried Zustand factories
2026-07-19 23:43:26 -07:00
Aiden Bai 61bf03eedc feat(rules): add MobX diagnostics foundation (#1405) 2026-07-19 21:30:10 -07:00
Aiden Bai 1839566481 fix(baseline): match stable diagnostic evidence (#1376) 2026-07-18 00:54:04 -07:00
Aiden Bai e632f8a6c4 fix(diagnostics): distinguish same-site occurrences (#1257) 2026-07-14 04:24:24 -07:00
Aiden Bai 938008119a feat(report): add versioned JSON v3 metadata (#1120)
* feat(report): add versioned JSON v3 metadata

Expose deterministic diagnostic identities and exact scan completeness while preserving v1 and v2 decoding.

* fix(report): make v3 identities and coverage exact

Keep workspace diagnostics distinct and align JSON completeness, telemetry verdicts, and fallback output with the versioned report contract.
2026-07-10 23:49:19 -07:00
Aiden Bai 451beeb284 feat(rules): add 3 mined platform/correctness rules (batch 2) (#828)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Rayhan Noufal Arayilakath <me@rayhanadev.com>
2026-06-16 00:06:34 -04:00
Aiden Bai 8908f98d02 feat(rules): add 8 mined correctness, performance, a11y, and security rules (#826)
* feat(rules): add 8 mined correctness, performance, a11y, and security rules

Mined from a 12-cluster pass over the design/engineering brain and
synthesized into docs/rule-candidates-backlog.md. Ships the highest-signal,
lowest-noise batch, each with adversarial + FP-regression tests:

- no-call-component-as-function (Bugs)
- no-create-ref-in-function-component (Bugs)
- no-async-effect-callback (Bugs)
- no-json-parse-stringify-clone (Performance)
- img-missing-dimensions (Performance)
- no-img-lazy-with-high-fetchpriority (Performance)
- dialog-has-accessible-name (Accessibility)
- auth-token-in-web-storage (Security)

Adds the shared has-jsx-spread-attribute util and registers the three
in-house ported-bucket rules in RULES_NOT_PORTED_FROM_EXTERNAL.

* fix(rules): drop img-missing-dimensions; make component rules shadow-safe

- Drop `img-missing-dimensions`: width/height attributes are only one of
  several valid ways to reserve space (CSS aspect-ratio, container sizing),
  and the authoritative signal lives in stylesheets a static linter can't
  see. This is a runtime check (Lighthouse `unsized-images`), so a syntax
  rule would false-positive on any CSS-sized image.
- `no-call-component-as-function`: resolve the callee through its scope
  symbol instead of by name, so a parameter/local shadowing a component
  name is no longer flagged. The component signal is the binding's
  declaration (same-file component returning JSX) or an imported binding
  also rendered as JSX.
- `no-create-ref-in-function-component`: skip a shadowing local `createRef`
  (only flag React's import / `React.createRef`).
- Adds shadow-safety regression tests for both.

* fix(rules): tag no-call-component-as-function test-noise (eval finding)

An OSS eval sweep (react-use, radix primitives, excalidraw, mantine;
~2.8k diagnostics) showed every real-world hit of this rule was a test
render-helper (`render(Wrapper({...}))` in `.test.tsx`/`.story.tsx`) —
harmless for hookless wrappers and the dominant firing surface. Tag it
`test-noise` so it skips test/story/playground files and only nags
shipped code. The sweep also confirmed dialog-has-accessible-name (2 real
a11y bugs in excalidraw) and no-create-ref-in-function-component (1 real
bug in a mantine story) as true positives with zero false positives.
2026-06-15 05:13:44 -07:00
Aiden Bai eacdcf2e65 Add project-level security scan rules (#744)
Co-authored-by: Aiden Bai <aiden.bai05@gmail.com>
Co-authored-by: Rayhan Noufal Arayilakath <me@rayhanadev.com>
2026-06-13 03:57:25 -07:00
Rayhan Noufal Arayilakath 89215753d3 fix: remove unnecessary docs 2026-06-01 04:24:39 -07:00
Ray Arayilakath bdb9e36b0e feat: add 10 React Native & Expo diagnostic rules (#625)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-01 07:23:41 -04:00
Ray Arayilakath 444fbeb760 feat: add skills and docs for writing new rules (#495)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-27 02:41:23 -04:00
Aiden Bai 31141f03eb fix 2026-05-24 00:01:40 -07:00
Aiden Bai eecd90cc3d feat(cli): add native agent hook installer (#452) 2026-05-23 23:01:25 -07:00