AI Slop Code RIsk Monitor

plainhub/plain-app

🔥 PlainApp is an open-source app that lets you securely manage your phone from a web browser. Access files, media, contacts, SMS, calls, and more through a simple, easy-to-use interface on your desktop.

15.0 Elevated pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for plainhub/plain-app, a Kotlin project with 6,879 GitHub stars. SynthScan examined 250,232 lines of code across 3312 source files, recording 479 pattern matches distributed across 13 syntactic categories. The legacy adjusted pattern signal is 15.0 (Elevated 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.

15.0
Adjusted Signal
15.0
Raw Pattern Score
100%
Time Factor
2026-10-11
Last Push
6.9K
Stars
Kotlin
Language
250.2K
Lines of Code
3.3K
Files
479
Pattern Hits
2026-10-12
Scan Date
0.08
HC Hit Rate

Risk Review · v3

Use each vector to guide manual verification of the underlying findings.

Cognitive Ownership Risk 1.0/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 47.5/100 · MEDIUM

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

Agent Over-Engineering Ratio 8.8/100 · LOW

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

PR Review Velocity Impact 47.8/100 · MEDIUM

Which changes need focused human review? 479 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 271HIGH 2MEDIUM 163LOW 43

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 479 distinct pattern matches across 13 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 Indicators271 hits · 3220 pts
SeverityFileLineSnippetContext
CRITICAL…a/com/ismartcoding/plain/tests/PeerWireRustHttpTest.kt55 com.ismartcoding.plain.chat.channel.ChannelCacher.load()CODE
CRITICAL…a/com/ismartcoding/plain/tests/PeerAuthRustHttpTest.kt55 com.ismartcoding.plain.chat.channel.ChannelCacher.load()CODE
CRITICAL…artcoding/plain/tests/PeerPrewarmNearbyRustHttpTest.kt36 com.ismartcoding.plain.chat.peer.PeerCacher.load()CODE
CRITICAL…om/ismartcoding/plain/tests/ChatServiceRustHttpTest.kt55 val encoded = com.ismartcoding.plain.helpers.UrlHelper.encrypt(attachment.uri)CODE
CRITICAL…om/ismartcoding/plain/tests/ChatServiceRustHttpTest.kt57 val rawReply = com.ismartcoding.plain.ble.server.HttpServiceHandler().handleRequest(request, "synthetic BLE CODE
CRITICAL…om/ismartcoding/plain/tests/ChatServiceRustHttpTest.kt92 com.ismartcoding.plain.chat.ChatCacher.load()CODE
CRITICAL…om/ismartcoding/plain/tests/MdnsRuntimeRustHttpTest.kt21 fun physical(acquire: Boolean, lease: String) = com.ismartcoding.plain.discover.MdnsMulticastHost.handle(buildJsCODE
CRITICAL⚡…ava/com/ismartcoding/plain/tests/PublicRustHttpTest.kt55 com.ismartcoding.plain.features.session.RustSessionStore.create(fixtureName)CODE
CRITICAL⚡…ava/com/ismartcoding/plain/tests/PublicRustHttpTest.kt56 val session = com.ismartcoding.plain.features.session.RustSessionStore.list().single { it.name == fixturCODE
CRITICAL⚡…ava/com/ismartcoding/plain/tests/PublicRustHttpTest.kt58 key = com.ismartcoding.plain.helpers.Base64Lenient.decode(session.token)CODE
CRITICAL…ava/com/ismartcoding/plain/tests/PublicRustHttpTest.kt103 if (clientId.isNotEmpty()) com.ismartcoding.plain.features.session.RustSessionStore.delete(clientId)CODE
CRITICAL⚡…m/ismartcoding/plain/tests/ChatDeliveryRustHttpTest.kt53 com.ismartcoding.plain.chat.ChatCacher.load()CODE
CRITICAL⚡…m/ismartcoding/plain/tests/ChatDeliveryRustHttpTest.kt54 com.ismartcoding.plain.chat.peer.PeerCacher.load()CODE
CRITICAL⚡…m/ismartcoding/plain/tests/ChatDeliveryRustHttpTest.kt55 com.ismartcoding.plain.chat.channel.ChannelCacher.load()CODE
CRITICAL…ismartcoding/plain/tests/ChannelReceiveRustHttpTest.kt78 val publicKey = Base64.decode(com.ismartcoding.plain.helpers.SignatureHelper.getRawPublicKeyBase64Async())CODE
CRITICAL…ismartcoding/plain/tests/ChannelReceiveRustHttpTest.kt81 com.ismartcoding.plain.rust.request.RustContentApi.postJsonOrThrow("chat/channel", buildJsonObject {CODE
CRITICAL…ismartcoding/plain/tests/ChannelReceiveRustHttpTest.kt116 val result = com.ismartcoding.plain.rust.request.RustContentApi.postJson("chat/store", buildJsonObject {CODE
CRITICAL…om/ismartcoding/plain/tests/ChatStorageRustHttpTest.kt73 ChatManager.clearAllMessages(com.ismartcoding.plain.chat.data.ChatTarget.parseId("peer:${peer.id}"))CODE
CRITICAL…om/ismartcoding/plain/tests/ChatStorageRustHttpTest.kt102 ChatManager.clearAllMessages(com.ismartcoding.plain.chat.data.ChatTarget.parseId("peer:$prefix"))CODE
CRITICAL…om/ismartcoding/plain/tests/ChatStorageRustHttpTest.kt107 ChatManager.clearAllMessages(com.ismartcoding.plain.chat.data.ChatTarget.parseId("channel:$prefix"))CODE
CRITICAL⚡…om/ismartcoding/plain/tests/ChatStorageRustHttpTest.kt132 val discovered = com.ismartcoding.plain.chat.peer.PeerManager.applyDeviceDiscovered(peer.id, listOf("127.0.0CODE
CRITICAL⚡…om/ismartcoding/plain/tests/ChatStorageRustHttpTest.kt135 assertTrue(com.ismartcoding.plain.chat.peer.PeerManager.markUnpaired(peer.id))CODE
CRITICAL⚡…om/ismartcoding/plain/tests/ChatStorageRustHttpTest.kt136 assertNull(com.ismartcoding.plain.chat.peer.PeerManager.applyDeviceDiscovered(peer.id, emptyList(), 1, "stalCODE
CRITICAL⚡…om/ismartcoding/plain/tests/ChatStorageRustHttpTest.kt140 assertTrue(com.ismartcoding.plain.chat.peer.PeerManager.deletePeer(peer.id))CODE
CRITICAL⚡…om/ismartcoding/plain/tests/ChatStorageRustHttpTest.kt145 com.ismartcoding.plain.chat.channel.ChannelManager.deleteChannel(channel.id)CODE
CRITICAL⚡…om/ismartcoding/plain/tests/ChatStorageRustHttpTest.kt149 assertTrue(com.ismartcoding.plain.chat.peer.PeerManager.deletePeer(peer.id))CODE
CRITICAL⚡…om/ismartcoding/plain/tests/ChatStorageRustHttpTest.kt150 assertFalse(com.ismartcoding.plain.chat.peer.PeerManager.deletePeer(peer.id))CODE
CRITICAL…om/ismartcoding/plain/tests/PeerGraphQLRustHttpTest.kt85 com.ismartcoding.plain.chat.ChatCacher.load()CODE
CRITICAL⚡…martcoding/plain/tests/MessageLifecycleRustHttpTest.kt53 com.ismartcoding.plain.chat.peer.PeerCacher.load()CODE
CRITICAL⚡…martcoding/plain/tests/MessageLifecycleRustHttpTest.kt54 com.ismartcoding.plain.chat.ChatCacher.load()CODE
CRITICAL⚡…martcoding/plain/tests/MessageLifecycleRustHttpTest.kt60 val local = com.ismartcoding.plain.chat.data.ChatTarget.parseId("peer:local")CODE
CRITICAL⚡…martcoding/plain/tests/MessageLifecycleRustHttpTest.kt61 val wrongTarget = com.ismartcoding.plain.chat.data.ChatTarget.parseId("peer:synthetic-other")CODE
CRITICAL⚡…martcoding/plain/tests/MessageLifecycleRustHttpTest.kt63 val owned = com.ismartcoding.plain.helpers.AppFileStore.importBytes(bytes, "text/plain")CODE
CRITICAL⚡…martcoding/plain/tests/MessageLifecycleRustHttpTest.kt69 val imported = file.copy(uri = com.ismartcoding.plain.helpers.AppFileStore.toFidUri(owned))CODE
CRITICAL⚡…martcoding/plain/tests/MessageLifecycleRustHttpTest.kt71 val response = com.ismartcoding.plain.rust.request.RustContentApi.postJsonOrThrow("chat/service", kotlinx.seCODE
CRITICAL⚡…martcoding/plain/tests/MessageLifecycleRustHttpTest.kt77 assertEquals(2, com.ismartcoding.plain.helpers.AppFileStore.getById(owned.id)!!.refCount)CODE
CRITICAL⚡…martcoding/plain/tests/MessageLifecycleRustHttpTest.kt82 assertEquals(1, com.ismartcoding.plain.helpers.AppFileStore.getById(owned.id)!!.refCount)CODE
CRITICAL⚡…martcoding/plain/tests/MessageLifecycleRustHttpTest.kt83 assertTrue(java.io.File(com.ismartcoding.plain.helpers.AppFileStore.resolveUri(imported.uri)).exists())CODE
CRITICAL⚡…martcoding/plain/tests/MessageLifecycleRustHttpTest.kt85 assertNull(com.ismartcoding.plain.helpers.AppFileStore.getById(owned.id))CODE
CRITICAL⚡…martcoding/plain/tests/MessageLifecycleRustHttpTest.kt88 while (com.ismartcoding.plain.helpers.AppFileStore.getById(owned.id) != null) com.ismartcoding.plain.helpersCODE
CRITICAL⚡…martcoding/plain/tests/MessageLifecycleRustHttpTest.kt89 com.ismartcoding.plain.chat.ChatCacher.load()CODE
CRITICAL…/ismartcoding/plain/tests/PeerTransportRustHttpTest.kt54 com.ismartcoding.plain.chat.peer.PeerTransportProjection.refresh()CODE
CRITICAL…/ismartcoding/plain/tests/PeerTransportRustHttpTest.kt57 com.ismartcoding.plain.chat.peer.PeerTransportProjection.refresh()CODE
CRITICAL…/ismartcoding/plain/tests/PeerTransportRustHttpTest.kt69 com.ismartcoding.plain.chat.peer.PeerCacher.load()CODE
CRITICAL…/ismartcoding/plain/tests/DownloadQueueRustHttpTest.kt68 com.ismartcoding.plain.chat.ChatCacher.load()CODE
CRITICAL…/ismartcoding/plain/tests/DownloadQueueRustHttpTest.kt69 com.ismartcoding.plain.chat.peer.PeerCacher.load()CODE
CRITICAL…/ismartcoding/plain/tests/DownloadQueueRustHttpTest.kt92 val file = DMessageFile(id = fileId, uri = "fsid:${com.ismartcoding.plain.helpers.UrlHelper.encrypt(source.aCODE
CRITICAL⚡…/ismartcoding/plain/tests/DownloadQueueRustHttpTest.kt107 val stored = com.ismartcoding.plain.helpers.AppFileStore.getById(hash!!)!!CODE
CRITICAL⚡…/ismartcoding/plain/tests/DownloadQueueRustHttpTest.kt117 hash?.let { value -> while (com.ismartcoding.plain.helpers.AppFileStore.getById(value) != null) com.ismartcoCODE
CRITICAL⚡…/ismartcoding/plain/tests/DownloadQueueRustHttpTest.kt125 com.ismartcoding.plain.chat.ChatCacher.load()CODE
CRITICAL⚡…/ismartcoding/plain/tests/DownloadQueueRustHttpTest.kt126 com.ismartcoding.plain.chat.peer.PeerCacher.load()CODE
CRITICAL…va/com/ismartcoding/plain/tests/WebBundleAssetsTest.kt52 val root = com.ismartcoding.plain.platform.RustWebAssets.ensure()CODE
CRITICAL…/resources/web/assets/chunk-WebGPURenderer-C95BtpUd.js17 `}function ye(e){return le(e,`uboWgsl`,ve,pe)}var L=class extends de{constructor(){super({createUboElements:_e,geneCODE
CRITICAL…/src/main/resources/web/assets/chunk-swift-DKB6_1j6.js1function e(e){for(var t={},n=0;n<e.length;n++)t[e[n]]=!0;return t}var t=e(`_.var.let.actor.class.enum.extension.import.pCODE
CRITICAL⚡…in/kotlin/com/ismartcoding/plain/MainViewController.kt42 com.ismartcoding.plain.rust.request.RustContentApi.start()CODE
CRITICAL⚡…in/kotlin/com/ismartcoding/plain/MainViewController.kt49 com.ismartcoding.plain.platform.HttpServerManager.ensureStarted()CODE
CRITICAL⚡…in/kotlin/com/ismartcoding/plain/MainViewController.kt52 com.ismartcoding.plain.platform.IosPermissionEvents.register()CODE
CRITICAL⚡…in/kotlin/com/ismartcoding/plain/MainViewController.kt55 com.ismartcoding.plain.platform.IosFilePickerEvents.register()CODE
CRITICAL⚡…in/kotlin/com/ismartcoding/plain/MainViewController.kt58 com.ismartcoding.plain.platform.IosWindowFocusEvents.register()CODE
CRITICAL⚡…in/kotlin/com/ismartcoding/plain/MainViewController.kt61 com.ismartcoding.plain.platform.IosNetworkMonitor.init()CODE
211 more matches not shown…
Decorative Section Separators157 hits · 450 pts
SeverityFileLineSnippetContext
MEDIUM…com/ismartcoding/plain/lib/crypto/XChaCha20Poly1305.kt89// ── Poly1305 ──────────────────────────────────────────────────────────COMMENT
MEDIUM…com/ismartcoding/plain/lib/crypto/XChaCha20Poly1305.kt185// ── XChaCha20-Poly1305 AEAD ────────────────────────────────────────────COMMENT
MEDIUM…com/ismartcoding/plain/lib/crypto/XChaCha20Poly1305.kt265// ── Internal test helpers ─────────────────────────────────────────────COMMENT
MEDIUM…ismartcoding/plain/lib/crypto/XChaCha20Poly1305Test.kt235 // ── Helpers to access internal functions ──────────────────────────COMMENT
MEDIUM…m/ismartcoding/plain/lib/extensions/ImageHeaderTest.kt10 // ── getFilenameFromPath (moved from fileNameFromPath) ─────────────────COMMENT
MEDIUM…m/ismartcoding/plain/lib/extensions/ImageHeaderTest.kt23 // ── isHeifHeader ───────────────────────────────────────────────────────COMMENT
MEDIUM…m/ismartcoding/plain/lib/extensions/ImageHeaderTest.kt53 // ── isAnimatedImageOrSvgHeader ────────────────────────────────────────COMMENT
MEDIUM…ain/kotlin/com/ismartcoding/plain/helpers/Mp4Helper.kt377 // ── Discover tracks ──────────────────────────────────────────COMMENT
MEDIUM…ain/kotlin/com/ismartcoding/plain/helpers/Mp4Helper.kt406 // ── Phase 1: process video ───────────────────────────────────COMMENT
MEDIUM…ain/kotlin/com/ismartcoding/plain/helpers/Mp4Helper.kt418 // ── Phase 2: process audio ───────────────────────────────────COMMENT
MEDIUM…ain/kotlin/com/ismartcoding/plain/helpers/Mp4Helper.kt430 // ── Phase 3: mux into mp4 (interleaved by timestamp) ─────────COMMENT
MEDIUM…ain/kotlin/com/ismartcoding/plain/helpers/Mp4Helper.kt479 // ── remux: copy compressed samples as-is ─────────────────────────────COMMENT
MEDIUM…ain/kotlin/com/ismartcoding/plain/helpers/Mp4Helper.kt497 // ── H.263 → H.264 (decode → surface → encode) ──────────────────────COMMENT
MEDIUM…ain/kotlin/com/ismartcoding/plain/helpers/Mp4Helper.kt586 // ── AMR-NB → AAC (decode → PCM → encode) ───────────────────────────COMMENT
MEDIUM…ain/kotlin/com/ismartcoding/plain/helpers/Mp4Helper.kt672 // ── Browser-compat remux: drop undecodable metadata tracks ───────────COMMENT
MEDIUM…ing/plain/lib/markdown/annotator/AnnotatedStringKtx.kt475// ── Inline-math fallback extractor ──────────────────────────────────────COMMENT
MEDIUM…com/ismartcoding/plain/tests/ThumbnailBenchmarkTest.kt53 // ── Baseline: naive full decode then createScaledBitmap ──────────────────COMMENT
MEDIUM…com/ismartcoding/plain/tests/ThumbnailBenchmarkTest.kt66 // ── Our optimised path (density trick + conditional sharpen) ─────────────COMMENT
MEDIUM…com/ismartcoding/plain/tests/ThumbnailBenchmarkTest.kt82 // ── Full pipeline: decode + JPEG encode ──────────────────────────────────COMMENT
MEDIUM…com/ismartcoding/plain/tests/ThumbnailBenchmarkTest.kt94 // ── Disk cache: write then read-back ─────────────────────────────────────COMMENT
MEDIUM…com/ismartcoding/plain/tests/ThumbnailBenchmarkTest.kt116 // ── Correctness: decoded bitmap has correct dimensions ───────────────────COMMENT
MEDIUM…com/ismartcoding/plain/tests/ThumbnailBenchmarkTest.kt147 // ── Helpers ───────────────────────────────────────────────────────────────COMMENT
MEDIUM…/kotlin/com/ismartcoding/plain/crypto/Ed25519Native.kt137// ── Field arithmetic (radix 2^16, 16 signed limbs) ────────────────────────COMMENT
MEDIUM…/kotlin/com/ismartcoding/plain/crypto/Ed25519Native.kt366// ── Scalar reduction mod L (512-bit → 256-bit), table-driven ──────────────COMMENT
MEDIUM…/kotlin/com/ismartcoding/plain/crypto/Ed25519Native.kt481// ── Public API ────────────────────────────────────────────────────────────COMMENT
MEDIUM…/kotlin/com/ismartcoding/plain/crypto/Ed25519Native.kt585// ── Key generation ────────────────────────────────────────────────────────COMMENT
MEDIUM…com/ismartcoding/plain/crypto/CryptoVectorGenerator.kt64 // ── ECDH P-256 ────────────────────────────────────────────────────────────COMMENT
MEDIUM…com/ismartcoding/plain/crypto/CryptoVectorGenerator.kt102 // ── Ed25519 ───────────────────────────────────────────────────────────────COMMENT
MEDIUM…com/ismartcoding/plain/crypto/CryptoVectorGenerator.kt137 // ── XChaCha20-Poly1305 ────────────────────────────────────────────────────COMMENT
MEDIUM…com/ismartcoding/plain/crypto/CryptoVectorGenerator.kt180 // ── base64 / hex known-answer vectors ─────────────────────────────────────COMMENT
MEDIUM…com/ismartcoding/plain/crypto/CryptoVectorGenerator.kt208 // ── JSON builder ──────────────────────────────────────────────────────────COMMENT
MEDIUM…n/com/ismartcoding/plain/crypto/WebCryptoVectorTest.kt136 // ── Vector loading ─────────────────────────────────────────────────────────COMMENT
MEDIUM…/com/ismartcoding/plain/tests/FilePathValidatorTest.kt20 // ── Blank / non-absolute ──────────────────────────────────────────────────COMMENT
MEDIUM…/com/ismartcoding/plain/tests/FilePathValidatorTest.kt31 // ── Root / single-component paths ─────────────────────────────────────────COMMENT
MEDIUM…/com/ismartcoding/plain/tests/FilePathValidatorTest.kt43 // ── Forbidden system prefixes ─────────────────────────────────────────────COMMENT
MEDIUM…/com/ismartcoding/plain/tests/FilePathValidatorTest.kt81 // ── Path traversal ────────────────────────────────────────────────────────COMMENT
MEDIUM…/com/ismartcoding/plain/tests/FilePathValidatorTest.kt90 // ── allowedRoots enforcement ──────────────────────────────────────────────COMMENT
MEDIUM…/com/ismartcoding/plain/tests/FilePathValidatorTest.kt111 // ── Valid paths (no allowed-roots restriction) ────────────────────────────COMMENT
MEDIUM…/com/ismartcoding/plain/tests/FilePathValidatorTest.kt125 // ── requireAllSafe ────────────────────────────────────────────────────────COMMENT
MEDIUM…smartcoding/plain/tests/ScreenMirrorCaptureSizeTest.kt10 // ── compute ──────────────────────────────────────────────────────────────COMMENT
MEDIUM…smartcoding/plain/tests/ScreenMirrorCaptureSizeTest.kt91 // ── maxPixels constraint ─────────────────────────────────────────────────COMMENT
MEDIUM…smartcoding/plain/tests/ScreenMirrorCaptureSizeTest.kt153 // ── alignDown ────────────────────────────────────────────────────────────COMMENT
MEDIUM…kotlin/com/ismartcoding/plain/tests/ChunkUploadTest.kt25 // ── Atomic chunk write ────────────────────────────────────────────────────COMMENT
MEDIUM…kotlin/com/ismartcoding/plain/tests/ChunkUploadTest.kt87 // ── Chunk listing (uploadedChunks query pattern) ──────────────────────────COMMENT
MEDIUM…kotlin/com/ismartcoding/plain/tests/ChunkUploadTest.kt167 // ── Merge integrity ───────────────────────────────────────────────────────COMMENT
MEDIUM…kotlin/com/ismartcoding/plain/tests/ChunkUploadTest.kt292 // ── Size verification ─────────────────────────────────────────────────────COMMENT
MEDIUM…/kotlin/com/ismartcoding/plain/tests/H264AnnexBTest.kt36 // ── avccToAnnexB ─────────────────────────────────────────────────────────COMMENT
MEDIUM…/kotlin/com/ismartcoding/plain/tests/H264AnnexBTest.kt104 // ── ensureStartCode ──────────────────────────────────────────────────────COMMENT
MEDIUM…/kotlin/com/ismartcoding/plain/tests/H264AnnexBTest.kt128 // ── joinSpsPps ──────────────────────────────────────────────────────────COMMENT
MEDIUM…ismartcoding/plain/ui/page/dlna/DlnaReceiverOverlay.kt130// ── Download button (shared by video / image / audio player content) ───────COMMENT
MEDIUM…monMain/kotlin/com/ismartcoding/plain/platform/File.kt10// ── Shared construction / detection helpers ────────────────────────────────COMMENT
MEDIUM…onMain/kotlin/com/ismartcoding/plain/rust/PlainRust.kt71 // ── Peer and guest schemas: another device only ────────────────────────COMMENT
MEDIUM…onMain/kotlin/com/ismartcoding/plain/rust/PlainRust.kt85 // ── Execution ─────────────────────────────────────────────────────────COMMENT
MEDIUM…onMain/kotlin/com/ismartcoding/plain/rust/PlainRust.kt160 // ── Core lifecycle and native streams ────────────────────────────────COMMENT
MEDIUM…/com/ismartcoding/plain/rust/request/RustContentApi.kt88 // ── GraphQL: delegated, the transport lives in PlainRust ─────────────COMMENT
MEDIUM…/com/ismartcoding/plain/rust/request/RustContentApi.kt99 // ── Legacy JSON-RPC: local HTTP until these routes are migrated ──────COMMENT
MEDIUM…nMain/kotlin/com/ismartcoding/plain/db/DChatChannel.kt47 // ── Helpers ─────────────────────────────────────────────────────COMMENT
MEDIUM…om/ismartcoding/plain/chat/peer/GraphQLResponseTest.kt11 // ── isSuccess ─────────────────────────────────────────────────COMMENT
MEDIUM…om/ismartcoding/plain/chat/peer/GraphQLResponseTest.kt66 // ── getError ──────────────────────────────────────────────────COMMENT
MEDIUM…om/ismartcoding/plain/chat/peer/GraphQLResponseTest.kt110 // ── default args ──────────────────────────────────────────────COMMENT
97 more matches not shown…
Over-Commented Block26 hits · 26 pts
SeverityFileLineSnippetContext
LOW…coding/plain/lib/markdown/compose/MarkdownExtension.kt101 // which routes the math through an `InlineTextContent`COMMENT
LOW…coding/plain/lib/markdown/compose/MarkdownExtension.kt141 // child traversal). Render `<img>` through the same MarkdownImage pipeline asCOMMENT
LOW…ng/plain/lib/markdown/compose/elements/MarkdownText.kt401 if (annotations.isEmpty()) return emptyMap()COMMENT
LOW…ing/plain/lib/markdown/annotator/AnnotatedStringKtx.kt341 // `BLOCK_MATH` is intentionally NOT handled here — theCOMMENT
LOW…ing/plain/lib/markdown/annotator/AnnotatedStringKtx.kt561 return falseCOMMENT
LOW…ing/plain/lib/markdown/annotator/AnnotatedStringKtx.kt601 // ever-growing `length` property — in Compose'sCOMMENT
LOWiosApp/iosApp/ShareController.swift1import SwiftUICOMMENT
LOWiosApp/iosApp/FilePickerController.swift1import SwiftUICOMMENT
LOW…/kotlin/com/ismartcoding/plain/crypto/Ed25519Native.kt361 if (feIsNegative(x) != sign) feSub(x, GF_ZERO, x)COMMENT
LOW…m/ismartcoding/plain/ui/models/FeedEntriesViewModel.kt41 // Cluster key ("date/feedId" from buildFeedListRows) -> explicit expanded/collapsedCOMMENT
LOW…/kotlin/com/ismartcoding/plain/chat/peer/PeerCacher.kt21object PeerCacher {COMMENT
LOW…plain/lib/markdown/compose/elements/MathElementTest.kt421 // Bold covers "Bold prefix " (12 chars) at the startCOMMENT
LOW…ismartcoding/plain/platform/CoilImageLoader.android.kt101 // the lazy diskCache / memoryCache initializer lambdas held by RealImageLoader.COMMENT
LOW…martcoding/plain/lib/apk/struct/xml/XmlNodeStartTag.kt1package com.ismartcoding.plain.lib.apk.struct.xmlCOMMENT
LOW…kotlin/com/ismartcoding/plain/lib/pdfviewer/PDFView.kt481 // As I said in this class javadoc, we can think of this canvas as a hugeCOMMENT
LOWplain-rs/src/ffi/prefs.rs61COMMENT
LOWscripts/grant-web-access.sh1#!/bin/bashCOMMENT
LOWscripts/test-lib.sh1#!/bin/bashCOMMENT
LOWscripts/test-lib.sh161# * it was installed at or after the APK was built (otherwise it is an olderCOMMENT
LOWscripts/test-graphql-api.sh1#!/bin/bashCOMMENT
LOWscripts/test-ui.sh1#!/bin/bashCOMMENT
LOWscripts/measure_http_server_latency.sh1#!/usr/bin/env bashCOMMENT
LOWscripts/test-graphql-mutations.sh1#!/bin/bashCOMMENT
LOWscripts/test-graphql-mutations.sh21# to be excluded from this: it built its clauses on the Kotlin ContentWhereCOMMENT
LOWscripts/test-api.sh1#!/bin/bashCOMMENT
LOW.github/workflows/codeql.yml1# For most projects, this workflow file will not need changing; you simply needCOMMENT
AI Slop Vocabulary4 hits · 10 pts
SeverityFileLineSnippetContext
MEDIUM…p/src/main/resources/web/assets/chunk-dist-BjyU8a2A.js1import{n as e}from"./chunk-rolldown-runtime-aKtaBQYM.js";import{$ as t,L as n,M as r,P as i,Tt as a,_ as o,k as s,o as cCODE
MEDIUM…rc/main/resources/web/assets/chunk-gherkin-oBAE_ms0.js1var e={name:`gherkin`,startState:function(){return{lineNumber:0,tableHeaderLine:!1,allowFeature:!0,allowBackground:!1,alCODE
MEDIUMiosApp/iosApp/iosApp.swift34 // the transition is visually seamless (no more white flash).COMMENT
MEDIUM…smartcoding/plain/lib/markdown/utils/HtmlImgTagTest.kt124 // is robust when handed any node — it returns null rather thanCOMMENT
Empty Error Handlers2 hits · 10 pts
SeverityFileLineSnippetContext
HIGHscripts/test_thumbnail_exif.py105except Exception:CODE
HIGHscripts/test_thumbnail_exif.py173except Exception:CODE
Example Usage Blocks4 hits · 6 pts
SeverityFileLineSnippetContext
LOWscripts/delete-translation-key.sh5# Usage:COMMENT
LOWscripts/remove_string_key_all.sh3# Usage:COMMENT
LOWscripts/build-ios-release.sh5# Usage:COMMENT
LOWscripts/measure_http_server_latency.sh11# Usage:COMMENT
Fake / Example Data4 hits · 4 pts
SeverityFileLineSnippetContext
LOW…urces/web/assets/chunk-MarkdownPreviewView-DwUEDpq5.js9This is a regular paragraph with some content. It demonstrates the unified markdown reading theme. The quick brown fox jCODE
LOW…urces/web/assets/chunk-MarkdownPreviewView-DwUEDpq5.js9This is a regular paragraph with some content. It demonstrates the unified markdown reading theme. The quick brown fox jCODE
LOW…ing/plain/ui/page/settings/MarkdownThemePreviewPage.kt26This is a regular paragraph with some content. It demonstrates the unified markdown reading theme. The quick brown fox jCODE
LOW…ing/plain/ui/page/settings/MarkdownThemePreviewPage.kt26This is a regular paragraph with some content. It demonstrates the unified markdown reading theme. The quick brown fox jCODE
Modern AI Meta-Vocabulary1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUM…/com/ismartcoding/plain/ui/page/feeds/FeedEntryPage.kt230 // Shared scaffold for both parse slots: title/meta paint on the very firstCOMMENT
Deep Nesting3 hits · 3 pts
SeverityFileLineSnippetContext
LOWscripts/dedup_lib_imports.py38CODE
LOWscripts/test_thumbnail_exif.py36CODE
LOWscripts/test_thumbnail_exif.py156CODE
Unused Imports3 hits · 3 pts
SeverityFileLineSnippetContext
LOWscripts/test_thumbnail_exif.py18CODE
LOWscripts/test_thumbnail_exif.py20CODE
LOWscripts/migrate_strings_to_kmp.py16CODE
Slop Phrases1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUM.github/workflows/codeql.yml62 # If you are analyzing a compiled language, you can modify the 'build-mode' for that language to customize howCOMMENT
Excessive Try-Catch Wrapping2 hits · 2 pts
SeverityFileLineSnippetContext
LOWscripts/test_thumbnail_exif.py105 except Exception:CODE
LOWscripts/test_thumbnail_exif.py173 except Exception:CODE
Structural Annotation Overuse1 hit · 2 pts
SeverityFileLineSnippetContext
LOW…/ismartcoding/plain/lib/apk/cert/asn1/Asn1BerParser.kt244 // NOTE: This method returns List rather than Set because ASN.1 SET_OF does require uniquenessCOMMENT