test: vite-plus prerelease 0.2.3 - #1
Draft
wan9chi wants to merge 33 commits into
Draft
Conversation
… node (millionco#1039) Nested callbacks now compute once and every enclosing function and calling rule reuses the shared result; the defensive per-reference containment re-filter is dropped (the walk already guarantees it). Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…ations (millionco#1040) getLocationAtIndex sliced and split the whole content prefix on every call — O(content) per regex match on the synchronous, event-loop-blocking security scan. Build a per-content line-start table once and answer each query with a binary search. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…11y rules (millionco#1041) ~30 a11y rules resolve the same opening element once per rule; cache the result per node with a settings-identity guard (both hosts hand every rule the same per-file settings object) and memoize the jsx-a11y settings block per settings object. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…node (millionco#1042) Five rules query the same function nodes; the full-subtree walk now runs once per (function node, scope analysis) and repeat queries hit a WeakMap. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…millionco#1043) Five rules re-classified the constant filename on every matching AST node (isInProjectDirectory or the __root-route pattern). Compute the gate once in create() and register no visitors when the file can never match, so the host skips these rules entirely on non-matching files. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…1044) Rules matching user-configured globs per node recompiled the same RegExp on every call; patterns only ever come from config, so a module-level Map is bounded and flagless RegExps are safe to share. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
… batches (millionco#1045) Greedy 100-file chunking in discovery order let adjacent large files pile into one batch that set the whole scan's wall clock (2.2x on a size-skewed corpus) and could trip the per-batch timeout. The planner keeps the same batch count but assigns files largest-first to the least-loaded batch; REACT_DOCTOR_LINT_BATCH_ORDERING=arrival rolls back to greedy chunking. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…e walks (millionco#1047) Reorders ~23 rules/utils so trivial name/type/substring checks run before subtree walks, scope traces, parent climbs, and settings parses; adds whole-file no-op gates (zod import gate, recycler-package import gate, JSX-presence gate for rn-no-raw-text, crypto-token gate for insecure-crypto-risk) and prunes containsFetchCall after the first match. Findings millionco#6 millionco#11 millionco#18 millionco#19 millionco#42 millionco#56 millionco#100 millionco#121 millionco#129 millionco#193 millionco#205 millionco#206 millionco#217 millionco#236-millionco#238 millionco#259 millionco#299 millionco#308 millionco#327 millionco#385-millionco#387 millionco#428 from the perf audit catalog; behavior verified identical via the 291-diagnostic equivalence corpus. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…illionco#1049) Hoists the public-env secret-name global pattern to module scope (millionco#248/millionco#264/millionco#270/millionco#281), replaces supabase-table-missing-rls's per-table RegExp compile + tail slice with one global enable-RLS collection pass (millionco#271/millionco#295), makes dangerous-html-sink's inert-parse-target scans conditional on cheap createElement/createHTMLDocument substring gates (millionco#518) and its serializer/sanitizer exemption regexes lazy (millionco#519), fuses the duration regexes and hoists time patterns in no-long-transition-duration (millionco#73), early-stops shadow-blur token collection in no-dark-mode-glow (millionco#74), and adds text-/bg-, first-char, and rgb/hsl substring gates to no-gray-on-colored-background (millionco#76) and parse-color-to-rgb (millionco#83). compile-glob and has-responsive-prefix were already shipped elsewhere and are untouched. Behavior verified identical via the 291-diagnostic equivalence corpus. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…me subtree (millionco#1050) Fuses async-await-in-loop's three loop-body collectors and precomputes its fixpoint declarator records (millionco#92/millionco#93), merges js-cache-property-access's write+read walks (millionco#94), memoizes js-index-maps' per-loop bound names (millionco#104), folds rendering-usetransition-loading's three async-work detectors into one short-circuiting pass (millionco#139), memoizes display-name's containsJsx and replaces its per-candidate whole-program displayName scans with a per-Program index (millionco#147/millionco#148), fuses no-derived-use-state's two exemption walks (millionco#311), indexes activity-wraps-effect-heavy-subtree's same-file component bodies per Program (millionco#312), and replaces per-binding component walks with one-shot setter-call collection in no-event-trigger-state and rerender-state-only-in-handlers (millionco#318/millionco#336) plus WeakMap memos in is-controlled-prop-mirror (millionco#357/millionco#358). Skipped as non-mechanical or behavior-changing: millionco#140 millionco#309 millionco#310 millionco#320 millionco#349. Behavior verified identical via the 291-diagnostic equivalence corpus. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…onco#1051) Memoizes the ~22x-per-file security-scan path classification per (pattern, relativePath) (millionco#244/millionco#257/millionco#265/millionco#280/millionco#285/millionco#510), caches doesModuleExportName's read+strip+export scan per file with mtime/size invalidation so sibling pages and both metadata names reuse one parse (millionco#117/millionco#403), adds WeakMap memos for getScopeForNode (millionco#324/millionco#332/millionco#345), getRef (millionco#323/millionco#346), and getUpstreamRefs (millionco#347) keyed on the per-Program analysis, deletes react.ts's duplicate full-scope scan in favor of the memoized getScopeForNode (millionco#333), memoizes zod's getImportInfoForIdentifier per identifier node (millionco#389), and gives normalizeFilename an already-normalized fast path (millionco#430). Skipped: millionco#341 (no change needed per the catalog), millionco#452/millionco#454 (a directory/resolution memo contradicts the documented uncached-walk freshness guarantee for long-lived processes). Behavior verified identical via the 291-diagnostic equivalence corpus. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…aps (millionco#1048) Converts per-element Array.includes scans and repeated per-handler attribute walks to Set/Map lookups: ARIA element-role tables (millionco#36/millionco#458) become prebuilt lookup maps, DOM_PROPERTIES_IGNORE_CASE (millionco#459) becomes a lowercased-key Map, the interactive-handler probes (millionco#17/millionco#39/millionco#40/millionco#460) collapse to one lowercased-Set pass over the attributes, a11y settings lists (millionco#10/millionco#21/millionco#23/millionco#28) resolve to Sets, rn-no-raw-text's keyword spread (millionco#216) is hoisted, and the tanstack order tables (millionco#372/millionco#373/millionco#461) gain index Maps. Behavior verified identical via the 291-diagnostic equivalence corpus. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…ng forked fibers (millionco#1046) The security-scan and supply-chain fibers fork before lint, but lint's synchronous discovery + cache-hash prefix ran with zero suspensions, so they could not start until the first oxlint spawn; the scan's own directory walk was likewise one unyielding burst. One early yield, budget- checked yields in the hash loop, and walk-progress markers cut the parent event-loop max stall from 116ms to 64ms with byte-identical output. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…l triage, plus slow-oracle hardening (millionco#1032) Co-authored-by: Aiden Bai <aiden.bai05@gmail.com>
…os (millionco#1052) Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…lysis (millionco#1053) Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…d of bailing (millionco#1054) The instant-rerun cache required a perfectly clean tree, so it never fired during development. Every divergence from HEAD is now fingerprinted into the key (status code + path + content hash, bounded at 300 entries with bail-to-null beyond), so identical dirty states hit and any edit misses; root dotenv files are stat-keyed since the security scan reads them even when gitignored. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…ist drift (millionco#1056) Addresses the two review findings on millionco#1053: the fingerprint's extension and manifest lists are now imported from a new dependency-free deslop-js/analyzed-inputs subpath (single source of truth with the analyzer's own readers — the hand-copies were already missing ng-package.json and pnpm-workspace.yml), and the core package version joins the key so an upgrade invalidates post-processed cached diagnostics. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…he (millionco#1057) Four cache layers validated by one stat walk (parse summaries, package facts, file list, resolution map keyed on the file set) make changed-file rescans re-parse only what changed; entries stay live every run (caching them was proven unsound — bundler configs feed entry strings by content), resolved on a worker thread so warm runs are entries-bound. Dead-code on a 9k-file repo: ~8s full -> ~3.1-3.4s warm with byte-identical output. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…traces (millionco#1058) * perf(core): incremental cross-file sidecar lint via dependency probe traces Every cross-file rule's external reads are soundly bounded by re-running its own resolver helpers under a probe recorder; cache-hit files replay their sidecar diagnostics when every recorded probe (content hash or existence) still answers identically, and re-lint otherwise. A guard test forces every new cross-file rule into a conscious bounded/unbounded classification (unbounded = always re-lint). Warm sidecar on a 9k-file repo: 8.7s -> ~1.5s with byte-identical output in every mutation scenario. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(core): count sidecar-replayed files in the lint progress numerator Replayed files never ticked the spinner, so it stalled short of the total whenever the sidecar cache replayed anything, and an all-replayed pass never ticked at all. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…event (millionco#1059) cache.temperature (turbo from an explicit whole-repo-hit flag, warm on any incremental reuse, cold, disabled) plus cache.warmth (mean of subsystem reuse ratios) make cold vs incremental vs full-replay runs queryable in Sentry alongside the per-subsystem drill-down dims. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…ache (millionco#1060) The whole-repo scan cache escaped the action's cached path entirely (own tmpdir resolution) and three key inputs (config/dotenv/toolchain stats) rotated on every fresh checkout; the dead-code caches were stat-keyed so re-cloned trees never hit. Route every cache through the shared cache-dir resolution, content-hash the checkout-sensitive key inputs, add ninja-style mtime repair to both dead-code caches, TTL-prune the supply-chain store, and stop the PR baseline sub-scan from minting orphan cache dirs. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
…clean (millionco#1062) Co-authored-by: Aiden Bai <aiden.bai05@gmail.com>
…mputeDiagnosticDelta (millionco#1061) Co-authored-by: Aiden Bai <aiden.bai05@gmail.com>
…/<path>) (millionco#1067) Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…th (millionco#1070) Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…dency scan (millionco#1069) Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
millionco#1071) Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Upgrade to 0.0.0-commit.fd1ae7eab160c92f3907a20e80e92d2e87403c20 via vp migrate; deps resolve through the registry bridge (.npmrc). Draft, do not merge.
📦 GitHub Action release recommendedThis PR changes the React Doctor GitHub Action's release surface:
The composite action is versioned independently from the npm packages, so it After merging, cut the tag from the merge commit on git checkout main && git pull --ff-only
merge_commit=$(git rev-parse HEAD)
git tag -a v2.2.6 "$merge_commit" -m "react-doctor action v2.2.6"
git tag -fa v2 "$merge_commit" -m "react-doctor action v2 (floating major -> v2.2.6)"
git push origin v2.2.6
git push --force origin v2 # moves only the floating major pointerThis bump can also be performed automatically on merge — set the repo |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Ecosystem-ci smoke test of vite-plus 0.2.3 (build
0.0.0-commit.fd1ae7e); deps via the registry bridge. Draft / do not merge.