AI Slop Code Risk Monitor

miroslavpejic85/mirotalksfu

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

🏆 Self-hosted, open-source WebRTC video conferencing platform for real-time communication and collaboration. A modern alternative to Zoom, Google Meet, Jitsi Meet, and Microsoft Teams, powered by scalable SFU architecture with Mediasoup.

2.1 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for miroslavpejic85/mirotalksfu, a JavaScript project with 3,144 GitHub stars. SynthScan examined 165,727 lines of code across 282 source files, recording 152 pattern matches distributed across 9 syntactic categories. The legacy adjusted pattern signal is 2.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.

2.1
Adjusted Signal
2.1
Raw Pattern Score
100%
Time Factor
2026-10-31
Last Push
3.1K
Stars
JavaScript
Language
165.7K
Lines of Code
282
Files
152
Pattern Hits
2026-10-31
Scan Date
0.06
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.8/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 5.9/100 · LOW

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

Agent Over-Engineering Ratio 3.4/100 · LOW

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

PR Review Velocity Impact 9.3/100 · LOW

Which changes need focused human review? 152 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 16HIGH 0MEDIUM 13LOW 123

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 152 distinct pattern matches across 9 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.

Hallucination Indicators16 hits · 180 pts
SeverityFileLineSnippetContext
CRITICALtests/test-Lobby.js57 client.socket.emit.notCalled.should.be.true();CODE
CRITICALtests/test-Lobby.js58 client.lobbyRemovePear.notCalled.should.be.true();CODE
CRITICALtests/test-Lobby.js73 client.confirmPeerAction.calledOnce.should.be.true();CODE
CRITICALtests/test-PresenterManager.js42 lobbyPeer.updatePeerInfo.notCalled.should.be.true();CODE
CRITICAL⚡tests/test-PresenterManager.js61 peer.updatePeerInfo.notCalled.should.be.true();CODE
CRITICAL⚡tests/test-PresenterManager.js62 room.sendToAll.notCalled.should.be.true();CODE
CRITICAL⚡tests/test-PresenterManager.js72 peer.updatePeerInfo.notCalled.should.be.true();CODE
CRITICAL⚡tests/test-PresenterManager.js73 room.sendToAll.notCalled.should.be.true();CODE
CRITICALtests/test-Whip.js449 peer.peer_info.peer_whip.should.be.true();CODE
CRITICALtests/test-Whip.js469 peer.peer_info.peer_video.should.be.false();CODE
CRITICALtests/test-Whip.js532 room.router.closed.should.be.true();CODE
CRITICALtests/test-Whip.js533 session.transport.closed.should.be.true();CODE
CRITICALtests/test-OpenRedirect.js57 res.redirect.calledOnce.should.be.true();CODE
CRITICALtests/test-OpenRedirect.js67 res.redirect.calledOnce.should.be.true();CODE
CRITICALtests/test-OpenRedirect.js78 res.redirect.calledOnce.should.be.true();CODE
CRITICALtests/test-OpenRedirect.js94 res.redirect.calledOnce.should.be.true();CODE
Hyper-Verbose Identifiers88 hits · 68 pts
SeverityFileLineSnippetContext
LOWapp/src/Server.js180function getRtmpTotalActiveStreamsCount() {CODE
LOWapp/src/Server.js313function isOidcPresenterTokenValid(token, roomId) {CODE
LOWapp/src/Server.js6087 function notifyMainRoomBreakoutCountChanged(breakoutRoomId) {CODE
LOWapp/src/Server.js6537 function updateHostAuthenticatedFlag() {CODE
LOWapp/src/Server.js6579async function getScheduleMeetingAuthState(req) {CODE
LOWapp/src/PresenterManager.js14function isOidcConfiguredPresenter(oidcUser, presenterList) {CODE
LOWapp/src/middleware/RateLimiters.js40function createSlidingWindowLimiter({ windowMs, max }) {CODE
LOWapp/src/scripts/bindable.js115async function checkWebRtcTransportPorts(ipAddress, minPort, maxPort) {CODE
LOWapp/src/lib/nodemailer.js269function sanitizeScheduleMeetingText(value, maxLength = SCHEDULE_MEETING_LIMITS.descriptionMax) {CODE
LOWtests/test-NoiseSuppression.js131function createProcessorEnvironment(overrides = {}) {CODE
LOWtests/test-Swal.js173 function initializeMicrophoneSwitches() {CODE
LOWtests/test-Swal.js359 const start = source.indexOf('function toggleLockUnlockWhiteboard()');CODE
LOWpublic/js/Rules.js347function loadModeratorDataFromRoom() {CODE
LOWpublic/js/Translate.js14function googleTranslateElementInit() {CODE
LOWpublic/js/WakeLock.js102function notifyManualWakeLockChange() {CODE
LOW⚡public/js/Room.js8779 function renderParticipantMenuItem(buttonHtml) {CODE
LOW⚡public/js/Room.js8785 function renderParticipantMenuHeader(title, avatarSrc) {CODE
LOW⚡public/js/Room.js8792 function renderParticipantMenuGroup(label) {CODE
LOW⚡public/js/Room.js8798 function renderParticipantDropdown(menuId, menuItems, ariaLabel = 'Participant actions') {CODE
LOW⚡public/js/Room.js9440function toggleHiddenParticipantsFilter() {CODE
LOW⚡public/js/Room.js9449function prunePeersLeftFromHiddenIds(peers) {CODE
LOW⚡public/js/Room.js9458function setHiddenParticipantsFilter(active) {CODE
LOW⚡public/js/Room.js9465function refreshHiddenParticipantsButton() {CODE
LOW⚡public/js/Room.js9469function applyHiddenParticipantsFilter() {CODE
LOW⚡public/js/Room.js9478function showAllHiddenParticipants() {CODE
LOWpublic/js/Room.js303async function loadVirtualBackgroundsFromManifest() {CODE
LOWpublic/js/Room.js768function refreshMainButtonsToolTipPlacement() {CODE
LOWpublic/js/Room.js914async function refreshMyAudioVideoDevices() {CODE
LOWpublic/js/Room.js1044async function initEnumerateVideoDevices() {CODE
LOWpublic/js/Room.js1084async function initEnumerateAudioDevices() {CODE
LOWpublic/js/Room.js1448function refreshInitAudioVideoButtons() {CODE
LOWpublic/js/Room.js1462async function getMicrophoneVolumeIndicator(stream) {CODE
LOWpublic/js/Room.js1591function applyNoiseSuppressionDefault() {CODE
LOWpublic/js/Room.js3009function resetMyPeerAvatarInMemory() {CODE
LOWpublic/js/Room.js3040function updateMyAvatarResetButtonVisibility() {CODE
LOWpublic/js/Room.js3052function updateChatConversationsCount() {CODE
LOWpublic/js/Room.js4346function setupParticipantViewDropdown() {CODE
LOWpublic/js/Room.js4372function updateParticipantViewButtonVisibility() {CODE
LOWpublic/js/Room.js5196function handleUsernameEmojiPicker() {CODE
LOWpublic/js/Room.js5507function loadSettingsFromLocalStorage() {CODE
LOWpublic/js/Room.js6336function setupSettingsExtraDropdown() {CODE
LOWpublic/js/Room.js6407function updateSettingsExtraGroups() {CODE
LOWpublic/js/Room.js6435function restoreSplitButtonsBorderRadius() {CODE
LOWpublic/js/Room.js6447function setupQuickDeviceSwitchDropdowns() {CODE
LOWpublic/js/Room.js6737 function getVideoMenuBackgroundMode() {CODE
LOWpublic/js/Room.js6758 function getVideoMenuBackgroundFileInput() {CODE
LOWpublic/js/Room.js6775 async function uploadVideoMenuBackground(files) {CODE
LOWpublic/js/Room.js6782 function appendVideoMenuBackgroundOption(sectionEl, label, selected, clickHandler) {CODE
LOWpublic/js/Room.js6809 function appendVideoMenuBackgroundGrid(sectionEl) {CODE
LOWpublic/js/Room.js6881 function appendVideoMenuBackground(menuEl) {CODE
LOWpublic/js/Room.js6906 function restoreVideoMenuBackgroundScroll(section) {CODE
LOWpublic/js/Room.js7233function setupWhiteboardCanvasSize() {CODE
LOWpublic/js/Room.js7269function setupWhiteboardResizeListener() {CODE
LOWpublic/js/Room.js7353function setWhiteboardControlState(button, isActive) {CODE
LOWpublic/js/Room.js7364function whiteboardIsVanishingMode(status) {CODE
LOWpublic/js/Room.js7598function whiteboardUngroupSelection() {CODE
LOWpublic/js/Room.js7886function setupWhiteboardLocalListeners() {CODE
LOWpublic/js/Room.js7952async function editWhiteboardGroupedText(e) {CODE
LOWpublic/js/Room.js8099function wbPositionParticipantLabel(entry) {CODE
LOWpublic/js/Room.js8111function wbRepositionParticipantLabels() {CODE
28 more matches not shown…
Decorative Section Separators11 hits · 46 pts
SeverityFileLineSnippetContext
MEDIUM⚡docker-compose-whisper.yml1# =============================================================================COMMENT
MEDIUM⚡docker-compose-whisper.yml3# =============================================================================COMMENT
MEDIUM⚡docker-compose-whisper.yml12# -----------------------------------------------------------------------------COMMENT
MEDIUM⚡docker-compose-whisper.yml14# -----------------------------------------------------------------------------COMMENT
MEDIUM⚡docker-compose-whisper.yml20# -----------------------------------------------------------------------------COMMENT
MEDIUM⚡docker-compose-whisper.yml22# -----------------------------------------------------------------------------COMMENT
MEDIUM⚡docker-compose-whisper.yml40# =============================================================================COMMENT
MEDIUM⚡docker-compose-whisper.yml43 # -------------------------------------------------------------------------COMMENT
MEDIUM⚡docker-compose-whisper.yml45 # -------------------------------------------------------------------------COMMENT
MEDIUMdocker-compose-whisper.yml67 # -------------------------------------------------------------------------COMMENT
MEDIUMdocker-compose-whisper.yml69 # -------------------------------------------------------------------------COMMENT
Fake / Example Data21 hits · 20 pts
SeverityFileLineSnippetContext
LOWtests/test-SipPhone.js48 assert.deepEqual(parseSipTarget('bob@example.org', ctx), {CODE
LOWtests/test-SipPhone.js51 uri: 'sip:bob@example.org',CODE
LOWtests/test-SipPhone.js153 type('bob@example.org');CODE
LOWtests/test-ServerAPI.js50 ['peer1', { peer_info: { peer_name: 'John Doe' } }],CODE
LOWtests/test-ServerAPI.js51 ['peer2', { peer_info: { peer_name: 'Jane Doe' } }],CODE
LOWtests/test-ServerAPI.js111 peer_name: 'John Doe',CODE
LOWtests/test-ServerAPI.js135 name: 'John Doe',CODE
LOWtests/test-ServerAPI.js175 name: 'John Doe',CODE
LOWtests/test-GifSearch.js74 assert.equal(elements.input.getAttribute('placeholder'), 'Search KLIPY');CODE
LOWpublic/js/VideoDrawing.js2072 this._setTranslatedAttribute(input, 'placeholder', 'Type annotation', 'labels');CODE
LOWpublic/js/Room.js7414 const text = new fabric.IText('Lorem Ipsum', {CODE
LOWpublic/js/GifSearch.js38 this.input.setAttribute('placeholder', GifSearch.PLACEHOLDER);CODE
LOWpublic/js/I18n.js60 const ATTR_KEYS = ['title', 'placeholder', 'aria-label', 'data-tippy-content'];CODE
LOWpublic/views/50X.html78 <svg class="placeholder" width="528" height="396" viewBox="0 0 528 396">CODE
LOWpublic/views/404.html78 <svg class="placeholder" width="528" height="396" viewBox="0 0 528 396">CODE
LOWpublic/views/login.html215 <svg class="placeholder" width="528" height="396" viewBox="0 0 528 396">CODE
LOWpublic/views/newroom.html93 <svg class="placeholder" width="528" height="396" viewBox="0 0 528 396">CODE
LOWpublic/views/permission.html92 <svg class="placeholder" width="528" height="396" viewBox="0 0 528 396">CODE
LOWpublic/views/whoAreYou.html136 <svg class="placeholder" width="528" height="396" viewBox="0 0 528 396">CODE
LOWpublic/views/landing.html124 <svg class="placeholder" width="528" height="396" viewBox="0 0 528 396">CODE
LOWscripts/extract-ui-lang.js23const ATTR_KEYS = ['title', 'placeholder', 'aria-label', 'data-tippy-content'];CODE
Structural Annotation Overuse6 hits · 9 pts
SeverityFileLineSnippetContext
LOWwebhook/README.md7### Step 1: Enable WebhooksCOMMENT
LOWwebhook/README.md18### Step 2: Run the Webhook ServerCOMMENT
LOWwebhook/README.md34### Step 3: Webhook EventsCOMMENT
LOWpublic/js/RoomClient.js15646 // Step 1: Create session tokenCOMMENT
LOWpublic/js/RoomClient.js15691 // Step 2: Start session to get LiveKit credentialsCOMMENT
LOWpublic/js/RoomClient.js15713 // Step 3: Connect to LiveKit roomCOMMENT
Over-Commented Block5 hits · 5 pts
SeverityFileLineSnippetContext
LOWdocker-compose-whisper.yml1# =============================================================================COMMENT
LOWdocker-compose-whisper.yml21# Point MiroTalk P2P at this serverCOMMENT
LOWdocker-compose.template.yml21 volumes:COMMENT
LOWpublic/js/Helpers.js81// To start recording, call audioRecorder.getMixedAudioStream(audioStreams);COMMENT
LOWscripts/upgrade-ffmpeg.sh1#!/usr/bin/env bashCOMMENT
Slop Phrases1 hit · 4 pts
SeverityFileLineSnippetContext
MEDIUM⚡docker-compose-whisper.yml5# Runs an OpenAI-compatible Whisper server so you can use the roomCOMMENT
Verbosity Indicators3 hits · 4 pts
SeverityFileLineSnippetContext
LOWpublic/js/RoomClient.js15646 // Step 1: Create session tokenCOMMENT
LOWpublic/js/RoomClient.js15691 // Step 2: Start session to get LiveKit credentialsCOMMENT
LOWpublic/js/RoomClient.js15713 // Step 3: Connect to LiveKit roomCOMMENT
AI Slop Vocabulary1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUMapp/src/lib/whisper.js13// Stored normalized (lowercase, no spaces/punctuation) for robust matching.COMMENT