Skip to content

feat(packs): recharts 2 → 3 candidate pack - #105

Draft
lucasbraum wants to merge 2 commits into
mainfrom
claude/pensive-galileo-y0l0g0
Draft

lucasbraum wants to merge 2 commits into
mainfrom
claude/pensive-galileo-y0l0g0

Conversation

@lucasbraum

Copy link
Copy Markdown
Collaborator

Pack

recharts, >=2 <3 → >=3 <4. Status: candidate (2 public repositories, breaking precision 21%, recall 31%). Not verified: 67 false positives among breaking findings. No pack-request issue; first todo entry of packs/queue.json.

Sources

Rules and behavior notes

Rules (check claims them by compiler message or type-diff path):

  • categorical-chart-state (breaking, agent): CategoricalChartState, chartX/chartY/activePayload on mouse handlers, chart.setState.
  • tooltip-content-props (breaking, agent): custom Tooltip content typed with TooltipProps; use TooltipContentProps.
  • legend-payload (breaking, agent): Legend payload removed; custom legend content typed with DefaultLegendContentProps.
  • active-index (breaking, agent): activeIndex removed; shape with index.
  • internal-props (breaking, agent): Scatter/Area points.
  • pie-blend-stroke (breaking, agent): blendStroke to stroke="none".
  • always-show (breaking, rewrite): alwaysShow to ifOverflow="extendDomain"; declines computed values and elements that already set ifOverflow.
  • unused-props (breaking, rewrite): removes isFront (reference elements) and animateNewValues (Area, Funnel), documented as no-ops.
  • cell (deprecated, agent) and pie-active-shape (deprecated, agent).

Behavior notes (all decision): accessibility-layer, render-order-z-index, legend-order, axes-rendering, cartesian-grid-axis-id, area-null-values, scatter-tooltip-colors, customized-props, environment-requirements.

No official codemod exists for this major. The two rewrite rules rest on fixtures and the guide only (no ground-truth repository uses those props).

Ground-truth repositories

uptide pack test output

uptide pack test recharts · candidate
fixtures      2 cases, 11 sites · pass
ground truth
  shadcn-ui/ui@f900bd57d0d1                    recharts 2.15.1 → 3.8.0  predicted 86, expected 45, false positives 67, false negatives 26
  hyperdxio/hyperdx@a33686ef2397               recharts 2.13.3 → 3.9.1  predicted 87, expected 20, false positives 82, false negatives 15

  rule                         precision  recall    tp   fp   fn
  active-index                      100%    100%     4    0    0
  categorical-chart-state           100%      0%     0    0    8
  cell                              100%    100%     5    0    0
  generic                             6%     21%     7  120   26
  legend-payload                     30%    100%     7   16    0
  tooltip-content-props               0%      0%     0   14    8
  overall (sites)                    14%     37%    24  149   41
  breaking (sites)                   21%     31%    18   67   41

false negatives (41): 26 in shadcn-ui/ui, 15 in hyperdxio/hyperdx
  shadcn: the 7 chart.tsx tooltip-content-props findings (line 127/128), 12 Label content `viewBox` implicit any, 4 dataKey symbol, 3 dot/label render functions, 2 radar tick sites... all `generic` except the tooltip ones
  hyperdx: HDXMultiSeriesTimeChart 877/894/915/970 + PropertyComparisonChart 148 + DBHistogramChart 13/53/85 (categorical-chart-state), Alerts 163/178/186/201/215, HDXMultiSeriesTimeChart 848/1065 (generic)
reported under another rule (1)
  hyperdxio/hyperdx@a33686ef2397  packages/app/src/components/PropertyComparisonChart.tsx:53  generic, expected tooltip-content-props

FAIL recharts: 67 false positives among breaking findings

The 149 false positives (67 breaking, all in shadcn-ui/ui; the rest are unverified type-diff sites in hyperdxio/hyperdx) are printed by pnpm uptide pack test recharts.

Existing packs, same run (pnpm uptide pack test, main plus this branch):

uptide pack test ai · verified            breaking (sites) 100%  82%   9   0   2   PASS
uptide pack test react · candidate, recorded verified
  tldraw/tldraw@5957867a9c5c  error: installing tldraw/tldraw failed: packageManager "yarn@4.7.0" vs the global corepack version
  breaking (sites) 100%  80%  57  0  14                                             FAIL (environment)
uptide pack test stripe · verified        breaking (sites) 100%  90%  18   0   2   PASS
uptide pack test vitest · verified        breaking (sites) 100%  50%  16   0  16   PASS
uptide pack test zod · verified           breaking (sites) 100%  74%  59   0  21   PASS

ai, stripe, vitest and zod pass and are unchanged. react fails with verification.json does not match this run, an environment issue, not a regression: tldraw/tldraw cannot install in this sandbox (corepack rejects its pinned yarn@4.7.0), so one public repository was scored. This branch does not touch the react pack. pnpm lint (one pre-existing warning in fix/report.test.ts), pnpm typecheck and pnpm test (core 1373, cli 431) pass.

Why it is a candidate (what is missing)

  1. The engine reports every diagnostic line of a shared cause; the ground truth records the cause once. All 7 copies of shadcn's chart.tsx give 8 breaking sites each (payload/label missing on the tooltip props, implicit any further down, Pick<LegendProps>, .length of {}), plus 21 <ChartLegend content={<ChartLegendContent />} /> sites with TS2741. The folding of missing-member diagnostics into one finding (feat(check): one finding when call sites trace to a member declared in a repository augmentation #60) does not cover these destructured-parameter and intersection-type cases. I did not touch the engine and did not move expectations to match it.
  2. hyperdxio/hyperdx packages/app is not compiled: 22 of 33 files cannot resolve their imports at the installed version; compile signal skipped (workspace packages are not built, scripts off). Its compiler-visible sites (chartX, CategoricalChartState, Cell, ReferenceArea props) are false negatives of the compile signal; its type-diff sites show as unverified false positives in the overall score (not breaking).
  3. check cannot install a subdirectory (--directory) whose lockfile is at the repository root (UNSUPPORTED_PACKAGE_MANAGER), so both repositories are scored at their root.

Not covered

  • Undocumented 3.x type breaks (generic in the ground truth, no rule because no source lists them): ReferenceArea no longer accepts fill, strokeWidth, strokeOpacity (3.6+ declarations), Bar layout, dataKey accepting symbol, Label/LabelList/tick/dot render function prop types, ResponsiveContainer onResize parameters.
  • Seen in the upgrades, no source: partial margin objects gaining top/bottom, ResponsiveContainer initialDimension, a changed axis tick CSS class in an e2e selector.
  • react-is was added by the hyperdx upgrade as a peer of recharts 3; with is empty because it was added, not moved.

Tooling friction

  • uptide check from the CLI in source mode fails its worker (Cannot find module .../errors.js imported from check/worker.ts); pack test runs in process and is unaffected.
  • packs:truth --directory fails for monorepo subdirectories (see 3 above).
  • Grouping 220 compiler diagnostics by root cause was manual; a root-cause hint in packs:truth output would save most of the time.

Supersedes: none (no earlier pack-candidate PR).

🤖 Generated with Claude Code

https://claude.ai/code/session_01AFXK727TTb22LDSsUriVuc


Generated by Claude Code

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AFXK727TTb22LDSsUriVuc
Signed-off-by: Claude <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AFXK727TTb22LDSsUriVuc
Signed-off-by: Claude <noreply@anthropic.com>
@lucasbraum lucasbraum added the pack-candidate Migration pack proposed by the daily pack task label Oct 13, 2026 — with Claude

Copy link
Copy Markdown
Collaborator Author

Rerun on 2026-10-14: this PR's two commits cherry-picked onto current main (40e870b), scripts off.

pack test recharts is unchanged, still candidate:

  • shadcn-ui/ui@f900bd57d0d1: predicted 86, expected 45, false positives 67, false negatives 26
  • hyperdxio/hyperdx@a33686ef2397: predicted 87, expected 20, false positives 82, false negatives 15
  • breaking (sites): precision 21%, recall 31% (tp 18, fp 67, fn 41)
  • overall (sites): precision 14%, recall 37%
  • FAIL: 67 false positives among breaking findings

The blockers in the PR body (diagnostics of a shared cause not folded for destructured-parameter and intersection types; hyperdx packages/app not compiled; no subdirectory install) are engine issues. Per the task rules I did not touch the engine, rules, expectations or ground truth, and there is nothing new to push.

Existing packs, same run: ai 100%/82%, stripe 100%/90%, vitest 100%/50%, zod 100%/74% all PASS and unchanged. react fails only because tldraw/tldraw cannot install here (pinned yarn@4.7.0 vs global yarn 1.22.22): environment issue, not a regression.

Retry when the engine folds shared-cause diagnostics or compiles workspace packages.


Generated by Claude Code

Copy link
Copy Markdown
Collaborator Author

Rerun on 2026-10-15: this PR's two commits cherry-picked onto current main (0db5640, which includes #138 "respect TypeScript project compile scope"). Conflicts were only in registry.ts and the README table (other packs landed), resolved by keeping both sides. Scripts off.

pack test recharts is unchanged, still candidate:

  • shadcn-ui/ui@f900bd57d0d1: predicted 86, expected 45, false positives 67, false negatives 26
  • hyperdxio/hyperdx@a33686ef2397: predicted 87, expected 20, false positives 82, false negatives 15
  • breaking (sites): precision 21%, recall 31% (tp 18, fp 67, fn 41)
  • overall (sites): precision 14%, recall 37%
  • FAIL: 67 false positives among breaking findings

#138 did not change the hyperdx packages/app compile signal or the shared-cause folding. The blockers in the PR body are engine issues, so I did not touch the engine, rules, expectations or ground truth, and there is nothing new to push (no new PR opened). The branch is also dirty against main; a rebase onto main is needed before it can leave draft, but only after the engine blockers are resolved.

Retry when the engine folds shared-cause diagnostics (destructured-parameter and intersection-type cases) or compiles workspace packages.


Generated by Claude Code

Copy link
Copy Markdown
Collaborator Author

Rerun on 2026-10-16: this PR's two commits cherry-picked onto current main (5298b85, "pin the Uptide Action to v0.14.0"). Conflicts were only in registry.ts and the README table (other packs landed), resolved by keeping both sides. Scripts off.

pack test recharts is unchanged, still candidate:

  • shadcn-ui/ui@f900bd57d0d1: predicted 86, expected 45, false positives 67, false negatives 26
  • hyperdxio/hyperdx@a33686ef2397: predicted 87, expected 20, false positives 82, false negatives 15
  • breaking (sites): precision 21%, recall 31% (tp 18, fp 67, fn 41)
  • overall (sites): precision 14%, recall 37%
  • FAIL: 67 false positives among breaking findings

The blockers in the PR body (shared-cause diagnostics not folded for destructured-parameter and intersection types; hyperdx packages/app not compiled; no subdirectory install) are engine issues tracked elsewhere. I did not touch the engine, rules, expectations or ground truth, and there is nothing new to push (no new PR opened). The head branch is still behind main and needs a rebase before it can leave draft, only after the engine blockers are resolved.

Retry when the engine folds shared-cause diagnostics or compiles workspace packages.


Generated by Claude Code

Copy link
Copy Markdown
Collaborator Author

Rerun on 2026-10-17: this PR's two commits cherry-picked onto current main (4c3dc23, "warn on low per-rule rewrite precision (UPT-65)"). Conflicts were only in registry.ts and the README table, resolved by keeping both sides (the README row is in the new table format, rules 10 and breaking sites 59 are my count, please check). Scripts off. Commits are on claude/pensive-galileo-co53gl; no new PR opened because nothing changed in the pack.

pack test recharts is unchanged, still candidate:

  • shadcn-ui/ui@f900bd57d0d1: false positives 67, false negatives 26
  • hyperdxio/hyperdx@a33686ef2397: false positives 82, false negatives 15
  • breaking (sites): precision 21%, recall 31% (tp 18, fp 67, fn 41)
  • overall (sites): precision 14%, recall 37%
  • FAIL: 67 false positives among breaking findings
  • New on main: verification.json differs from this run for recharts (and for the packs below), not written since no pack content changed.

The engine blockers in the PR body are unchanged, so I did not touch the engine, rules, expectations or ground truth.

Existing packs, breaking (sites) precision / recall:

  • PASS: ai 100%/82%, express 100%/85%, ioredis candidate (n/a, 0%), joi 100%/100%, lucide-react 100%/100%, next 100%/88%, openai 100%/15%, react-router 100%/88%, redis 100%/83%, @sentry/browser 100%/100%, @sentry/nextjs 100%/100%, @sentry/react 100%/100%
  • react: FAIL (environment), tldraw/tldraw cannot install (pinned yarn@4.7.0 vs global corepack); 100%/85% on the other repo
  • stripe, typescript, vitest, zod: FAIL (environment). The sandbox's disk allowance ran out (ENOSPC while installing ground-truth repos, and one git fetch failed), so some repos were not scored. The partial numbers are not comparable to the recorded ones and are not a regression. They need a rerun in a session with more disk.

Retry when the engine folds shared-cause diagnostics or compiles workspace packages.


Generated by Claude Code

Copy link
Copy Markdown
Collaborator Author

Rerun on 2026-10-18: this PR's two commits cherry-picked onto current main (ae175a9, "an oversized PR body is shortened (UPT-106)"). Conflicts were only in registry.ts and the README table (kept both sides in the registry; kept main's new table format in the README without a recharts row, since candidates are listed under "in validation"). Scripts off. Commits are on claude/pensive-galileo-3jslwa; no new PR opened because nothing changed in the pack.

pack test recharts is still candidate:

  • shadcn-ui/ui@f900bd57d0d1: predicted 79, expected 45, false positives 60 (was 67), false negatives 26
  • hyperdxio/hyperdx@a33686ef2397: predicted 87, expected 20, false positives 82, false negatives 15
  • breaking (sites): precision 23% (was 21%), recall 31% (tp 18, fp 60, fn 41)
  • overall (sites): precision 14%, recall 37%
  • FAIL: 60 false positives among breaking findings
  • verification.json differs from this run: not written, since no pack content changed.

The engine blockers in the PR body (shared-cause diagnostics not folded for destructured-parameter and intersection types; hyperdx packages/app not compiled; no subdirectory install) are still open. I did not touch the engine, rules, expectations or ground truth.

Existing packs: only ai (100%/82%), express (100%/86%) and ioredis (candidate, n/a/0%) were scored, all PASS. The run then hit ENOSPC (the sandbox disk allowance was spent, mostly by the ground-truth install cache), so joi, lucide-react, next, openai, react, react-router, redis, @sentry/*, stripe, typescript, vitest and zod were not scored. This is an environment issue, not a regression; they need a rerun in a session with more disk. pnpm lint, typecheck and the full tests were not rerun for the same reason.

Retry when the engine folds shared-cause diagnostics or compiles workspace packages.


Generated by Claude Code

Copy link
Copy Markdown
Collaborator Author

Rerun on 2026-10-19: this PR's two commits cherry-picked onto current main (e48373d, "catch silent billing-mode changes end to end (UPT-113)"). Conflicts only in registry.ts (kept both sides) and README (kept main's, no recharts row). Scripts off. Commits are on claude/pensive-galileo-keuhxl; no new PR opened because nothing changed in the pack.

pack test recharts is unchanged from 2026-10-18, still candidate:

  • shadcn-ui/ui@f900bd57d0d1: predicted 79, expected 45, false positives 60, false negatives 26
  • hyperdxio/hyperdx@a33686ef2397: predicted 87, expected 20, false positives 82, false negatives 15
  • breaking (sites): precision 23%, recall 31% (tp 18, fp 60, fn 41)
  • overall (sites): precision 14%, recall 37%
  • FAIL: 60 false positives among breaking findings
  • verification.json differs from this run: not written, since no pack content changed.

The engine blockers in the PR body (shared-cause diagnostics not folded for destructured-parameter and intersection types; hyperdx packages/app not compiled; no subdirectory install) are still open. I did not touch the engine, rules, expectations or ground truth.

Existing packs (breaking sites, precision/recall): ai 100%/82%, express 100%/86%, ioredis candidate (n/a/0%), joi 100%/100%, lucide-react 100%/100%, next 100%/88%, all PASS. The run then hit ENOSPC again (sandbox disk allowance spent by the ground-truth install cache), so openai, react, react-router, redis, @sentry/*, stripe, typescript, vitest and zod were not scored. Environment issue, not a regression. lint, typecheck and full tests were not rerun for the same reason; this branch does not touch engine code.

Retry when the engine folds shared-cause diagnostics or compiles workspace packages.


Generated by Claude Code

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

Labels

pack-candidate Migration pack proposed by the daily pack task

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants