AI Slop Code Risk Monitor

recharts/recharts

SlopCodeMonitor badge for recharts/recharts Adjusted legacy signal; badge bands: 25 / 50 / 75 (different from dashboard bands).

Redefined chart library built with React and D3

0.7 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for recharts/recharts, a TypeScript project with 27,675 GitHub stars. SynthScan examined 281,486 lines of code across 1595 source files, recording 195 pattern matches distributed across 5 syntactic categories. The legacy adjusted pattern signal is 0.7 (Low pattern signal); it is not an authorship estimate.

Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.

0.7
Adjusted Signal
0.7
Raw Pattern Score
100%
Time Factor
2026-10-30
Last Push
27.7K
Stars
TypeScript
Language
281.5K
Lines of Code
1.6K
Files
195
Pattern Hits
2026-10-31
Scan Date
0.00
HC Hit Rate

Risk Review · Payload v1

Use each vector to guide manual verification of the underlying findings.

Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.

Cognitive Ownership Risk 3.5/100 · LOW

Can maintainers explain intent, assumptions, and trade-offs? 191 finding(s).

Hallucinated Dependency & Supply Chain Risk 0.1/100 · LOW

Are imports declared and package/API names verified? 4 finding(s).

Agent Over-Engineering Ratio 2.9/100 · LOW

Are wrappers, guards, and repeated structures necessary? 164 finding(s).

PR Review Velocity Impact 3.4/100 · LOW

Which changes need focused human review? 195 finding(s).

What These Metrics Mean

Adjusted Signal
Legacy pattern score normalized per 1,000 scanned lines and multiplied by the repository-level time factor. It is not an estimate of AI authorship.
Raw Pattern Score
Sum of severity- and context-weighted pattern findings before applying the time factor.
Time Factor
A coarse multiplier based on repository last-push metadata. It does not identify when individual code was written.
Pattern Hits
Count of configured pattern findings. Review each location and surrounding code before acting.
HC Hit Rate
High- and critical-severity findings per scanned file. Severity is a configured detector weight, not proof of a vulnerability or authorship.
Lines / Files
Scan coverage denominators used by the legacy normalized score.

Pattern-Signal History

This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.

Severity Breakdown

Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.

CRITICAL 0HIGH 0MEDIUM 0LOW 195

Directory Score Breakdown

This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.

Pattern Findings

The scanner identified 195 distinct pattern matches across 5 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.

Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.

Hyper-Verbose Identifiers164 hits · 168 pts
SeverityFileLineSnippetContext
LOWtest-vr/tests/www/RangedAreaTemplate.tsx39function RangedAreaTemplateWithChartBaseValue({CODE
LOWtest-vr/tests/www/RangedAreaTemplate.tsx56export function AreaRangeViaBaseValueNumber() {CODE
LOWtest-vr/tests/www/RangedAreaTemplate.tsx74export function AreaRangeViaChartBaseValueNumber() {CODE
LOWtest-vr/tests/www/RangedAreaTemplate.tsx91export function AreaRangeViaBaseValueDataMin() {CODE
LOWtest-vr/tests/www/RangedAreaTemplate.tsx109export function AreaRangeViaChartBaseValueDataMax() {CODE
LOWtest-vr/tests/www/RangedAreaTemplate.tsx126export function AreaRangeViaBaseValueDataMax() {CODE
LOWtest-vr/tests/theme/ScatterTheme.story.tsx70export function ScatterFillStrokeVariants() {CODE
LOWtest-vr/tests/theme/RadialBarTheme.story.tsx56export function RadialBarFillStrokeVariants() {CODE
LOWtest-vr/tests/theme/AreaTheme.story.tsx65export function UnthemedAreaWithCustomDot() {CODE
LOWtest-vr/tests/theme/TreemapTheme.story.tsx59export function TreemapFillStrokeVariants() {CODE
LOWtest-vr/tests/theme/TreemapTheme.story.tsx85export function TreemapColorPanelNestedTooltip() {CODE
LOWtest-vr/tests/theme/PolarRadiusAxisTheme.story.tsx11function PolarRadiusAxisThemeChart() {CODE
LOWtest-vr/tests/theme/PolarRadiusAxisTheme.story.tsx21export function PolarRadiusAxisThemeComparison() {CODE
LOWtest-vr/tests/theme/SunburstTheme.story.tsx38export function SunburstFillStrokeVariants() {CODE
LOWtest-vr/tests/theme/PolarAngleAxisTheme.story.tsx23export function PolarAngleAxisThemeComparison() {CODE
LOWtest-vr/tests/ReferenceLine/ifOverflow.story.tsx5function IfOverflowTestWithSegment(props: { ifOverflow: IfOverflow | undefined }) {CODE
LOWtest/cartesian/GraphicalItemClipPath.spec.tsx198 const { spy } = renderTestCase(function useNeedsClipNumericalOverflow() {CODE
LOWtest/cartesian/Brush.spec.tsx720 function ControlledBrushWithChangingData({ children }: { children: React.ReactNode }) {CODE
LOWtest/cartesian/Bar.zeroDimensionFiltering.spec.tsx15function generateSparseStackedData(totalCategories: number, nonZeroCount: number) {CODE
LOWtest/cartesian/Scatter.animation.spec.tsx94function getAllScatterPointPathsDs(container: Element): ReadonlyArray<string | null> {CODE
LOWtest/cartesian/Area.animation.spec.tsx37function expectPathToInterpolateLinearly(CODE
LOWtest/cartesian/Area.animation.spec.tsx175async function expectAreaCurveDoesNotChange(container: Element, animationManager: MockAnimationManager) {CODE
LOWtest/cartesian/Area.animation.spec.tsx240async function expectLabelsHideDuringAnimation(container: Element, animationManager: MockAnimationManager) {CODE
LOWtest/cartesian/Area.animation.spec.tsx256async function horizontalClipPathAnimation(CODE
LOWtest/cartesian/Funnel.animation.spec.tsx21async function expectAnimatedFunnelPaths(CODE
LOWtest/cartesian/CartesianGrid/CartesianGrid.spec.tsx45function expectHorizontalGridLines(container: Element, expectedLines: ReadonlyArray<ExpectedHorizontalLine>) {CODE
LOWtest/polar/PolarGrid.theme.spec.tsx26function getFirstConcentricPolygon(container: HTMLElement): Element {CODE
LOWtest/polar/PolarGrid.spec.tsx940 function RadialBarChartWithMultipleAxesWrapper({ children }: { children: React.ReactNode }) {CODE
LOWtest/polar/Radar.animation.spec.tsx51async function expectAnimatedRadarPolygons(CODE
LOWtest/polar/PolarAngleAxis/PolarAngleAxis.spec.tsx67function expectAngleAxisTickLabels(container: Element, expectedLabels: ReadonlyArray<ExpectedAxisTickLabel>) {CODE
LOWtest/polar/RadialBar/RadialBar.animation.spec.tsx17async function expectAnimatedRadialBarPaths(CODE
LOWtest/shape/Rectangle.animation.spec.tsx87async function expectAnimatedStrokeDasharray(container: HTMLElement, animationManager: MockAnimationManager) {CODE
LOWtest/util/noUndefinedInDom.spec.tsx6function attributesContainingUndefined(container: Element): string[] {CODE
LOWtest/chart/PieChart.spec.tsx248 function assertActiveShapeInteractions(container: HTMLElement, selectors: string) {CODE
LOWtest/chart/RadialBarChart.spec.tsx13function assertActiveShapeInteractions(container: HTMLElement) {CODE
LOWtest/chart/ScatterChart.spec.tsx401function assertActiveShapeInteractions(container: HTMLElement) {CODE
LOWtest/chart/AccessibilityLayer.spec.tsx67function assertNoKeyboardInteractions(container: HTMLElement) {CODE
LOWtest/chart/BarChart.spec.tsx67function assertActiveBarInteractions(container: HTMLElement) {CODE
LOWtest/animation/legacyAnimationLengthChange.spec.tsx257function renderChartWithSelectorSpy(chart: ChartWrapper) {CODE
LOWtest/animation/legacyAnimationLengthChange.spec.tsx277async function completeLengthChangeAnimation(renderResult: ReturnType<typeof renderChartWithSelectorSpy>) {CODE
LOWtest/component/Label.background.spec.tsx248 function expectAllBackgroundsBelowAllTexts(container: Element) {CODE
LOWtest/component/Legend/Legend.itemSorter.spec.tsx401 function MyLegendHidingLineChartTestCase({ children }: { children: ReactNode }) {CODE
LOWtest/component/Legend/Legend.itemSorter.spec.tsx478 function MyLegendHidingAreaChartTestCase({ children }: { children: ReactNode }) {CODE
LOWtest/component/Tooltip/tooltipTestHelpers.tsx97export function showTooltipOnCoordinateTouch(CODE
LOW…electors/combiners/combineDisplayedStackedData.spec.ts21function createMockBaseCartesianAxis(partialBaseAxis: Partial<BaseCartesianAxis>): BaseCartesianAxis {CODE
LOWtest/hooks/useAxisScale.spec.tsx226 function useCartesianScaleNumerical() {CODE
LOWtest/helper/selectorTestHelpers.tsx9export function shouldReturnUndefinedOutOfContext(selector: Selector<RechartsRootState, unknown, never>): void {CODE
LOWtest/helper/mockGetComputedTextLength.ts4export function mockGetComputedTextLength(length: number): void {CODE
LOWtest/helper/mockGetComputedTextLength.ts12export function restoreMockGetComputedTextLength(): void {CODE
LOWtest/helper/consoleWarningToError.ts79export function setupConsoleWarningToError(): void {CODE
LOWtest/helper/logAllReduxActionsMiddleware.ts1export function logAllReduxActionsMiddleware(actionsThatLogPayload?: RegExp) {CODE
LOWtest/helper/mockGetBoundingClientRect.ts34export function mockGetBoundingClientRect(rect: Partial<DOMRect>, mockClientHeightWidth = true): void {CODE
LOWtest/helper/mockGetBoundingClientRect.ts52export function mockSequenceOfGetBoundingClientRect(CODE
LOWtest/helper/mockHTMLElementProperty.ts15export function restoreHTMLElementProperties() {CODE
LOWtest/helper/createSelectorTestCase.tsx201export function createSynchronisedSelectorTestCase(CODE
LOWtest/helper/expectScale.ts49export function expectLastCalledWithScale(spy: Mock<(scale: RechartsScale) => unknown>, expected: ExpectedScale) {CODE
LOWtest/helper/mockGetTotalLength.ts28export function restoreMockGetTotalLength(): void {CODE
LOWtest/helper/expectStackGroups.ts68function rechartsStackedDataMatcher(CODE
LOWtest/helper/expectStackGroups.ts88function rechartsStackedSeriesMatcher(CODE
LOWtest/helper/expectStackGroups.ts108function rechartsStackedSeriesPointMatcher(received: StackDataPoint, expected: StackDataPoint): SyncExpectationResult {CODE
104 more matches not shown…
Structural Annotation Overuse15 hits · 22 pts
SeverityFileLineSnippetContext
LOW.agents/shared/suppression-targets/WORKFLOW.md36## Step 1: Start from a clean, current `main`COMMENT
LOW.agents/shared/suppression-targets/WORKFLOW.md59## Step 2: Pick the targetCOMMENT
LOW.agents/shared/suppression-targets/WORKFLOW.md99## Step 3: Create the branchCOMMENT
LOW.agents/shared/suppression-targets/WORKFLOW.md130## Step 6: VerifyCOMMENT
LOW.agents/shared/suppression-targets/WORKFLOW.md185## Step 7: Decide the outcomeCOMMENT
LOW.agents/shared/suppression-targets/WORKFLOW.md251## Step 8: Commit, push, and open the PRCOMMENT
LOW.agents/shared/suppression-targets/WORKFLOW.md295## Step 9: ReportCOMMENT
LOW.agents/skills/fix-type-violation/SKILL.md40## Step 4: Understand each violationCOMMENT
LOW.agents/skills/fix-type-violation/SKILL.md56## Step 5: Fix the violationsCOMMENT
LOW.agents/skills/fix-type-violation/SKILL.md264## Step 7: Give up criteriaCOMMENT
LOW.agents/skills/fix-type-violation/SKILL.md281## Step 8: Commit message and PR titleCOMMENT
LOW.agents/skills/fix-perf-violation/SKILL.md58## Step 4: Understand each violationCOMMENT
LOW.agents/skills/fix-perf-violation/SKILL.md69## Step 5: Fix the violationsCOMMENT
LOW.agents/skills/fix-perf-violation/SKILL.md207## Step 7: Give up criteriaCOMMENT
LOW.agents/skills/fix-perf-violation/SKILL.md226## Step 8: Commit message and PR titleCOMMENT
Over-Commented Block11 hits · 11 pts
SeverityFileLineSnippetContext
LOWstorybook/css.d.ts1// Ambient CSS module declaration for Vite-bundled storybook.COMMENT
LOWtest/cartesian/Bar/Bar.typed.spec.tsx141 expectBars(container, []);COMMENT
LOWtest/cartesian/Bar/Bar.typed.spec.tsx161 // it('should allow when Bar data is matching Bar dataKey as function', () => {COMMENT
LOWtest/cartesian/Bar/Bar.typed.spec.tsx181 // * TypeScript can show errors here.COMMENT
LOWtest/component/Legend/Legend.spec.tsx541 // For Label "top", verticalAnchor is 'end' (above the point y).COMMENT
LOWtest/component/Tooltip/Tooltip.sync.spec.tsx241// <XAxis dataKey="uv" name="stature" unit="cm" />COMMENT
LOWtest/component/Tooltip/Tooltip.sync.spec.tsx261// TODO: support synchronization in Sankey, Sunburst, TreemapCOMMENT
LOWtest/component/Tooltip/Tooltip.sync.spec.tsx281// expectedTransform: 'transform: translate(285px, 210px);',COMMENT
LOW.github/workflows/npm-publish.yml1# This workflow installs dependencies, builds the package, and publishes it to npm when a release is createdCOMMENT
LOWsrc/polar/Radar.tsx441 * Radar provides a Cartesian label list context. Do we want to also provide a polar label list context?COMMENT
LOWsrc/util/resolveDefaultProps.tsx121 // - Pick<T, Extract<...>>: Selects these specific properties from T. At this stage, they still retain their originaCOMMENT
Fake / Example Data4 hits · 4 pts
SeverityFileLineSnippetContext
LOWtest-vr/tests/LegendPosition.story.tsx69const veryLongText1 = 'Lorem Ipsum dolor sit amet, consectetur adipiscing elit. '.repeat(3);CODE
LOWtest-vr/tests/LegendPosition.story.tsx69const veryLongText1 = 'Lorem Ipsum dolor sit amet, consectetur adipiscing elit. '.repeat(3);CODE
LOW…exampleComponents/SunburstChart/BundleSizeSunburst.tsx198 generatedAt: 'placeholder',CODE
LOW…c/docs/exampleComponents/TreeMap/BundleSizeTreemap.tsx198 generatedAt: 'placeholder',CODE
Redundant / Tautological Comments1 hit · 2 pts
SeverityFileLineSnippetContext
LOW.github/workflows/sync-playwright-versions.yml64 # Check if there are changes to commit before creating a commit.COMMENT