AI Slop Code Risk Monitor

infernojs/inferno

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

:fire: An extremely fast, React-like JavaScript library for building modern user interfaces

1.1 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for infernojs/inferno, a JavaScript project with 16,459 GitHub stars. SynthScan examined 132,651 lines of code across 458 source files, recording 98 pattern matches distributed across 7 syntactic categories. The legacy adjusted pattern signal is 1.1 (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.1
Adjusted Signal
1.1
Raw Pattern Score
100%
Time Factor
2026-10-31
Last Push
16.5K
Stars
JavaScript
Language
132.7K
Lines of Code
458
Files
98
Pattern Hits
2026-10-31
Scan Date
0.01
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.6/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 1.5/100 · LOW

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

Agent Over-Engineering Ratio 2.2/100 · LOW

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

PR Review Velocity Impact 5.1/100 · LOW

Which changes need focused human review? 98 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 4HIGH 0MEDIUM 3LOW 91

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 98 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 Identifiers50 hits · 54 pts
SeverityFileLineSnippetContext
LOW⚡docs/uibench-lifecycle/app.js7function onComponentWillMountCounter() {CODE
LOW⚡docs/uibench-lifecycle/app.js11function onComponentDidMountCounter() {CODE
LOW⚡docs/uibench-lifecycle/app.js15function onComponentShouldUpdateCounter() {CODE
LOW⚡docs/uibench-lifecycle/app.js20function onComponentWillUpdateCounter() {CODE
LOW⚡docs/uibench-lifecycle/app.js24function onComponentDidUpdateCounter() {CODE
LOW⚡docs/uibench-lifecycle/app.js28function onComponentWillUnmountCounter() {CODE
LOW⚡docs/uibench-lifecycle/app.js32function onComponentDidAppearCounter() {CODE
LOW⚡docs/uibench-lifecycle/app.js36function onComponentWillDisappearCounter(dom, props, callback) {CODE
LOWdocs/event-test/app.js7function hoistedNonSyntheticEvents() {CODE
LOWdocs/event-test/app.js21function hoistedLinkEventNonSynthetic() {CODE
LOWdocs/event-test/app.js49function newFuncsNonSyntheticEvents() {CODE
LOWpackages/inferno-mobx/src/observer.ts143 function makePropertyObservableReference(propName): void {CODE
LOWpackages/inferno/__tests__/select.spec.tsx7 function requireEmptySelectionOnInsertion() {CODE
LOWpackages/inferno/__tests__/vnode-reuse.spec.tsx29 function addSharedToSecondParagraph(initial) {CODE
LOWpackages/inferno/__tests__/vnode-reuse.spec.tsx358 function addSharedToSecondParagraph(initial) {CODE
LOWpackages/inferno/src/core/validate.ts156export function validateVNodeElementChildren(vNode): void {CODE
LOWpackages/inferno/src/DOM/mounting.ts372function addAppearAnimationHookClass(CODE
LOWpackages/inferno/src/DOM/mounting.ts386function addAppearAnimationHookFunctional(CODE
LOWpackages/inferno/src/DOM/mounting.ts402export function mountClassComponentCallbacks(CODE
LOWpackages/inferno/src/DOM/mounting.ts442export function mountFunctionalComponentCallbacks(CODE
LOWpackages/inferno/src/DOM/patching.ts173function patchContentEditableChildren(dom, nextChildren): void {CODE
LOWpackages/inferno/src/DOM/patching.ts439function replaceOneVNodeWithMultipleVNodes(CODE
LOWpackages/inferno/src/DOM/patching.ts1108function patchKeyedChildrenComplex(CODE
LOWpackages/inferno/src/DOM/unmounting.ts191function addDisappearAnimationHook(CODE
LOWpackages/inferno/src/DOM/wrappers/processElement.ts28export function addFormElementEventHandlers(CODE
LOWpackages/inferno/src/DOM/utils/componentUtil.ts63export function createClassComponentInstance(CODE
LOWpackages/inferno/src/DOM/utils/componentUtil.ts129export function renderFunctionalComponent(CODE
LOWpackages/inferno/src/DOM/utils/common.ts329function createDeferComponentClassRemovalCallback(vNode, parentDOM) {CODE
LOWpackages/inferno/src/DOM/events/delegation.ts90function updateOrAddSyntheticEvent(CODE
LOW…ages/inferno-server/__tests__/creation.spec.server.tsx817 async function expectServerToMatchClient(template: () => any) {CODE
LOWpackages/inferno-server/src/utils.ts197export function renderFunctionalComponent(vNode: VNode, context): InfernoNode {CODE
LOWpackages/inferno-test-utils/src/index.ts85export function isRenderedClassComponentOfType(CODE
LOWpackages/inferno-test-utils/src/index.ts172export function scryRenderedDOMElementsWithClass(CODE
LOWpackages/inferno-test-utils/src/index.ts200export function scryRenderedDOMElementsWithTag(CODE
LOWpackages/inferno-test-utils/src/index.ts209export function scryRenderedVNodesWithType(CODE
LOWpackages/inferno-test-utils/src/index.ts226export function findRenderedDOMElementWithClass(CODE
LOWpackages/inferno-test-utils/src/index.ts238export function findRenderedDOMElementWithTag(CODE
LOWpackages/inferno-test-utils/src/index.ts250export function findRenderedVNodeWithType(CODE
LOWpackages/inferno-redux/src/components/Provider.ts50 function componentWillReceiveProps(nextProps) {CODE
LOWpackages/inferno-router/src/Switch.ts34function extractFirstMatchFromChildren(CODE
LOWpackages/inferno-router/src/resolveLoaders.ts261// function convertFormDataToSearchParams(formData: FormData): URLSearchParams {COMMENT
LOWpackages/inferno-animation/readme.md276export function animateModalOnWillDisappear(dom, callback, onClosed) {CODE
LOW…rno-animation/__tests__/animatedMoveComponent.spec.tsx13 function waitForAnimationAndContinue(condition, callback, arg1?): void {CODE
LOW…rno-animation/__tests__/animatedMoveComponent.spec.tsx168 function waitForAnimationAndContinue(condition, callback, arg1?): void {CODE
LOW…erno-animation/__tests__/animatedAllComponent.spec.tsx18 function waitForAnimationAndContinue(condition, callback, arg1?: any): void {CODE
LOW…erno-animation/__tests__/animatedAllComponent.spec.tsx173 function waitForAnimationAndContinue(condition, callback, arg1?): void {CODE
LOW…inferno-animation/__tests__/animatedComponent.spec.tsx17 function waitForAnimationAndContinue(condition, callback, arg1?): void {CODE
LOW…inferno-animation/__tests__/animatedComponent.spec.tsx172 function waitForAnimationAndContinue(condition, callback, arg1?): void {CODE
LOWpackages/inferno-animation/src/utils.ts415export function registerTransitionListener(CODE
LOWpackages/inferno-animation/src/animationCoordinator.ts57export function consumeGlobalAnimationSource(CODE
Hallucination Indicators4 hits · 40 pts
SeverityFileLineSnippetContext
CRITICAL…es/inferno-create-element/__tests__/components.spec.ts194 container.firstChild.firstChild.firstChild.firstChild.getAttribute(CODE
CRITICAL…es/inferno-create-element/__tests__/components.spec.ts213 container.firstChild.firstChild.firstChild.firstChild.getAttribute(CODE
CRITICAL…es/inferno-create-element/__tests__/components.spec.ts278 container.firstChild.firstChild.firstChild.firstChild.getAttribute(CODE
CRITICAL…es/inferno-create-element/__tests__/components.spec.ts298 container.firstChild.firstChild.firstChild.firstChild.getAttribute(CODE
Over-Commented Block39 hits · 39 pts
SeverityFileLineSnippetContext
LOWdocs/uibench/custom-uibench.js261 }COMMENT
LOWdocs/uibench/custom-uibench.js281 // }COMMENT
LOWdocs/uibench/custom-uibench.js301 // console.log = logFn;COMMENT
LOWdocs/uibench/custom-uibench.js321 // throw new Error("Spec test failed: invalid data-id attribute in the AnimBox");COMMENT
LOWdocs/uibench/custom-uibench.js341 // }COMMENT
LOWdocs/uibench/custom-uibench.js361 // if (mainTag.length !== 1) {COMMENT
LOWdocs/uibench/custom-uibench.js381 // }COMMENT
LOWdocs/uibench/custom-uibench.js401 // onUpdate(initialState, "init");COMMENT
LOWdocs/uibench/custom-uibench.js421 // tableRows = document.getElementsByClassName("TableRow");COMMENT
LOWscripts/fakedom/uibench-reactlike/start.js1import {writeFile} from 'fs';COMMENT
LOWscripts/fakedom/uibench-reactlike/start.js21// totalEverything += currentNode.selfSize;COMMENT
LOW…nferno-compat/__tests__/ReactMountDestruction.spec.tsx41 expect(secondRootDiv.firstChild).toBeNull();COMMENT
LOW…nferno-compat/__tests__/ReactMountDestruction.spec.tsx61 // 'unmount was rendered by React and is not a top-level container. You ' +COMMENT
LOW…nferno-compat/__tests__/ReactMountDestruction.spec.tsx81 // ReactDOM.unmountComponentAtNode(nonRootDiv);COMMENT
LOW…ckages/inferno-compat/__tests__/ReactChildren.spec.tsx201 const numberOfChildren = ReactChildren.count(instance.children);COMMENT
LOW…ckages/inferno-compat/__tests__/ReactChildren.spec.tsx221 // ReactFragment.create({COMMENT
LOWpackages/inferno-compat/__tests__/ReactMount.spec.tsx121 // container.innerHTML = ' ' + ReactDOMServer.renderToString(<div />);COMMENT
LOWpackages/inferno-compat/__tests__/ReactMount.spec.tsx141 // var div = document.createElement('div');COMMENT
LOW…ages/inferno-compat/__tests__/ReactMultiChild.spec.tsx201COMMENT
LOW…ages/inferno-compat/__tests__/ReactMultiChild.spec.tsx221 // ReactDOMFeatureFlags.useCreateElement = false;COMMENT
LOW…ages/inferno-compat/__tests__/ReactMultiChild.spec.tsx241 // // Warm the cache used by `getMarkupWrap`.COMMENT
LOW…ages/inferno-compat/__tests__/ReactMultiChild.spec.tsx261 // expect(setInnerHTML.calls.count()).toBe(callCountOnMount + 1);COMMENT
LOWpackages/inferno-compat/__tests__/lifecycle.spec.tsx221 // updateCOMMENT
LOWpackages/inferno-compat/__tests__/lifecycle.spec.tsx241 // expect(calls.argsFor(++i)).toEqual(['11']);COMMENT
LOW…ages/inferno-compat/__tests__/ReactJSXElement.spec.tsx61 expect(element.props.foo).toBe(1);COMMENT
LOW…ages/inferno-compat/__tests__/ReactJSXElement.spec.tsx81 // var expectation = {foo:'56'};COMMENT
LOW…ages/inferno-compat/__tests__/ReactJSXElement.spec.tsx101 // it('overrides children if null is provided as a JSX child', function() {COMMENT
LOW…ckages/inferno-create-element/__tests__/select.spec.ts101 // const template = (val) => createElement('select', {COMMENT
LOW…ckages/inferno-create-element/__tests__/select.spec.ts121 // render(template(undefined), container);COMMENT
LOW…es/inferno-redux/__tests__/components/connect.spec.tsx1641 });COMMENT
LOW…es/inferno-redux/__tests__/components/connect.spec.tsx1661 // // mapStateToPropsCOMMENT
LOW…es/inferno-redux/__tests__/components/connect.spec.tsx1681 // expect(spyValue).toMatch(errorMsg);COMMENT
LOW…es/inferno-redux/__tests__/components/connect.spec.tsx1701 //COMMENT
LOWpackages/inferno-redux/src/connect/wrapMapToProps.ts21// therefore not reporting its length accurately..COMMENT
LOWpackages/inferno-router/src/resolveLoaders.ts261// function convertFormDataToSearchParams(formData: FormData): URLSearchParams {COMMENT
LOW.github/COMMIT_TEMPLATE.md1# <type>: (If applied, this commit will...) <subject> (Max 50 char)COMMENT
LOW.github/COMMIT_TEMPLATE.md21# Remember toCOMMENT
LOW.github/workflows/codeql-analysis.yml1# For most projects, this workflow file will not need changing; you simply needCOMMENT
LOW.github/workflows/codeql-analysis.yml61 # ℹ️ Command-line programs to run using the OS shell.COMMENT
Decorative Section Separators2 hits · 6 pts
SeverityFileLineSnippetContext
MEDIUM.github/COMMIT_TEMPLATE.md20# --------------------COMMENT
MEDIUM.github/COMMIT_TEMPLATE.md28# --------------------COMMENT
AI Slop Vocabulary1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUMpackages/inferno/__tests__/booleanAttributes.spec.tsx97 // The obsolete scoped and seamless have no DOM property left, only the attributeCOMMENT
Overly Generic Function Names1 hit · 1 pts
SeverityFileLineSnippetContext
LOWdocs/dbmonster/ENV.js136 function getData(keepIdentity) {CODE
Fake / Example Data1 hit · 1 pts
SeverityFileLineSnippetContext
LOWbrowser/inferno.babel.umd.10.0.0.min.js1!function(e,t){"object"===typeof exports&&"undefined"!==typeof module?module.exports=t():"function"===typeof define&&defCODE