AI Slop Code Risk Monitor

microsoft/SandDance

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

Visually explore, understand, and present your data.

1.9 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for microsoft/SandDance, a TypeScript project with 7,155 GitHub stars. SynthScan examined 131,322 lines of code across 702 source files, recording 321 pattern matches distributed across 7 syntactic categories. The legacy adjusted pattern signal is 1.9 (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.

1.9
Adjusted Signal
1.9
Raw Pattern Score
100%
Time Factor
2026-10-27
Last Push
7.2K
Stars
TypeScript
Language
131.3K
Lines of Code
702
Files
321
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 8.8/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.5/100 · LOW

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

Agent Over-Engineering Ratio 6.6/100 · LOW

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

PR Review Velocity Impact 12.0/100 · LOW

Which changes need focused human review? 321 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 1HIGH 0MEDIUM 3LOW 317

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 321 distinct pattern matches across 7 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 Identifiers246 hits · 180 pts
SeverityFileLineSnippetContext
LOWdocs/tests/sanddance-specs/v1/js/sanddance-specs.js1173 function getSpecBuilderPropsForChart(specContext) {CODE
LOWdocs/tests/sanddance-specs/v1/js/sanddance-specs.js3335 function serializeAsVegaExpression(bin, firstFieldName, lastFieldName, clause) {CODE
LOWdocs/tests/sanddance-specs/v2/js/sanddance-specs.js1173 function getSpecBuilderPropsForChart(specContext) {CODE
LOWdocs/tests/sanddance-specs/v2/js/sanddance-specs.js3335 function serializeAsVegaExpression(bin, firstFieldName, lastFieldName, clause) {CODE
LOWdocs/external/js/react.development.js212 function refineResolvedLazyComponent(lazyComponent) {CODE
LOWdocs/external/js/react.development.js297 function setCurrentlyValidatingElement(element) {CODE
LOWdocs/external/js/react.development.js684 function defineKeyPropWarningGetter(props, displayName) {CODE
LOWdocs/external/js/react.development.js702 function defineRefPropWarningGetter(props, displayName) {CODE
LOWdocs/external/js/react.development.js720 function warnIfStringRefCannotBeAutoConverted(config) {CODE
LOWdocs/external/js/react.development.js1230 function mapSingleChildIntoContext(bookKeeping, child, childKey) {CODE
LOWdocs/external/js/react.development.js1252 function mapIntoWithKeyPrefixInternal(children, array, prefix, func, context) {CODE
LOWdocs/external/js/react.development.js1731 function getDeclarationErrorAddendum() {CODE
LOWdocs/external/js/react.development.js1743 function getSourceInfoErrorAddendum(source) {CODE
LOWdocs/external/js/react.development.js1753 function getSourceInfoErrorAddendumForProps(elementProps) {CODE
LOWdocs/external/js/react.development.js1769 function getCurrentComponentErrorInfo(parentType) {CODE
LOWdocs/external/js/react.development.js1946 function createElementWithValidation(type, props, children) {CODE
LOWdocs/external/js/react.development.js2010 function createFactoryWithValidation(type) {CODE
LOWdocs/external/js/react.development.js2037 function cloneElementWithValidation(element, props, children) {CODE
LOWdocs/external/js/react.development.js2397 function startLoggingProfilingEvents() {CODE
LOWdocs/external/js/react.development.js2403 function stopLoggingProfilingEvents() {CODE
LOWdocs/external/js/react.development.js3125 function onInteractionScheduledWorkCompleted(interaction) {CODE
LOW⚡docs/external/js/react-dom.development.js3790 function setAttemptUserBlockingHydration(fn) {CODE
LOW⚡docs/external/js/react-dom.development.js3794 function setAttemptContinuousHydration(fn) {CODE
LOW⚡docs/external/js/react-dom.development.js3798 function setAttemptHydrationAtCurrentPriority(fn) {CODE
LOW⚡docs/external/js/react-dom.development.js3819 function isReplayableDiscreteEvent(eventType) {CODE
LOW⚡docs/external/js/react-dom.development.js3823 function trapReplayableEventForDocument(topLevelType, document, listenerMap) {CODE
LOW⚡docs/external/js/react-dom.development.js3827 function eagerlyTrapReplayableEvents(container, document) {CODE
LOW⚡docs/external/js/react-dom.development.js7882 function commitHydratedSuspenseInstance(suspenseInstance) {CODE
LOW⚡docs/external/js/react-dom.development.js7886 function didNotMatchHydratedContainerTextInstance(parentContainer, textInstance, text) {CODE
LOW⚡docs/external/js/react-dom.development.js7891 function didNotMatchHydratedTextInstance(parentType, parentProps, parentInstance, textInstance, text) {CODE
LOW⚡docs/external/js/react-dom.development.js7896 function didNotHydrateContainerInstance(parentContainer, instance) {CODE
LOW⚡docs/external/js/react-dom.development.js7914 function didNotFindHydratableContainerInstance(parentContainer, type, props) {CODE
LOW⚡docs/external/js/react-dom.development.js7919 function didNotFindHydratableContainerTextInstance(parentContainer, text) {CODE
LOW⚡docs/external/js/react-dom.development.js7924 function didNotFindHydratableInstance(parentType, parentProps, parentInstance, type, props) {CODE
LOW⚡docs/external/js/react-dom.development.js7929 function didNotFindHydratableTextInstance(parentType, parentProps, parentInstance, text) {CODE
LOW⚡docs/external/js/react-dom.development.js7934 function didNotFindHydratableSuspenseInstance(parentType, parentProps, parentInstance) {CODE
LOW⚡docs/external/js/react-dom.development.js8369 function accumulateDirectDispatchesSingle(event) {CODE
LOW⚡docs/external/js/react-dom.development.js8375 function accumulateTwoPhaseDispatches(events) {CODE
LOW⚡docs/external/js/react-dom.development.js8378 function accumulateEnterLeaveDispatches(leave, enter, from, to) {CODE
LOW⚡docs/external/js/react-dom.development.js8381 function accumulateDirectDispatches(events) {CODE
LOW⚡docs/external/js/react-dom.development.js9358 function getTargetInstForClickEvent(topLevelType, targetInst) {CODE
LOW⚡docs/external/js/react-dom.development.js9364 function getTargetInstForInputOrChangeEvent(topLevelType, targetInst) {CODE
LOW⚡docs/external/js/react-dom.development.js9370 function handleControlledInputBlur(node) {CODE
LOW⚡docs/external/js/react-dom.development.js14631 function setDefaultShallowSuspenseContext(parentContext) {CODE
LOW⚡docs/external/js/react-dom.development.js14634 function setShallowSuspenseContext(parentContext, shallowContext) {CODE
LOW⚡docs/external/js/react-dom.development.js14637 function addSubtreeSuspenseContext(parentContext, subtreeContext) {CODE
LOW⚡docs/external/js/react-dom.development.js23025 function isAlreadyFailedLegacyErrorBoundary(instance) {CODE
LOW⚡docs/external/js/react-dom.development.js23028 function markLegacyErrorBoundaryAsFailed(instance) {CODE
LOW⚡docs/external/js/react-dom.development.js23036 function prepareToThrowUncaughtError(error) {CODE
LOW⚡docs/external/js/react-dom.development.js23045 function captureCommitPhaseErrorOnRoot(rootFiber, sourceFiber, error) {CODE
LOW⚡docs/external/js/react-dom.development.js23242 function flushRenderPhaseStrictModeWarningsInDEV() {CODE
LOW⚡docs/external/js/react-dom.development.js23252 function stopFinishedWorkLoopTimer() {CODE
LOW⚡docs/external/js/react-dom.development.js23258 function stopInterruptedWorkLoopTimer() {CODE
LOW⚡docs/external/js/react-dom.development.js23401 function warnIfNotScopedWithMatchingAct(fiber) {CODE
LOW⚡docs/external/js/react-dom.development.js23408 function warnIfNotCurrentlyActingEffectsInDEV(fiber) {CODE
LOW⚡docs/external/js/react-dom.development.js23416 function warnIfNotCurrentlyActingUpdatesInDEV(fiber) {CODE
LOWdocs/external/js/react-dom.development.js299 function invokeGuardedCallbackAndCatchFirstError(name, func, context, a, b, c, d, e, f) {CODE
LOWdocs/external/js/react-dom.development.js812 function flushDiscreteUpdatesIfNeeded(timeStamp) {CODE
LOWdocs/external/js/react-dom.development.js829 function setBatchingImplementation(_batchedUpdatesImpl, _discreteUpdatesImpl, _flushDiscreteUpdatesImpl, _batchedEventCODE
LOWdocs/external/js/react-dom.development.js935 function shouldRemoveAttributeWithWarning(name, value, propertyInfo, isCustomComponentTag) {CODE
186 more matches not shown…
Over-Commented Block67 hits · 54 pts
SeverityFileLineSnippetContext
LOWdocs/_sass/settings/_settings.colors.scss1// Copyright (c) Microsoft Corporation. All rights reserved.COMMENT
LOWdocs/_sass/settings/_settings.colors.scss21/// @type ColorCOMMENT
LOWdocs/_sass/settings/_settings.colors.scss201COMMENT
LOWdocs/_sass/settings/_settings.colors.scss421/// @group MintCOMMENT
LOWdocs/_sass/settings/_settings.colors.scss601$ms-sky-400: #0072cc;COMMENT
LOWdocs/_sass/settings/_settings.colors.scss781COMMENT
LOWdocs/_sass/settings/_settings.colors.scss961/// @type ColorCOMMENT
LOWdocs/_sass/settings/_settings.colors.scss1001COMMENT
LOWdocs/_sass/settings/_settings.colors.scss1141/// @group BrownCOMMENT
LOWdocs/_sass/settings/_settings.colors.scss1321/// @group BlackCOMMENT
LOWdocs/_sass/settings/_settings.colors.scss1361/// @see ms-red-400COMMENT
LOWdocs/_sass/settings/_settings.colors.scss1381/// @see ms-yellow-400COMMENT
LOWdocs/_sass/settings/_settings.colors.scss1401/// @see ms-navy-400COMMENT
LOWdocs/_sass/settings/_settings.colors.scss1441/// @see ms-black-300COMMENT
LOWdocs/_sass/settings/_settings.colors.scss1461COMMENT
LOWdocs/_sass/settings/_settings.colors.scss1481/// @group Dark UI ColorsCOMMENT
LOWdocs/_sass/settings/_settings.colors.scss1501COMMENT
LOWdocs/_sass/settings/_settings.colors.scss1521COMMENT
LOWdocs/_sass/settings/_settings.colors.scss1581/// @group Microsoft Logo ColorsCOMMENT
LOWdocs/_sass/settings/_settings.colors.scss1601$ms-xbox-red: #e31123;COMMENT
LOWdocs/_sass/settings/_settings.colors.scss1621$ms-xbox-lavender: #b144c0;COMMENT
LOWdocs/_sass/settings/_settings.colors.scss1641$ms-xbox-sky: #1081ca;COMMENT
LOWdocs/_sass/settings/_settings.colors.scss1661$ms-xbox-lime: #54a81b;COMMENT
LOWdocs/_sass/settings/_settings.colors.scss1681$ms-xbox-green: #107c10;COMMENT
LOWdocs/_sass/settings/_settings.colors.scss1761/// @group ZuneCOMMENT
LOWdocs/_sass/settings/_settings.colors.scss1781$ms-zune-gradient: linear-gradient(to bottom, $ms-zune-pink 0%, $ms-zune-orange 100%);COMMENT
LOWdocs/_sass/settings/_settings.colors.scss1821/// Excel's "Good" cell colorCOMMENT
LOWdocs/_sass/settings/_settings.colors.scss1841/// Excel's "Check Cell" cell colorCOMMENT
LOWdocs/_sass/sass-mq/_mq.scss1@charset "UTF-8"; // Fixes an issue where Ruby locale is not set properlyCOMMENT
LOWdocs/_sass/sass-mq/_mq.scss21///COMMENT
LOWdocs/_sass/sass-mq/_mq.scss41/// Static breakpoint (for fixed-width layouts)COMMENT
LOWdocs/_sass/sass-mq/_mq.scss61/// Show breakpoints in the top right cornerCOMMENT
LOWdocs/_sass/sass-mq/_mq.scss101///COMMENT
LOWdocs/_sass/sass-mq/_mq.scss121/// @param {String | Boolean} $and (false) - Additional media query parametersCOMMENT
LOWdocs/_sass/sass-mq/_mq.scss141/// color: red;COMMENT
LOWdocs/_sass/sass-mq/_mq.scss241@mixin mq-add-breakpoint($name, $width) {COMMENT
LOWdocs/_sass/inuitcss/tools/_tools.font-size.scss1///* ========================================================================COMMENT
LOWdocs/_sass/inuitcss/objects/_objects.ratio.scss1/* ==========================================================================COMMENT
LOWdocs/_sass/inuitcss/objects/_objects.crop.scss1/* ==========================================================================COMMENT
LOWdocs/_sass/components/_components.buttons.scss1// Copyright (c) Microsoft Corporation. All rights reserved.COMMENT
LOWdocs/external/js/react-dom.development.js121 // unintuitive, though, because even though React has caught the error, fromCOMMENT
LOWdocs/external/js/react-dom.development.js861 // A reserved attribute.COMMENT
LOWdocs/external/js/react-dom.development.js7981 // If it's not a container, we check if it's an instance.COMMENT
LOWdocs/external/js/react-dom.development.js8001 // Next we need to figure out if the node that skipped past isCOMMENT
LOWdocs/external/js/react-dom.development.js11301 // TODO: Should we warn if timeoutMs is lower than the normal pri expiration time?COMMENT
LOWdocs/external/js/react-dom.development.js13941COMMENT
LOWdocs/external/js/react-dom.development.js16901 // the clone algorithm to create a copy of all the current children.COMMENT
LOWdocs/external/js/react-dom.development.js17081 var prevProps = current.memoizedProps;COMMENT
LOWdocs/external/js/react-dom.development.js17781 }COMMENT
LOWdocs/external/js/react-dom.development.js20201 if (lastEffect !== null) {COMMENT
LOWdocs/external/js/react-dom.development.js21021 // After this we'll use a set of heuristics to determine whether thisCOMMENT
LOWdocs/external/js/react-dom.development.js21041 //COMMENT
LOWdocs/external/js/react-dom.development.js21401 }COMMENT
LOWdocs/external/js/react-dom.development.js22121 if (workInProgress === null || workInProgress.return === null) {COMMENT
LOWdocs/external/js/react-dom.development.js23101 }COMMENT
LOWdocs/external/js/react-dom.development.js23741 //COMMENT
LOWdocs/external/js/react-dom.development.js23781 }COMMENT
LOWextensions/azdata-sanddance/src/azdata.proposed.d.ts601 /// <summary>COMMENT
LOWextensions/azdata-sanddance/src/azdata.proposed.d.ts621 /// <summary>COMMENT
LOWpackages/vega-morphcharts/src/marks/text.ts81// return 'start';COMMENT
7 more matches not shown…
Hallucination Indicators1 hit · 10 pts
SeverityFileLineSnippetContext
CRITICALpackages/sanddance-explorer/src/controls/columnMap.tsx184 signals = props.explorer.viewer.vegaSpec.signals.filter(s => props.specRole.signals.indexOf(s.name) >= 0);CODE
AI Slop Vocabulary2 hits · 4 pts
SeverityFileLineSnippetContext
MEDIUMpackage-lock.json13169 "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz",CODE
MEDIUMpackages/powerbi/package-lock.json7050 "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz",CODE
Fake / Example Data3 hits · 4 pts
SeverityFileLineSnippetContext
LOWdocs/external/js/react-dom.development.js5021 placeholder: 'placeholder',CODE
LOWpackages/vega-morphcharts/src/interfaces.ts66 * Flag whether this cube is a "placeholder" and is not to be rendered nor contains cube data.COMMENT
LOWpackages/vega-deck.gl/src/interfaces.ts62 * Flag whether this cube is a "placeholder" and is not to be rendered nor contains cube data.COMMENT
Slop Phrases1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUM.github/workflows/codeql.yml58 # If you are analyzing a compiled language, you can modify the 'build-mode' for that language to customize howCOMMENT
Overly Generic Function Names1 hit · 0 pts
SeverityFileLineSnippetContext
LOWdocs/external/js/react-dom.development.js8409 function getData() {CODE