622 Commits

Author SHA1 Message Date
Ray Arayilakath 9a8ad6e40d feat(ci): blocking gate, PR-introduced-issues baseline, inline review comments + CLI flag cleanup (#663)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-04 17:56:22 -04:00
Ray Arayilakath 915745ef7b feat(language-server): editor language server behind react-doctor experimental-lsp (#681)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-04 17:43:53 -04:00
github-actions[bot] 6130583376 chore: version packages (#646) 2026-06-04 04:21:10 -07:00
Aiden Bai cbdff6203d feat(cli): "Add to CI" handoff option + default CI setup in install (#658)
Co-authored-by: Aiden Bai <aiden.bai05@gmail.com>
Co-authored-by: Nisarg Patel <awesomenisarg@gmail.com>
2026-06-04 04:15:05 -07:00
devin-ai-integration[bot] 67be206087 chore: bump deslop-js to ^0.0.19 (#679)
Co-authored-by: Aiden Bai <aiden.bai05@gmail.com>
2026-06-04 03:49:32 -07:00
devin-ai-integration[bot] d4cc99b2a8 fix: require useState binding proof for setter-pattern rules (#678)
Co-authored-by: Aiden Bai <aiden.bai05@gmail.com>
2026-06-04 03:39:59 -07:00
Aiden Bai eba20ae9a7 feat(rules): demote 19 low-signal rules to opt-in (#644) 2026-06-04 02:50:01 -07:00
devin-ai-integration[bot] abbb04202e Retire rn-animate-layout-property rule (#677) 2026-06-04 01:00:26 -07:00
devin-ai-integration[bot] 08e1d55da4 fix(cli): allow combining --yes and --full (#676)
Co-authored-by: Aiden Bai <aiden.bai05@gmail.com>
2026-06-04 00:40:44 -07:00
Aiden Bai 6851a786e5 chore: bump deslop-js to 0.0.17 (#674) 2026-06-03 17:13:50 -07:00
Aiden Bai 5d7b36bc31 Fix Reanimated layout animation false positive (#666) 2026-06-03 17:12:43 -07:00
Aiden Bai 68a0befa1a fix(rules): stop no-wide-letter-spacing flagging uppercase wrapper-prop labels (#673) 2026-06-03 16:33:53 -07:00
Aiden Bai 8e7fb3366f fix(rules): disable prefer-module-scope-static-value under React Compiler (#672) 2026-06-03 16:31:56 -07:00
Aiden Bai 3c05fc4d63 chore: bump deslop-js (#668) 2026-06-03 03:10:32 -07:00
Aiden Bai 4dc48d7bc5 Fix React Compiler context provider value false positive #664 (#667) 2026-06-03 02:19:50 -07:00
Aiden Bai 87440abac8 Fix React Native rule false positives (#662) 2026-06-03 01:41:06 -07:00
Ray Arayilakath e3b106e191 feat(telemetry): emit a per-scan wide event for CI + usage analysis (#660)
Enrich the per-scan Sentry run span with the full run/CI/project/outcome
context (scan mode, score, diagnostics by severity/category, top rule,
lint/dead-code state, and in CI the GitHub event, official-action marker,
forwarded action inputs, and the pull-request gate) so usage and CI behavior
are queryable as spans instead of pre-aggregated counters.

Mint a random per-run runId on the Sentry run context (never a tag or metric
dimension) to correlate the spans of a single run; a workspace invocation's
project scans share one id and per-project span attributes disambiguate. The
wide event's wouldBlock/outcome/exitCode mirror the CLI's real fail-on gate
(ciFailure surface, and no gate in score-only mode). The official GitHub
Action forwards its inputs so action configuration is visible in telemetry.
Telemetry stays anonymized — no repo, owner, username, branch, or path is
sent to Sentry — and --no-score / --no-telemetry opts out.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-03 00:31:48 -04:00
Nisarg Patel 86911770da fix(cli): refine warning display in diagnostics to improve clarity and focus 2026-06-02 17:51:11 -07:00
Aiden Bai 19b39c0e0d chore: bump deslop-js to 0.0.15 (#659)
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-06-02 17:23:01 -07:00
Ray Arayilakath d594f69f26 fix(cli): treat an unreadable --changed-files-from file as a clean error (#655)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-02 18:19:09 -04:00
Ray Arayilakath eab6dc2747 fix(core): skip un-enumerable directories during subproject discovery (#654)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-02 18:18:57 -04:00
Ray Arayilakath 3cc997108b fix(cli): exit cleanly on terminal hangup (read EIO) during interactive prompts (#650)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-02 15:40:14 -04:00
Rayhan Noufal Arayilakath 0a36216c12 style(readme): apply formatter to CI Action SHA-pin snippet
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-02 12:27:44 -07:00
Rayhan Noufal Arayilakath 5c49fa2b8e docs(readme): pin CI Action example to @v1 + SHA-pin guidance (issue #299)
Replace the mutable `millionco/react-doctor@main` reference in the GitHub
Actions example with the `@v1` floating release tag, and add a note on
pinning to a full commit SHA for hardened CI (the example grants
`pull-requests: write`). Avoids running whatever `main` points at runtime.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-02 12:20:37 -07:00
github-actions[bot] 8d13ba3f84 chore: version packages (#641) 2026-06-01 23:19:09 -07:00
Aiden Bai 4aadaabfd4 fix(react-native): stop false-positives on Expo Universal UI (@expo/ui) (#645) 2026-06-01 23:18:56 -07:00
Ray Arayilakath 0c8b797d18 fix(cli): degrade git current-branch read when git is unavailable (#643)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-01 20:32:01 -04:00
Ray Arayilakath 2aa96f39b5 fix(cli): treat expected user/CLI errors as clean errors, not Sentry crashes (#642)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-01 20:09:07 -04:00
github-actions[bot] 5614b3220b chore: version packages (#639) 2026-06-01 15:21:39 -07:00
Aiden Bai b336f54d66 feat(cli): reveal category breakdown one issue at a time (#640) 2026-06-01 15:21:26 -07:00
Aiden Bai ec5d58cf83 fix(cli): never animate the score header / onboarding inside git hooks
`canAnimateOnboarding` only excluded CI, so a git hook invoked by an
interactive `git commit` (real inherited TTY, `GIT_DIR` set) would play
the score-bar count-up and onboarding pacing, emitting cursor escapes
into hook output (issue #293). Add `isGitHookEnvironment()` and gate it
out, while keeping the deliberate coding-agent real-TTY animation.
2026-06-01 14:25:50 -07:00
Aiden Bai 114893e07d New onboarding 2 ray backup (#638)
Co-authored-by: Rayhan Noufal Arayilakath <me@rayhanadev.com>
2026-06-01 14:20:43 -07:00
github-actions[bot] 2d1ab245f0 chore: version packages (#632) 2026-06-01 10:44:31 -07:00
Aiden Bai 8162bfb7ca feat(cli): redesign scan summary, footer, and verbose warnings (#637) 2026-06-01 10:26:17 -07:00
Aiden Bai bf4c21e45d Update README.md 2026-06-01 09:31:36 -07:00
Ray Arayilakath bd8298d6cf feat(cli): lint in parallel by default, with serial fallback (#635)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-01 11:50:59 -04:00
Ray Arayilakath 520b0a9235 fix(cli): accept commit ranges in --diff; render bad values as clean errors (#633)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-01 09:23:44 -04:00
Ray Arayilakath 17e722ee07 feat(cli): add anonymized Sentry usage metrics (counters + distributions) (#634)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-01 09:23:12 -04:00
Rayhan Noufal Arayilakath 3fae9ddd88 Revert "fix(cli): accept commit ranges in --diff; render bad values as clean errors"
This reverts commit 01ec05c06e.
2026-06-01 05:45:02 -07:00
Rayhan Noufal Arayilakath 01ec05c06e fix(cli): accept commit ranges in --diff; render bad values as clean errors
`--diff` now accepts git's own range syntax: two-dot `A..B` (diff A
directly against B) and three-dot `A...B` (diff from the merge-base of A
and B to B). Each endpoint is individually validated against the
anti-injection guard, so a range can't smuggle a `--upload-pack=`-style
option past it, and an empty endpoint defaults to HEAD (`main..` means
`main..HEAD`).

An invalid `--diff` value (a malformed ref/range, or a base branch that
hasn't been fetched) is now rendered as a clean, single-line message and
exits non-zero. It no longer prints the generic "Something went wrong,
open a prefilled issue" block or reports the expected user error to
Sentry: getDiffInfo now propagates the tagged ReactDoctorError so the CLI
dispatches on reason._tag via the new isUserInputError classifier.

Fixes REACT-DOCTOR-9

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-01 05:42:22 -07:00
github-actions[bot] 66f9d649e7 chore: version packages (#603)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-06-01 04:44:15 -07:00
Ray Arayilakath 05d7bba5c4 docs(readme): update readme (#631)
* docs(readme): update readme

* use "taste"
2026-06-01 07:33:01 -04: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 75c1f99e06 fix(oxlint-plugin-react-doctor): declare oxc-parser as a runtime dependency (#630)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-01 07:02:17 -04:00
Ray Arayilakath e9e71bbc2f feat(cli): deepen sentry observability -- source maps, tracing, anonymization, crash refs (#628)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-01 06:19:25 -04:00
Ray Arayilakath 9777f1ac45 feat(cli): add rules management commands and doctor-explain skill (#617)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-01 05:55:47 -04:00
Nisarg Patel 0938376e9c feat(cli): show warnings by default again (--no-warnings to hide) (#622)
Show "warning"-severity diagnostics by default again — a scan that reports only errors is too low a bar for a health check. Warnings reach every surface (CLI, PR comment, score, --fail-on); opt out with --no-warnings or "warnings": false. Per-rule / per-category severity overrides still win.

CLI output rework:
- Inline code frames are reserved for errors; warnings list their file:line sites compactly so a long tail of low-severity findings stays scannable.
- Non-verbose warnings roll up into a capped rule×count list (+N more rules → --verbose); errors get the same overflow line past the top 3.
- Audience-aware fix links in --verbose: coding agents get a cache-busting fetch directive, humans get a "Learn more" docs link under the rule name.
- Closing Docs note pointing to CI/CD setup, config-based rule suppression, and diff/PR scanning.

Internal: a single buildSortedRuleGroups primitive backs every rule-list surface (category breakdown, top errors, warnings roll-up, verbose detail, agent handoff, on-disk dump); shared warning-header and site-badge helpers remove the duplicated rendering.
2026-06-01 02:23:30 -07:00
Ray Arayilakath b9e9bcbc08 feat(cli): align CLI with clig.dev and 12-factor guidelines (#623)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-01 04:46:26 -04:00
Nisarg Patel 24425b113a feat(cli): add Sentry crash reporting (#621)
* feat(cli): add Sentry crash reporting

Capture uncaught CLI errors via @sentry/node, flushed before the process
exits and enriched with a run-context snapshot (version, node/platform/
arch, invocation command/argv, cwd, CI provider, coding agent,
interactivity, JSON mode). Initialized as the first statement of the CLI
entry and scoped to the CLI only — the @react-doctor/api library never
initializes Sentry. Opt out via --no-score (also skipped under tests).

Co-authored-by: Cursor <cursoragent@cursor.com>

* refactor(cli): consolidate CI/agent detection into is-ci-environment

build-run-context re-declared CI provider and coding-agent env-var maps
that mirrored is-ci-environment. Move the label maps and the
detectCiProvider/detectCodingAgent resolvers into is-ci-environment as the
single source of truth, derive the flat agent env-var list from the brand
map, and have isCodingAgentEnvironment derive from detectCodingAgent.
Behavior is unchanged (env-detection tests still green).

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-31 21:51:18 -07:00
Aiden Bai 5fc6a9faa7 Add Discord link to CLI error help (#620) 2026-05-31 20:32:43 -07:00