AI Slop Code Risk Monitor

meshtastic/Meshtastic-Android

SlopCodeMonitor badge for meshtastic/Meshtastic-Android Adjusted legacy signal; badge bands: 25 / 50 / 75 (different from dashboard bands).

Android application for Meshtastic

2.0 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for meshtastic/Meshtastic-Android, a Kotlin project with 1,900 GitHub stars. SynthScan examined 738,060 lines of code across 4670 source files, recording 428 pattern matches distributed across 16 syntactic categories. The legacy adjusted pattern signal is 2.0 (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.0
Adjusted Signal
2.0
Raw Pattern Score
100%
Time Factor
2026-10-31
Last Push
1.9K
Stars
Kotlin
Language
738.1K
Lines of Code
4.7K
Files
428
Pattern Hits
2026-10-31
Scan Date
0.01
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 1.6/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 4.0/100 · LOW

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

Agent Over-Engineering Ratio 4.0/100 · LOW

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

PR Review Velocity Impact 8.8/100 · LOW

Which changes need focused human review? 428 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 57HIGH 1MEDIUM 211LOW 159

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 428 distinct pattern matches across 16 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 Indicators57 hits · 595 pts
SeverityFileLineSnippetContext
CRITICAL…n/kotlin/org/meshtastic/schemastrings/SchemaCatalog.kt125 val jar = File(FieldMetadataRegistry::class.java.protectionDomain.codeSource.location.toURI())CODE
CRITICAL…in/org/meshtastic/core/ui/component/NodeItemCompact.kt543 val nowSeconds = org.meshtastic.core.common.util.nowSeconds.toInt()CODE
CRITICAL…in/kotlin/org/meshtastic/core/ui/util/PlatformUtils.kt149 androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult(),CODE
CRITICAL…in/kotlin/org/meshtastic/core/ui/util/PlatformUtils.kt206 androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult(),CODE
CRITICAL…in/org/meshtastic/core/takserver/TAKMeshIntegration.kt374 val protoBytes = org.meshtastic.proto.TAKPacketV2.ADAPTER.encode(takPacketV2)CODE
CRITICAL…tlin/org/meshtastic/core/network/radio/MockScenario.kt516 wb.latitude_i = org.meshtastic.core.model.Position.degI(latitude)CODE
CRITICAL…tlin/org/meshtastic/core/network/radio/MockScenario.kt517 wb.longitude_i = org.meshtastic.core.model.Position.degI(longitude)CODE
CRITICAL…stic/core/service/ConversationShortcutPublisherTest.kt224 androidx.core.content.pm.ShortcutInfoCompat.Builder(context, id)CODE
CRITICAL…stic/core/service/ConversationShortcutPublisherTest.kt228 androidx.core.content.pm.ShortcutManagerCompat.pushDynamicShortcut(context, shortcut)CODE
CRITICAL…eshtastic/core/data/repository/PacketRepositoryImpl.kt598 org.meshtastic.core.model.util.getShortDateTime(CODE
CRITICAL…tic/core/data/manager/MeshConfigFlowManagerImplTest.kt535 val testNode = org.meshtastic.core.testing.TestDataFactory.createTestNode(num = 100)CODE
CRITICAL…tic/core/data/manager/MeshConfigFlowManagerImplTest.kt569 val testNode = org.meshtastic.core.testing.TestDataFactory.createTestNode(num = nodeInfo.num)CODE
CRITICAL…tic/core/data/manager/MeshConfigFlowManagerImplTest.kt596 val testNode = org.meshtastic.core.testing.TestDataFactory.createTestNode(num = firstNode.num)CODE
CRITICAL…tic/core/data/manager/MeshConfigFlowManagerImplTest.kt622 val testNode = org.meshtastic.core.testing.TestDataFactory.createTestNode(num = 100)CODE
CRITICAL…tic/core/data/manager/MeshConfigFlowManagerImplTest.kt864 val testNode = org.meshtastic.core.testing.TestDataFactory.createTestNode(num = 100)CODE
CRITICAL…tic/core/data/manager/MeshConfigFlowManagerImplTest.kt1052 val testNode = org.meshtastic.core.testing.TestDataFactory.createTestNode(num = 100)CODE
CRITICAL…tic/core/data/manager/MeshConfigFlowManagerImplTest.kt1080 val testNode = org.meshtastic.core.testing.TestDataFactory.createTestNode(num = 100)CODE
CRITICAL…tic/core/data/manager/MeshConfigFlowManagerImplTest.kt1109 val testNode = org.meshtastic.core.testing.TestDataFactory.createTestNode(num = 100)CODE
CRITICAL…/meshtastic/core/data/manager/CommandSenderImplTest.kt538 val sent = org.meshtastic.proto.Position.ADAPTER.decode(decoded.payload)CODE
CRITICAL…/meshtastic/core/data/manager/CommandSenderImplTest.kt552 val sent = org.meshtastic.proto.Position.ADAPTER.decode(requireNotNull(packets.single().decoded).payload)CODE
CRITICAL…/meshtastic/core/data/manager/CommandSenderImplTest.kt656 org.meshtastic.proto.Config.PositionConfig.Builder()CODE
CRITICAL…in/usecase/settings/ProcessRadioResponseUseCaseTest.kt228 org.meshtastic.proto.Config.LoRaConfig.Builder().also { wb -> wb.use_preset = true }.build()CODE
CRITICAL…in/usecase/settings/ProcessRadioResponseUseCaseTest.kt256 org.meshtastic.proto.ModuleConfig.MQTTConfig.Builder().also { wb -> wb.enabled = true }.build()CODE
CRITICAL…stic/feature/settings/radio/SchemaFieldCoverageTest.kt284 val jar = File(FieldMetadataRegistry::class.java.protectionDomain.codeSource.location.toURI())CODE
CRITICAL…ture/settings/radio/component/NetworkConfigItemList.kt342 Config.NetworkConfig.ProtocolFlags.UDP_BROADCAST.value.inv()CODE
CRITICAL…tic/feature/settings/radio/RadioConfigViewModelTest.kt753 org.meshtastic.proto.ModuleConfig.MQTTConfig.Builder()CODE
CRITICAL…tic/feature/settings/radio/RadioConfigViewModelTest.kt923 RadioResponseResult.Error(org.meshtastic.core.resources.UiText.DynamicString("Max Retransmission Reached"))CODE
CRITICAL…tic/feature/settings/radio/RadioConfigViewModelTest.kt968 RadioResponseResult.Error(org.meshtastic.core.resources.UiText.DynamicString("Max Retransmission Reached"))CODE
CRITICAL…tic/feature/settings/radio/RadioConfigViewModelTest.kt1784 org.meshtastic.proto.ModuleConfig.MQTTConfig.Builder().also { wb -> wb.enabled = true }.build()CODE
CRITICAL…tic/feature/settings/radio/RadioConfigViewModelTest.kt1895 org.meshtastic.proto.ModuleConfig.TelemetryConfig.Builder()CODE
CRITICAL…tic/feature/settings/radio/RadioConfigViewModelTest.kt1919 RadioResponseResult.Error(org.meshtastic.core.resources.UiText.DynamicString("Fail"))CODE
CRITICAL…tic/feature/settings/radio/RadioConfigViewModelTest.kt1941 val failure = org.meshtastic.core.resources.UiText.DynamicString("Max Retransmission Reached")CODE
CRITICAL…tic/feature/settings/radio/RadioConfigViewModelTest.kt1960 val maxRetransmit = org.meshtastic.core.resources.UiText.DynamicString("Max Retransmission Reached")CODE
CRITICAL…tic/feature/settings/radio/RadioConfigViewModelTest.kt2012 val maxRetransmit = org.meshtastic.core.resources.UiText.DynamicString("Max Retransmission Reached")CODE
CRITICAL…tic/feature/settings/radio/RadioConfigViewModelTest.kt2090 val maxRetransmit = org.meshtastic.core.resources.UiText.DynamicString("Max Retransmission Reached")CODE
CRITICAL…tic/feature/settings/radio/RadioConfigViewModelTest.kt2149 val maxRetransmit = org.meshtastic.core.resources.UiText.DynamicString("Max Retransmission Reached")CODE
CRITICAL…tic/feature/settings/radio/RadioConfigViewModelTest.kt2272 val maxRetransmit = org.meshtastic.core.resources.UiText.DynamicString("Max Retransmission Reached")CODE
CRITICAL…tic/feature/settings/radio/RadioConfigViewModelTest.kt2357 val maxRetransmit = org.meshtastic.core.resources.UiText.DynamicString("Max Retransmission Reached")CODE
CRITICAL⚡…astic/feature/settings/debugging/DebugViewModelTest.kt212 nodeRepository.setMyNodeInfo(org.meshtastic.core.testing.TestDataFactory.createMyNodeInfo(myNodeNum = 12345678))CODE
CRITICAL⚡…astic/feature/settings/debugging/DebugViewModelTest.kt218 val before = org.meshtastic.core.common.util.nowInstant.toEpochMilliseconds()CODE
CRITICAL⚡…astic/feature/settings/debugging/DebugViewModelTest.kt220 val after = org.meshtastic.core.common.util.nowInstant.toEpochMilliseconds()CODE
CRITICAL⚡…astic/feature/settings/debugging/DebugViewModelTest.kt224 org.meshtastic.core.common.util.DateFormatter.formatShortDate(before),CODE
CRITICAL⚡…astic/feature/settings/debugging/DebugViewModelTest.kt225 org.meshtastic.core.common.util.DateFormatter.formatShortDate(after),CODE
CRITICAL…astic/feature/settings/debugging/DebugViewModelTest.kt249 org.meshtastic.core.testing.TestDataFactory.createTestPacket(CODE
CRITICAL…astic/feature/settings/debugging/DebugViewModelTest.kt284 val packet = org.meshtastic.core.testing.TestDataFactory.createTestPacket(from = 0xDEADBEEF.toInt(), to = -1)CODE
CRITICAL…astic/feature/settings/debugging/DebugViewModelTest.kt306 org.meshtastic.core.testing.TestDataFactory.createTestNode(CODE
CRITICAL…astic/feature/settings/debugging/DebugViewModelTest.kt314 val packet = org.meshtastic.core.testing.TestDataFactory.createTestPacket(from = 5, to = -1, relayNode = 0xAA)CODE
CRITICAL…astic/feature/settings/debugging/DebugViewModelTest.kt332 val packet = org.meshtastic.core.testing.TestDataFactory.createTestPacket(from = 5, to = -1, relayNode = 0xF5)CODE
CRITICAL…stic/feature/firmware/FirmwareUpdateIntegrationTest.kt184 FirmwareUpdateState.Error(org.meshtastic.core.resources.UiText.DynamicString("Transfer failed")),CODE
CRITICAL…/kotlin/org/meshtastic/feature/docs/ui/DocsPreviews.kt280 org.meshtastic.feature.docs.model.DocPageContent(CODE
CRITICAL…rg/meshtastic/feature/node/detail/NodeDetailScreens.kt231 val locationPermission = org.meshtastic.core.ui.util.rememberLocationPermissionState()CODE
CRITICAL…rg/meshtastic/feature/node/detail/NodeDetailScreens.kt232 val openLocationSettings = org.meshtastic.core.ui.util.rememberOpenLocationSettings()CODE
CRITICAL…lin/org/meshtastic/feature/node/list/NodeListScreen.kt153 val showToast = org.meshtastic.core.ui.util.rememberShowToastResource()CODE
CRITICAL…ain/kotlin/org/meshtastic/feature/messaging/Message.kt587 org.meshtastic.feature.messaging.component.handleQuickChatAction(CODE
CRITICAL…App/src/main/kotlin/org/meshtastic/app/MainActivity.kt265 org.meshtastic.app.map.node.NodeTrackMap(CODE
CRITICAL…App/src/main/kotlin/org/meshtastic/app/MainActivity.kt277 org.meshtastic.app.map.traceroute.TracerouteMap(CODE
CRITICAL…App/src/main/kotlin/org/meshtastic/app/MainActivity.kt286 org.meshtastic.app.map.discovery.DiscoveryMap(userLat, userLon, nodes, modifier)CODE
Decorative Section Separators190 hits · 584 pts
SeverityFileLineSnippetContext
MEDIUM…tlin/org/meshtastic/core/ui/emoji/EmojiPickerDialog.kt111// ── Constants ──────────────────────────────────────────────────────────────────COMMENT
MEDIUM…tlin/org/meshtastic/core/ui/emoji/EmojiPickerDialog.kt131// ── Public API ─────────────────────────────────────────────────────────────────COMMENT
MEDIUM…tlin/org/meshtastic/core/ui/emoji/EmojiPickerDialog.kt243// ── Main Content ───────────────────────────────────────────────────────────────COMMENT
MEDIUM…tlin/org/meshtastic/core/ui/emoji/EmojiPickerDialog.kt288// ── Search Bar ─────────────────────────────────────────────────────────────────COMMENT
MEDIUM…tlin/org/meshtastic/core/ui/emoji/EmojiPickerDialog.kt331// ── Category Tabs ──────────────────────────────────────────────────────────────COMMENT
MEDIUM…tlin/org/meshtastic/core/ui/emoji/EmojiPickerDialog.kt363// ── Emoji Grid ─────────────────────────────────────────────────────────────────COMMENT
MEDIUM…tlin/org/meshtastic/core/ui/emoji/EmojiPickerDialog.kt488// ── Grid Item Model ────────────────────────────────────────────────────────────COMMENT
MEDIUM…tlin/org/meshtastic/core/ui/emoji/EmojiPickerDialog.kt565// ── Cell Components ────────────────────────────────────────────────────────────COMMENT
MEDIUM…tlin/org/meshtastic/core/ui/emoji/EmojiPickerDialog.kt680// ── Skin Tone Popup ────────────────────────────────────────────────────────────COMMENT
MEDIUM…tlin/org/meshtastic/core/ui/emoji/EmojiPickerDialog.kt722// ── Frequency Tracking ─────────────────────────────────────────────────────────COMMENT
MEDIUM…tlin/org/meshtastic/core/ui/emoji/EmojiPickerDialog.kt762// ── Previews ───────────────────────────────────────────────────────────────────COMMENT
MEDIUM…kotlin/org/meshtastic/core/ui/emoji/EmojiRepository.kt58// ── JSON models (compact wire format) ──────────────────────────────────────────COMMENT
MEDIUM…kotlin/org/meshtastic/core/ui/emoji/EmojiRepository.kt71// ── Repository ─────────────────────────────────────────────────────────────────COMMENT
MEDIUM…ic/core/database/dao/PacketDaoAtomicTransactionTest.kt94 // ── Helpers ──────────────────────────────────────────────────────────────────COMMENT
MEDIUM…ic/core/database/dao/PacketDaoAtomicTransactionTest.kt159 // ── updateLastReadMessage ────────────────────────────────────────────────────COMMENT
MEDIUM…ic/core/database/dao/PacketDaoAtomicTransactionTest.kt320 // ── updatePacketByKey ────────────────────────────────────────────────────────COMMENT
MEDIUM…ic/core/database/dao/PacketDaoAtomicTransactionTest.kt389 // ── updateReactionByKey ──────────────────────────────────────────────────────COMMENT
MEDIUM…ic/core/database/dao/PacketDaoAtomicTransactionTest.kt503 // ── applySFPPStatus ──────────────────────────────────────────────────────────COMMENT
MEDIUM…ic/core/database/dao/PacketDaoAtomicTransactionTest.kt773 // ── applySFPPStatusByHash ────────────────────────────────────────────────────COMMENT
MEDIUM…ic/core/database/dao/PacketDaoAtomicTransactionTest.kt881 // ── deleteMessagesAtomic ─────────────────────────────────────────────────────COMMENT
MEDIUM…tlin/org/meshtastic/core/repository/AdminController.kt41 // ── Local configuration ─────────────────────────────────────────────────COMMENT
MEDIUM…tlin/org/meshtastic/core/repository/AdminController.kt71 // ── Remote configuration ────────────────────────────────────────────────COMMENT
MEDIUM…tlin/org/meshtastic/core/repository/AdminController.kt116 // ── Remote queries ──────────────────────────────────────────────────────COMMENT
MEDIUM…tlin/org/meshtastic/core/repository/AdminController.kt139 // ── Device lifecycle ────────────────────────────────────────────────────COMMENT
MEDIUM…tlin/org/meshtastic/core/repository/AdminController.kt159 // ── Batch edit ──────────────────────────────────────────────────────────COMMENT
MEDIUM…n/org/meshtastic/core/takserver/TAKServerJvmTlsTest.kt147 // ── helpers ────────────────────────────────────────────────────────────────COMMENT
MEDIUM…in/org/meshtastic/core/takserver/TAKMeshIntegration.kt190 // ── Send: TAK client → mesh ─────────────────────────────────────────────COMMENT
MEDIUM…in/org/meshtastic/core/takserver/TAKMeshIntegration.kt381 // ── Receive: mesh → TAK client ──────────────────────────────────────────COMMENT
MEDIUM…in/kotlin/org/meshtastic/core/takserver/TAKDefaults.kt77// ── Mesh-to-CoT (synthesized node contacts) ─────────────────────────────────COMMENT
MEDIUM…t/kotlin/org/meshtastic/core/takserver/XmlUtilsTest.kt24 // ── xmlEscaped ────────────────────────────────────────────────────────────COMMENT
MEDIUM…t/kotlin/org/meshtastic/core/takserver/XmlUtilsTest.kt62 // ── geoChatSenderUid ──────────────────────────────────────────────────────COMMENT
MEDIUM…t/kotlin/org/meshtastic/core/takserver/XmlUtilsTest.kt80 // ── geoChatMessageId ──────────────────────────────────────────────────────COMMENT
MEDIUM…rg/meshtastic/core/takserver/TAKMeshIntegrationTest.kt65 // ── Fakes ────────────────────────────────────────────────────────────────COMMENT
MEDIUM…rg/meshtastic/core/takserver/TAKMeshIntegrationTest.kt163 // ── Helpers ───────────────────────────────────────────────────────────────COMMENT
MEDIUM…rg/meshtastic/core/takserver/TAKMeshIntegrationTest.kt190 // ── Lifecycle tests ──────────────────────────────────────────────────────COMMENT
MEDIUM…rg/meshtastic/core/takserver/TAKMeshIntegrationTest.kt232 // ── TAK-Talk strip preservation (regression) ────────────────────────────COMMENT
MEDIUM…rg/meshtastic/core/takserver/TAKMeshIntegrationTest.kt265 // ── Inbound mesh → TAK client (V1) ──────────────────────────────────────COMMENT
MEDIUM…rg/meshtastic/core/takserver/TAKMeshIntegrationTest.kt326 // ── Firmware gating ──────────────────────────────────────────────────────COMMENT
MEDIUM…rg/meshtastic/core/takserver/TAKMeshIntegrationTest.kt361 // ── Outbound channel selection ───────────────────────────────────────────COMMENT
MEDIUM…rg/meshtastic/core/takserver/TAKMeshIntegrationTest.kt410 // ── Dropped-outcome discrimination (regression: #6583 self-test blind spot) ────────COMMENT
MEDIUM…rg/meshtastic/core/takserver/TAKMeshIntegrationTest.kt410 // ── Dropped-outcome discrimination (regression: #6583 self-test blind spot) ────────COMMENT
MEDIUM…rg/meshtastic/core/takserver/TAKMeshIntegrationTest.kt446 // ── GeoChat callsign enrichment ──────────────────────────────────────────COMMENT
MEDIUM…rg/meshtastic/core/takserver/TAKMeshIntegrationTest.kt472 // ── Helpers ───────────────────────────────────────────────────────────────COMMENT
MEDIUM…otlin/org/meshtastic/core/takserver/TAKDefaultsTest.kt28 // ── toTakTeamName ──────────────────────────────────────────────────────────COMMENT
MEDIUM…otlin/org/meshtastic/core/takserver/TAKDefaultsTest.kt56 // ── toTakRoleName ─────────────────────────────────────────────────────────COMMENT
MEDIUM…otlin/org/meshtastic/core/takserver/TAKDefaultsTest.kt89 // ── toTakCallsign ─────────────────────────────────────────────────────────COMMENT
MEDIUM…otlin/org/meshtastic/core/takserver/TAKDefaultsTest.kt130 // ── keepalive / idle timeout constants ─────────────────────────────────────COMMENT
MEDIUM…est/kotlin/org/meshtastic/core/takserver/CoTXmlTest.kt27 // ── PLI round-trip ────────────────────────────────────────────────────────COMMENT
MEDIUM…est/kotlin/org/meshtastic/core/takserver/CoTXmlTest.kt64 // ── Chat round-trip ───────────────────────────────────────────────────────COMMENT
MEDIUM…est/kotlin/org/meshtastic/core/takserver/CoTXmlTest.kt88 // ── XML escaping ─────────────────────────────────────────────────────────COMMENT
MEDIUM…est/kotlin/org/meshtastic/core/takserver/CoTXmlTest.kt108 // ── Structure ─────────────────────────────────────────────────────────────COMMENT
MEDIUM…/org/meshtastic/core/takserver/TAKServerManagerTest.kt173 // ── T076: Port conflict / start failure ─────────────────────────────────────COMMENT
MEDIUM…org/meshtastic/core/takserver/TakMeshTestRunnerTest.kt99 // ── runAll() covers both protocols ──────────────────────────────────────COMMENT
MEDIUM…rg/meshtastic/core/network/radio/MockRadioTransport.kt245 // ── Handshake ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUM…rg/meshtastic/core/network/radio/MockRadioTransport.kt396 // ── Simulated traffic ─────────────────────────────────────────────────────────────────────COMMENT
MEDIUM…rg/meshtastic/core/network/radio/MockRadioTransport.kt547 // ── Packet builders ──────────────────────────────────────────────────────────────────────COMMENT
MEDIUM…e/network/radio/BleRadioTransportReconnectCrashTest.kt97 // ─── close() triggers disconnect ─────────────────────────────────────────────────────────────COMMENT
MEDIUM…e/network/radio/BleRadioTransportReconnectCrashTest.kt136 // ─── disconnect called on connection failure ──────────────────────────────────────────────────COMMENT
MEDIUM…e/network/radio/BleRadioTransportReconnectCrashTest.kt177 // ─── transient onDisconnect after failure threshold ──────────────────────────────────────────COMMENT
MEDIUM…e/network/radio/BleRadioTransportReconnectCrashTest.kt224 // ─── CancellationException is not silently swallowed ─────────────────────────────────────────COMMENT
130 more matches not shown…
Over-Commented Block78 hits · 78 pts
SeverityFileLineSnippetContext
LOWstore-screenshots/capture-android.sh1#!/usr/bin/env bashCOMMENT
LOWstore-screenshots/capture-desktop.sh1#!/usr/bin/env bashCOMMENT
LOW…kotlin/org/meshtastic/core/database/DatabaseManager.kt161COMMENT
LOW…in/org/meshtastic/core/takserver/TAKMeshIntegration.kt221 * (DrawnShape, Marker, Route, Aircraft, Casevac, Emergency, Task, plus PLI / GeoChat). Wire format: `[flagsCOMMENT
LOW…org/meshtastic/core/network/radio/BleRadioTransport.kt221 // Guards against duplicate callbacks when multiple writes or a write + fromRadio failureCOMMENT
LOW…org/meshtastic/core/network/radio/BleRadioTransport.kt401 // Wait for the StateFlow to actually reflect Connected before watching for the nextCOMMENT
LOW…org/meshtastic/core/network/radio/BleRadioTransport.kt641 "[${address.anonymize()}] BLE Radio Session Ready. " +COMMENT
LOW…org/meshtastic/core/service/MeshServiceOrchestrator.kt81) {COMMENT
LOW…org/meshtastic/core/service/MeshServiceOrchestrator.kt101 val address = radioInterfaceService.currentDeviceAddressFlow.first(::isValidDeviceAddress)COMMENT
LOW…org/meshtastic/core/service/MeshServiceOrchestrator.kt181 newScope.handledLaunch { coldStartConnect() }COMMENT
LOW…meshtastic/core/service/SharedRadioInterfaceService.kt561COMMENT
LOW…meshtastic/core/service/SharedRadioInterfaceService.kt741 transportMutex.withLock {COMMENT
LOW…meshtastic/core/service/SharedRadioInterfaceService.kt761 // recovery path by creating a transport directly via startTransportLocked().COMMENT
LOW…meshtastic/core/service/SharedRadioInterfaceService.kt781 // connectionRequested mutators (connect/disconnect/setDeviceAddress) holdCOMMENT
LOW…meshtastic/core/service/SharedRadioInterfaceService.kt1061 // double liveness-timeout (timer not cancelled between fires) does not produceCOMMENT
LOW…lin/org/meshtastic/core/service/RadioControllerImpl.kt181 // arrives (nodeNum + deviceId from the same MyNodeInfo), tell the DatabaseManager to claimCOMMENT
LOW…ore/service/SharedRadioInterfaceServiceLivenessTest.kt121 // complete(Unit) is called — if testDispatcher is ever changed to StandardTestDispatcher,COMMENT
LOW…ore/service/SharedRadioInterfaceServiceLivenessTest.kt1541 // [SharedRadioInterfaceService.restartTransport] is the app-level handshake-stall recoveryCOMMENT
LOW…ore/service/SharedRadioInterfaceServiceLivenessTest.kt1821 // Past the 60s threshold → first checkLiveness CAS-sets isRestarting=true andCOMMENT
LOW…ore/service/SharedRadioInterfaceServiceLivenessTest.kt1981 // presence via [SerialDevicePresence.deviceKeys] combined with [currentDeviceAddressFlow] andCOMMENT
LOW…in/org/meshtastic/core/data/manager/NodeManagerImpl.kt441 */COMMENT
LOW…htastic/core/data/manager/MeshConnectionManagerImpl.kt301 if (serviceRepository.connectionState.value != ConnectionState.Connected) {COMMENT
LOW…htastic/core/data/manager/MeshConnectionManagerImpl.kt361 // Collapse cancel+reassign into one atomic swap so a concurrent re-arm cannot orphan aCOMMENT
LOW…htastic/core/data/manager/MeshConnectionManagerImpl.kt481 //COMMENT
LOW…tic/core/data/manager/MeshConnectionManagerImplTest.kt761 // Under the FIXED ordering, the fresh Connected arrives with app state alreadyCOMMENT
LOWconfig/detekt/detekt.yml1config:COMMENT
LOW.claude/hooks/pre-bash-guard.sh1#!/usr/bin/env bashCOMMENT
LOW.claude/hooks/post-edit.sh1#!/usr/bin/env bashCOMMENT
LOW.claude/hooks/subagent-audit.sh1#!/usr/bin/env bashCOMMENT
LOWgradle/libs.versions.toml41COMMENT
LOW…main/kotlin/org/meshtastic/buildlogic/KotlinAndroid.kt101 }COMMENT
LOW…aries/mapsplatform/secrets_gradle_plugin/Extensions.kt1// Copyright 2021 Google LLCCOMMENT
LOW…es/mapsplatform/secrets_gradle_plugin/SecretsPlugin.kt1// Copyright 2021 Google LLCCOMMENT
LOW…atform/secrets_gradle_plugin/SecretsPluginExtension.kt1// Copyright 2021 Google LLCCOMMENT
LOWscripts/build-appimage.sh1#!/usr/bin/env bashCOMMENT
LOWscripts/check-doc-aliases.js1#!/usr/bin/env nodeCOMMENT
LOWscripts/play-track-preflight.sh1#!/usr/bin/env bashCOMMENT
LOWscripts/sync-android-docs.js1#!/usr/bin/env nodeCOMMENT
LOWscripts/verify-rb-selftest.sh1#!/usr/bin/env bashCOMMENT
LOWscripts/ai-guardrail.sh1#!/bin/bashCOMMENT
LOWscripts/docs/publish-to-gh-pages.sh1#!/usr/bin/env bashCOMMENT
LOWscripts/lib/stripped-libs.sh1# shellcheck shell=bashCOMMENT
LOWscripts/lib/abi-parity.sh1# shellcheck shell=bashCOMMENT
LOWscripts/verify-flatpak/verify.sh1#!/usr/bin/env bashCOMMENT
LOWscripts/verify-flatpak/desktop-offline.yaml1# Local offline verification of org.meshtastic.MeshtasticDesktop.COMMENT
LOW.github/actionlint.yaml1# actionlint validates `runs-on` against a built-in list of GitHub-hosted labels, andCOMMENT
LOW.github/homebrew/meshtastic-desktop.rb1# Homebrew Cask template for Meshtastic Desktop.COMMENT
LOW.github/workflows/msstore-publish.yml1name: Publish to Microsoft StoreCOMMENT
LOW.github/workflows/msstore-publish.yml81 # Center rejects Win32 installers whose binaries don't chain to aCOMMENT
LOW.github/workflows/release.yml281COMMENT
LOW.github/workflows/docs-release.yml1name: Docs ReleaseCOMMENT
LOW.github/workflows/post-release-cleanup.yml121 git worktree add --quiet -B gh-pages "$work" FETCH_HEADCOMMENT
LOW.github/workflows/winget-publish.yml1name: Publish to wingetCOMMENT
LOW.github/workflows/winget-publish.yml41 env:COMMENT
LOW.github/workflows/pr-closed-cleanup.yml1name: PR Closed CleanupCOMMENT
LOW.github/workflows/pull-request.yml141 # scripts/verify-flatpak/ entirely.COMMENT
LOW.github/workflows/pull-request.yml161 run: python3 scripts/sync-play-changelog.py --checkCOMMENT
LOW.github/workflows/promote.yml81 - name: Decode Play Store credentialsCOMMENT
LOW.github/workflows/main-check.yml21 # Every commit on main arrives via the merge queue, which already ran lint,COMMENT
LOW.github/workflows/main-check.yml141 **Obtainium:** enable *Include prereleases*. Each build's APK filename carries the versionCode, so updates areCOMMENT
18 more matches not shown…
Structural Annotation Overuse29 hits · 55 pts
SeverityFileLineSnippetContext
LOWspecs/006-kmp-project-structure/quickstart.md13### Step 1: Harden convention plugin defaultsCOMMENT
LOWspecs/006-kmp-project-structure/quickstart.md35### Step 2: Migrate Tier 1 modules (minimal — 6 modules)COMMENT
LOWspecs/006-kmp-project-structure/quickstart.md65### Step 3: Migrate Tier 2 modules (withHostTest — 18 modules)COMMENT
LOWspecs/006-kmp-project-structure/quickstart.md104### Step 4: Migrate Tier 3 modules (special — 3 modules)COMMENT
LOWspecs/006-kmp-project-structure/quickstart.md143### Step 5: Full verificationCOMMENT
LOWspecs/006-kmp-project-structure/quickstart.md166### Step 6: Validate success criteriaCOMMENT
LOW⚡specs/20260520-153412-nav-tab-labels/quickstart.md12### Step 1: Add String ResourcesCOMMENT
LOW⚡specs/20260520-153412-nav-tab-labels/quickstart.md22### Step 2: Rename Enum EntriesCOMMENT
LOW⚡specs/20260520-153412-nav-tab-labels/quickstart.md30### Step 3: Update All ReferencesCOMMENT
LOWspecs/20260520-153412-nav-tab-labels/quickstart.md42### Step 4: VerifyCOMMENT
LOW…260511-211823-compose-screenshot-testing/quickstart.md12## Step 1: Create a Preview ComposableCOMMENT
LOW…260511-211823-compose-screenshot-testing/quickstart.md38## Step 2: Add a Screenshot Test WrapperCOMMENT
LOW⚡…260511-211823-compose-screenshot-testing/quickstart.md58## Step 3: Generate Reference ImagesCOMMENT
LOW⚡…260511-211823-compose-screenshot-testing/quickstart.md66## Step 4: ValidateCOMMENT
LOW⚡…260511-211823-compose-screenshot-testing/quickstart.md74## Step 5: Commit Reference ImagesCOMMENT
LOWspecs/20260520-153504-udp-label-rename/quickstart.md15### Step 1: Edit the string resourceCOMMENT
LOW⚡specs/20260520-153504-udp-label-rename/quickstart.md30### Step 2: Run the string sort scriptCOMMENT
LOW⚡specs/20260520-153504-udp-label-rename/quickstart.md38### Step 3: Verify the buildCOMMENT
LOW⚡specs/20260520-153504-udp-label-rename/quickstart.md44### Step 4: Confirm CI (after push)COMMENT
LOW…60520-153428-remove-admin-channel-toggle/quickstart.md15### Step 1: Remove unused import (Line 49)COMMENT
LOW…60520-153428-remove-admin-channel-toggle/quickstart.md24### Step 2: Remove toggle block (Lines 207–214)COMMENT
LOW…60520-153428-remove-admin-channel-toggle/quickstart.md40### Step 3: VerifyCOMMENT
LOW⚡.specify/extensions/verify/README.md100# Step 1: Create specificationCOMMENT
LOW⚡.specify/extensions/verify/README.md103# Step 2: Plan and generate tasksCOMMENT
LOW⚡.specify/extensions/verify/README.md107# Step 3: ImplementCOMMENT
LOW⚡.specify/extensions/verify/README.md110# Step 4: Verify implementationCOMMENT
LOW⚡…shtastic/feature/firmware/ota/Esp32OtaUpdateHandler.kt270 // Step 1: Get firmware fileCOMMENT
LOW⚡…shtastic/feature/firmware/ota/Esp32OtaUpdateHandler.kt273 // Step 2: Read firmware once and calculate hashCOMMENT
LOW…shtastic/feature/firmware/ota/Esp32OtaUpdateHandler.kt293 // Step 3: Preflight — wait for the firmware to confirm OTA entry BEFORE tearing down the meshCOMMENT
Modern AI Meta-Vocabulary13 hits · 44 pts
SeverityFileLineSnippetContext
MEDIUM.coderabbit.yaml60 # Spec Kit scaffolding — vendored tooling, not hand-maintained here.COMMENT
MEDIUM⚡…in/org/meshtastic/core/ui/component/AdaptiveTwoPane.kt79 // column and the two-pane scaffold (e.g. on resize / fold), and so neither slot is emitted directly from twoCOMMENT
MEDIUM⚡…in/org/meshtastic/core/ui/component/AdaptiveTwoPane.kt89 // unbounded constraints (the scaffold branch below leaves composition on that flip).COMMENT
MEDIUM⚡…in/org/meshtastic/core/ui/component/AdaptiveTwoPane.kt93 // Expanded: split side-by-side. Only a bounded host may use the pane scaffold; an unbounded oneCOMMENT
MEDIUM…/meshtastic/core/ui/component/AdaptiveTwoPaneUiTest.kt49 // Crashlytics 788308c5 (fatal, tablets): the split scaffold echoed the LazyColumn item's infiniteCOMMENT
MEDIUM…/meshtastic/core/ui/component/AdaptiveTwoPaneUiTest.kt68 // No drag handle: the unbounded host must get the Row fallback, not the scaffold.COMMENT
MEDIUM…/meshtastic/core/ui/component/AdaptiveTwoPaneUiTest.kt89 // survive the host flipping to unbounded constraints (scaffold disposed) and back.COMMENT
MEDIUM…kotlin/org/meshtastic/core/database/DatabaseManager.kt460 * (#6608). Only the first emission per latch is bounded; later emissions are event-driven and legitimately sparse.COMMENT
MEDIUMspecs/20260507-161858-app-docs-markdown/plan.md344### Safety/UX guardrailsCOMMENT
MEDIUM.claude/skills/proto-bump/SKILL.md45## PR + guardrailsCOMMENT
MEDIUMscripts/build-appimage.sh7# AppImage bundle format. This script builds the AppDir scaffolding (AppRun,COMMENT
MEDIUM.specify/extensions/optimize/config-template.yml22 # Flag if total governance tokens exceed this % of context windowCOMMENT
MEDIUM.specify/extensions/optimize/config-template.yml32# Target AI context window size (tokens) for budget calculationsCOMMENT
Redundant / Tautological Comments17 hits · 26 pts
SeverityFileLineSnippetContext
LOW.specify/extensions/git/scripts/bash/git-common.sh6# Check if we have git available at the repo rootCOMMENT
LOW.specify/extensions/git/scripts/bash/auto-commit.sh34# Check if git is availableCOMMENT
LOW.specify/extensions/git/scripts/bash/auto-commit.sh106 # Check if event section existed at allCOMMENT
LOW.specify/extensions/git/scripts/bash/auto-commit.sh120# Check if there are changes to commitCOMMENT
LOW.specify/extensions/git/scripts/bash/initialize-repo.sh37# Check if git is availableCOMMENT
LOW.specify/extensions/git/scripts/bash/initialize-repo.sh43# Check if already a git repoCOMMENT
LOW…cify/extensions/git/scripts/bash/create-new-feature.sh249# Check if git is available at this repo rootCOMMENT
LOW.specify/scripts/bash/common.sh104# Check if we have git available at the spec-kit root levelCOMMENT
LOW.specify/scripts/bash/common.sh111 # Check if .git exists (directory or file for worktrees/submodules)COMMENT
LOW.specify/scripts/bash/common.sh305# Check if jq is available for safe JSON constructionCOMMENT
LOW.specify/scripts/bash/common.sh576 # Check if any layer uses a non-replace strategyCOMMENT
LOW.specify/scripts/bash/setup-plan.sh54# Output resultsCOMMENT
LOW.specify/scripts/bash/setup-tasks.sh65# Output resultsCOMMENT
LOW.specify/scripts/bash/check-prerequisites.sh154# Output resultsCOMMENT
LOW.specify/scripts/bash/create-new-feature.sh32 # Check if the next argument is another option (starts with --)COMMENT
LOW.specify/scripts/bash/create-new-feature.sh197# Check if git is available at this repo root (not a parent)COMMENT
LOW.specify/scripts/bash/create-new-feature.sh333 # Check if branch already existsCOMMENT
Self-Referential Comments4 hits · 12 pts
SeverityFileLineSnippetContext
MEDIUM.specify/extensions/review/tests/bats/test_helper.bash15# Create a temporary working directory for each testCOMMENT
MEDIUM.specify/extensions/review/tests/bats/test_helper.bash45 # Create a bare repo to act as origin (explicitly use main)COMMENT
MEDIUM.specify/extensions/review/tests/bats/test_helper.bash50 # Create the working repoCOMMENT
MEDIUM.specify/scripts/bash/setup-plan.sh50 # Create a basic plan file if template doesn't existCOMMENT
Hyper-Verbose Identifiers8 hits · 10 pts
SeverityFileLineSnippetContext
LOWscripts/sync-android-docs.js358function collectVersionedImageReferences() {CODE
LOW…s/agent-governance/scripts/refresh_agent_governance.py141def repository_evidence_summary(root: Path, state: dict[str, Any], init_options: dict[str, Any]) -> str:CODE
LOW…s/agent-governance/scripts/refresh_agent_governance.py147def repository_evidence_lines(root: Path, state: dict[str, Any], init_options: dict[str, Any]) -> list[str]:CODE
LOW…s/agent-governance/scripts/refresh_agent_governance.py232def development_command_lines(root: Path) -> list[str]:CODE
LOW⚡…s/agent-governance/scripts/refresh_agent_governance.py477def repository_evidence_default() -> list[str]:CODE
LOW⚡…s/agent-governance/scripts/refresh_agent_governance.py485def directory_governance_default() -> list[str]:CODE
LOW⚡…s/agent-governance/scripts/refresh_agent_governance.py495def development_commands_default() -> list[str]:CODE
LOW…s/agent-governance/scripts/refresh_agent_governance.py518def extract_section_from_text(text: str, heading: str) -> list[str]:CODE
Fake / Example Data8 hits · 8 pts
SeverityFileLineSnippetContext
LOW…in/kotlin/org/meshtastic/core/ui/component/NodeChip.kt87 wb.long_name = "John Doe"CODE
LOW…org/meshtastic/core/ui/component/DropDownPreference.kt236 summary = "Lorem ipsum dolor sit amet",CODE
LOW…org/meshtastic/core/ui/component/DropDownPreference.kt236 summary = "Lorem ipsum dolor sit amet",CODE
LOW…g/meshtastic/core/ui/component/preview/PreviewUtils.kt36 wb.long_name = "John Doe"CODE
LOW…/meshtastic/core/ui/share/SharedContactImportDialog.kt152 wb.long_name = "John Doe"CODE
LOW…re/connections/ui/components/CurrentlyConnectedInfo.kt207 wb.long_name = "John Doe"CODE
LOW.skills/project-overview/SKILL.md66 datadogApplicationId=dummy_idCODE
LOW.skills/project-overview/SKILL.md67 datadogClientToken=dummy_tokenCODE
Excessive Try-Catch Wrapping5 hits · 7 pts
SeverityFileLineSnippetContext
MEDIUMscripts/sort-strings.py106 print(f"Error: {xml_file} not found.")CODE
MEDIUM…s/agent-governance/scripts/refresh_agent_governance.py58 print("Error: .specify/ not found. Run from a Spec Kit project root.", file=sys.stderr)CODE
LOW.specify/scripts/bash/common.sh373except Exception:CODE
LOW.specify/scripts/bash/common.sh461except Exception:CODE
LOW.specify/scripts/bash/common.sh492except Exception:CODE
AI Slop Vocabulary2 hits · 6 pts
SeverityFileLineSnippetContext
MEDIUM…tic/core/data/manager/MeshConnectionManagerImplTest.kt737 // test stays robust against small timeout tweaks.COMMENT
MEDIUM.claude/hooks/pre-bash-guard.sh17# robust, unlike a settings.json prefix pattern. Asks, never hard-denies.COMMENT
Deep Nesting6 hits · 6 pts
SeverityFileLineSnippetContext
LOW…laude/skills/run-meshtastic-android/driver_emulator.py162CODE
LOW.claude/skills/run-meshtastic-android/driver.py211CODE
LOWobtainium/generate-links.py257CODE
LOWscripts/sort-strings.py9CODE
LOWscripts/sort-strings.py58CODE
LOWscripts/docs/sync-locale-front-matter.py153CODE
Unused Imports6 hits · 6 pts
SeverityFileLineSnippetContext
LOWscripts/check-string-escapes.py23CODE
LOWscripts/check-store-metadata.py22CODE
LOWscripts/docs/sync-locale-front-matter.py33CODE
LOWscripts/docs/regenerate-versions.py23CODE
LOWscripts/verify-flatpak/check-platform-deps.py24CODE
LOW…s/agent-governance/scripts/refresh_agent_governance.py4CODE
Verbosity Indicators3 hits · 6 pts
SeverityFileLineSnippetContext
LOW⚡…shtastic/feature/firmware/ota/Esp32OtaUpdateHandler.kt270 // Step 1: Get firmware fileCOMMENT
LOW⚡…shtastic/feature/firmware/ota/Esp32OtaUpdateHandler.kt273 // Step 2: Read firmware once and calculate hashCOMMENT
LOW…shtastic/feature/firmware/ota/Esp32OtaUpdateHandler.kt293 // Step 3: Preflight — wait for the firmware to confirm OTA entry BEFORE tearing down the meshCOMMENT
Empty Error Handlers1 hit · 5 pts
SeverityFileLineSnippetContext
HIGH.claude/skills/run-meshtastic-android/driver.py158except OSError:CODE
Example Usage Blocks1 hit · 2 pts
SeverityFileLineSnippetContext
LOWscripts/verify-flatpak/verify.sh15# Usage:COMMENT