Commit Graph

1536 Commits

Author SHA1 Message Date
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 6fcd9c9576 feat(plugin): detect eager Zustand get calls (#1407)
* feat(plugin): detect eager Zustand get calls

* fix(rule): cover eager async Zustand reads

* fix(rule): model Zustand async suspension paths

* fix(rule): follow eager Zustand helper calls
2026-07-19 23:51:17 -07:00
Aiden Bai 7eca0eebf9 feat(rule): detect whole Zustand store subscriptions (#1398)
* feat(plugin): detect whole Zustand subscriptions

* fix(rule): cover traditional Zustand stores

* fix(rule): detect imported Zustand store creators
2026-07-19 23:47:57 -07:00
Aiden Bai 8e5ae45dd3 feat(rules): detect unstable Zustand selector results (#1395)
* feat(rules): detect unstable Zustand selector results

* fix(rules): tighten Zustand selector provenance

* fix(rules): gate fresh Zustand selectors to v5

* fix(rules): harden Zustand selector gating

* fix(rule): respect Zustand v5 equality APIs

* fix(rule): harden Zustand selector analysis

* fix(rule): prove Zustand selector collection shapes

* test(rule): cover split curried Zustand stores

* fix(rule): classify Object collection helpers
2026-07-19 23:44:55 -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 f4aa8214bf feat(rules): add Remotion correctness checks (#1400) 2026-07-19 19:35:47 -07:00
Aiden Bai 5774353907 feat(rules): detect Valtio snapshot reads in callbacks (#1397)
* feat(rules): detect Valtio snapshot reads in callbacks

* fix(rules): gate Valtio callback checks by dependency

* fix(rules): follow deferred Valtio callback aliases

* fix(rules): require supported Valtio version
2026-07-19 07:01:38 -07:00
Aiden Bai a4eaeddefe feat(rules): detect Valtio proxy reads during render (#1396) 2026-07-19 06:44:56 -07:00
Aiden Bai 90e794f76b test: cover ref mutation inline suppression (#1409) 2026-07-19 05:25:30 -07:00
Aiden Bai 3598138c7b Scale eval corpus and tighten diagnostics (#1403)
* scale eval corpus and tighten diagnostics

* fix review and Windows eval failures
2026-07-19 04:13:13 -07:00
Aiden Bai 88114a2332 Revert "NEW_RULES: Add rule analysis foundation" (#1401)
Reverts #1338 in full.
2026-07-19 03:16:55 -07:00
Aiden Bai 3018538b7c NEW_RULES: Add rule analysis foundation (#1338)
Replace aggregate PR #1000 with the reviewed NEW_RULES stack, including workspace capability aggregation and stable performance regression coverage.
2026-07-19 02:56:31 -07:00
Aiden Bai 7c9dbeda0d feat(evals): add Daytona corpus parity runner (#1384) 2026-07-19 00:21:46 -07:00
Aiden Bai 21221c2d4b fix(rule): preserve effect cleanup ownership (#1394) 2026-07-18 20:55:36 -07:00
Aiden Bai b4556e31d8 fix(rules): resolve confirmed brain false positives (#1388)
* fix(rules): resolve brain false positives

* fix(security): bound env template matching

* fix(rules): cover rendering and redirect edge cases
2026-07-18 05:10:48 -07:00
Aiden Bai a667b45907 fix: preserve external subscription hook provenance (#1323)
* fix(rule): preserve external hook result provenance

* fix(rule): harden external hook result provenance

* fix(rule): address external hook alias edge cases

* fix(effects): recognize external visibility signals

* fix: align local external store provenance

* fix: preserve external state provenance boundaries

* fix: gate local external store provenance
2026-07-18 03:15:59 -07:00
Aiden Bai b8529619bd fix(rule): preserve external location invalidation state (#1311)
* test(rule): capture external location invalidation

* fix(rule): preserve external location invalidators

* fix(rule): prove external location invalidation

* fix(rule): require definite listener removal

* fix(rule): unwrap location listener options

* fix(rule): avoid caching cyclic mutation misses

* fix(rule): preserve listeners with unknown capture

* fix(rule): preserve listeners across suspension

* fix(rule): harden deferred invalidation provenance

* fix: batch effect location invalidation
2026-07-18 03:06:57 -07:00
Aiden Bai fe241a9723 fix(no-effect-chain): preserve stable callback precision (#1322)
* fix(no-effect-chain): follow stable local callbacks

* fix(no-effect-chain): harden stable callback analysis

* fix(no-effect-chain): preserve returned callback chains

* fix(no-effect-chain): unwrap optional cleanup returns

* fix(no-effect-chain): follow concise cleanup returns

* fix(no-effect-chain): preserve stable callback precision

* test(no-effect-chain): avoid wall-clock CI gate

* fix: reject defaulted global namespace aliases
2026-07-18 02:55:07 -07:00
Aiden Bai 82c4a125c5 fix(rule): match legacy media query listener cleanup (#1327) 2026-07-18 02:36:55 -07:00
Aiden Bai 26b4a0ceb1 fix(no-effect-chain): recognize lazy DOM ref Maps (#1325)
* test(no-effect-chain): capture lazy DOM ref maps

* fix(no-effect-chain): prove lazy DOM ref maps
2026-07-18 02:32:49 -07:00
Aiden Bai a2f9bf42c0 fix(a11y): compose global ARIA role properties (#1329) 2026-07-18 02:31:57 -07:00
Aiden Bai 5332cb66cf fix: match nested listener cleanup (#1380)
* fix: match nested listener cleanup

* fix: harden projected listener cleanup matching

* fix: distinguish listener capture identities

* fix: require exhaustive replayed cleanup

* fix: preserve additive cleanup collections

* fix: scan cleanup mutations structurally

* fix: accept named projected cleanup

* fix: reject overwritten cleanup entries

* fix: accept projected bulk listener cleanup
2026-07-18 02:22:18 -07:00
Aiden Bai f5f6a79ba2 fix: make set-state-in-effect advisory (#1381) 2026-07-18 02:21:42 -07:00
Aiden Bai c9f2c4be53 fix: detect imported React 19 context values (#1379) 2026-07-18 02:21:16 -07:00
Aiden Bai d9700556d1 fix(rules): guideline audit — compiler gates, capability fixes, message honesty across 15 rules (#1369)
Co-authored-by: Aiden Bai <aiden.bai05@gmail.com>
2026-07-18 01:03:13 -07:00
Aiden Bai 1839566481 fix(baseline): match stable diagnostic evidence (#1376) 2026-07-18 00:54:04 -07:00
github-actions[bot] 78189225ae chore: version packages (#1378) 2026-07-17 23:39:46 -07:00
Aiden Bai eb2d687503 fix: preserve production routes in health checks (#1377) 2026-07-17 22:32:52 -07:00
github-actions[bot] c0d9d385cd chore: version packages (#1307)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-17 21:27:09 -07:00
Aiden Bai 2450582318 fix: exclude test diagnostics from production health (#1326)
* test: define production health scope for test diagnostics

* fix: exclude test diagnostics from production health

* fix: align score projection diagnostic surface

* fix: project only displayed score diagnostics

* docs(config): refresh production health defaults
2026-07-17 21:22:11 -07:00
Aiden Bai 7e6cdf920b fix(rules): unwrap typed call receivers (#1375) 2026-07-17 20:14:07 -07:00
Aiden Bai ac392cbbc0 fix(hook-use-state): allow concise tuple returns (#1373) 2026-07-17 19:08:40 -07:00
Aiden Bai 44d3ad879d fix(rules): resolve React hook aliases semantically (#1362)
* fix(rules): resolve React hook aliases semantically

* fix(rules): preserve aliased hook dependency positions

* test(rules): pin userland hook consumption

* fix(rules): preserve effect event polyfills
2026-07-17 18:57:34 -07:00
Aiden Bai 8835214910 fix(no-adjust-state): align the published contract (#1361)
* fix(no-adjust-state): align the published contract

* test(no-adjust-state): align CLI parity fixtures

* fix(rule): exclude subscription and client effects

* fix(no-adjust-state): ignore unreachable nested work

* test(no-adjust-state): preserve alias ownership

* fix(no-adjust-state): exclude observer effects

* fix(effect-cleanup): preserve computed subscriptions
2026-07-17 18:40:22 -07:00
Aiden Bai 842a55fb6a fix(git): ignore external diff renderers (#1372) 2026-07-17 09:05:37 -07:00
Aiden Bai c41f271c31 fix(exhaustive-deps): recognize lazy ref registry aliases (#1352)
* fix(exhaustive-deps): recognize lazy ref registry aliases

* fix(exhaustive-deps): follow wrapped ref receivers

* fix(exhaustive-deps): reject indirect ref writes
2026-07-17 09:04:39 -07:00
Aiden Bai 3c90f14c90 fix(rules): handle FileReader loading lifecycles (#1351) 2026-07-17 09:04:15 -07:00
Aiden Bai 4f3848b001 fix(rules): resolve state and effect aliases semantically (#1358)
* fix(rules): resolve state effect aliases semantically

* fix(rules): tighten setter alias identity
2026-07-17 09:03:50 -07:00
Aiden Bai 9e55e1f83f fix(effect-needs-cleanup): prove callback-ref replacement (#1347)
* fix(effect-needs-cleanup): prove callback-ref replacement

* fix(effect-needs-cleanup): prove ref release paths

* fix(effect-needs-cleanup): require direct ref ownership

* fix(effect-needs-cleanup): accept nullish ref guards

* refactor(effect-needs-cleanup): share presence guard proof

* fix(effect-needs-cleanup): preserve ref-origin proof after rebase

* fix(effect-needs-cleanup): follow stable mutable ref aliases

* fix(effect-needs-cleanup): prove callback ref unmount cleanup

* fix(effect-needs-cleanup): follow callback ref node aliases

* fix(effect-needs-cleanup): recognize bare ref properties
2026-07-17 09:03:25 -07:00
Aiden Bai cc96f47324 fix(effect-needs-cleanup): prove collection cleanup (#1346)
* fix(effect-needs-cleanup): prove collection cleanup

* fix(effect-needs-cleanup): require exhaustive collection iteration

* fix(effect-needs-cleanup): preserve for-of cleanup

* fix(effect-needs-cleanup): support multiple collection pushes

* fix(effect-needs-cleanup): verify unobserve target
2026-07-17 09:02:56 -07:00
Aiden Bai cf9acf26c2 fix(no-pass-data-to-parent): preserve external hook state (#1342)
* fix(no-pass-data-to-parent): preserve external hook state

* fix(no-pass-data-to-parent): retain subscription fallback

* fix(no-pass-data-to-parent): preserve mixed hook provenance

* fix(no-pass-data-to-parent): reject escaped state setters

* refactor(external-state): remove unused helper
2026-07-17 09:02:20 -07:00
Aiden Bai c245b9d05d fix(no-flush-sync): recognize imperative DOM handoffs (#1340)
* fix(no-flush-sync): allow imperative DOM handoffs

* fix(no-flush-sync): harden handoff adjacency

* fix(no-flush-sync): tighten imperative handoffs
2026-07-17 09:01:54 -07:00
Aiden Bai 093619c3d8 fix(effect-needs-cleanup): prove nested ref ownership (#1368)
* fix(effect-needs-cleanup): prove nested ref ownership

* fix(effect-needs-cleanup): keep promise callers deferred
2026-07-17 07:54:30 -07:00
Aiden Bai e5a5f73699 fix(effect-needs-cleanup): prove retained disposer refs (#1360) 2026-07-17 07:40:23 -07:00
Aiden Bai a6e4fb5000 test(rule): pin hydration mount-gate true positives (#1367) 2026-07-17 07:25:47 -07:00
Aiden Bai c1e75f06ba fix(no-jsx-element-type): allow concrete renderer factories (#1363) 2026-07-17 07:25:30 -07:00
Aiden Bai 21043e024e feat: flag React 19-only ref cleanups on React 18 (#1356)
* feat: flag React 19-only ref cleanups on React 18

* fix: skip unreachable ref callback branches

* fix: resolve declared ref callbacks
2026-07-17 07:24:46 -07:00
Aiden Bai 0fbf728ec1 fix(effect-needs-cleanup): accept self-releasing gesture listeners (#1355)
* fix(effect-needs-cleanup): accept self-releasing listeners

* fix(effect-needs-cleanup): cover reverse listener order
2026-07-17 07:24:19 -07:00
Aiden Bai 0f11de18bd fix(exhaustive-deps): recognize render-derived dependencies (#1354)
* fix(exhaustive-deps): recognize render-derived dependencies

* fix(exhaustive-deps): reject computed derived sources

* fix(exhaustive-deps): preserve destructured source identity

* fix(exhaustive-deps): reject escaped derived locals
2026-07-17 07:23:38 -07:00