AI Slop Code Risk Monitor

nextcloud/desktop

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

💻 Desktop sync client for Nextcloud

0.6 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for nextcloud/desktop, a C++ project with 3,937 GitHub stars. SynthScan examined 813,428 lines of code across 1374 source files, recording 455 pattern matches distributed across 15 syntactic categories. The legacy adjusted pattern signal is 0.6 (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.

0.6
Adjusted Signal
0.6
Raw Pattern Score
100%
Time Factor
2026-10-31
Last Push
3.9K
Stars
C++
Language
813.4K
Lines of Code
1.4K
Files
455
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 2.9/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.1/100 · LOW

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

Agent Over-Engineering Ratio 0.1/100 · LOW

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

PR Review Velocity Impact 2.9/100 · LOW

Which changes need focused human review? 455 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 7LOW 447

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 455 distinct pattern matches across 15 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 Block390 hits · 390 pts
SeverityFileLineSnippetContext
LOW…ll_integration/dolphin/ownclouddolphinactionplugin.cpp1/*COMMENT
LOWshell_integration/nautilus/setappname.sh1#!/bin/shCOMMENT
LOWshell_integration/MacOSX/CMakeLists.txt141 # A Service Management login item must live in Contents/Library/LoginItems and itsCOMMENT
LOW…ileProviderKitTests/RemoteChangePropagationTests.swift1// SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributorsCOMMENT
LOW…ileProviderKitTests/RemoteChangePropagationTests.swift21// -> observer.didUpdate / didDeleteItemsCOMMENT
LOW…ileProviderKitTests/RemoteChangePropagationTests.swift521 // content change is detected even if the server returned a stale/unchanged ETag and date.COMMENT
LOW…ts/NextcloudFileProviderKitTests/ItemModifyTests.swift241COMMENT
LOW…derKitTests/MaterialisedEnumerationObserverTests.swift201 /// [#10558](https://github.com/nextcloud/desktop/issues/10558).COMMENT
LOW…ts/NextcloudFileProviderKitTests/EnumeratorTests.swift461 // The result should be empty as there are no children.COMMENT
LOW…ileProviderKitTests/KeepDownloadedRecursiveTests.swift141 XCTAssertFalse(COMMENT
LOW…ileProviderKitTests/KeepDownloadedRecursiveTests.swift181 remoteInterface: MockRemoteInterface(account: Self.account),COMMENT
LOW…ileProviderKitTests/KeepDownloadedRecursiveTests.swift261 // operates only on ancestors.COMMENT
LOW…ileProviderKitTests/KeepDownloadedRecursiveTests.swift441 "A sibling outside the pinned folder must not inherit keepDownloaded."COMMENT
LOW…ts/NextcloudFileProviderKitTests/LocalFilesTests.swift1// SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributorsCOMMENT
LOW…ts/NextcloudFileProviderKitTests/LocalFilesTests.swift21 #expect(isLockFileName("Drawing.dwl2"))COMMENT
LOW…ts/NextcloudFileProviderKitTests/LocalFilesTests.swift41 #expect(!isAdobeLockFileName("Test.prproj"))COMMENT
LOW…ts/NextcloudFileProviderKitTests/LocalFilesTests.swift61 #expect(adobeLockFileDocumentBaseName("~Test(.idlk") == "Test")COMMENT
LOW…/NextcloudFileProviderKitTests/ItemPropertyTests.swift1401 dbManager: Self.dbManagerCOMMENT
LOW…oudFileProviderKitTests/IgnoredFilesMatcherTests.swift21 #expect(matcher.isExcluded("a/b/c/hello.tmp"))COMMENT
LOW…roviderKitTests/Database/RealmStoreImporterTests.swift101COMMENT
LOW…roviderKitTests/Database/RealmStoreImporterTests.swift121 #expect(session.containerKey == "container")COMMENT
LOW…oviderKitTests/Database/ChangeDeliveryStoreTests.swift41 #expect(session.nextSequence == 0)COMMENT
LOW…oviderKitTests/Database/ChangeDeliveryStoreTests.swift81 #expect(session.pendingReported == false)COMMENT
LOW…rKitTests/Database/FilesDatabaseManagerLockTests.swift41 _ = seed()COMMENT
LOW…tTests/Database/FilesDatabaseManagerFailureTests.swift41 #expect(manager.changeDeliveryItems(sessionId: "s", fromSequence: 0, limit: 10)?.count == 2)COMMENT
LOW…tcloudFileProviderKitTests/Utilities/Expectation.swift1// SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributorsCOMMENT
LOW…eProviderKitTests/Utilities/LoginKeychainFixture.swift1// SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributorsCOMMENT
LOW…derKitTests/Support/FilesDatabaseManager+Testing.swift1// SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributorsCOMMENT
LOW…tcloudFileProviderKit/FileProviderDomainDefaults.swift1// SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributorsCOMMENT
LOW…cloudFileProviderKit/Database/RealmStoreImporter.swift1// SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributorsCOMMENT
LOW…oudFileProviderKit/Database/FilesDatabaseManager.swift81 /// Open the domain's database, creating, importing or migrating it as needed.COMMENT
LOW…oudFileProviderKit/Database/FilesDatabaseManager.swift401 .fetchRecord(db, logger: logger)COMMENT
LOW…oudFileProviderKit/Database/FilesDatabaseManager.swift761 return trueCOMMENT
LOW…oudFileProviderKit/Database/FilesDatabaseManager.swift781 /// (e.g. pinned-via-keep-downloaded) had been cleared.COMMENT
LOW…oudFileProviderKit/Database/FilesDatabaseManager.swift801 if preserveVisitedDirectory {COMMENT
LOW…derKit/Database/FilesDatabaseManager+Directories.swift61 /// - `directory == false`: only files carry real materialized payload; aCOMMENT
LOW…derKit/Database/FilesDatabaseManager+Directories.swift121 )COMMENT
LOW…rKit/Database/FilesDatabaseManager+Deduplication.swift1// SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributorsCOMMENT
LOW…rKit/Database/FilesDatabaseManager+Deduplication.swift21 /// Call this inside the caller's transaction.COMMENT
LOW…rKit/Database/FilesDatabaseManager+Deduplication.swift41 ///COMMENT
LOW…ileProviderKit/Database/Schema/StoreVersionGuard.swift1// SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributorsCOMMENT
LOW…loudFileProviderKit/Database/Schema/StoreVersion.swift1// SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributorsCOMMENT
LOW…extcloudFileProviderKit/Interface/EnumerateDepth.swift1// SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributorsCOMMENT
LOW…leProviderKit/Extension/RemoveDownloadVisibility.swift1// SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributorsCOMMENT
LOW…dFileProviderKit/Extension/FileProviderExtension.swift1// SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributorsCOMMENT
LOW…dFileProviderKit/Extension/FileProviderExtension.swift21 ///COMMENT
LOW…dFileProviderKit/Extension/FileProviderExtension.swift41COMMENT
LOW…dFileProviderKit/Extension/FileProviderExtension.swift81 ///COMMENT
LOW…dFileProviderKit/Extension/FileProviderExtension.swift621 // ``refreshFrameworkCacheIfExtensionVersionChanged`` below; this signal just shortensCOMMENT
LOW…dFileProviderKit/Extension/FileProviderExtension.swift701COMMENT
LOW…derKit/Extension/FileProviderExtension+BlockSync.swift1// SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributorsCOMMENT
LOW…ileProviderKit/Enumeration/Enumerator+SyncEngine.swift21 // while preserving the rest of the local-only state. SkipCOMMENT
LOW…ileProviderKit/Enumeration/Enumerator+SyncEngine.swift161 let batchRate = batchElapsed.fpSeconds > 0 ? Double(files.count) / batchElapsed.fpSeconds : 0COMMENT
LOW…roviderKit/Enumeration/Enumerator+WorkingSetScan.swift1// SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributorsCOMMENT
LOW…roviderKit/Enumeration/Enumerator+WorkingSetScan.swift101 /// ``FilesDatabaseManager/pendingWorkingSetChanges(since:)`` alone to re-derive the report fromCOMMENT
LOW…ileProviderKit/Enumeration/Enumerator+SyncAnchor.swift1// SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributorsCOMMENT
LOW…ileProviderKit/Enumeration/Enumerator+SyncAnchor.swift21 /// The same format is used for every container the extension enumerates (working set, root container, sub-directoriCOMMENT
LOW…ileProviderKit/Enumeration/Enumerator+SyncAnchor.swift61 ///COMMENT
LOW…iderKit/Enumeration/Enumerator+ObserverReporting.swift1// SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributorsCOMMENT
LOW…loudFileProviderKit/Enumeration/Enumerator+Trash.swift1// SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributorsCOMMENT
330 more matches not shown…
Verbosity Indicators17 hits · 32 pts
SeverityFileLineSnippetContext
LOW…oudFileProviderKit/Database/FilesDatabaseManager.swift555 // (we need to check if they were uploaded to prevent deleting ignored/lock files)COMMENT
LOWsrc/gui/accountsettings.cpp1850 // So we need to check if the folder is in the blacklist or not and tweak the message accordingly.COMMENT
LOW⚡src/gui/navigationpanehelper.cpp104 // Step 1: Add your CLSID and name your extensionCOMMENT
LOW⚡src/gui/navigationpanehelper.cpp107 // Step 2: Set the image for your iconCOMMENT
LOW⚡src/gui/navigationpanehelper.cpp110 // Step 3: Add your extension to the Navigation Pane and make it visibleCOMMENT
LOW⚡src/gui/navigationpanehelper.cpp113 // Step 4: Set the location for your extension in the Navigation PaneCOMMENT
LOW⚡src/gui/navigationpanehelper.cpp116 // Step 5: Provide the dll that hosts your extension.COMMENT
LOW⚡src/gui/navigationpanehelper.cpp119 // Step 6: Define the instance objectCOMMENT
LOW⚡src/gui/navigationpanehelper.cpp123 // Step 7: Provide the file system attributes of the target folderCOMMENT
LOW⚡src/gui/navigationpanehelper.cpp126 // Step 8: Set the path for the sync rootCOMMENT
LOW⚡src/gui/navigationpanehelper.cpp129 // Step 9: Set appropriate shell flagsCOMMENT
LOW⚡src/gui/navigationpanehelper.cpp132 // Step 10: Set the appropriate flags to control your shell behaviorCOMMENT
LOW⚡src/gui/navigationpanehelper.cpp135 // Step 11: Register your extension in the namespace rootCOMMENT
LOW⚡src/gui/navigationpanehelper.cpp137 // Step 12: Hide your extension from the DesktopCOMMENT
LOWsrc/gui/creds/flow2auth.cpp76 // Step 1: Initiate a login, do an anonymous POST requestCOMMENT
LOWsrc/gui/creds/flow2auth.cpp169 // Step 2: PollCOMMENT
LOWsrc/3rdparty/kirigami/wheelhandler.cpp164 // We need to check if the parent inherits QQuickScrollView in case theCOMMENT
Structural Annotation Overuse14 hits · 28 pts
SeverityFileLineSnippetContext
LOW⚡src/gui/navigationpanehelper.cpp104 // Step 1: Add your CLSID and name your extensionCOMMENT
LOW⚡src/gui/navigationpanehelper.cpp107 // Step 2: Set the image for your iconCOMMENT
LOW⚡src/gui/navigationpanehelper.cpp110 // Step 3: Add your extension to the Navigation Pane and make it visibleCOMMENT
LOW⚡src/gui/navigationpanehelper.cpp113 // Step 4: Set the location for your extension in the Navigation PaneCOMMENT
LOW⚡src/gui/navigationpanehelper.cpp116 // Step 5: Provide the dll that hosts your extension.COMMENT
LOW⚡src/gui/navigationpanehelper.cpp119 // Step 6: Define the instance objectCOMMENT
LOW⚡src/gui/navigationpanehelper.cpp123 // Step 7: Provide the file system attributes of the target folderCOMMENT
LOW⚡src/gui/navigationpanehelper.cpp126 // Step 8: Set the path for the sync rootCOMMENT
LOW⚡src/gui/navigationpanehelper.cpp129 // Step 9: Set appropriate shell flagsCOMMENT
LOW⚡src/gui/navigationpanehelper.cpp132 // Step 10: Set the appropriate flags to control your shell behaviorCOMMENT
LOW⚡src/gui/navigationpanehelper.cpp135 // Step 11: Register your extension in the namespace rootCOMMENT
LOW⚡src/gui/navigationpanehelper.cpp137 // Step 12: Hide your extension from the DesktopCOMMENT
LOWsrc/gui/creds/flow2auth.cpp76 // Step 1: Initiate a login, do an anonymous POST requestCOMMENT
LOWsrc/gui/creds/flow2auth.cpp169 // Step 2: PollCOMMENT
Excessive Try-Catch Wrapping5 hits · 9 pts
SeverityFileLineSnippetContext
LOW⚡shell_integration/nautilus/syncstate.py97 except Exception as e:CODE
LOW⚡shell_integration/nautilus/syncstate.py99 except Exception as e: # Bad habitCODE
MEDIUMshell_integration/nautilus/syncstate.py84def _connectToSocketServer(self):CODE
MEDIUM…FileProviderKitTests/EnumeratorPageResponseTests.swift17 print("Error: Failed to create URL in test helper.")CODE
MEDIUM…loudFileProviderKitMocks/TestableRemoteInterface.swift206 print("Error: fetchCapabilitiesHandler not set in TestableRemoteInterface")CODE
Hyper-Verbose Identifiers6 hits · 8 pts
SeverityFileLineSnippetContext
LOW⚡shell_integration/nautilus/syncstate.py108 def read_socket_data_with_timeout(self, timeout):CODE
LOWshell_integration/nautilus/syncstate.py365 def invalidate_items_underneath(self, path):CODE
LOWadmin/linux/tests/test_appimage_icon.py41 def test_resolves_installed_main_icon(self):CODE
LOW⚡admin/linux/tests/test_appimage_icon.py53 def test_rejects_missing_main_icon(self):CODE
LOW⚡admin/linux/tests/test_appimage_icon.py61 def test_rejects_missing_installed_png(self):CODE
LOW⚡admin/linux/tests/test_appimage_icon.py68 def test_both_linuxdeploy_calls_use_installed_icon(self):CODE
Fake / Example Data8 hits · 8 pts
SeverityFileLineSnippetContext
LOW…ileProviderKitTests/RemoteChangePropagationTests.swift256 let placeholder = makeFile(name: "placeholder", parent: folder, etag: "placeholder-v1")CODE
LOWtest/testsharingdialog.cpp844 {QStringLiteral("placeholder"), QStringLiteral("YYYY-MM-DD")},CODE
LOWtest/testsharingdialog.cpp878 {QStringLiteral("placeholder"), QStringLiteral("Note to recipients")},CODE
LOWtest/testsharingdialog.cpp940 {QStringLiteral("placeholder"), QStringLiteral("YYYY-MM-DD")},CODE
LOWtest/testlockfile.cpp201 QCOMPARE(fileRecord._lockstate._lockOwnerDisplayName, QStringLiteral("John Doe"));CODE
LOWtest/testlockfile.cpp1157 QCOMPARE(fileRecord._lockstate._lockOwnerDisplayName, QStringLiteral("John Doe"));CODE
LOWtest/syncenginetestutils.cpp1663 xml.writeTextElement(ncUri, QStringLiteral("lock-owner-displayname"), QStringLiteral("John Doe"));CODE
LOWsrc/gui/sharing/propertymodel.cpp80 { PlaceholderRole, "placeholder"_ba},CODE
Synthetic Comment Markers1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHAGENTS.md117See [HowToApplyALicense.md](https://github.com/nextcloud/server/blob/master/contribute/HowToApplyALicense.md) for detailCODE
Redundant / Tautological Comments3 hits · 4 pts
SeverityFileLineSnippetContext
LOWshell_integration/nautilus/syncstate.py157 # Check if there are no paths left. If so, its usualCOMMENT
LOWshell_integration/nautilus/syncstate.py207 # Check if its a folder (ends with an /), if yes add a "/"COMMENT
LOWshell_integration/nautilus/syncstate.py213 # Check if toplevel folder, we need to ignore those as they cannot be sharedCOMMENT
AI Slop Vocabulary2 hits · 4 pts
SeverityFileLineSnippetContext
MEDIUM…xtcloudFileProviderKitTests/RemoteInterfaceTests.swift122 let staleDate = Date(timeIntervalSinceNow: -(CapabilitiesFetchInterval + 300)) // Definitely staleSTRING
MEDIUMtest/testsyncvirtualfiles.cpp195 // Essentially repeating creation of virtual fileCOMMENT
Deep Nesting3 hits · 3 pts
SeverityFileLineSnippetContext
LOWshell_integration/nautilus/syncstate.py229CODE
LOWshell_integration/nautilus/syncstate.py278CODE
LOWshell_integration/nautilus/syncstate.py379CODE
Decorative Section Separators1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUMsrc/gui/CMakeLists.txt605# --------------------------------------COMMENT
Unused Imports2 hits · 2 pts
SeverityFileLineSnippetContext
LOWadmin/osx/gen_sym_files.py8CODE
LOWadmin/osx/gen_sym_files.py8CODE
Self-Referential Comments1 hit · 2 pts
SeverityFileLineSnippetContext
MEDIUMadmin/win/tools/NCToolsShared/3rdparty/SimpleIni.h54 -# Define the appropriate symbol for the converter you wish to use andCODE
TODO Padding1 hit · 2 pts
SeverityFileLineSnippetContext
LOW…it/Tests/InterfaceTests/MockRemoteInterfaceTests.swift173 // TODO: Add test for overwriting existing fileCOMMENT
Slop Phrases1 hit · 1 pts
SeverityFileLineSnippetContext
LOWtest/testsharemodel.cpp851 const auto note = QStringLiteral("Don't forget to test everything!");CODE