AI Slop Code Risk Monitor

duongductrong/Snapzy

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

An open-source native macOS screenshot and screen recording app. A CleanShot X alternative.

1.8 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for duongductrong/Snapzy, a Swift project with 3,466 GitHub stars. SynthScan examined 254,201 lines of code across 922 source files, recording 283 pattern matches distributed across 9 syntactic categories. The legacy adjusted pattern signal is 1.8 (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.8
Adjusted Signal
1.8
Raw Pattern Score
100%
Time Factor
2026-10-28
Last Push
3.5K
Stars
Swift
Language
254.2K
Lines of Code
922
Files
283
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 5.5/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.0/100 · LOW

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

Agent Over-Engineering Ratio 3.1/100 · LOW

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

PR Review Velocity Impact 7.4/100 · LOW

Which changes need focused human review? 283 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 54LOW 229

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 283 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.

Over-Commented Block175 hits · 175 pts
SeverityFileLineSnippetContext
LOWuninstall.sh1#!/usr/bin/env bashCOMMENT
LOWuninstall.sh101# Once the .app is deleted, LaunchServices can no longer resolve theCOMMENT
LOWinstall.sh1#!/usr/bin/env bashCOMMENT
LOWinstall.sh141COMMENT
LOW…s/Features/Annotate/AnnotateViewportUIStateTests.swift1//COMMENT
LOW…eatures/Annotate/AnnotateCanvasPresetActionTests.swift1//COMMENT
LOWSnapzyTests/Features/Annotate/AnnotateMockupTests.swift1//COMMENT
LOW…ests/Features/Annotate/AnnotateTextSnappingTests.swift1//COMMENT
LOW…atures/Annotate/AnnotateBackgroundRedactionTests.swift1//COMMENT
LOW…pzyTests/Features/Annotate/AnnotateImageOpsTests.swift1//COMMENT
LOWSnapzyTests/Features/Annotate/AnnotateCropTests.swift1//COMMENT
LOW…Tests/Features/Annotate/AnnotateTextEditingTests.swift1//COMMENT
LOW…/Features/Annotate/AnnotateSelectionEditingTests.swift1//COMMENT
LOWSnapzyTests/Helpers/CITestGate.swift1//COMMENT
LOW…Capture/AreaSelectionOverlayOffscreenCursorTests.swift1//COMMENT
LOW…ervices/Capture/Issue690InputLockRegressionTests.swift1//COMMENT
LOW…AreaSelectionLivePassthroughWindowDetectionTests.swift1//COMMENT
LOW…es/Capture/AreaSelectionOverlayLumaSamplingTests.swift1//COMMENT
LOW…ces/Capture/SingleFrameStreamCaptureSessionTests.swift1//COMMENT
LOW…ure/AreaSelectionMultiMonitorReconciliationTests.swift1//COMMENT
LOW…ure/AreaSelectionMultiMonitorReconciliationTests.swift21 /// `setSelectionEnabled(_:)`. The controller's authoritative `selectionEnabled(for:)` is:COMMENT
LOW…ure/AreaSelectionMultiMonitorReconciliationTests.swift41 /// `reconcileSelectionEnabledAcrossPooledWindows()` iterates ALL of `windowPool` regardless of whichCOMMENT
LOW…ure/AreaSelectionMultiMonitorReconciliationTests.swift81 realWindow.overlayView.setSelectionEnabled(true)COMMENT
LOW…yTests/Services/Capture/CaptureOutputNamingTests.swift561 /// adopts the user's locale renders the Buddhist year under a Thai (`th_TH`)COMMENT
LOW…yTests/Services/Capture/CaptureOutputNamingTests.swift641 /// Pins the narrower contract of the calendar-only fix: a Gregorian calendarCOMMENT
LOW…ts/Services/Capture/BackgroundCursorControlTests.swift1//COMMENT
LOW…Capture/AreaSelectionCaptureCoordinateSpaceTests.swift1//COMMENT
LOW…Capture/AreaSelectionCaptureCoordinateSpaceTests.swift41COMMENT
LOW…apture/AreaSelectionLivePassthroughKeyboardTests.swift1//COMMENT
LOW…ests/Services/Capture/ScreenCaptureAreaCropTests.swift1//COMMENT
LOW…vices/Capture/AreaSelectionHoverPerformanceTests.swift1//COMMENT
LOW…reaSelectionOverlayPassthroughStaleLocationTests.swift1//COMMENT
LOW…ortcuts/RecordingSessionShortcutObservationTests.swift1//COMMENT
LOW…sts/Services/Shortcuts/HotkeyUnregistrationTests.swift1//COMMENT
LOW…es/Shortcuts/RecordingSessionShortcutGatingTests.swift1//COMMENT
LOWSnapzy/App/MenuBarItemKind.swift1//COMMENT
LOWSnapzy/App/SnapzyApp.swift421 /// Called when the user opens one or more image files with Snapzy fromCOMMENT
LOWSnapzy/Features/Capture/OCRResultNotifier.swift1//COMMENT
LOWSnapzy/Features/Capture/CaptureViewModel.swift1461 /// snapshot leaves out `CaptureChromeWindowRegistry` windows by ID — the sameCOMMENT
LOW…tures/Preferences/Models/PreferencesSearchEngine.swift1//COMMENT
LOW…references/Components/PreferencesAnnotatePreview.swift1//COMMENT
LOWSnapzy/Features/VideoEditor/VideoEditorState.swift1201 }COMMENT
LOW…VideoEditor/Managers/VideoEditorWindowController.swift1//COMMENT
LOW…tures/VideoEditor/Models/VideoEditorTimelineClip.swift1//COMMENT
LOW…s/VideoEditor/Models/VideoEditorTimelineViewport.swift1//COMMENT
LOW…atures/VideoEditor/Models/VideoEditorSessionData.swift1//COMMENT
LOW…tures/VideoEditor/Models/VideoEditorSpeedSegment.swift1//COMMENT
LOW…oEditor/Components/VideoEditorSettingsPillButton.swift1//COMMENT
LOW…itor/Components/VideoEditorTimelineScrollCatcher.swift1//COMMENT
LOW…/VideoEditor/Components/VideoEditorTimelineRuler.swift1//COMMENT
LOW…/VideoEditor/Components/VideoEditorClipStripView.swift61 let fromIndex: IntCOMMENT
LOW…/VideoEditor/Components/VideoEditorSegmentChrome.swift1//COMMENT
LOW…ditor/Components/VideoEditorTimelineZoomControls.swift1//COMMENT
LOW…oEditor/Components/VideoEditorSpeedTimelineTrack.swift1//COMMENT
LOW…itor/Components/VideoEditorExportProgressOverlay.swift1//COMMENT
LOW…VideoEditor/Components/VideoEditorEmptyStateView.swift1//COMMENT
LOW…/VideoEditor/Services/VideoEditorTimelineTimeMap.swift1//COMMENT
LOW…tures/Recording/Components/RecordingWaveformView.swift1//COMMENT
LOW…ures/Recording/Components/RecordingStatusBarView.swift1//COMMENT
LOW…zy/Features/Annotate/InlineAreaMagnifierHostView.swift1//COMMENT
115 more matches not shown…
Decorative Section Separators45 hits · 150 pts
SeverityFileLineSnippetContext
MEDIUMuninstall.sh30# ─── Auto-detect bundle ID from app name ─────────────────────────COMMENT
MEDIUMuninstall.sh69# ─── Confirmation ────────────────────────────────────────────────COMMENT
MEDIUMuninstall.sh93# ─── 1. Kill running app ────────────────────────────────────────COMMENT
MEDIUMuninstall.sh98# ─── 2. Reset ALL TCC permissions ───────────────────────────────COMMENT
MEDIUMuninstall.sh158# ─── 3. Remove app bundle ───────────────────────────────────────COMMENT
MEDIUMuninstall.sh186# ─── 4. Remove Application Support data ─────────────────────────COMMENT
MEDIUMuninstall.sh209# ─── 5. Remove user preferences (defaults) ──────────────────────COMMENT
MEDIUMuninstall.sh220# ─── 6. Remove caches ───────────────────────────────────────────COMMENT
MEDIUMuninstall.sh232# ─── 7. Remove saved application state ──────────────────────────COMMENT
MEDIUMuninstall.sh240# ─── 8. Remove Sparkle update data ──────────────────────────────COMMENT
MEDIUMuninstall.sh254# ─── 9. Login items ─────────────────────────────────────────────COMMENT
MEDIUMuninstall.sh259# ─── 10. Clean temp files ──────────────────────────────────────COMMENT
MEDIUMuninstall.sh271# ─── 11. Sandbox containers ─────────────────────────────────────COMMENT
MEDIUMuninstall.sh283# ─── Done ────────────────────────────────────────────────────────COMMENT
MEDIUM⚡install.sh14# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡install.sh16# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡install.sh38# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡install.sh40# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡install.sh48# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡install.sh50# ---------------------------------------------------------------------------COMMENT
MEDIUMinstall.sh71# ---------------------------------------------------------------------------COMMENT
MEDIUMinstall.sh73# ---------------------------------------------------------------------------COMMENT
MEDIUMinstall.sh86# ---------------------------------------------------------------------------COMMENT
MEDIUMinstall.sh88# ---------------------------------------------------------------------------COMMENT
MEDIUMinstall.sh115# ---------------------------------------------------------------------------COMMENT
MEDIUMinstall.sh117# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡install.sh142# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡install.sh144# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡install.sh146# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡install.sh151# ---------------------------------------------------------------------------COMMENT
MEDIUMreset-permissions.sh15# ─── Auto-detect bundle ID from app name ─────────────────────────COMMENT
MEDIUMreset-permissions.sh39# ─── Resolve installed app version ───────────────────────────────COMMENT
MEDIUMreset-permissions.sh103# ─── Confirmation ────────────────────────────────────────────────COMMENT
MEDIUMreset-permissions.sh126# ─── 1. Kill running app ────────────────────────────────────────COMMENT
MEDIUMreset-permissions.sh131# ─── 2. Reset ALL TCC permissions ───────────────────────────────COMMENT
MEDIUMreset-permissions.sh173# ─── Done ────────────────────────────────────────────────────────COMMENT
MEDIUMscripts/test-update-local.sh45# ─── Helpers ────────────────────────────────────────────────────────COMMENT
MEDIUMscripts/test-update-local.sh427# ─── Commands ───────────────────────────────────────────────────────COMMENT
MEDIUMscripts/test-update-local.sh543# ─── Main ───────────────────────────────────────────────────────────COMMENT
MEDIUM.github/workflows/release-notify.yml9 # ──────────────────────────────────────────────COMMENT
MEDIUM.github/workflows/release-notify.yml11 # ──────────────────────────────────────────────COMMENT
MEDIUM.github/workflows/release-notify.yml57 # ──────────────────────────────────────────────COMMENT
MEDIUM.github/workflows/release-notify.yml59 # ──────────────────────────────────────────────COMMENT
MEDIUM.github/workflows/release-notify.yml132 # ──────────────────────────────────────────────COMMENT
MEDIUM.github/workflows/release-notify.yml165 # ──────────────────────────────────────────────COMMENT
Structural Annotation Overuse20 hits · 39 pts
SeverityFileLineSnippetContext
LOW⚡docs/SELF_SIGNED_CERT.md38# Step 1: Generate cert and import into login keychainCOMMENT
LOW⚡docs/SELF_SIGNED_CERT.md41# Step 2: Build, sign with self-signed cert, install as v1COMMENT
LOW⚡docs/SELF_SIGNED_CERT.md45# Step 3: Re-sign and replace (simulates Sparkle update)COMMENT
LOW⚡…atures/Annotate/Components/AnnotateBottomBarView.swift572 // Step 1: Render flattened image with annotations BEFORE uploadingCOMMENT
LOW⚡…atures/Annotate/Components/AnnotateBottomBarView.swift576 // Step 2: Decide the upload target. Manual combine sessions must NOT overwrite theCOMMENT
LOW⚡Snapzy/Features/Onboarding/SnapzyOnboardingState.swift75 // Step 1: Capture > Quick Access > Annotate Lifecycle StateCOMMENT
LOW⚡Snapzy/Features/Onboarding/SnapzyOnboardingState.swift83 // Step 2: Screen Recording & Video Editor Lifecycle StateCOMMENT
LOW⚡Snapzy/Features/Onboarding/SnapzyOnboardingState.swift93 // Step 3: Shortcuts & Config Mock StateCOMMENT
LOWSnapzy/Shared/Localization/L10n.swift1902 /// Step 1: CaptureCOMMENT
LOWSnapzy/Shared/Localization/L10n.swift1944 /// Step 2: RecordingCOMMENT
LOWSnapzy/Shared/Localization/L10n.swift1995 /// Step 3: ShortcutsCOMMENT
LOWSnapzy/Shared/Localization/L10n.swift2027 /// Step 4: PermissionsCOMMENT
LOWSnapzy/Services/Cloud/GoogleDriveCloudProvider.swift342 // Step 1: Initiate sessionCOMMENT
LOWSnapzy/Services/Cloud/GoogleDriveCloudProvider.swift377 // Step 2: Upload chunksCOMMENT
LOW⚡scripts/dry-run-release.sh35# Step 1: Requirements CheckCOMMENT
LOW⚡scripts/dry-run-release.sh45# Step 2: Build Release Archive (Unsigned)COMMENT
LOW⚡scripts/dry-run-release.sh57# Step 3: Ditto from archiveCOMMENT
LOW⚡scripts/dry-run-release.sh65# Step 4: Dry-Run Codesigning (using Ad-hoc identity "-" to test the CI pipeline structure)COMMENT
LOWscripts/dry-run-release.sh125# Step 5: Verify App BundleCOMMENT
LOWscripts/dry-run-release.sh138# Step 6: Create DMG (optional preview)COMMENT
Verbosity Indicators17 hits · 32 pts
SeverityFileLineSnippetContext
LOW⚡…atures/Annotate/Components/AnnotateBottomBarView.swift572 // Step 1: Render flattened image with annotations BEFORE uploadingCOMMENT
LOW⚡…atures/Annotate/Components/AnnotateBottomBarView.swift576 // Step 2: Decide the upload target. Manual combine sessions must NOT overwrite theCOMMENT
LOW⚡Snapzy/Features/Onboarding/SnapzyOnboardingState.swift75 // Step 1: Capture > Quick Access > Annotate Lifecycle StateCOMMENT
LOW⚡Snapzy/Features/Onboarding/SnapzyOnboardingState.swift83 // Step 2: Screen Recording & Video Editor Lifecycle StateCOMMENT
LOW⚡Snapzy/Features/Onboarding/SnapzyOnboardingState.swift93 // Step 3: Shortcuts & Config Mock StateCOMMENT
LOWSnapzy/Shared/Localization/L10n.swift1902 /// Step 1: CaptureCOMMENT
LOWSnapzy/Shared/Localization/L10n.swift1944 /// Step 2: RecordingCOMMENT
LOWSnapzy/Shared/Localization/L10n.swift1995 /// Step 3: ShortcutsCOMMENT
LOWSnapzy/Shared/Localization/L10n.swift2027 /// Step 4: PermissionsCOMMENT
LOWSnapzy/Services/Cloud/GoogleDriveCloudProvider.swift342 // Step 1: Initiate sessionCOMMENT
LOWSnapzy/Services/Cloud/GoogleDriveCloudProvider.swift377 // Step 2: Upload chunksCOMMENT
LOW⚡scripts/dry-run-release.sh35# Step 1: Requirements CheckCOMMENT
LOW⚡scripts/dry-run-release.sh45# Step 2: Build Release Archive (Unsigned)COMMENT
LOW⚡scripts/dry-run-release.sh57# Step 3: Ditto from archiveCOMMENT
LOW⚡scripts/dry-run-release.sh65# Step 4: Dry-Run Codesigning (using Ad-hoc identity "-" to test the CI pipeline structure)COMMENT
LOWscripts/dry-run-release.sh125# Step 5: Verify App BundleCOMMENT
LOWscripts/dry-run-release.sh138# Step 6: Create DMG (optional preview)COMMENT
AI Slop Vocabulary7 hits · 20 pts
SeverityFileLineSnippetContext
MEDIUM…zyTests/Services/Capture/AXElementInspectorTests.swift19 // is robust against unusual NSScreen.screens orderings on CI.COMMENT
MEDIUM…s/Components/PreferencesQuickAccessSwipeZoneView.swift125 // End the line exactly at the arrow head center for seamless jointCOMMENT
MEDIUMSnapzy/Features/Splash/SplashOnboardingRootView.swift67 // Stable opaque base — extends behind titlebar for seamless lookCOMMENT
MEDIUMSnapzy/Features/Annotate/AnnotateState.swift1292 /// - displayPadding: The padding in display coordinates (already scaled) - unused for seamless alignmentCOMMENT
MEDIUM…ures/Annotate/Components/AnnotateCropOverlayView.swift193 /// Use canvas background color for seamless maskingCOMMENT
MEDIUMSnapzy/Services/Capture/AreaSelectionWindow.swift651 // Observe space changes and activation to keep selection session robustCOMMENT
MEDIUM…swift-tools/video-editor-performance/assemble-probe.py45 chunks.append(f"#sourceLocation(file: {json.dumps(str(harness))}, line: 1)\n{harness.read_text()}\n#sourceLocation()CODE
Example Usage Blocks10 hits · 16 pts
SeverityFileLineSnippetContext
LOWuninstall.sh4# Usage:COMMENT
LOW⚡install.sh4# Usage:COMMENT
LOWreset-permissions.sh4# Usage:COMMENT
LOWscripts/test-update-local.sh11# Usage:COMMENT
LOWscripts/run-tests.sh4# Usage:COMMENT
LOWscripts/run-ocr-readme-benchmark.sh4# Usage:COMMENT
LOWscripts/run-scrolling-capture-accuracy-benchmark.sh4# Usage:COMMENT
LOWscripts/test-tcc-local.sh4# Usage:COMMENT
LOWscripts/run-qr-detection-performance-probe.sh4# Usage:COMMENT
LOWscripts/lint-corner-radius.sh8# Usage:COMMENT
Excessive Try-Catch Wrapping5 hits · 10 pts
SeverityFileLineSnippetContext
LOW⚡scripts/generate_dmg_background.py24 except Exception as e:CODE
MEDIUM⚡scripts/generate_dmg_background.py25 print(f"Error downloading bold font: {e}")CODE
LOW⚡scripts/generate_dmg_background.py33 except Exception as e:CODE
MEDIUM⚡scripts/generate_dmg_background.py34 print(f"Error downloading medium font: {e}")CODE
LOWscripts/generate_dmg_background.py60 except Exception as e:CODE
Redundant / Tautological Comments2 hits · 3 pts
SeverityFileLineSnippetContext
LOWscripts/test-dmg.sh5# Check if create-dmg is installedCOMMENT
LOW.github/workflows/release-prepare.yml139 # Check if previous tag existsCOMMENT
Fake / Example Data2 hits · 1 pts
SeverityFileLineSnippetContext
LOWSnapzyTests/Features/Annotate/AnnotateCoreTests.swift339 let text = "admin@example.com"STRING
LOWSnapzyTests/Features/Annotate/AnnotateCoreTests.swift358 let matchRange = (text as NSString).range(of: "admin@example.com")STRING