react-doctor 0.9.15-dev.6313667 → 0.9.15-dev.8ed70df

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/README.md +22 -0
  2. package/dist/{build-section-divider-FMwsfCjR.js → build-section-divider-BSEx7sis.js} +4 -4
  3. package/dist/{ci-DpEdS9xF.js → ci-D4R9kdc2.js} +12 -12
  4. package/dist/cli.js +27 -26
  5. package/dist/constants-DJ3RtEMu.js +2 -2
  6. package/dist/{design-BAnNluAv.js → design-T850ewH9.js} +4 -4
  7. package/dist/{exit-gracefully-BOuD5SPS.js → exit-gracefully-DkeS8hHp.js} +6 -6
  8. package/dist/{handle-error-B_f3lyYO.js → handle-error-RLjKeLDA.js} +5 -5
  9. package/dist/index.d.ts +13 -8
  10. package/dist/index.js +27 -5
  11. package/dist/{inspect-BOJOQFH5.js → inspect-DuT3v6KA.js} +88 -29
  12. package/dist/{install-DXOthHDF.js → install-BeahaWiL.js} +9 -9
  13. package/dist/{install-doctor-script-DDk3Zz0c.js → install-doctor-script-B84ViKF6.js} +4 -4
  14. package/dist/{install-github-workflow-DcD8c71b.js → install-github-workflow-BunRUQaF.js} +4 -4
  15. package/dist/{install-react-doctor-BF79Vawz.js → install-react-doctor-C5W2i12g.js} +8 -8
  16. package/dist/{jsx-runtime-BfhcIiPm.js → jsx-runtime-DBWv4kid.js} +5 -5
  17. package/dist/{print-branded-header-BFOYMfiy.js → print-branded-header-BNKQT5ZQ.js} +4 -4
  18. package/dist/{prompt-runtime-scan-url-DutYdTq7.js → prompt-runtime-scan-url-Bly4Vulj.js} +5 -5
  19. package/dist/{read-object-file-Cejq_ul8.js → read-object-file-B-BZ7uYW.js} +4 -4
  20. package/dist/{record-metric-DS3AjkQ3.js → record-metric-Do1JAZVB.js} +49 -22
  21. package/dist/{report-error-DwDD47K-.js → report-error-DL7M0AGh.js} +5 -5
  22. package/dist/{report-workflow-result-UemdAwLM.js → report-workflow-result-BSLZylKS.js} +5 -5
  23. package/dist/{resolve-scope-CfZzkot8.js → resolve-scope-_R2u_rWR.js} +6 -6
  24. package/dist/{rules-RjqWk309.js → rules-DD_Jp7ZA.js} +6 -6
  25. package/dist/{run-scan-app-ChwoL1RF.js → run-scan-app-B2_HYqlM.js} +10 -10
  26. package/dist/{runtime-scan-C-qXmEpn.js → runtime-scan-HiSmF8di.js} +9 -9
  27. package/dist/{sanitize-runtime-url-DcLyAxpE.js → sanitize-runtime-url-c0or2L2V.js} +4 -4
  28. package/dist/{scan-BGKVuwQa.js → scan-B4oVxvqa.js} +9 -9
  29. package/dist/{should-fail-scan-gate-BC9hJSI-.js → should-fail-scan-gate-Bjr43-87.js} +75 -62
  30. package/dist/{should-skip-prompts-CxY5MlEp.js → should-skip-prompts-DKwyzEkM.js} +4 -4
  31. package/dist/{should-use-tui-Cgsu0Mow.js → should-use-tui-DO7NdqR8.js} +4 -4
  32. package/dist/skills/react-doctor/SKILL.md +4 -0
  33. package/dist/{telemetry-runtime-rWUZdMHt.js → telemetry-runtime-D3teullu.js} +6 -6
  34. package/dist/{version-AmrbbM3P.js → version-Kj44qNuh.js} +4 -4
  35. package/dist/{why-0cWz29hR.js → why-BV74fXYk.js} +4 -4
  36. package/dist/{with-run-span-CJp_LacB.js → with-run-span-y8D-ZUGk.js} +5 -5
  37. package/package.json +4 -4
@@ -1,18 +1,18 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="24fb46c9-b471-5762-a502-488724c08e84")}catch(e){}}();
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="93c39db1-e810-5852-8880-ad0dee772a41")}catch(e){}}();
3
3
  import { E as TRACKED_FILE_FLAGS_GIT_ARGUMENTS, Ft as HTML_FILE_PATTERN, Ht as MAINTAINABILITY_SOURCE_FILE_PATTERN, Jt as OXLINT_NODE_REQUIREMENT, K as resolveReactDoctorCacheDir, Nt as GIT_SHOW_MAX_BUFFER_BYTES, Rt as JSX_FILE_PATTERN, St as ENTERPRISE_CONTACT_URL, Wt as MILLISECONDS_PER_SECOND, _t as DIAGNOSTIC_CATEGORY_BUCKETS, c as HEAD_SHA_GIT_ARGUMENTS, dn as SHARE_BASE_URL, h as REPOSITORY_ROOT_GIT_ARGUMENTS, i as BASELINE_FILES_TEMP_DIR_PREFIX, k as WORKTREE_STATUS_GIT_ARGUMENTS, q as resolveScanConcurrency, u as METRIC, ut as CI_URL, v as SCAN_RESULT_CACHE_FILENAME } from "./constants-DJ3RtEMu.js";
4
4
  import { t as isCacheGloballyDisabled } from "./is-cache-globally-disabled-De19063F.js";
5
- import { $ as buildSkippedChecks, A as Git, B as Progress, Bt as materializeSourceTree, C as ACTION_INPUT_ENVIRONMENT_VARIABLES, Dt as hashFileContents, E as isCiOrCodingAgentEnvironment, En as succeed, F as Maintainability, Ft as listSourceFiles, Gt as resolveScanTarget, H as Reporter, Ht as remainingDeadlineBudgetMs, I as NodeResolver, In as isDirectory, It as listSourceFilesCooperative, K as SupplyChain, Kt as restoreLegacyThrow, L as OxlintConcurrency, Lt as listWorkspacePackages, Mn as isMonorepoRoot, N as LintPartialFailures, Nn as yieldToEventLoop, Nt as isScanComplete, O as Config, Ot as highlighter, P as Linter, Q as buildRuleSeverityControls, R as OxlintSpawnSlots, Rn as isFile, T as isCiEnvironment, Tt as hasPublishedFixRecipe, U as Score, Ut as resolveGithubActionsScoreMetadata, V as Project, Vt as mergeReactDoctorConfigs, W as SidecarLintCacheEnabled, Wt as resolveLintBatchOrdering, Xt as shouldUseMaintainabilityLayer, Y as atomicWriteJson, Z as buildRuleDocsUrl, Zt as summarizeDiagnostics, _ as VERSION, _n as provideService, an as log, at as computeConfigFingerprint, b as isNonInteractiveEnvironment, bn as sync, cn as decodeUnknownSync, ct as createInvocationCaches, d as isJsonModeActive, en as warmDuplicateJsxWorker, et as calculateScore, fn as map, ft as discoverSupportedSubprojects, gn as provideContext, hn as provide, ht as filterSourceFiles, it as collectSourceFilesByDirectory, j as InvocationCaches, jn as ParentSpan, jt as isReactDoctorError, k as Files, kt as isPathInsideDirectory, l as getRunId, lt as createNodeReadFileLinesSync, mn as promise, mt as filterPathsOutsideDirectories, n as recordDistribution, nn as Console, nt as classifyFileContext, on as warn, ot as computeDiagnosticDelta, pn as orElseSucceed, pt as filterDiagnosticsForSurface, qt as runInspect, r as toSpanAttributes, rn as error, sn as Diagnostic, st as countOptInProjectRuleSelections, t as recordCount, tn as warmOxlintWorkerPool, tt as canonicalizeUserRuleKey, un as gen, ut as createOxlintSpawnSlots, v as makeNoopConsole, vn as runPromise, w as detectRunnerOs, wn as mergeAll, wt as groupBy, xn as try_, xt as getDiagnosticRuleIdentity, y as CliInputError, yn as runSync, z as PerFileLintCacheEnabled, zt as mapWithConcurrency } from "./record-metric-DS3AjkQ3.js";
6
- import { t as getTelemetryContext } from "./telemetry-runtime-rWUZdMHt.js";
5
+ import { $ as buildRuleSeverityControls, A as Files, At as isPathInsideDirectory, B as PerFileLintCacheEnabled, Bn as isFile, Bt as mapWithConcurrency, C as ACTION_INPUT_ENVIRONMENT_VARIABLES, Cn as try_, E as isCiOrCodingAgentEnvironment, En as mergeAll, Et as hasPublishedFixRecipe, F as Linter, Fn as yieldToEventLoop, G as SidecarLintCacheEnabled, Gt as resolveLintBatchOrdering, H as Project, Ht as mergeReactDoctorConfigs, I as Maintainability, It as listSourceFiles, Jt as runInspect, Kt as resolveScanTarget, L as NodeResolver, Lt as listSourceFilesCooperative, M as InvocationCaches, Mt as isReactDoctorError, Nn as ParentSpan, O as Config, On as succeed, Ot as hashFileContents, P as LintPartialFailures, Pn as isMonorepoRoot, Pt as isScanComplete, Q as buildRuleDocsUrl, Qt as summarizeDiagnostics, R as OxlintConcurrency, Rn as isDirectory, Rt as listWorkspacePackages, Sn as sync, St as getDiagnosticRuleIdentity, T as isCiEnvironment, Tt as groupBy, U as Reporter, Ut as remainingDeadlineBudgetMs, V as Progress, Vt as materializeSourceTree, W as Score, Wt as resolveGithubActionsScoreMetadata, X as atomicWriteJson, Zt as shouldUseMaintainabilityLayer, _ as VERSION, _n as provide, _t as fingerprintDiagnosticEvidence, at as collectSourceFilesByDirectory, b as isNonInteractiveEnvironment, bn as runPromise, cn as Diagnostic, ct as countOptInProjectRuleSelections, d as isJsonModeActive, et as buildSkippedChecks, fn as gen, ft as discoverSupportedSubprojects, gn as promise, hn as orElseSucceed, ht as filterSourceFiles, in as error, j as Git, k as DIAGNOSTIC_DELTA_IDENTITY, kt as highlighter, l as getRunId, lt as createInvocationCaches, mn as map, mt as filterPathsOutsideDirectories, n as recordDistribution, nn as warmOxlintWorkerPool, nt as canonicalizeUserRuleKey, on as log, ot as computeConfigFingerprint, pt as filterDiagnosticsForSurface, q as SupplyChain, qt as restoreLegacyThrow, r as toSpanAttributes, rn as Console, rt as classifyFileContext, sn as warn, st as computeDiagnosticDelta, t as recordCount, tn as warmDuplicateJsxWorker, tt as calculateScore, un as decodeUnknownSync, ut as createOxlintSpawnSlots, v as makeNoopConsole, vn as provideContext, w as detectRunnerOs, xn as runSync, y as CliInputError, yn as provideService, z as OxlintSpawnSlots } from "./record-metric-Do1JAZVB.js";
6
+ import { t as getTelemetryContext } from "./telemetry-runtime-D3teullu.js";
7
7
  import { t as activeScanAbortRegistry } from "./active-scan-abort-registry-CCTgal0O.js";
8
- import { n as buildFooterLinkLines, t as buildSectionDivider } from "./build-section-divider-FMwsfCjR.js";
8
+ import { n as buildFooterLinkLines, t as buildSectionDivider } from "./build-section-divider-BSEx7sis.js";
9
9
  import { t as toForwardSlashes } from "./path-format-By20mo8A.js";
10
10
  import { t as typescriptBinding } from "./_react-doctor_require-typescript-DXQDYeWK.js";
11
- import { A as runGitAsync, C as isRecord, N as cliLogger, S as getPackageJsonPath, a as installReactDoctorScriptStep, c as spinner, n as findNearestPackageDirectory, o as isSpinnerSilent, s as setSpinnerSilent } from "./install-doctor-script-DDk3Zz0c.js";
12
- import { d as detectDefaultBranch, l as prompts, r as installReactDoctorWorkflow, u as isCommandAvailable } from "./install-github-workflow-DcD8c71b.js";
13
- import { a as isValidBlockingLevel, c as openWorkflowPullRequest, l as stageWorkflowFile, o as pickBlockingLevel } from "./resolve-scope-CfZzkot8.js";
14
- import { n as resetSentryRunState, r as withRunSpan, t as recordSentryProjectContext } from "./with-run-span-CJp_LacB.js";
15
- import { h as detectAvailableAgents, t as reportWorkflowResult } from "./report-workflow-result-UemdAwLM.js";
11
+ import { A as runGitAsync, C as isRecord, N as cliLogger, S as getPackageJsonPath, a as installReactDoctorScriptStep, c as spinner, n as findNearestPackageDirectory, o as isSpinnerSilent, s as setSpinnerSilent } from "./install-doctor-script-B84ViKF6.js";
12
+ import { d as detectDefaultBranch, l as prompts, r as installReactDoctorWorkflow, u as isCommandAvailable } from "./install-github-workflow-BunRUQaF.js";
13
+ import { a as isValidBlockingLevel, c as openWorkflowPullRequest, l as stageWorkflowFile, o as pickBlockingLevel } from "./resolve-scope-_R2u_rWR.js";
14
+ import { n as resetSentryRunState, r as withRunSpan, t as recordSentryProjectContext } from "./with-run-span-y8D-ZUGk.js";
15
+ import { h as detectAvailableAgents, t as reportWorkflowResult } from "./report-workflow-result-BSLZylKS.js";
16
16
  import { createRequire } from "node:module";
17
17
  import * as fs$2 from "node:fs";
18
18
  import fs, { mkdtempSync, rmSync } from "node:fs";
@@ -511,6 +511,7 @@ const buildOutcomeAttributes = (input) => {
511
511
  fixed: result.baselineDelta.fixedCount,
512
512
  baseTotal: result.baselineDelta.baseTotalCount,
513
513
  crossFileMatches: result.baselineDelta.crossFileMatchCount,
514
+ source: result.baselineDelta.source ?? "base",
514
515
  degraded: false
515
516
  }));
516
517
  else if (input.gateExempt) attributes["baseline.degraded"] = true;
@@ -721,6 +722,7 @@ const resolveInspectOptions = (inputOptions, userConfig) => {
721
722
  concurrentScan: inputOptions.concurrentScan ?? false,
722
723
  concurrency: inputOptions.concurrency,
723
724
  maxDurationMs: inputOptions.maxDurationMs ?? null,
725
+ baselineReport: inputOptions.baselineReport ?? null,
724
726
  baseline: inputOptions.baseline ?? null,
725
727
  changedLineRanges: inputOptions.changedLineRanges ?? null,
726
728
  supplyChainManifestChanged: inputOptions.supplyChainManifestChanged ?? false,
@@ -1089,7 +1091,7 @@ const resolveWorkerTelemetry = (resolvedWorkerCount, pinnedConcurrency) => {
1089
1091
  //#region src/cli/utils/render-and-record-scan.ts
1090
1092
  const silentConsole$2 = makeNoopConsole();
1091
1093
  const deriveScope = (options) => {
1092
- if (options.baseline) return "changed";
1094
+ if (options.baseline || options.baselineReport) return "changed";
1093
1095
  if (options.changedLineRanges !== null) return "lines";
1094
1096
  return options.includePaths.length > 0 ? "files" : "full";
1095
1097
  };
@@ -1516,7 +1518,11 @@ const createDiagnosticEvidenceReader = (rootDirectory, options = {}) => {
1516
1518
  const sourceLines = record.sourceText.split(/\r?\n/);
1517
1519
  const startLineIndex = Math.max(0, diagnostic.line - 1);
1518
1520
  const endLineIndex = Math.max(startLineIndex, (diagnostic.endLine ?? diagnostic.line) - 1);
1519
- const evidence = sourceLines.slice(startLineIndex, endLineIndex + 1).join("\n");
1521
+ const evidence = diagnostic.offset !== void 0 && diagnostic.length !== void 0 && diagnostic.length > 0 ? Buffer.from(record.sourceText).subarray(diagnostic.offset, diagnostic.offset + diagnostic.length).toString("utf-8") : sourceLines.slice(startLineIndex, endLineIndex + 1).map((line, index, lines) => {
1522
+ const start = index === 0 ? Math.max(0, diagnostic.column - 1) : 0;
1523
+ const end = index === lines.length - 1 && diagnostic.endColumn !== void 0 ? diagnostic.endColumn - 1 : void 0;
1524
+ return line.slice(start, end);
1525
+ }).join("\n");
1520
1526
  if (!options.resolveForwardedHandlers) return evidence;
1521
1527
  const propNames = new Set(evidence.match(/\bon[A-Z]\w*\b/g) ?? []);
1522
1528
  if (propNames.size === 0) return evidence;
@@ -1526,23 +1532,16 @@ const createDiagnosticEvidenceReader = (rootDirectory, options = {}) => {
1526
1532
  };
1527
1533
  };
1528
1534
  //#endregion
1529
- //#region src/cli/utils/read-source-line.ts
1530
- /**
1531
- * Builds a cached `(filePath, line) -> source text` reader rooted at
1532
- * `rootDirectory`, used as the fallback when construct-level diagnostic
1533
- * evidence cannot be read. Wraps core's
1534
- * `createNodeReadFileLinesSync` with per-file memoization + 1-indexed line
1535
- * lookup; unreadable files / out-of-range lines return `null`.
1536
- */
1537
- const createSourceLineReader = (rootDirectory) => {
1538
- const readFileLines = createNodeReadFileLinesSync(rootDirectory);
1539
- const fileLinesCache = /* @__PURE__ */ new Map();
1540
- return (filePath, line) => {
1541
- if (!fileLinesCache.has(filePath)) fileLinesCache.set(filePath, readFileLines(filePath));
1542
- const lines = fileLinesCache.get(filePath) ?? null;
1543
- if (lines === null || line < 1 || line > lines.length) return null;
1544
- return lines[line - 1] ?? null;
1545
- };
1535
+ //#region src/cli/utils/with-diagnostic-fingerprints.ts
1536
+ const withDiagnosticFingerprints = (directory, diagnostics) => {
1537
+ const readEvidence = createDiagnosticEvidenceReader(directory);
1538
+ return diagnostics.map((diagnostic) => {
1539
+ const explicitIdentity = Reflect.get(diagnostic, DIAGNOSTIC_DELTA_IDENTITY);
1540
+ return {
1541
+ ...diagnostic,
1542
+ fingerprint: typeof explicitIdentity === "string" ? `identity:${fingerprintDiagnosticEvidence(explicitIdentity)}` : fingerprintDiagnosticEvidence(readEvidence(diagnostic) ?? "")
1543
+ };
1544
+ });
1546
1545
  };
1547
1546
  //#endregion
1548
1547
  //#region src/cli/utils/is-materializable-git-source.ts
@@ -1550,16 +1549,6 @@ const GIT_LFS_POINTER_HEADER = "version https://git-lfs.github.com/spec/v1";
1550
1549
  const isMaterializableGitSource = (content) => !content.includes("\0") && !content.startsWith(GIT_LFS_POINTER_HEADER);
1551
1550
  //#endregion
1552
1551
  //#region src/cli/utils/materialize-baseline-files.ts
1553
- /**
1554
- * Materializes the base side of the `ref` → worktree diff into
1555
- * `tempDirectory`, mirroring the project layout plus head's config files so
1556
- * both sides lint under the same rules. Git rename heuristics are disabled by
1557
- * the diff planner, so an old path is retained as a base deletion while its
1558
- * new path is a head addition. Missing head-only additions are expected, and a
1559
- * base-only deletion that cannot be read has nothing at head to compare
1560
- * against; only a missing path that the plan says exists on both sides makes
1561
- * `isComplete` false.
1562
- */
1563
1552
  const materializeBaselineFiles = (input) => runPromise(gen(function* () {
1564
1553
  const git = yield* Git;
1565
1554
  const diffPlan = yield* git.baselineDiffPlan({
@@ -1586,9 +1575,10 @@ const materializeBaselineFiles = (input) => runPromise(gen(function* () {
1586
1575
  const headFileSet = new Set(headFiles);
1587
1576
  return {
1588
1577
  ...tree,
1578
+ renamedFiles: diffPlan?.renamedFiles,
1589
1579
  baseFiles,
1590
1580
  headFiles,
1591
- isComplete: baseFiles.every((filePath) => materializedFiles.has(filePath) || !headFileSet.has(filePath)),
1581
+ isComplete: baseFiles.every((filePath) => materializedFiles.has(filePath) || !headFileSet.has(diffPlan?.renamedFiles?.[filePath] ?? filePath)),
1592
1582
  untrackedFiles
1593
1583
  };
1594
1584
  }).pipe(provide(Git.layerNode)));
@@ -1613,7 +1603,7 @@ const resolveMergeBaseRef = async (directory, ref) => {
1613
1603
  //#region src/cli/utils/has-unlinted-surviving-base-file.ts
1614
1604
  const hasUnlintedSurvivingBaseFile = (input) => {
1615
1605
  const analyzedBaseFiles = new Set(input.analyzedBaseFiles.map(toForwardSlashes));
1616
- return filterSourceFiles(input.baseLintPaths.map(toForwardSlashes)).some((filePath) => input.headFiles.has(filePath) && !analyzedBaseFiles.has(filePath));
1606
+ return filterSourceFiles(input.baseLintPaths.map(toForwardSlashes)).some((filePath) => input.headFiles.has(input.renamedFiles?.[filePath] ?? filePath) && !analyzedBaseFiles.has(filePath));
1617
1607
  };
1618
1608
  //#endregion
1619
1609
  //#region src/cli/utils/run-baseline-comparison.ts
@@ -1745,7 +1735,8 @@ const runBaselineComparison = async (input) => {
1745
1735
  if (countIncompleteLintFiles(baseOutput.lintPartialFailures) > 0 && hasUnlintedSurvivingBaseFile({
1746
1736
  baseLintPaths: materializedLintPaths,
1747
1737
  headFiles: expectedHeadFiles,
1748
- analyzedBaseFiles: baseOutput.analyzedFiles
1738
+ analyzedBaseFiles: baseOutput.analyzedFiles,
1739
+ renamedFiles: snapshot.renamedFiles
1749
1740
  })) return null;
1750
1741
  const hasUnscannedUntrackedSourceFiles = filterSourceFiles(filterPathsOutsideDirectories({
1751
1742
  rootDirectory: input.directory,
@@ -1754,16 +1745,17 @@ const runBaselineComparison = async (input) => {
1754
1745
  }).map(toForwardSlashes)).some((filePath) => !analyzedHeadFiles.has(filePath));
1755
1746
  const diagnosticDelta = computeDiagnosticDelta({
1756
1747
  headDiagnostics: input.headDiagnostics,
1757
- baseDiagnostics: baseOutput.diagnostics,
1758
- readHeadLine: createSourceLineReader(input.directory),
1759
- readBaseLine: createSourceLineReader(snapshot.tempDirectory),
1760
- readHeadEvidence: createDiagnosticEvidenceReader(input.directory, { resolveForwardedHandlers: true }),
1761
- readBaseEvidence: createDiagnosticEvidenceReader(snapshot.tempDirectory)
1748
+ renamedFiles: snapshot.renamedFiles ?? {},
1749
+ baseDiagnostics: withDiagnosticFingerprints(snapshot.tempDirectory, baseOutput.diagnostics),
1750
+ readHeadLine: () => null,
1751
+ readBaseLine: () => null
1762
1752
  });
1763
1753
  return {
1764
1754
  displayDiagnostics: diagnosticDelta.newDiagnostics,
1765
1755
  baselineDelta: {
1766
1756
  baseRef: input.baselineRef,
1757
+ source: "base",
1758
+ matchedCount: baseOutput.diagnostics.length - diagnosticDelta.fixedCount,
1767
1759
  fixedCount: hasUnscannedUntrackedSourceFiles ? 0 : diagnosticDelta.fixedCount,
1768
1760
  baseTotalCount: baseOutput.diagnostics.length,
1769
1761
  crossFileMatchCount: diagnosticDelta.crossFileMatchCount
@@ -2056,12 +2048,12 @@ const resolveCacheFilePath = (projectDirectory) => path.join(resolveReactDoctorC
2056
2048
  const readPersistedCache = (cacheFilePath) => {
2057
2049
  try {
2058
2050
  const parsed = JSON.parse(fs.readFileSync(cacheFilePath, "utf8"));
2059
- if (!isRecord(parsed) || parsed.version !== 7) return {
2060
- version: 7,
2051
+ if (!isRecord(parsed) || parsed.version !== 8) return {
2052
+ version: 8,
2061
2053
  entries: []
2062
2054
  };
2063
2055
  if (!Array.isArray(parsed.entries)) return {
2064
- version: 7,
2056
+ version: 8,
2065
2057
  entries: []
2066
2058
  };
2067
2059
  const entries = [];
@@ -2076,12 +2068,12 @@ const readPersistedCache = (cacheFilePath) => {
2076
2068
  });
2077
2069
  }
2078
2070
  return {
2079
- version: 7,
2071
+ version: 8,
2080
2072
  entries
2081
2073
  };
2082
2074
  } catch {
2083
2075
  return {
2084
- version: 7,
2076
+ version: 8,
2085
2077
  entries: []
2086
2078
  };
2087
2079
  }
@@ -2125,14 +2117,14 @@ const resolveScanResultToolchainFingerprint = (nodeBinaryPath) => {
2125
2117
  return fingerprints;
2126
2118
  };
2127
2119
  const buildScanResultCacheKey = async (input) => {
2128
- if (isCacheGloballyDisabled()) return null;
2120
+ if (isCacheGloballyDisabled() || input.options.baselineReport) return null;
2129
2121
  const isTrustworthyPromise = isGitIdentityTrustworthy(input.projectDirectory);
2130
2122
  const repositoryIdentityPromise = resolveRepositoryCacheIdentity(input.projectDirectory, input.invocationState, runGitAsync(input.projectDirectory, REPOSITORY_ROOT_GIT_ARGUMENTS));
2131
2123
  const [isTrustworthy, repositoryIdentity] = await Promise.all([isTrustworthyPromise, repositoryIdentityPromise]);
2132
2124
  if (!isTrustworthy || repositoryIdentity === null) return null;
2133
2125
  if (stringifyStableJson(input.userConfig) === null) return null;
2134
2126
  const cacheKeyJson = stringifyStableJson({
2135
- schemaVersion: 7,
2127
+ schemaVersion: 8,
2136
2128
  projectIdentity: resolveProjectIdentity(input.projectDirectory),
2137
2129
  headSha: repositoryIdentity.headSha,
2138
2130
  worktreeFingerprint: repositoryIdentity.worktreeFingerprint,
@@ -2180,7 +2172,7 @@ const createScanResultCache = (projectDirectory) => {
2180
2172
  for (const entry of readPersistedCache(cacheFilePath).entries) mergedEntries.set(entry.key, entry);
2181
2173
  for (const entry of entries.values()) mergedEntries.set(entry.key, entry);
2182
2174
  atomicWriteJson(cacheFilePath, {
2183
- version: 7,
2175
+ version: 8,
2184
2176
  entries: [...mergedEntries.values()].sort((firstEntry, secondEntry) => secondEntry.createdAtMs - firstEntry.createdAtMs).slice(0, 20)
2185
2177
  });
2186
2178
  };
@@ -2224,7 +2216,7 @@ const createScanResultCacheLifecycle = async (input) => {
2224
2216
  recordSentryProjectContext(cachedPayload.project, input.rootSpan, { concurrentScan: input.options.concurrentScan });
2225
2217
  recordCount(METRIC.projectDetected, 1);
2226
2218
  const isDiffMode = input.options.includePaths.length > 0;
2227
- const baselineDegraded = Boolean(input.options.baseline) && isDiffMode && cachedPayload.baselineDelta === void 0;
2219
+ const baselineDegraded = (Boolean(input.options.baselineReport) || Boolean(input.options.baseline) && isDiffMode) && cachedPayload.baselineDelta === void 0;
2228
2220
  return renderAndRecordScan({
2229
2221
  payload: cachedPayload,
2230
2222
  options: input.options,
@@ -2395,16 +2387,36 @@ const runInspectWithRuntime = async (directory, options, userConfig, hasConfigOv
2395
2387
  const lintFailureReason = lintBindingMissing ? `oxlint native binding not found for Node ${process.version}; expected one matching ${OXLINT_NODE_REQUIREMENT}` : output.lintFailureReason;
2396
2388
  if (!options.scoreOnly && !options.uiLayers && !lintBindingMissing && output.didLintFail && lintFailureReason !== null) if (output.lintFailureReasonKind === "native-binding-missing") runSync(log(highlighter.gray(` Upgrade to Node ${OXLINT_NODE_REQUIREMENT} or run: npx -p oxlint@latest react-doctor@latest`)));
2397
2389
  else runSync(error(highlighter.error(lintFailureReason)));
2398
- let inspectDiagnostics = output.diagnostics;
2390
+ const headDiagnostics = withDiagnosticFingerprints(directory, output.diagnostics);
2391
+ let inspectDiagnostics = headDiagnostics;
2399
2392
  let baselineDelta;
2400
- if (options.baseline && isDiffMode && !didLintFail && !output.didDeadCodeFail && countIncompleteLintFiles(output.lintPartialFailures) === 0) {
2393
+ if (options.baselineReport && !didLintFail && !output.didDeadCodeFail && countIncompleteLintFiles(output.lintPartialFailures) === 0) {
2394
+ const baseDiagnostics = options.baselineReport.diagnostics;
2395
+ const delta = computeDiagnosticDelta({
2396
+ headDiagnostics,
2397
+ baseDiagnostics,
2398
+ renamedFiles: options.baselineReport.renamedFiles ?? {},
2399
+ readHeadLine: () => null,
2400
+ readBaseLine: () => null
2401
+ });
2402
+ inspectDiagnostics = delta.newDiagnostics;
2403
+ baselineDelta = {
2404
+ baseRef: options.baselineReport.file,
2405
+ source: "baseline",
2406
+ baselineFile: options.baselineReport.file,
2407
+ matchedCount: baseDiagnostics.length - delta.fixedCount,
2408
+ baseTotalCount: baseDiagnostics.length,
2409
+ fixedCount: delta.fixedCount,
2410
+ crossFileMatchCount: delta.crossFileMatchCount
2411
+ };
2412
+ } else if (options.baseline && isDiffMode && !didLintFail && !output.didDeadCodeFail && countIncompleteLintFiles(output.lintPartialFailures) === 0) {
2401
2413
  const comparison = await runBaselineComparison({
2402
2414
  directory,
2403
2415
  options,
2404
2416
  userConfig,
2405
2417
  configSourceDirectory,
2406
2418
  headProjectInfo: output.project,
2407
- headDiagnostics: output.diagnostics,
2419
+ headDiagnostics,
2408
2420
  resolvedNodeBinaryPath,
2409
2421
  baselineRef: options.baseline.ref,
2410
2422
  baseFiles: options.baseline.baseFiles,
@@ -2419,10 +2431,10 @@ const runInspectWithRuntime = async (directory, options, userConfig, hasConfigOv
2419
2431
  }
2420
2432
  } else if (options.changedLineRanges !== null && isDiffMode) inspectDiagnostics = filterDiagnosticsByChangedLines({
2421
2433
  directory,
2422
- diagnostics: output.diagnostics,
2434
+ diagnostics: headDiagnostics,
2423
2435
  changedLineRanges: options.changedLineRanges
2424
2436
  });
2425
- const baselineDegraded = Boolean(options.baseline) && isDiffMode && baselineDelta === void 0;
2437
+ const baselineDegraded = (Boolean(options.baselineReport) || Boolean(options.baseline) && isDiffMode) && baselineDelta === void 0;
2426
2438
  const score = didLintFail ? null : output.score;
2427
2439
  const payload = {
2428
2440
  diagnostics: inspectDiagnostics,
@@ -3046,6 +3058,7 @@ const validateFilePathSelectionFlags = (flags) => {
3046
3058
  if (flags.base !== void 0) throw new CliInputError("Cannot combine file path arguments with --base. The selected files do not need a Git base.");
3047
3059
  };
3048
3060
  const validateModeFlags = (flags) => {
3061
+ if (flags.baseline && (flags.staged || flags.scope === "lines" || flags.scope === "files")) throw new CliInputError("--baseline requires a full or changed scan; it cannot be combined with --staged.");
3049
3062
  if (usedScope(flags) && usedDiffAlias(flags)) throw new CliInputError("Cannot combine --scope and --diff; --diff is the deprecated alias.");
3050
3063
  if (flags.staged && usedDiffAlias(flags)) throw new CliInputError("Cannot combine --staged and --diff; pick one mode.");
3051
3064
  if (flags.staged && (flags.scope === "full" || flags.scope === "changed")) throw new CliInputError(`Cannot combine --staged with --scope ${flags.scope}; use --scope files or --scope lines, or drop --scope.`);
@@ -3071,5 +3084,5 @@ const shouldFailScanGate = (input) => {
3071
3084
  //#endregion
3072
3085
  export { createInvocationInspect as A, hasIncompleteScoreAnalysis as B, detectLaunchableAgents as C, buildHandoffPayload as D, launchCliAgent as E, formatSkippedCheckLabel as F, hasLintHardFailure as G, buildNoScoreMessage as H, formatElapsedTime as I, formatFixRecipeLine as J, buildRulePriorityMap as K, printFooter as L, resolveMergeBaseRef as M, printHeadlessReport as N, collectProjectSourceFiles as O, pluralize as P, printDiagnosticsDump as R, setUpGitHubActions as S, copyToClipboard as T, buildEmptyReportMessage as U, filterDiagnosticsByCategories as V, resolveInvocationOxlintConcurrency as W, formatLearnMoreLine as Y, retryMissingProjectScores as _, validateModeFlags as a, filterScansForSurface as b, partitionProjectScanOutcomes as c, buildCodeFrame as d, resolveProjectScan as f, resolveProjectRelativeDirectory as g, resolveProjectSourceFilePaths as h, validateIncludeUntrackedScope as i, inspect as j, deduplicateProjectScans as k, discoverWorkspacePackages as l, resolveProjectDiffIncludePaths as m, formatSkippedProjectsMessage as n, resolveExcludedProjectDirectories as o, resolveProjectChangedLineRanges as p, buildSortedRuleGroups as q, validateFilePathSelectionFlags as r, projectManifestChanged as s, shouldFailScanGate as t, selectProjects as u, resolveWorkspaceDeadCodeOwner as v, CLI_AGENT_BINARIES as w, countUniqueScannedFiles as x, resolveCliInspectOptions as y, formatDiagnosticSite as z };
3073
3086
 
3074
- //# sourceMappingURL=should-fail-scan-gate-BC9hJSI-.js.map
3075
- //# debugId=24fb46c9-b471-5762-a502-488724c08e84
3087
+ //# sourceMappingURL=should-fail-scan-gate-Bjr43-87.js.map
3088
+ //# debugId=93c39db1-e810-5852-8880-ad0dee772a41
@@ -1,10 +1,10 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="8b06c539-b0af-594c-bcee-b70321f01f83")}catch(e){}}();
3
- import { b as isNonInteractiveEnvironment } from "./record-metric-DS3AjkQ3.js";
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="a1c762f4-09d6-5163-a7af-b5f42cc7fd1f")}catch(e){}}();
3
+ import { b as isNonInteractiveEnvironment } from "./record-metric-Do1JAZVB.js";
4
4
  //#region src/cli/utils/should-skip-prompts.ts
5
5
  const shouldSkipPrompts = (input = {}) => Boolean(input.yes) || Boolean(input.json) || isNonInteractiveEnvironment() || !process.stdin.isTTY;
6
6
  //#endregion
7
7
  export { shouldSkipPrompts as t };
8
8
 
9
- //# sourceMappingURL=should-skip-prompts-CxY5MlEp.js.map
10
- //# debugId=8b06c539-b0af-594c-bcee-b70321f01f83
9
+ //# sourceMappingURL=should-skip-prompts-DKwyzEkM.js.map
10
+ //# debugId=a1c762f4-09d6-5163-a7af-b5f42cc7fd1f
@@ -1,6 +1,6 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="54e73aab-7d65-5549-8414-b9d3b730cd17")}catch(e){}}();
3
- import { b as isNonInteractiveEnvironment } from "./record-metric-DS3AjkQ3.js";
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="cd63faec-0fc8-54a4-a321-2f11048e332d")}catch(e){}}();
3
+ import { b as isNonInteractiveEnvironment } from "./record-metric-Do1JAZVB.js";
4
4
  //#region src/cli/utils/resolve-tui-environment.ts
5
5
  const resolveTuiEnvironment = (outputIsTty = process.stdout.isTTY === true) => ({
6
6
  isNonInteractiveEnvironment: isNonInteractiveEnvironment(),
@@ -21,5 +21,5 @@ const shouldUseTui = (input) => {
21
21
  //#endregion
22
22
  export { shouldUseTui as n, resolveTuiEnvironment as r, isTuiEnvironmentSupported as t };
23
23
 
24
- //# sourceMappingURL=should-use-tui-Cgsu0Mow.js.map
25
- //# debugId=54e73aab-7d65-5549-8414-b9d3b730cd17
24
+ //# sourceMappingURL=should-use-tui-DO7NdqR8.js.map
25
+ //# debugId=cd63faec-0fc8-54a4-a321-2f11048e332d
@@ -60,3 +60,7 @@ npx react-doctor@latest --verbose --scope changed
60
60
  | `--scope lines` | Only report issues on the changed lines |
61
61
  | `--score` | Output only the numeric score |
62
62
  | `design` | Run only the focused UI design diagnostics |
63
+
64
+ ### Reuse a base scan
65
+
66
+ Save a complete `--json` scan, then pass `--baseline base-report.json` to report only new findings. This also works with `--scope changed`. Use the same version and rules for both scans. Matches use the rule, file path with Git renames, message, and normalized flagged source. Each base finding can match once; line and column shifts do not make it new. Older reports without fingerprints must be regenerated.
@@ -1,7 +1,7 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="97c7068d-514e-56f4-ae68-b0976f34d9cc")}catch(e){}}();
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="e9138331-ba00-5487-b1f1-01bf85703d32")}catch(e){}}();
3
3
  import { S as SENTRY_FLUSH_TIMEOUT_MS } from "./constants-DJ3RtEMu.js";
4
- import { An as void_, At as isProjectDiscoveryError, Cn as buildWithScope, Dn as close, J as anonymizeText, Jt as scrubSensitivePaths, Ln as isErrnoException, On as makeUnsafe, Pn as messageFromUnknown, Pt as layerObservability, _ as VERSION, a as isEnvFlagEnabled, i as isTelemetryEnabled, jt as isReactDoctorError, ln as make, o as buildSentryScope, q as anonymizeInPlace, vn as runPromise, y as CliInputError, yn as runSync } from "./record-metric-DS3AjkQ3.js";
4
+ import { An as makeUnsafe, Ft as layerObservability, In as messageFromUnknown, J as anonymizeInPlace, Mn as void_, Mt as isReactDoctorError, Tn as buildWithScope, Y as anonymizeText, Yt as scrubSensitivePaths, _ as VERSION, a as isEnvFlagEnabled, bn as runPromise, dn as make, i as isTelemetryEnabled, jt as isProjectDiscoveryError, kn as close, o as buildSentryScope, xn as runSync, y as CliInputError, zn as isErrnoException } from "./record-metric-Do1JAZVB.js";
5
5
  //#region src/cli/utils/is-environment-error.ts
6
6
  const ENVIRONMENT_ERROR_CODES = new Set([
7
7
  "EACCES",
@@ -212,13 +212,13 @@ const isDevVersion = (version) => version === "0.0.0" || version.includes("-");
212
212
  * uploads source-map artifacts under, so stack frames symbolicate. Honors the
213
213
  * standard `SENTRY_RELEASE` override.
214
214
  */
215
- const resolveSentryRelease = () => process.env.SENTRY_RELEASE || `react-doctor@0.9.15-dev.6313667`;
215
+ const resolveSentryRelease = () => process.env.SENTRY_RELEASE || `react-doctor@0.9.15-dev.8ed70df`;
216
216
  /**
217
217
  * Deployment environment shown in Sentry's environment filter. Defaults to
218
218
  * `production` for tagged releases and `development` for dev/unbuilt versions,
219
219
  * overridable via the standard `SENTRY_ENVIRONMENT` env var.
220
220
  */
221
- const resolveSentryEnvironment = () => process.env.SENTRY_ENVIRONMENT || (isDevVersion("0.9.15-dev.6313667") ? "development" : "production");
221
+ const resolveSentryEnvironment = () => process.env.SENTRY_ENVIRONMENT || (isDevVersion("0.9.15-dev.8ed70df") ? "development" : "production");
222
222
  //#endregion
223
223
  //#region src/instrument.ts
224
224
  let sentryPromise = null;
@@ -396,5 +396,5 @@ const shutdownTelemetry = async () => {
396
396
  //#endregion
397
397
  export { initializeSentry as a, isNpmCacheCorruptionError as c, getSentry as i, formatEnvironmentError as l, shutdownTelemetry as n, isExpectedUserError as o, flushSentry as r, formatNpmCacheCorruptionError as s, getTelemetryContext as t, isEnvironmentError as u };
398
398
 
399
- //# sourceMappingURL=telemetry-runtime-rWUZdMHt.js.map
400
- //# debugId=97c7068d-514e-56f4-ae68-b0976f34d9cc
399
+ //# sourceMappingURL=telemetry-runtime-D3teullu.js.map
400
+ //# debugId=e9138331-ba00-5487-b1f1-01bf85703d32
@@ -1,7 +1,7 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="28dac591-27d8-5095-81fe-5b9beba689da")}catch(e){}}();
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="ae2c8f8c-82a3-552f-8125-ff661638d6a2")}catch(e){}}();
3
3
  import { u as METRIC } from "./constants-DJ3RtEMu.js";
4
- import { _ as VERSION, t as recordCount } from "./record-metric-DS3AjkQ3.js";
4
+ import { _ as VERSION, t as recordCount } from "./record-metric-Do1JAZVB.js";
5
5
  //#region src/cli/commands/version.ts
6
6
  /**
7
7
  * oclif-style version line. 12-factor CLI Apps (#3, "What version am I
@@ -18,5 +18,5 @@ const versionAction = () => {
18
18
  //#endregion
19
19
  export { versionAction };
20
20
 
21
- //# sourceMappingURL=version-AmrbbM3P.js.map
22
- //# debugId=28dac591-27d8-5095-81fe-5b9beba689da
21
+ //# sourceMappingURL=version-Kj44qNuh.js.map
22
+ //# debugId=ae2c8f8c-82a3-552f-8125-ff661638d6a2
@@ -1,6 +1,6 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="ba665ac8-c54d-593b-aa93-cdcd5cb76797")}catch(e){}}();
3
- import { t as inspectAction } from "./inspect-BOJOQFH5.js";
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="558ccca9-960f-507d-abf5-64368cbf0899")}catch(e){}}();
3
+ import { t as inspectAction } from "./inspect-DuT3v6KA.js";
4
4
  //#region src/cli/commands/why.ts
5
5
  /**
6
6
  * `why <file:line>` — explains why a rule fired (or why a suppression didn't
@@ -17,5 +17,5 @@ const whyAction = async (location, options) => {
17
17
  //#endregion
18
18
  export { whyAction };
19
19
 
20
- //# sourceMappingURL=why-0cWz29hR.js.map
21
- //# debugId=ba665ac8-c54d-593b-aa93-cdcd5cb76797
20
+ //# sourceMappingURL=why-BV74fXYk.js.map
21
+ //# debugId=558ccca9-960f-507d-abf5-64368cbf0899
@@ -1,8 +1,8 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="9e4f7194-041d-5bde-8bfb-01ace8950a8f")}catch(e){}}();
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="19cd77b1-a7ef-5d7f-8e2e-924be42e2271")}catch(e){}}();
3
3
  import { p as NANOSECONDS_PER_MILLISECOND } from "./constants-DJ3RtEMu.js";
4
- import { An as void_, c as setSentryProjectInfo, dn as makeSpan, gn as provideContext, kn as fail, o as buildSentryScope, r as toSpanAttributes, s as buildSentryProjectContext, yn as runSync } from "./record-metric-DS3AjkQ3.js";
5
- import { t as getTelemetryContext } from "./telemetry-runtime-rWUZdMHt.js";
4
+ import { Mn as void_, c as setSentryProjectInfo, jn as fail, o as buildSentryScope, pn as makeSpan, r as toSpanAttributes, s as buildSentryProjectContext, vn as provideContext, xn as runSync } from "./record-metric-Do1JAZVB.js";
5
+ import { t as getTelemetryContext } from "./telemetry-runtime-D3teullu.js";
6
6
  import { i as setActiveRunTrace, r as recordRunTraceId } from "./active-run-trace-Dewycxda.js";
7
7
  //#region src/cli/utils/with-run-span.ts
8
8
  /**
@@ -107,5 +107,5 @@ const recordSentryProjectContext = (projectInfo, rootSpan, options = {}) => {
107
107
  //#endregion
108
108
  export { resetSentryRunState as n, withRunSpan as r, recordSentryProjectContext as t };
109
109
 
110
- //# sourceMappingURL=with-run-span-CJp_LacB.js.map
111
- //# debugId=9e4f7194-041d-5bde-8bfb-01ace8950a8f
110
+ //# sourceMappingURL=with-run-span-y8D-ZUGk.js.map
111
+ //# debugId=19cd77b1-a7ef-5d7f-8e2e-924be42e2271
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-doctor",
3
- "version": "0.9.15-dev.6313667",
3
+ "version": "0.9.15-dev.8ed70df",
4
4
  "description": "Your agent writes bad React. This catches it",
5
5
  "keywords": [
6
6
  "accessibility",
@@ -70,7 +70,7 @@
70
70
  "typescript": ">=5.0.4 <6",
71
71
  "yaml": "^2.9.0",
72
72
  "yoga-layout": "~3.2.1",
73
- "oxlint-plugin-react-doctor": "0.9.15-dev.6313667"
73
+ "oxlint-plugin-react-doctor": "0.9.15-dev.8ed70df"
74
74
  },
75
75
  "devDependencies": {
76
76
  "@types/babel__code-frame": "^7.27.0",
@@ -83,8 +83,8 @@
83
83
  "ora": "^9.4.0",
84
84
  "react": "19.2.5",
85
85
  "react-devtools-core": "^7.0.1",
86
- "@react-doctor/api": "0.9.15",
87
- "@react-doctor/core": "0.9.15"
86
+ "@react-doctor/core": "0.9.15",
87
+ "@react-doctor/api": "0.9.15"
88
88
  },
89
89
  "engines": {
90
90
  "node": "^20.19.0 || >=22.13.0"