AI Slop Code Risk Monitor

Ebullioscopic/Atoll

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

Dynamic Island for macOS

2.3 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for Ebullioscopic/Atoll, a Swift project with 5,138 GitHub stars. SynthScan examined 126,434 lines of code across 460 source files, recording 156 pattern matches distributed across 10 syntactic categories. The legacy adjusted pattern signal is 2.3 (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.3
Adjusted Signal
2.3
Raw Pattern Score
100%
Time Factor
2026-11-01
Last Push
5.1K
Stars
Swift
Language
126.4K
Lines of Code
460
Files
156
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 4.5/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.0/100 · LOW

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

Agent Over-Engineering Ratio 6.9/100 · LOW

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

PR Review Velocity Impact 11.4/100 · LOW

Which changes need focused human review? 156 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 1MEDIUM 72LOW 83

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 156 distinct pattern matches across 10 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.

Decorative Section Separators46 hits · 124 pts
SeverityFileLineSnippetContext
MEDIUM⚡.github/workflows/release.yml187 # ─────────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡.github/workflows/release.yml189 # ─────────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡.github/workflows/release.yml217 # ─────────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡.github/workflows/release.yml219 # ─────────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡.github/workflows/release.yml229 # ─────────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡.github/workflows/release.yml231 # ─────────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡.github/workflows/release.yml240 # ─────────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡.github/workflows/release.yml242 # ─────────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡.github/workflows/release.yml249 # ─────────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡.github/workflows/release.yml251 # ─────────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡.github/workflows/release.yml307 # ─────────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡.github/workflows/release.yml309 # ─────────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡.github/workflows/release.yml317 # ─────────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡.github/workflows/release.yml319 # ─────────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡.github/workflows/release.yml411 # ─────────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡.github/workflows/release.yml413 # ─────────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡.github/workflows/release.yml422 # ─────────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡.github/workflows/release.yml424 # ─────────────────────────────────────────────────────────────────COMMENT
MEDIUM.github/workflows/release.yml46 # ─────────────────────────────────────────────────────────────────COMMENT
MEDIUM.github/workflows/release.yml48 # ─────────────────────────────────────────────────────────────────COMMENT
MEDIUM.github/workflows/release.yml63 # ─────────────────────────────────────────────────────────────────COMMENT
MEDIUM.github/workflows/release.yml65 # ─────────────────────────────────────────────────────────────────COMMENT
MEDIUM.github/workflows/release.yml81 # ─────────────────────────────────────────────────────────────────COMMENT
MEDIUM.github/workflows/release.yml83 # ─────────────────────────────────────────────────────────────────COMMENT
MEDIUM.github/workflows/release.yml161 # ─────────────────────────────────────────────────────────────────COMMENT
MEDIUM.github/workflows/release.yml163 # ─────────────────────────────────────────────────────────────────COMMENT
MEDIUM.github/workflows/release.yml263 # ─────────────────────────────────────────────────────────────────COMMENT
MEDIUM.github/workflows/release.yml265 # ─────────────────────────────────────────────────────────────────COMMENT
MEDIUM.github/workflows/release.yml279 # ─────────────────────────────────────────────────────────────────COMMENT
MEDIUM.github/workflows/release.yml281 # ─────────────────────────────────────────────────────────────────COMMENT
MEDIUM.github/workflows/release.yml346 # ─────────────────────────────────────────────────────────────────COMMENT
MEDIUM.github/workflows/release.yml348 # ─────────────────────────────────────────────────────────────────COMMENT
MEDIUM.github/workflows/release.yml391 # ─────────────────────────────────────────────────────────────────COMMENT
MEDIUM.github/workflows/release.yml393 # ─────────────────────────────────────────────────────────────────COMMENT
MEDIUM.github/workflows/release.yml442 # ─────────────────────────────────────────────────────────────────COMMENT
MEDIUM.github/workflows/release.yml444 # ─────────────────────────────────────────────────────────────────COMMENT
MEDIUM.github/workflows/release.yml491 # ─────────────────────────────────────────────────────────────────COMMENT
MEDIUM.github/workflows/release.yml493 # ─────────────────────────────────────────────────────────────────COMMENT
MEDIUM.github/workflows/release.yml532 # ─────────────────────────────────────────────────────────────────COMMENT
MEDIUM.github/workflows/release.yml534 # ─────────────────────────────────────────────────────────────────COMMENT
MEDIUM.github/workflows/release.yml568 # ─────────────────────────────────────────────────────────────────COMMENT
MEDIUM.github/workflows/release.yml570 # ─────────────────────────────────────────────────────────────────COMMENT
MEDIUM.github/workflows/release.yml648 # ─────────────────────────────────────────────────────────────────COMMENT
MEDIUM.github/workflows/release.yml650 # ─────────────────────────────────────────────────────────────────COMMENT
MEDIUM.github/workflows/release.yml684 # ─────────────────────────────────────────────────────────────────COMMENT
MEDIUM.github/workflows/release.yml686 # ─────────────────────────────────────────────────────────────────COMMENT
Over-Commented Block58 hits · 58 pts
SeverityFileLineSnippetContext
LOWDynamicIsland/ContentView.swift1021 .onDisappear {COMMENT
LOWDynamicIsland/MediaControllers/TidalController.swift141}COMMENT
LOWDynamicIsland/MediaControllers/TidalController.swift161/// it. Reading a menu this way does not open it on screen.COMMENT
LOWDynamicIsland/MediaControllers/TidalController.swift181 // a real click via postToPid changes nothingCOMMENT
LOW…amicIsland/MediaControllers/NowPlayingController.swift361 // time as played, and every pause pushes the estimate further ahead --COMMENT
LOW…amicIsland/MediaControllers/AppleMusicController.swift401 }COMMENT
LOWDynamicIsland/MediaControllers/CiderTokenStore.swift1//COMMENT
LOW…cIsland/MediaControllers/MediaControllerProtocol.swift41 // MARK: - FavouritingCOMMENT
LOW…/YouTube Music Controller/YouTubeMusicController.swift501}COMMENT
LOWDynamicIsland/managers/MenuBarLayout.swift1//COMMENT
LOWDynamicIsland/managers/MenuBarLayout.swift21///COMMENT
LOWDynamicIsland/managers/SystemMediaControllers.swift101 /// bottom and stayed there. Holding the last known level makes a failedCOMMENT
LOWDynamicIsland/managers/MusicManager.swift1081 // reason. This is a published property that several views read, so anCOMMENT
LOWDynamicIsland/managers/MusicManager.swift2041 // Compared before assigning: this runs on every sync tick, and writing anCOMMENT
LOWDynamicIsland/managers/MusicManager.swift2101 }COMMENT
LOWDynamicIsland/managers/SystemChangesObserver.swift21import DefaultsCOMMENT
LOWDynamicIsland/managers/SystemChangesObserver.swift41 ///COMMENT
LOW…and/managers/LockScreenLiveActivityWindowManager.swift61 /// Rounds the notch up to whole points.COMMENT
LOWDynamicIsland/managers/LyricsMetadata.swift81 album: String,COMMENT
LOWDynamicIsland/managers/LyricsMetadata.swift141COMMENT
LOWDynamicIsland/managers/TerminalManager.swift21import FoundationCOMMENT
LOWDynamicIsland/managers/TerminalManager.swift41/// (recorded during the transient removal) but the child kept its previousCOMMENT
LOWDynamicIsland/managers/TerminalManager.swift121}COMMENT
LOWDynamicIsland/managers/BluetoothAudioManager.swift141 // `ContentView.body` while this initialiser is still running. That bodyCOMMENT
LOWDynamicIsland/managers/BluetoothAudioManager.swift2801}COMMENT
LOWDynamicIsland/managers/BluetoothAudioManager.swift2841 Bundle.main.url(COMMENT
LOWDynamicIsland/managers/BluetoothAudioManager.swift2861 private static let leadingAtomTypes: Set<String> = ["ftyp", "moov", "mdat", "free", "skip", "wide", "pnot"]COMMENT
LOWDynamicIsland/managers/DownloadManager.swift21import ObservationCOMMENT
LOWDynamicIsland/managers/DownloadManager.swift41COMMENT
LOWDynamicIsland/managers/DownloadManager.swift101 /// when sampling stopped could land after the next download had startedCOMMENT
LOWDynamicIsland/managers/DownloadManager.swift301 /// The rate since an earlier reading, or nil when the pair cannot carryCOMMENT
LOWDynamicIsland/managers/SystemHUDManager.swift321 // so what was handed over before this restart says nothing about whatCOMMENT
LOWDynamicIsland/managers/PerAppVolumeManager.swift41/// A tap is only created for an app whose level actually differs from theCOMMENT
LOWDynamicIsland/managers/LLMUsage/ModelPricing.swift21/// Utility to resolve LLM model pricing dynamicallyCOMMENT
LOWDynamicIsland/models/Constants.swift1241 COMMENT
LOWDynamicIsland/models/Constants.swift1561 ///COMMENT
LOWDynamicIsland/sizing/matters.swift241 outerBottom = active.closed.bottomCOMMENT
LOWDynamicIsland/components/Notch/LikeTrackControl.swift21 */COMMENT
LOWDynamicIsland/components/Notch/LikeTrackControl.swift61/// (`HoverButton`, a private `controlButton`, …) so on-screen appearance andCOMMENT
LOWDynamicIsland/components/Notch/NotchHomeView.swift1441 }COMMENT
LOW…and/components/Music/LiveStreamProgressIndicator.swift21/// The stand-in for a progress bar on a stream that has no position to show.COMMENT
LOWDynamicIsland/components/Music/SyncedLyricsList.swift1//COMMENT
LOWDynamicIsland/components/Music/SkipTrackGlyph.swift41COMMENT
LOW…land/components/Settings/MediaSourceCapabilities.swift1//COMMENT
LOWDynamicIsland/components/Settings/SettingsView.swift7041 isTimerDragging = falseCOMMENT
LOW…Island/components/Calendar/DynamicIslandCalendar.swift61// MARK: - Compact all-day events stripCOMMENT
LOWDynamicIsland/components/LockScreen/LyricSweep.swift81/// order instead of wiping straight across the block.COMMENT
LOW…sland/components/LockScreen/LockScreenMusicPanel.swift161 }COMMENT
LOW…sland/components/LockScreen/LockScreenMusicPanel.swift181 private var controlIconSize: CGFloat { isExpanded ? 26 : 18 }COMMENT
LOW…sland/components/LockScreen/LockScreenMusicPanel.swift201 //COMMENT
LOW…/components/Shelf/ViewModels/ShelfStateViewModel.swift141 /// leaving `cachedPath` pointing at the old location would make dedup treatCOMMENT
LOWDynamicIsland/components/Shelf/Models/ShelfItem.swift301 return "link"COMMENT
LOW…components/Shelf/Views/ShelfMarqueeSelectionView.swift21COMMENT
LOW…namicIsland/components/Shelf/Views/ShelfItemView.swift481 /// path every item dropped or backfilled since launch has. Only when thatCOMMENT
LOWDynamicIsland/audio/AudioTap.swift181 // AirPods/Bluetooth output + Spotify don't mix: process-tapping Spotify into ourCOMMENT
LOWDynamicIsland/audio/PerAppVolume/AppVolumeTap.swift101COMMENT
LOWDynamicIsland/helpers/LiquidGlassBackground.swift141 return LiquidGlassVariant(rawValue: clamped) ?? .defaultVariantCOMMENT
LOW…micIsland/services/Extensions/ExtensionRPCServer.swift21import DefaultsCOMMENT
Excessive Try-Catch Wrapping23 hits · 48 pts
SeverityFileLineSnippetContext
MEDIUM…amicIsland/MediaControllers/NowPlayingController.swift577 print("Error processing JSON stream: \(error)")CODE
MEDIUM…amicIsland/MediaControllers/NowPlayingController.swift630 print("Error closing pipe handler: \(error)")CODE
MEDIUMDynamicIsland/managers/MusicManager.swift1738 print("Error: appBundleIdentifier is nil")CODE
MEDIUM⚡DynamicIsland/utils/SMC.swift174 print("Error IOServiceGetMatchingServices(): " + (String(cString: mach_error_string(result), encoding: StrinCODE
MEDIUM⚡DynamicIsland/utils/SMC.swift181 print("Error IOIteratorNext(): " + (String(cString: mach_error_string(result), encoding: String.Encoding.ascCODE
MEDIUM⚡DynamicIsland/utils/SMC.swift188 print("Error IOServiceOpen(): " + (String(cString: mach_error_string(result), encoding: String.Encoding.asciCODE
MEDIUMDynamicIsland/utils/SMC.swift210 print("Error read(\(key)): " + (String(cString: mach_error_string(result), encoding: String.Encoding.ascii) CODE
MEDIUMDynamicIsland/utils/SMC.swift281 print("Error read(): " + (String(cString: mach_error_string(result), encoding: String.Encoding.ascii) ?? "unCODE
MEDIUMDynamicIsland/utils/SMC.swift368 print("Error read fan mode: " + (String(cString: mach_error_string(result), encoding: String.Encoding.asCODE
MEDIUMDynamicIsland/utils/SMC.swift381 print("Error write: " + (String(cString: mach_error_string(result), encoding: String.Encoding.ascii) ?? CODE
MEDIUMDynamicIsland/utils/SMC.swift416 print("Error read fan mode: " + (String(cString: mach_error_string(result), encoding: String.Encoding.ascii)CODE
MEDIUMDynamicIsland/utils/SMC.swift429 print("Error write: " + (String(cString: mach_error_string(result), encoding: String.Encoding.ascii) ?? "unkCODE
MEDIUMDynamicIsland/utils/SMC.swift447 print("Error read fan value: " + (String(cString: mach_error_string(result), encoding: String.Encoding.asciiCODE
MEDIUMDynamicIsland/utils/SMC.swift466 print("Error write: " + (String(cString: mach_error_string(result), encoding: String.Encoding.ascii) ?? "unkCODE
MEDIUMDynamicIsland/utils/SMC.swift477 print("Error write: " + (String(cString: mach_error_string(result), encoding: String.Encoding.ascii) ?? "unkCODE
MEDIUMDynamicIsland/models/EventModel.swift206 print("Error launching Notion Calendar: \(error.localizedDescription)")CODE
MEDIUM…amicIsland/extensions/NSItemProvider+LoadHelpers.swift53 print("Error loading data for type \(UTType.data.identifier): \(error.localizedDescription)")CODE
MEDIUM…amicIsland/extensions/NSItemProvider+LoadHelpers.swift72 print("Error: \(error.localizedDescription)")CODE
MEDIUMDynamicIsland/components/DynamicIslandSystemTiles.swift75 print("Error: \(error)")STRING
MEDIUM…nents/Shelf/Services/TemporaryFileStorageService.swift69 print("Error: \(error.localizedDescription)")CODE
MEDIUM…nents/Shelf/Services/TemporaryFileStorageService.swift90 print("Error: \(error)")CODE
MEDIUM…nents/Shelf/Services/TemporaryFileStorageService.swift109 print("Error: \(error)")CODE
MEDIUM…nents/Shelf/Services/TemporaryFileStorageService.swift129 print("Error: \(error)")CODE
Verbosity Indicators7 hits · 15 pts
SeverityFileLineSnippetContext
LOW⚡DynamicIsland/managers/ClipboardManager.swift579 // Step 1: Check what types are availableCOMMENT
LOW⚡DynamicIsland/managers/ClipboardManager.swift586 // Step 2: Smart detection based on contextCOMMENT
LOWDynamicIsland/extensions/NSImage+Extensions.swift209 // Step 1: Downsample the imageCOMMENT
LOW⚡DynamicIsland/extensions/NSImage+Extensions.swift317 // Step 2: Ignore boring pixelsCOMMENT
LOW⚡DynamicIsland/extensions/NSImage+Extensions.swift322 // Step 3: Weighted color extractionCOMMENT
LOW⚡DynamicIsland/extensions/NSImage+Extensions.swift354 // Step 4: Improve primary colorCOMMENT
LOW⚡DynamicIsland/extensions/NSImage+Extensions.swift361 // Step 5: Better secondary colorCOMMENT
Structural Annotation Overuse7 hits · 15 pts
SeverityFileLineSnippetContext
LOW⚡DynamicIsland/managers/ClipboardManager.swift579 // Step 1: Check what types are availableCOMMENT
LOW⚡DynamicIsland/managers/ClipboardManager.swift586 // Step 2: Smart detection based on contextCOMMENT
LOWDynamicIsland/extensions/NSImage+Extensions.swift209 // Step 1: Downsample the imageCOMMENT
LOW⚡DynamicIsland/extensions/NSImage+Extensions.swift317 // Step 2: Ignore boring pixelsCOMMENT
LOW⚡DynamicIsland/extensions/NSImage+Extensions.swift322 // Step 3: Weighted color extractionCOMMENT
LOW⚡DynamicIsland/extensions/NSImage+Extensions.swift354 // Step 4: Improve primary colorCOMMENT
LOW⚡DynamicIsland/extensions/NSImage+Extensions.swift361 // Step 5: Better secondary colorCOMMENT
Hyper-Verbose Identifiers7 hits · 10 pts
SeverityFileLineSnippetContext
LOW⚡tests/test_privacy_configuration.py14 def test_camera_capture_is_explicitly_entitled(self):CODE
LOW⚡tests/test_privacy_configuration.py19 def test_notes_sync_is_authorized_for_apple_events(self):CODE
LOW⚡tests/test_privacy_configuration.py29 def test_automation_usage_text_names_notes(self):CODE
LOW⚡tests/test_privacy_configuration.py39 def test_full_access_reminder_api_has_matching_usage_text(self):CODE
LOW⚡tests/test_privacy_configuration.py47 def test_release_resigning_preserves_archived_entitlements(self):CODE
LOWtests/test_privacy_configuration.py72 def test_ci_checks_the_privacy_configuration(self):CODE
LOWtests/test_timer_lifecycle.py12 def test_replacement_session_invalidates_delayed_cleanup_token(self):CODE
Self-Referential Comments3 hits · 9 pts
SeverityFileLineSnippetContext
MEDIUMmediaremote-adapter/mediaremote-adapter.pl3# This file is licensed under the BSD 3-Clause License.COMMENT
MEDIUM⚡.github/workflows/release.yml196 # Create a temporary keychainCOMMENT
MEDIUM.github/workflows/release.yml470 # Create a staging folder with just the DMGCOMMENT
Synthetic Comment Markers1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHDynamicIsland/components/Notch/NotchNotesView.swift1029 .padding(.bottom, 20) // Moved higher as requestedCODE
Redundant / Tautological Comments3 hits · 4 pts
SeverityFileLineSnippetContext
LOW.github/workflows/validate-changelog.yml49 # Check if the category has any entries (lines starting with -)COMMENT
LOW.github/workflows/nightly-merge.yml41 # Check if dev has any commits ahead of nightlyCOMMENT
LOW.github/workflows/nightly-merge.yml73 # Check if a conflict PR already existsCOMMENT
Fake / Example Data1 hit · 1 pts
SeverityFileLineSnippetContext
LOWDynamicIsland/components/Settings/SettingsView.swift328 SettingsSearchEntry(tab: .media, title: "Auto-hide inactive notch media player", keywords: ["auto hide", "inactiCODE