AI Slop Code Risk Monitor

sparkle-project/Sparkle

SlopCodeMonitor badge for sparkle-project/Sparkle Adjusted legacy signal; badge bands: 25 / 50 / 75 (different from dashboard bands).

A software update framework for macOS

4.1 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for sparkle-project/Sparkle, a Objective-C project with 9,857 GitHub stars. SynthScan examined 51,538 lines of code across 340 source files, recording 189 pattern matches distributed across 6 syntactic categories. The legacy adjusted pattern signal is 4.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.

4.1
Adjusted Signal
4.1
Raw Pattern Score
100%
Time Factor
2026-10-25
Last Push
9.9K
Stars
Objective-C
Language
51.5K
Lines of Code
340
Files
189
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 15.7/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.4/100 · LOW

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

Agent Over-Engineering Ratio 3.1/100 · LOW

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

PR Review Velocity Impact 19.1/100 · LOW

Which changes need focused human review? 189 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 0MEDIUM 15LOW 174

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 189 distinct pattern matches across 6 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 Block169 hits · 169 pts
SeverityFileLineSnippetContext
LOWInstallerConnection/SUInstallerConnectionProtocol.h1//COMMENT
LOWInstallerConnection/SUXPCInstallerConnection.h1//COMMENT
LOWInstallerConnection/SUXPCInstallerConnection.m1//COMMENT
LOWInstallerConnection/main.m1//COMMENT
LOWInstallerConnection/SUInstallerConnection.h1//COMMENT
LOWConfigurations/generate_progress_tool_localizations.py1#!/usr/bin/env python3COMMENT
LOWUITests/SUTestApplicationTest.swift1//COMMENT
LOWBinaryDelta/Bridging-Header.h1//COMMENT
LOWInstallerStatus/SUInstallerStatusProtocol.h1//COMMENT
LOWInstallerStatus/SUXPCInstallerStatus.h1//COMMENT
LOWInstallerLauncher/SUInstallerLauncher+Private.h1//COMMENT
LOWInstallerLauncher/SUInstallerLauncher.m1//COMMENT
LOWInstallerLauncher/SUInstallerLauncher.m141 // See Apple's 'EvenBetterAuthorizationSample' sample code andCOMMENT
LOWInstallerLauncher/main.m1//COMMENT
LOWInstallerLauncher/SUInstallerLauncherProtocol.h1//COMMENT
LOWInstallerLauncher/SUInstallerLauncher.h1//COMMENT
LOWgenerate_appcast/URL+Hashing.swift1//COMMENT
LOWgenerate_appcast/Bridging-Header.h1#import <Foundation/Foundation.h>COMMENT
LOWTests/SUUpdaterTest.m1//COMMENT
LOWTests/SUInstallerTest.m1//COMMENT
LOWTests/SUVersionComparisonTest.m1//COMMENT
LOWTests/Sparkle Unit Tests-Bridging-Header.h1//COMMENT
LOWTests/SUSignatureVerifierTest.m1//COMMENT
LOWTests/SUCodeSigningVerifierTest.m1//COMMENT
LOWTests/SUBinaryDeltaTest.m1//COMMENT
LOWsign_update/Bridging-Header.h1#import <Foundation/Foundation.h>COMMENT
LOWAutoupdate/SUBinaryDeltaApply.h1//COMMENT
LOWAutoupdate/SPUInstallationInputData.m1//COMMENT
LOWAutoupdate/SPUDeltaArchive.m1//COMMENT
LOWAutoupdate/SUFlatPackageUnarchiver.m1//COMMENT
LOWAutoupdate/SUPipedUnarchiver.h1//COMMENT
LOWAutoupdate/SUBinaryDeltaCreate.m1//COMMENT
LOWAutoupdate/SUBinaryDeltaUnarchiver.h1//COMMENT
LOWAutoupdate/SUBinaryDeltaCommon.m1//COMMENT
LOWAutoupdate/SPUXarDeltaArchive.h1//COMMENT
LOWAutoupdate/SPUDeltaArchiveProtocol.h1//COMMENT
LOWAutoupdate/SUDiskImageUnarchiver.h1//COMMENT
LOWAutoupdate/AppInstaller.m1//COMMENT
LOWAutoupdate/AppInstaller.m21#import "SUFileManager.h"COMMENT
LOWAutoupdate/SPUSparkleDeltaArchive.m1//COMMENT
LOWAutoupdate/SUSignatureVerifier.m1//COMMENT
LOWAutoupdate/SUCodeSigningVerifier.h1//COMMENT
LOWAutoupdate/SUInstallerProtocol.h1//COMMENT
LOWAutoupdate/SUFlatPackageUnarchiver.h1//COMMENT
LOWAutoupdate/SUGuidedPackageInstaller.m1//COMMENT
LOWAutoupdate/SUBinaryDeltaApply.m1//COMMENT
LOWAutoupdate/SUBinaryDeltaCreate.h1//COMMENT
LOWAutoupdate/SUPipedUnarchiver.m1//COMMENT
LOWAutoupdate/SUPlainInstaller.m1//COMMENT
LOWAutoupdate/SPUMessageTypes.m1//COMMENT
LOWAutoupdate/SUUnarchiver.m1//COMMENT
LOWAutoupdate/SUDiskImageUnarchiver.m1//COMMENT
LOWAutoupdate/SPUXarDeltaArchive.m1//COMMENT
LOWAutoupdate/SPUXarDeltaArchive.m21// Don't use OS availability for this APICOMMENT
LOWAutoupdate/SUBinaryDeltaCommon.h1//COMMENT
LOWAutoupdate/SUBinaryDeltaCommon.h21COMMENT
LOWAutoupdate/SUBinaryDeltaUnarchiver.m1//COMMENT
LOWAutoupdate/StatusInfo.m1//COMMENT
LOWAutoupdate/SUInstaller.m1//COMMENT
LOWAutoupdate/SUCodeSigningVerifier.m1//COMMENT
109 more matches not shown…
Excessive Try-Catch Wrapping13 hits · 32 pts
SeverityFileLineSnippetContext
MEDIUMcommon_cli/Signing.swift74 print("Error: failed to parse XML data: \(error)")CODE
MEDIUMgenerate_appcast/Appcast.swift215 print("Error: could not sign \(update.archivePath.path) due to lack of private EdDSA key")CODE
MEDIUMgenerate_appcast/ArchiveItem.swift470 print("Error: failed to read release notes as UTF8 string: \(path.lastPathComponent)")CODE
MEDIUM⚡generate_appcast/main.swift26 print("Error: specifying private key as the argument is no longer supported.")CODE
MEDIUM⚡generate_appcast/main.swift29 print("Error: Private key not decoded from the argument, which has \(data.count) bytes. Please provide aCODE
MEDIUM⚡generate_appcast/main.swift33 print("Error: Private key not decoded from the argument because it isn't base64 encoded. Please provide a vaCODE
MEDIUMgenerate_appcast/main.swift50 print("Error: Failed to base64 decode secret data from keychain")CODE
MEDIUMgenerate_appcast/main.swift60 print("Error: Failed to decode private and public keys from secret data")CODE
MEDIUMgenerate_appcast/main.swift362 print("Error generating appcast from directory", archivesSourceDir.path, "\n", error)STRING
MEDIUM⚡sign_update/main.swift206 print("Error: failed to extract signature from appcast. Is the appcast signed?")CODE
MEDIUM⚡sign_update/main.swift214 print("Error: failed to decode base64 signature: \(base64Signature)")CODE
MEDIUM⚡sign_update/main.swift220 print("Error: signature passed in has an invalid byte count.")CODE
MEDIUM⚡sign_update/main.swift228 print("Error: failed to pass signing verification.")CODE
AI Slop Vocabulary2 hits · 6 pts
SeverityFileLineSnippetContext
MEDIUMSparkle/SULog.m33 // And we don't really leverage of os_log's deferred formatting processing because we format the string before passiCOMMENT
MEDIUMVendor/bsdiff/sais.c46// changing a nuanced behavior, I'm assuming the file has been time-tested andCOMMENT
Unused Imports2 hits · 2 pts
SeverityFileLineSnippetContext
LOWConfigurations/update-carthage.py3CODE
LOWConfigurations/generate_latest_changes.py3CODE
Fake / Example Data2 hits · 2 pts
SeverityFileLineSnippetContext
LOWTestApplication/sparkletestcast.xml47 <li>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</li>CODE
LOWTestApplication/sparkletestcast.xml47 <li>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</li>CODE
Hyper-Verbose Identifiers1 hit · 1 pts
SeverityFileLineSnippetContext
LOWConfigurations/generate_progress_tool_localizations.py114def update_info_plist_localizations(locales):CODE