AI Slop Code Risk Monitor

radix-ui/primitives

SlopCodeMonitor badge for radix-ui/primitives Adjusted legacy signal; badge bands: 25 / 50 / 75 (different from dashboard bands).

Radix Primitives is an open-source UI component library for building high-quality, accessible design systems and web apps. Maintained by @workos.

0.7 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for radix-ui/primitives, a TypeScript project with 19,457 GitHub stars. SynthScan examined 104,474 lines of code across 683 source files, recording 74 pattern matches distributed across 3 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-14
Last Push
19.5K
Stars
TypeScript
Language
104.5K
Lines of Code
683
Files
74
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 2.0/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 1.5/100 · LOW

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

Agent Over-Engineering Ratio 1.8/100 · LOW

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

PR Review Velocity Impact 3.5/100 · LOW

Which changes need focused human review? 74 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 74

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 74 distinct pattern matches across 3 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 Identifiers38 hits · 38 pts
SeverityFileLineSnippetContext
LOWinternal/builder/builder.js117async function stripLeakedReactModuleAugmentations(distDirectoryPath) {CODE
LOWinternal/builder/builder.js136async function stripReactModuleAugmentationsFromDeclarationFile(declarationFilePath) {CODE
LOWinternal/builder/builder.js155function removeReactModuleAugmentations(declarationContents) {CODE
LOWinternal/builder/builder.js216function getMatchingClosingBraceIndex(content, openingBraceIndex) {CODE
LOWpackages/react/popper/src/popper.tsx475function getSideAndAlignFromPlacement(placement: Placement) {CODE
LOWpackages/react/form/src/form.tsx705function isAsyncCustomMatcherEntry(CODE
LOWpackages/react/announce/src/announce.tsx148 function updateAttributesOnVisibilityChange() {CODE
LOWpackages/react/announce/src/announce.tsx236function getLiveRegionPartDataAttr(id?: string) {CODE
LOWpackages/react/navigation-menu/src/navigation-menu.tsx754>(function NavigationMenuIndicatorImpl(CODE
LOWpackages/react/navigation-menu/src/navigation-menu.tsx942>(function NavigationMenuContentImpl(CODE
LOWpackages/react/navigation-menu/src/navigation-menu.tsx1124>(function NavigationMenuViewportImpl(CODE
LOWpackages/react/accordion/src/accordion.test.tsx615 function ControlledSingleAccordion({CODE
LOW…ne-time-password-field/src/one-time-password-field.tsx539>(function OneTimePasswordFieldHiddenInput(CODE
LOW…ne-time-password-field/src/one-time-password-field.tsx598>(function OneTimePasswordFieldInput(CODE
LOWpackages/react/toast/src/toast.tsx923function handleAndDispatchCustomEvent<CODE
LOWpackages/react/dropdown-menu/src/dropdown-menu.tsx347>(function DropdownMenuItemIndicator(CODE
LOWpackages/react/dialog/src/dialog.test.tsx578 async function waitForDocumentPointerDownListener() {CODE
LOWpackages/react/dialog/src/dialog.test.tsx651 async function waitForDocumentPointerDownListener() {CODE
LOW…react/dismissable-layer/src/dismissable-layer.test.tsx7async function waitForDocumentPointerDownListener() {CODE
LOW…react/dismissable-layer/src/dismissable-layer.test.tsx28function dispatchComposedPointerDown(target: Element) {CODE
LOW…ages/react/dismissable-layer/src/dismissable-layer.tsx301function useDismissableLayerSurface(): React.RefCallback<DismissableLayerBranchElement> {CODE
LOW…ages/react/dismissable-layer/src/dismissable-layer.tsx364 function isOutsideInteractionIntercepted() {CODE
LOW…ages/react/dismissable-layer/src/dismissable-layer.tsx413 function handleAndDispatchPointerDownOutsideEvent() {CODE
LOW…ages/react/dismissable-layer/src/dismissable-layer.tsx413 function handleAndDispatchPointerDownOutsideEvent() {CODE
LOW…ages/react/dismissable-layer/src/dismissable-layer.tsx579function handleAndDispatchCustomEvent<E extends CustomEvent, OriginalEvent extends Event>(CODE
LOWpackages/react/scroll-area/src/scroll-area.tsx414>(function ScrollAreaScrollbarScroll(CODE
LOWpackages/react/scroll-area/src/scroll-area.tsx529>(function ScrollAreaScrollbarVisible(CODE
LOWpackages/react/scroll-area/src/scroll-area.tsx1070function getScrollPositionFromPointer(CODE
LOWpackages/react/scroll-area/src/scroll-area.tsx1109function isScrollingWithinScrollbarBounds(scrollPos: number, maxScrollPos: number) {CODE
LOWpackages/react/radio-group/src/radio-group.tsx299>(function RadioGroupItemBubbleInput(CODE
LOWpackages/react/select/src/select.tsx988>(function SelectItemAlignedPosition(CODE
LOW…ct/password-toggle-field/src/password-toggle-field.tsx248 function PasswordToggleFieldToggle(CODE
LOWpackages/react/focus-scope/src/focus-scope.tsx292function useFocusScopeBranchRegistry() {CODE
LOWe2e/form.spec.ts10 async function checkControlMessageAssociation(control: Locator, message: Locator) {CODE
LOWe2e/menubar.spec.ts114 async function shouldSupportArrowKeyNavigation(page: Page, dir: 'ltr' | 'rtl') {CODE
LOWe2e/dialog.spec.ts15 async function shouldNotAllowOutsideInteraction(page: Page, action: 'realClick' | 'realTouch') {CODE
LOWe2e/dialog.spec.ts27 async function shouldAllowOutsideInteraction(page: Page, action: 'realClick' | 'realTouch') {CODE
LOWapps/storybook/stories/dropdown-menu.stories.tsx636 function handleNonModalDialogClose(event: Event) {CODE
Fake / Example Data31 hits · 31 pts
SeverityFileLineSnippetContext
LOW…ne-time-password-field/src/one-time-password-field.tsx580 | 'placeholder'CODE
LOWpackages/react/select/src/select.tsx449interface SelectValueProps extends Omit<PrimitiveSpanProps, 'placeholder'> {CODE
LOWpackages/react/select/src/select.tsx477 <React.Fragment key={showPlaceholder ? 'placeholder' : 'value'}>CODE
LOWapps/storybook/stories/hover-card.stories.tsx132 Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer feugiat mattis malesuada.CODE
LOWapps/storybook/stories/hover-card.stories.tsx132 Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer feugiat mattis malesuada.CODE
LOWapps/storybook/stories/popover.stories.tsx112 defaultValue="Lorem ipsum dolor sit amet consectetur adipisicing elit. Quaerat nobis at ipsa, nihil tempora CODE
LOWapps/storybook/stories/popover.stories.tsx112 defaultValue="Lorem ipsum dolor sit amet consectetur adipisicing elit. Quaerat nobis at ipsa, nihil tempora CODE
LOWapps/storybook/stories/popover.stories.tsx128 defaultValue="Lorem ipsum dolor sit amet consectetur adipisicing elit. Quaerat nobis at ipsa, nihil tempora CODE
LOWapps/storybook/stories/popover.stories.tsx128 defaultValue="Lorem ipsum dolor sit amet consectetur adipisicing elit. Quaerat nobis at ipsa, nihil tempora CODE
LOWapps/storybook/stories/dialog.stories.tsx43 defaultValue="Lorem ipsum dolor sit amet consectetur adipisicing elit. Quaerat nobis at ipsa, nihil tempora deCODE
LOWapps/storybook/stories/dialog.stories.tsx43 defaultValue="Lorem ipsum dolor sit amet consectetur adipisicing elit. Quaerat nobis at ipsa, nihil tempora deCODE
LOWapps/storybook/stories/navigation-menu.stories.tsx447 Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam purus odio, vestibulumCODE
LOWapps/storybook/stories/navigation-menu.stories.tsx447 Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam purus odio, vestibulumCODE
LOWapps/storybook/stories/dropdown-menu.stories.tsx115 defaultValue="Lorem ipsum dolor sit amet consectetur adipisicing elit. Quaerat nobis at ipsa, nihil tempora CODE
LOWapps/storybook/stories/dropdown-menu.stories.tsx115 defaultValue="Lorem ipsum dolor sit amet consectetur adipisicing elit. Quaerat nobis at ipsa, nihil tempora CODE
LOWapps/storybook/stories/dropdown-menu.stories.tsx183 defaultValue="Lorem ipsum dolor sit amet consectetur adipisicing elit. Quaerat nobis at ipsa, nihil tempora CODE
LOWapps/storybook/stories/dropdown-menu.stories.tsx183 defaultValue="Lorem ipsum dolor sit amet consectetur adipisicing elit. Quaerat nobis at ipsa, nihil tempora CODE
LOWapps/storybook/stories/portal.stories.tsx17 Lorem ipsum dolor sit amet consectetur adipisicing elit. Quos porro, est ex quia itaque facereCODE
LOWapps/storybook/stories/portal.stories.tsx17 Lorem ipsum dolor sit amet consectetur adipisicing elit. Quos porro, est ex quia itaque facereCODE
LOWapps/storybook/stories/scroll-area.stories.tsx392 Lorem ipsum dolor sit amet, consectetur adipiscing elit.CODE
LOWapps/storybook/stories/scroll-area.stories.tsx392 Lorem ipsum dolor sit amet, consectetur adipiscing elit.CODE
LOWapps/storybook/stories/scroll-area.stories.tsx446 Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce sit amet eros iaculis, bibendumCODE
LOWapps/storybook/stories/scroll-area.stories.tsx446 Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce sit amet eros iaculis, bibendumCODE
LOWapps/storybook/stories/tooltip.stories.tsx286 Lorem ipsum dolor sit amet consectetur, adipisicing elit. Harum, quae qui. MagnamCODE
LOWapps/storybook/stories/tooltip.stories.tsx286 Lorem ipsum dolor sit amet consectetur, adipisicing elit. Harum, quae qui. MagnamCODE
LOWapps/storybook/stories/context-menu.stories.tsx196 defaultValue="Lorem ipsum dolor sit amet consectetur adipisicing elit. Quaerat nobis at ipsa, nihil tempora deCODE
LOWapps/storybook/stories/context-menu.stories.tsx196 defaultValue="Lorem ipsum dolor sit amet consectetur adipisicing elit. Quaerat nobis at ipsa, nihil tempora deCODE
LOWapps/storybook/stories/context-menu.stories.tsx288 defaultValue="Lorem ipsum dolor sit amet consectetur adipisicing elit. Quaerat nobis at ipsa, nihil tempora deCODE
LOWapps/storybook/stories/context-menu.stories.tsx288 defaultValue="Lorem ipsum dolor sit amet consectetur adipisicing elit. Quaerat nobis at ipsa, nihil tempora deCODE
LOWapps/ssr-testing/app/portal/page.tsx19 Lorem ipsum dolor sit amet consectetur adipisicing elit. Quos porro, est ex quia itaqueCODE
LOWapps/ssr-testing/app/portal/page.tsx19 Lorem ipsum dolor sit amet consectetur adipisicing elit. Quos porro, est ex quia itaqueCODE
Over-Commented Block5 hits · 5 pts
SeverityFileLineSnippetContext
LOWpackages/react/announce/src/announce.tsx141 // In some screen reader/browser combinations, alerts coming from an inactive browser tab may beCOMMENT
LOWpackages/react/checkbox/src/checkbox.tsx341 // When the checked change is not driven by a user interaction (e.g. aCOMMENT
LOWpackages/react/presence/src/presence.tsx121 // With React 18 concurrency this update is applied a frame after theCOMMENT
LOWpackages/react/radio-group/src/radio.tsx281 const controlSize = useSize(control);COMMENT
LOWpackages/react/focus-scope/src/focus-scope.tsx121 // 2. In Google Chrome, when the focused element is removed from theCOMMENT