AI Slop Code Risk Monitor

meetecho/janus-gateway

SlopCodeMonitor badge for meetecho/janus-gateway Adjusted legacy signal; badge bands: 25 / 50 / 75 (different from dashboard bands).

Janus WebRTC Server

1.7 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for meetecho/janus-gateway, a C project with 9,204 GitHub stars. SynthScan examined 154,835 lines of code across 219 source files, recording 264 pattern matches distributed across 11 syntactic categories. The legacy adjusted pattern signal is 1.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.

1.7
Adjusted Signal
1.7
Raw Pattern Score
100%
Time Factor
2026-11-14
Last Push
9.2K
Stars
C
Language
154.8K
Lines of Code
219
Files
264
Pattern Hits
2026-11-14
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-11-14.

Cognitive Ownership Risk 5.5/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.1/100 · LOW

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

Agent Over-Engineering Ratio 3.2/100 · LOW

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

PR Review Velocity Impact 10.8/100 · LOW

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

Run additional scans to build a history of the legacy pattern signal. Score changes are not a measure of AI adoption or code quality.

No multi-scan history yet — run the scanner again to build trend data.

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 1MEDIUM 42LOW 221

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 264 distinct pattern matches across 11 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.

Over-Commented Block202 hits · 142 pts
SeverityFileLineSnippetContext
LOWhtml/demos/webaudio.js41 return;COMMENT
LOWhtml/demos/sip.js261 // SDES support by setting "srtp" to "sdes_mandatory", e.g.:COMMENT
LOWhtml/demos/sip.js841 register["secret"] = password;COMMENT
LOWhtml/demos/sip.js921 handle.doVideo = doVideo;COMMENT
LOWhtml/demos/sip.js941 let body = { request: "call", uri: uri };COMMENT
LOWhtml/demos/sip.js1221 // This way you'll tell the plugin to accept the call, but ONLYCOMMENT
LOWhtml/demos/streaming.js421 if(type === 'data')COMMENT
LOWhtml/demos/videoroom.js481 // You can force a specific codec to use when publishing by using theCOMMENT
LOWhtml/demos/e2e.js541COMMENT
LOWhtml/demos/settings.js1/* eslint-disable no-unused-vars */COMMENT
LOWhtml/demos/settings.js21// online demos at http://janus.conf.meetecho.com) you can just use aCOMMENT
LOWhtml/demos/settings.js41// you can also pass an array of servers, e.g., to provide alternativeCOMMENT
LOWhtml/demos/settings.js61// servers we'd like to use to gather additional candidates. This isCOMMENT
LOWhtml/demos/settings.js81// By default we leave the iceServers variable empty, which again meansCOMMENT
LOWdocs/janus-doxygen.cfg1# Doxyfile 1.8.18COMMENT
LOWdocs/janus-doxygen.cfg21# file that follow. The default is UTF-8 which is also the encoding used for allCOMMENT
LOWdocs/janus-doxygen.cfg41PROJECT_NUMBER = 1.4.4COMMENT
LOWdocs/janus-doxygen.cfg61OUTPUT_DIRECTORY =COMMENT
LOWdocs/janus-doxygen.cfg81# The OUTPUT_LANGUAGE tag is used to specify the language in which allCOMMENT
LOWdocs/janus-doxygen.cfg101COMMENT
LOWdocs/janus-doxygen.cfg121# used to form the text in various listings. Each string in this list, if foundCOMMENT
LOWdocs/janus-doxygen.cfg141# operators of the base classes will not be shown.COMMENT
LOWdocs/janus-doxygen.cfg161# This tag requires that the tag FULL_PATH_NAMES is set to YES.COMMENT
LOWdocs/janus-doxygen.cfg181# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret theCOMMENT
LOWdocs/janus-doxygen.cfg201# line (until the first dot) of a Qt-style comment as the brief description. IfCOMMENT
LOWdocs/janus-doxygen.cfg221# documentation from any documented member that it re-implements.COMMENT
LOWdocs/janus-doxygen.cfg241# name=valueCOMMENT
LOWdocs/janus-doxygen.cfg261COMMENT
LOWdocs/janus-doxygen.cfg281COMMENT
LOWdocs/janus-doxygen.cfg301# default for Fortran type files). For instance to make doxygen treat .inc filesCOMMENT
LOWdocs/janus-doxygen.cfg321COMMENT
LOWdocs/janus-doxygen.cfg341# tag to YES in order to let doxygen match functions declarations andCOMMENT
LOWdocs/janus-doxygen.cfg361SIP_SUPPORT = NOCOMMENT
LOWdocs/janus-doxygen.cfg381# If one adds a struct or class to a group and this option is enabled, then alsoCOMMENT
LOWdocs/janus-doxygen.cfg401#COMMENT
LOWdocs/janus-doxygen.cfg421# with name TypeT. When disabled the typedef will appear as a member of a file,COMMENT
LOWdocs/janus-doxygen.cfg441COMMENT
LOWdocs/janus-doxygen.cfg481# locally in source files will be included in the documentation. If set to NO,COMMENT
LOWdocs/janus-doxygen.cfg501# The default value is: NO.COMMENT
LOWdocs/janus-doxygen.cfg521# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friendCOMMENT
LOWdocs/janus-doxygen.cfg541COMMENT
LOWdocs/janus-doxygen.cfg561# The default value is: NO.COMMENT
LOWdocs/janus-doxygen.cfg581COMMENT
LOWdocs/janus-doxygen.cfg601# The default value is: NO.COMMENT
LOWdocs/janus-doxygen.cfg621COMMENT
LOWdocs/janus-doxygen.cfg661COMMENT
LOWdocs/janus-doxygen.cfg681# documentation regardless of this setting.COMMENT
LOWdocs/janus-doxygen.cfg701# page. This will remove the Namespaces entry from the Quick Index and from theCOMMENT
LOWdocs/janus-doxygen.cfg721# optionally specify a file name after the option, if omitted DoxygenLayout.xmlCOMMENT
LOWdocs/janus-doxygen.cfg741# Configuration options related to warning and progress messagesCOMMENT
LOWdocs/janus-doxygen.cfg761# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flagCOMMENT
LOWdocs/janus-doxygen.cfg781COMMENT
LOWdocs/janus-doxygen.cfg821 ../src/postprocessingCOMMENT
LOWdocs/janus-doxygen.cfg841# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,COMMENT
LOWdocs/janus-doxygen.cfg881# certain files from those directories.COMMENT
LOWdocs/janus-doxygen.cfg901# command).COMMENT
LOWdocs/janus-doxygen.cfg921# \image command).COMMENT
LOWdocs/janus-doxygen.cfg941# need to set EXTENSION_MAPPING for the extension otherwise the files are notCOMMENT
LOWdocs/janus-doxygen.cfg961# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).COMMENT
LOWdocs/janus-doxygen.cfg981#---------------------------------------------------------------------------COMMENT
142 more matches not shown…
Decorative Section Separators34 hits · 81 pts
SeverityFileLineSnippetContext
MEDIUM⚡docs/janus-doxygen.cfg2027#---------------------------------------------------------------------------COMMENT
MEDIUM⚡docs/janus-doxygen.cfg2029#---------------------------------------------------------------------------COMMENT
MEDIUM⚡docs/janus-doxygen.cfg2039#---------------------------------------------------------------------------COMMENT
MEDIUM⚡docs/janus-doxygen.cfg2041#---------------------------------------------------------------------------COMMENT
MEDIUMdocs/janus-doxygen.cfg16#---------------------------------------------------------------------------COMMENT
MEDIUMdocs/janus-doxygen.cfg18#---------------------------------------------------------------------------COMMENT
MEDIUMdocs/janus-doxygen.cfg442#---------------------------------------------------------------------------COMMENT
MEDIUMdocs/janus-doxygen.cfg444#---------------------------------------------------------------------------COMMENT
MEDIUMdocs/janus-doxygen.cfg740#---------------------------------------------------------------------------COMMENT
MEDIUMdocs/janus-doxygen.cfg742#---------------------------------------------------------------------------COMMENT
MEDIUMdocs/janus-doxygen.cfg806#---------------------------------------------------------------------------COMMENT
MEDIUMdocs/janus-doxygen.cfg808#---------------------------------------------------------------------------COMMENT
MEDIUMdocs/janus-doxygen.cfg981#---------------------------------------------------------------------------COMMENT
MEDIUMdocs/janus-doxygen.cfg983#---------------------------------------------------------------------------COMMENT
MEDIUMdocs/janus-doxygen.cfg1067#---------------------------------------------------------------------------COMMENT
MEDIUMdocs/janus-doxygen.cfg1069#---------------------------------------------------------------------------COMMENT
MEDIUMdocs/janus-doxygen.cfg1093#---------------------------------------------------------------------------COMMENT
MEDIUMdocs/janus-doxygen.cfg1095#---------------------------------------------------------------------------COMMENT
MEDIUMdocs/janus-doxygen.cfg1665#---------------------------------------------------------------------------COMMENT
MEDIUMdocs/janus-doxygen.cfg1667#---------------------------------------------------------------------------COMMENT
MEDIUMdocs/janus-doxygen.cfg1856#---------------------------------------------------------------------------COMMENT
MEDIUMdocs/janus-doxygen.cfg1858#---------------------------------------------------------------------------COMMENT
MEDIUMdocs/janus-doxygen.cfg1922#---------------------------------------------------------------------------COMMENT
MEDIUMdocs/janus-doxygen.cfg1924#---------------------------------------------------------------------------COMMENT
MEDIUMdocs/janus-doxygen.cfg1966#---------------------------------------------------------------------------COMMENT
MEDIUMdocs/janus-doxygen.cfg1968#---------------------------------------------------------------------------COMMENT
MEDIUMdocs/janus-doxygen.cfg2000#---------------------------------------------------------------------------COMMENT
MEDIUMdocs/janus-doxygen.cfg2002#---------------------------------------------------------------------------COMMENT
MEDIUMdocs/janus-doxygen.cfg2077#---------------------------------------------------------------------------COMMENT
MEDIUMdocs/janus-doxygen.cfg2079#---------------------------------------------------------------------------COMMENT
MEDIUMdocs/janus-doxygen.cfg2155#---------------------------------------------------------------------------COMMENT
MEDIUMdocs/janus-doxygen.cfg2157#---------------------------------------------------------------------------COMMENT
MEDIUMdocs/janus-doxygen.cfg2201#---------------------------------------------------------------------------COMMENT
MEDIUMdocs/janus-doxygen.cfg2203#---------------------------------------------------------------------------COMMENT
Slop Phrases5 hits · 14 pts
SeverityFileLineSnippetContext
MEDIUMdocs/janus-doxygen.cfg305# Note: For files without extension you can use no_extension as a placeholder.COMMENT
MEDIUMdocs/janus-doxygen.cfg832# If the value of the INPUT tag contains directories, you can use theCOMMENT
MEDIUMdocs/janus-doxygen.cfg879# If the value of the INPUT tag contains directories, you can use theCOMMENT
MEDIUMdocs/janus-doxygen.cfg905# If the value of the EXAMPLE_PATH tag contains directories, you can use theCOMMENT
LOWsrc/sdp-utils.h247 * want to replace them, don't forget to \c g_free the original pointers first.COMMENT
Hyper-Verbose Identifiers7 hits · 7 pts
SeverityFileLineSnippetContext
LOWhtml/demos/virtualbg.js366function handleSegmentationResults(results) {CODE
LOWhtml/demos/echotest.js648function updateSimulcastSvcButtons(substream, temporal) {CODE
LOWhtml/demos/janus.js1886 function createPeerconnectionIfNeeded(handleId, callbacks) {CODE
LOWhtml/demos/mvideoroom.js1043function updateSimulcastSvcButtons(feed, substream, temporal) {CODE
LOWhtml/demos/admin.js657function addPluginMessageAttribute() {CODE
LOWhtml/demos/admin.js789function addTransportMessageAttribute() {CODE
LOWhtml/demos/videoroom.js906function updateSimulcastSvcButtons(feed, substream, temporal) {CODE
AI Slop Vocabulary3 hits · 6 pts
SeverityFileLineSnippetContext
MEDIUMhtml/demos/devices.js47 // Definitely missing in Safari at the moment: https://bugs.webkit.org/show_bug.cgi?id=179415COMMENT
MEDIUMdocs/janus-doxygen.cfg1153# it is more robust and this tag (HTML_STYLESHEET) will in the future becomeCOMMENT
MEDIUMdocs/janus-doxygen.cfg1163# standard style sheet and is therefore more robust against future updates.COMMENT
Excessive Try-Catch Wrapping4 hits · 5 pts
SeverityFileLineSnippetContext
LOWtest/echo.py49 except Exception as e:CODE
LOWtest/echo.py83 except Exception:CODE
LOWtest/echo.py318 except Exception:CODE
MEDIUMtest/echo.py53def receiveMessage(self):CODE
Empty Error Handlers1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHtest/echo.py152except asyncio.CancelledError:CODE
Verbosity Indicators2 hits · 3 pts
SeverityFileLineSnippetContext
LOWsrc/plugins/janus_videoroom.c4452 /* we need to check if the room still exists, may have been destroyed already */COMMENT
LOWsrc/plugins/janus_videoroom.c4475 /* We need to check if the room still exists, may have been destroyed already */COMMENT
Deep Nesting2 hits · 2 pts
SeverityFileLineSnippetContext
LOWtest/echo.py172CODE
LOWtest/echo.py53CODE
AI Structural Patterns2 hits · 2 pts
SeverityFileLineSnippetContext
LOWtest/echo.py103CODE
LOWtest/echo.py118CODE
Fake / Example Data2 hits · 2 pts
SeverityFileLineSnippetContext
LOWhtml/demos/recordplay.js379 $('#datafield').attr('placeholder', 'Write a message to record');CODE
LOWhtml/demos/recordplay.js398 $('#datafield').attr('disabled', true).attr('placeholder', '').val('');CODE