Skip to content

test: vite-plus prerelease 0.2.3 - #1

Draft
wan9chi wants to merge 33 commits into
mainfrom
update-vite-plus-prerelease-test-0.2.3
Draft

test: vite-plus prerelease 0.2.3#1
wan9chi wants to merge 33 commits into
mainfrom
update-vite-plus-prerelease-test-0.2.3

Conversation

@wan9chi

@wan9chi wan9chi commented Jul 7, 2026

Copy link
Copy Markdown

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.

rayhanadev and others added 30 commits July 3, 2026 17:59
… 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>
rayhanadev and others added 3 commits July 4, 2026 22:13
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.
@wan9chi wan9chi self-assigned this Jul 7, 2026
@github-actions

github-actions Bot commented Jul 7, 2026

Copy link
Copy Markdown

📦 GitHub Action release recommended

This PR changes the React Doctor GitHub Action's release surface:

  • action.yml

The composite action is versioned independently from the npm packages, so it
needs its own git tag once this merges. Based on the PR title, this looks like
a patch bump (fix / refactor / chore / docs): v2.2.5v2.2.6.

After merging, cut the tag from the merge commit on main (tags are GPG-signed
annotated tags, so run this locally where your signing key is configured):

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 pointer

This bump can also be performed automatically on merge — set the repo
variable AUTO_BUMP_ACTION_TAG=true. Recommendation by the Action Version Bump workflow.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants