DuckDuckGo Android App
This report summarizes scanner evidence for duckduckgo/Android, a Kotlin project with 4,883 GitHub stars. SynthScan examined 1,356,270 lines of code across 9978 source files, recording 621 pattern matches distributed across 17 syntactic categories. The legacy adjusted pattern signal is 0.9 (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.
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.
Can maintainers explain intent, assumptions, and trade-offs? 202 finding(s).
Are imports declared and package/API names verified? 366 finding(s).
Are wrappers, guards, and repeated structures necessary? 133 finding(s).
Which changes need focused human review? 621 finding(s).
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.
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.
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.
The scanner identified 621 distinct pattern matches across 17 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.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | …/common/actions/RealPirActionsRunnerStateEngineTest.kt | 886 | val testAction = com.duckduckgo.pir.impl.scripts.models.BrokerAction.Navigate( | CODE |
| CRITICAL⚡ | …ckgo/pir/impl/scripts/RealBrokerActionProcessorTest.kt | 82 | val profileQuery = com.duckduckgo.pir.impl.models.ProfileQuery( | CODE |
| CRITICAL⚡ | …ckgo/pir/impl/scripts/RealBrokerActionProcessorTest.kt | 89 | com.duckduckgo.pir.impl.models.Address(city = "TestCity", state = "TS"), | CODE |
| CRITICAL | …ckgo/pir/impl/scripts/RealBrokerActionProcessorTest.kt | 503 | val profile = com.duckduckgo.pir.impl.models.ProfileQuery( | STRING |
| CRITICAL⚡ | …com/duckduckgo/pir/impl/store/RealPirRepositoryTest.kt | 492 | addresses = com.duckduckgo.pir.impl.store.db.Address(city = "New York", state = "NY"), | CODE |
| CRITICAL⚡ | …com/duckduckgo/pir/impl/store/RealPirRepositoryTest.kt | 499 | addresses = com.duckduckgo.pir.impl.store.db.Address(city = "Chicago", state = "IL"), | CODE |
| CRITICAL⚡ | …com/duckduckgo/pir/impl/store/RealPirRepositoryTest.kt | 506 | addresses = com.duckduckgo.pir.impl.store.db.Address(city = "Boston", state = "MA"), | CODE |
| CRITICAL⚡ | …com/duckduckgo/pir/impl/store/RealPirRepositoryTest.kt | 674 | addresses = com.duckduckgo.pir.impl.store.db.Address(city = "NYC", state = "NY"), | CODE |
| CRITICAL | …com/duckduckgo/pir/impl/store/RealPirRepositoryTest.kt | 401 | addresses = com.duckduckgo.pir.impl.store.db.Address(city = "New York", state = "NY"), | CODE |
| CRITICAL | …com/duckduckgo/pir/impl/store/RealPirRepositoryTest.kt | 432 | addresses = com.duckduckgo.pir.impl.store.db.Address(city = "Chicago", state = "IL"), | CODE |
| CRITICAL | …com/duckduckgo/pir/impl/store/RealPirRepositoryTest.kt | 455 | addresses = com.duckduckgo.pir.impl.store.db.Address(city = "Boston", state = "MA"), | CODE |
| CRITICAL | …com/duckduckgo/pir/impl/store/RealPirRepositoryTest.kt | 536 | addresses = com.duckduckgo.pir.impl.store.db.Address(city = "Seattle", state = "WA"), | CODE |
| CRITICAL | …com/duckduckgo/pir/impl/store/RealPirRepositoryTest.kt | 543 | addresses = com.duckduckgo.pir.impl.store.db.Address(city = "Portland", state = "OR"), | CODE |
| CRITICAL | …com/duckduckgo/pir/impl/store/RealPirRepositoryTest.kt | 582 | addresses = com.duckduckgo.pir.impl.store.db.Address(city = "New York", state = "NY"), | CODE |
| CRITICAL | …com/duckduckgo/pir/impl/store/RealPirRepositoryTest.kt | 589 | addresses = com.duckduckgo.pir.impl.store.db.Address(city = "Chicago", state = "IL"), | CODE |
| CRITICAL | …com/duckduckgo/pir/impl/store/RealPirRepositoryTest.kt | 629 | addresses = com.duckduckgo.pir.impl.store.db.Address(city = "Austin", state = "TX"), | CODE |
| CRITICAL | …com/duckduckgo/pir/impl/store/RealPirRepositoryTest.kt | 704 | addresses = com.duckduckgo.pir.impl.store.db.Address(city = "NYC", state = "NY"), | CODE |
| CRITICAL | …com/duckduckgo/pir/impl/store/RealPirRepositoryTest.kt | 773 | addresses = com.duckduckgo.pir.impl.store.db.Address(city = "NYC", state = "NY"), | CODE |
| CRITICAL | …com/duckduckgo/pir/impl/store/RealPirRepositoryTest.kt | 806 | addresses = com.duckduckgo.pir.impl.store.db.Address(city = "NYC", state = "NY"), | CODE |
| CRITICAL | …com/duckduckgo/pir/impl/store/RealPirRepositoryTest.kt | 851 | addresses = com.duckduckgo.pir.impl.store.db.Address(city = "NYC", state = "NY"), | CODE |
| CRITICAL | …in/java/com/duckduckgo/pir/impl/store/PirRepository.kt | 959 | com.duckduckgo.pir.impl.store.db.Address( | CODE |
| CRITICAL | …a/com/duckduckgo/app/cta/ui/DaxEndContextualCtaTest.kt | 252 | verify(mockDismissedCtaDao).insert(com.duckduckgo.app.cta.model.DismissedCta(CtaId.DAX_END)) | CODE |
| CRITICAL | …go/app/browser/DuckDuckGoWebLocalStorageManagerTest.kt | 69 | val webLocalStorageSettings = com.duckduckgo.app.browser.weblocalstorage.WebLocalStorageSettings( | CODE |
| CRITICAL | …m/duckduckgo/app/email/EmailJavascriptInterfaceTest.kt | 60 | autofillFeature = com.duckduckgo.autofill.api.FakeAutofillFeature.create() | CODE |
| CRITICAL | …o/eventhub/impl/pixels/RealEventHubPixelManagerTest.kt | 2156 | val periodMillis = java.util.concurrent.TimeUnit.DAYS.toMillis(1) | CODE |
| CRITICAL | …/duckduckgo/duckchat/impl/models/DuckAiModelManager.kt | 476 | private fun com.duckduckgo.subscriptions.api.SubscriptionStatus.isActiveOrWaiting(): Boolean { | CODE |
| CRITICAL | …ptions/impl/messaging/RealSubscriptionsJSHelperTest.kt | 246 | subscriptionsFeature.duckAiPlus().setRawStoredState(com.duckduckgo.feature.toggles.api.Toggle.State(usePaidDuckA | CODE |
| CRITICAL | …ptions/impl/messaging/RealSubscriptionsJSHelperTest.kt | 247 | subscriptionsFeature.allowProTierPurchase().setRawStoredState(com.duckduckgo.feature.toggles.api.Toggle.State(us | CODE |
| CRITICAL | …ptions/impl/messaging/RealSubscriptionsJSHelperTest.kt | 271 | subscriptionsFeature.duckAiPlus().setRawStoredState(com.duckduckgo.feature.toggles.api.Toggle.State(usePaidDuckA | CODE |
| CRITICAL | …ptions/impl/messaging/RealSubscriptionsJSHelperTest.kt | 272 | subscriptionsFeature.allowProTierPurchase().setRawStoredState(com.duckduckgo.feature.toggles.api.Toggle.State(us | CODE |
| CRITICAL | …ptions/impl/messaging/RealSubscriptionsJSHelperTest.kt | 296 | subscriptionsFeature.duckAiPlus().setRawStoredState(com.duckduckgo.feature.toggles.api.Toggle.State(usePaidDuckA | CODE |
| CRITICAL | …ptions/impl/messaging/RealSubscriptionsJSHelperTest.kt | 297 | subscriptionsFeature.allowProTierPurchase().setRawStoredState(com.duckduckgo.feature.toggles.api.Toggle.State(us | CODE |
| CRITICAL | …uckduckgo/sync/impl/ThirdPartyCredentialManagerTest.kt | 158 | val realJweCrypto = com.duckduckgo.sync.impl.crypto.RealSyncJweCrypto() | CODE |
| CRITICAL | …ckgo/sync/impl/exchange/v2/RealExchangeV2RunnerTest.kt | 622 | whenever(recoveryCodeProvider.getDdgRecoveryCode()).thenReturn(com.duckduckgo.sync.impl.Result.Success("the-code | CODE |
| CRITICAL | …otification/PersistentNotificationDismissedReceiver.kt | 45 | com.duckduckgo.mobile.android.vpn.service.goAsync(pendingResult) { | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …com/duckduckgo/pir/impl/integration/PirEndToEndTest.kt | 205 | fullName = "John Doe", | CODE |
| LOW⚡ | …ir/impl/integration/fakes/FakePirMessagingInterface.kt | 128 | "name": "John Doe", | CODE |
| LOW⚡ | …ir/impl/integration/fakes/FakePirMessagingInterface.kt | 129 | "fullName": "John Doe", | CODE |
| LOW⚡ | …ir/impl/integration/fakes/FakePirMessagingInterface.kt | 135 | "relatives": ["Jane Doe"], | CODE |
| LOW | …ate/RealPirDashboardMaintenanceScanDataProviderTest.kt | 83 | createExtractedProfile(dbId = 1L, brokerName = "broker1", name = "John Doe"), | CODE |
| LOW | …ate/RealPirDashboardMaintenanceScanDataProviderTest.kt | 123 | assertEquals("John Doe", result[0].extractedProfile.name) | CODE |
| LOW | …ate/RealPirDashboardMaintenanceScanDataProviderTest.kt | 135 | createExtractedProfile(dbId = 1L, brokerName = "broker1", name = "John Doe", profileQueryId = 1L), | CODE |
| LOW | …ate/RealPirDashboardMaintenanceScanDataProviderTest.kt | 178 | assertEquals("John Doe", result[0].extractedProfile.name) | CODE |
| LOW | …ate/RealPirDashboardMaintenanceScanDataProviderTest.kt | 186 | createExtractedProfile(dbId = 1L, brokerName = "broker1", name = "John Doe", profileQueryId = 1L), | CODE |
| LOW | …ate/RealPirDashboardMaintenanceScanDataProviderTest.kt | 219 | val johnDoeResult = result.find { it.result.extractedProfile.name == "John Doe" }!! | CODE |
| LOW | …ate/RealPirDashboardMaintenanceScanDataProviderTest.kt | 241 | createExtractedProfile(dbId = 1L, brokerName = "broker1", name = "John Doe"), | CODE |
| LOW | …ate/RealPirDashboardMaintenanceScanDataProviderTest.kt | 296 | val johnDoeResult = result.find { it.result.extractedProfile.name == "John Doe" }!! | CODE |
| LOW | …pl/dashboard/state/RealPirWebProfileStateHolderTest.kt | 129 | assertEquals("John Doe", resultProfiles[0].fullName) // Should not include middle name | CODE |
| LOW | …pl/dashboard/state/RealPirWebProfileStateHolderTest.kt | 551 | assertEquals("John Doe", fullName) | CODE |
| LOW | …/state/RealPirDashboardInitialScanStateProviderTest.kt | 536 | name = "John Doe", | CODE |
| LOW | …/state/RealPirDashboardInitialScanStateProviderTest.kt | 539 | relatives = listOf("Jane Doe"), | CODE |
| LOW | …/state/RealPirDashboardInitialScanStateProviderTest.kt | 595 | assertEquals("John Doe", dashboardResult.extractedProfile.name) | CODE |
| LOW | …/state/RealPirDashboardInitialScanStateProviderTest.kt | 610 | createExtractedProfile(dbId = 1L, brokerName = "broker1", name = "John Doe"), | CODE |
| LOW | …/state/RealPirDashboardInitialScanStateProviderTest.kt | 686 | createExtractedProfile(dbId = 1L, brokerName = "child", name = "John Doe"), | CODE |
| LOW | …/state/RealPirDashboardInitialScanStateProviderTest.kt | 711 | createExtractedProfile(dbId = 1L, brokerName = "broker1", name = "John Doe"), | CODE |
| LOW | …/state/RealPirDashboardInitialScanStateProviderTest.kt | 743 | assertEquals("John Doe", result[0].extractedProfile.name) | CODE |
| LOW⚡ | …/state/RealPirDashboardInitialScanStateProviderTest.kt | 754 | name = "John Doe", | CODE |
| LOW⚡ | …/state/RealPirDashboardInitialScanStateProviderTest.kt | 757 | relatives = listOf("Jane Doe", "Jim Doe"), | CODE |
| LOW⚡ | …/state/RealPirDashboardInitialScanStateProviderTest.kt | 763 | name = "John Doe", | CODE |
| LOW⚡ | …/state/RealPirDashboardInitialScanStateProviderTest.kt | 766 | relatives = listOf("Jane Doe"), | CODE |
| LOW⚡ | …/state/RealPirDashboardInitialScanStateProviderTest.kt | 775 | relatives = listOf("Jane Doe"), | CODE |
| LOW | …/state/RealPirDashboardInitialScanStateProviderTest.kt | 814 | createExtractedProfile(dbId = 1L, brokerName = "broker1", name = "John Doe"), | CODE |
| LOW⚡ | …/state/RealPirDashboardInitialScanStateProviderTest.kt | 842 | assertEquals("John Doe", originalResult.extractedProfile.name) | CODE |
| LOW⚡ | …/state/RealPirDashboardInitialScanStateProviderTest.kt | 845 | assertEquals("John Doe", mirrorResult.extractedProfile.name) | CODE |
| LOW⚡ | …/state/RealPirDashboardInitialScanStateProviderTest.kt | 854 | createExtractedProfile(dbId = 1L, brokerName = "broker1", name = "John Doe", profileQueryId = 1L), | CODE |
| LOW | …/state/RealPirDashboardInitialScanStateProviderTest.kt | 877 | assertEquals("John Doe", result[0].extractedProfile.name) | CODE |
| LOW | …/handlers/PirWebInitialScanStatusMessageHandlerTest.kt | 220 | name = "John Doe", | CODE |
| LOW | …/handlers/PirWebInitialScanStatusMessageHandlerTest.kt | 222 | relatives = listOf("Jane Doe"), | CODE |
| LOW | …/handlers/PirWebInitialScanStatusMessageHandlerTest.kt | 274 | assertEquals("John Doe", result1.name) | CODE |
| LOW | …/handlers/PirWebInitialScanStatusMessageHandlerTest.kt | 276 | assertEquals(listOf("Jane Doe"), result1.relatives) | CODE |
| LOW | …dlers/PirWebMaintenanceScanStatusMessageHandlerTest.kt | 192 | name = "John Doe", | CODE |
| LOW | …dlers/PirWebMaintenanceScanStatusMessageHandlerTest.kt | 194 | relatives = listOf("Jane Doe"), | CODE |
| LOW | …dlers/PirWebMaintenanceScanStatusMessageHandlerTest.kt | 260 | assertEquals("John Doe", inProgressResult.name) | CODE |
| LOW | …dlers/PirWebMaintenanceScanStatusMessageHandlerTest.kt | 262 | assertEquals(listOf("Jane Doe"), inProgressResult.relatives) | CODE |
| LOW | …dlers/PirWebMaintenanceScanStatusMessageHandlerTest.kt | 279 | assertEquals("John Doe", completedResult.name) | CODE |
| LOW | …kotlin/com/duckduckgo/pir/impl/RealPirUserUtilsTest.kt | 55 | fullName = "John Doe", | CODE |
| LOW | …in/com/duckduckgo/pir/impl/optout/RealPirOptOutTest.kt | 126 | fullName = "John Doe", | CODE |
| LOW | …in/com/duckduckgo/pir/impl/optout/RealPirOptOutTest.kt | 150 | name = "John Doe", | CODE |
| LOW | …in/com/duckduckgo/pir/impl/optout/RealPirOptOutTest.kt | 158 | fullName = "John Doe", | CODE |
| LOW | …duckgo/pir/impl/scheduling/RealJobRecordUpdaterTest.kt | 93 | name = "John Doe", | CODE |
| LOW | …duckgo/pir/impl/scheduling/RealJobRecordUpdaterTest.kt | 474 | relatives = listOf("Jane Doe"), | CODE |
| LOW | …uckduckgo/pir/impl/scheduling/RealPirJobsRunnerTest.kt | 162 | fullName = "John Doe", | CODE |
| LOW | …uckduckgo/pir/impl/scheduling/RealPirJobsRunnerTest.kt | 191 | name = "John Doe", | CODE |
| LOW | …uckduckgo/pir/impl/scheduling/RealPirJobsRunnerTest.kt | 199 | fullName = "John Doe", | CODE |
| LOW | …kotlin/com/duckduckgo/pir/impl/scan/RealPirScanTest.kt | 125 | fullName = "John Doe", | CODE |
| LOW | …duckduckgo/pir/impl/common/RealPirActionsRunnerTest.kt | 99 | fullName = "John Doe", | CODE |
| LOW | …uckduckgo/pir/impl/common/RealBrokerStepsParserTest.kt | 68 | name = "John Doe", | CODE |
| LOW⚡ | …ckduckgo/pir/impl/common/RealPirRunStateHandlerTest.kt | 121 | name = "John Doe", | CODE |
| LOW⚡ | …ckduckgo/pir/impl/common/RealPirRunStateHandlerTest.kt | 129 | fullAddress = "123 Main St", | CODE |
| LOW⚡ | …ckduckgo/pir/impl/common/RealPirRunStateHandlerTest.kt | 132 | phoneNumbers = listOf("555-1234"), | CODE |
| LOW⚡ | …ckduckgo/pir/impl/common/RealPirRunStateHandlerTest.kt | 133 | relatives = listOf("Jane Doe"), | CODE |
| LOW⚡ | …ckduckgo/pir/impl/common/RealPirRunStateHandlerTest.kt | 143 | name = "John Doe", | CODE |
| LOW⚡ | …ckduckgo/pir/impl/common/RealPirRunStateHandlerTest.kt | 151 | fullAddress = "123 Main St", | CODE |
| LOW⚡ | …ckduckgo/pir/impl/common/RealPirRunStateHandlerTest.kt | 154 | phoneNumbers = listOf("555-1234"), | CODE |
| LOW⚡ | …ckduckgo/pir/impl/common/RealPirRunStateHandlerTest.kt | 155 | relatives = listOf("Jane Doe"), | CODE |
| 266 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …n/java/com/duckduckgo/di/android/InjectableActivity.kt | 0 | could not find the injector for ${key.simplename}. you probably forgot to annotate your class with @injectwith(scope::cl | STRING |
| HIGH | …n/java/com/duckduckgo/di/android/InjectableFragment.kt | 0 | could not find the injector for ${key.simplename}. you probably forgot to annotate your class with @injectwith(scope::cl | STRING |
| HIGH | …ava/com/duckduckgo/app/global/DuckDuckGoApplication.kt | 0 | could not find the injector for ${key.simplename}. you probably forgot to annotate your class with @injectwith(scope::cl | STRING |
| HIGH | …uckgo/common/ui/DuckDuckGoBottomSheetDialogFragment.kt | 0 | could not find the injector for ${key.simplename}. you probably forgot to annotate your class with @injectwith(scope::cl | STRING |
| HIGH | …odegen/ksp/ContributeToActivityStarterProcessorTest.kt | 0 | package com.duckduckgo.di.scopes abstract class appscope private constructor() abstract class activityscope private cons | STRING |
| HIGH | …go/codegen/ksp/ContributesSubComponentProcessorTest.kt | 0 | package com.duckduckgo.di.scopes abstract class appscope private constructor() abstract class activityscope private cons | STRING |
| HIGH | …o/codegen/ksp/ContributesRemoteFeatureProcessorTest.kt | 0 | package com.duckduckgo.di.scopes abstract class appscope private constructor() abstract class activityscope private cons | STRING |
| HIGH | …degen/ksp/ContributesActivePluginPointProcessorTest.kt | 0 | package com.duckduckgo.di.scopes abstract class appscope private constructor() abstract class activityscope private cons | STRING |
| HIGH | …ckgo/codegen/ksp/ContributesServiceApiProcessorTest.kt | 0 | package com.duckduckgo.di.scopes abstract class appscope private constructor() abstract class activityscope private cons | STRING |
| HIGH | …kgo/codegen/ksp/ContributesPluginPointProcessorTest.kt | 0 | package com.duckduckgo.di.scopes abstract class appscope private constructor() abstract class activityscope private cons | STRING |
| HIGH | …ckduckgo/codegen/ksp/ContributesWorkerProcessorTest.kt | 0 | package com.duckduckgo.di.scopes abstract class appscope private constructor() abstract class activityscope private cons | STRING |
| HIGH | …uckgo/codegen/ksp/ContributesViewModelProcessorTest.kt | 0 | package com.duckduckgo.di.scopes abstract class appscope private constructor() abstract class activityscope private cons | STRING |
| HIGH | …uckgo/lint/MissingContributesToOnModuleDetectorTest.kt | 0 | package com.duckduckgo.di.scopes abstract class appscope private constructor() abstract class activityscope private cons | STRING |
| HIGH | …st/java/com/duckduckgo/lint/NoLifecycleObserverTest.kt | 0 | package com.duckduckgo.lint class duck { fun quack() { system.loadlibrary() } } | STRING |
| HIGH | …st/java/com/duckduckgo/lint/NoSingletonDetectorTest.kt | 0 | package com.duckduckgo.lint class duck { fun quack() { system.loadlibrary() } } | STRING |
| HIGH | …com/duckduckgo/lint/NoSystemLoadLibraryDetectorTest.kt | 0 | package com.duckduckgo.lint class duck { fun quack() { system.loadlibrary() } } | STRING |
| HIGH | …/duckduckgo/lint/ui/NoRawM3SurfaceUsageDetectorTest.kt | 0 | package androidx.compose.runtime annotation class composable | STRING |
| HIGH | …m/duckduckgo/lint/ui/NoRawM3ButtonUsageDetectorTest.kt | 0 | package androidx.compose.runtime annotation class composable | STRING |
| HIGH | …duckduckgo/lint/ui/NoRawM3SnackbarUsageDetectorTest.kt | 0 | package androidx.compose.runtime annotation class composable | STRING |
| HIGH | …m/duckduckgo/lint/ui/NoRawM3SliderUsageDetectorTest.kt | 0 | package androidx.compose.runtime annotation class composable | STRING |
| HIGH | …duckduckgo/lint/ui/DefaultsObjectCasingDetectorTest.kt | 0 | package androidx.compose.runtime annotation class composable | STRING |
| HIGH | …kduckgo/lint/ui/NoRawM3AlertDialogUsageDetectorTest.kt | 0 | package androidx.compose.runtime annotation class composable | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …o/eventhub/impl/pixels/RealEventHubPixelManagerTest.kt | 1270 | // Step 1: config [1] loads — both pixels registered with 60s/120s periods | COMMENT |
| LOW | …o/eventhub/impl/pixels/RealEventHubPixelManagerTest.kt | 1289 | // Step 2: config [2] loads — pixels A and B still use config [1] | COMMENT |
| LOW | …o/eventhub/impl/pixels/RealEventHubPixelManagerTest.kt | 1315 | // Step 3: pixel A fires — new cycle uses config [2], pixel B still on config [1] | COMMENT |
| LOW | …o/eventhub/impl/pixels/RealEventHubPixelManagerTest.kt | 1334 | // Step 4: config [3] loads — pixel A on [2], pixel B still on [1] | COMMENT |
| LOW | …o/eventhub/impl/pixels/RealEventHubPixelManagerTest.kt | 1353 | // Step 5: pixel B fires — new cycle uses config [3] | COMMENT |
| LOW⚡ | …einput/discovery/InputScreenDiscoveryFunnelImplTest.kt | 324 | // Step 1: Settings seen | COMMENT |
| LOW⚡ | …einput/discovery/InputScreenDiscoveryFunnelImplTest.kt | 328 | // Step 2: Feature enabled | COMMENT |
| LOW⚡ | …einput/discovery/InputScreenDiscoveryFunnelImplTest.kt | 332 | // Step 3: Omnibar interacted | COMMENT |
| LOW⚡ | …einput/discovery/InputScreenDiscoveryFunnelImplTest.kt | 336 | // Step 4: Search submitted | COMMENT |
| LOW⚡ | …einput/discovery/InputScreenDiscoveryFunnelImplTest.kt | 340 | // Step 5: Prompt submitted | COMMENT |
| LOW⚡ | …ckduckgo/duckchat/impl/clearing/RealDuckChatDeleter.kt | 241 | // Step 1: Load empty HTML with base URL | COMMENT |
| LOW⚡ | …ckduckgo/duckchat/impl/clearing/RealDuckChatDeleter.kt | 246 | // Step 2: Wait for page load | COMMENT |
| LOW⚡ | …ckduckgo/duckchat/impl/clearing/RealDuckChatDeleter.kt | 249 | // Step 3: Wait for duckAiClearDataReady notification | COMMENT |
| LOW⚡ | …ckduckgo/duckchat/impl/clearing/RealDuckChatDeleter.kt | 252 | // Step 4: Send duckAiClearData subscription with chatId params | COMMENT |
| LOW | …ckduckgo/duckchat/impl/clearing/RealDuckChatDeleter.kt | 265 | // Step 5: Wait for duckAiClearDataCompleted or duckAiClearDataFailed | COMMENT |
| LOW⚡ | …o/autofill/store/keys/RealSecureStorageKeyStoreTest.kt | 870 | // Step 1: Write key in multi-process mode | COMMENT |
| LOW⚡ | …o/autofill/store/keys/RealSecureStorageKeyStoreTest.kt | 879 | // Step 2: Disable feature and create new instance | COMMENT |
| LOW⚡ | …o/autofill/store/keys/RealSecureStorageKeyStoreTest.kt | 885 | // Step 3: Read key - should come from legacy | COMMENT |
| LOW | …degen/ksp/ContributesActivePluginPointProcessorTest.kt | 544 | // Step 1: Simulate Module B having produced a deferred marker for a | COMMENT |
| LOW | …degen/ksp/ContributesActivePluginPointProcessorTest.kt | 556 | // Step 2: Simulate Module A having produced a sentinel for "pluginPointFoo" | COMMENT |
| LOW | scripts/piranha/README.md | 20 | ### Step 1: Install Python 3.12 for your platform | COMMENT |
| LOW | scripts/piranha/README.md | 35 | ### Step 2: Create a Virtual Environment with Python 3.12 | COMMENT |
| LOW | scripts/piranha/README.md | 46 | ### Step 3: Activate the Virtual Environment | COMMENT |
| LOW | scripts/piranha/README.md | 57 | ### Step 4: Verify Python Version Inside Virtual Environment | COMMENT |
| LOW | .github/workflows/android-maintenance-worker.md | 100 | ### Step 1: Check for in-progress work | COMMENT |
| LOW⚡ | .github/workflows/android-maintenance-worker.md | 115 | ### Step 2: Select a task | COMMENT |
| LOW⚡ | .github/workflows/android-maintenance-worker.md | 122 | ### Step 3: Read project conventions | COMMENT |
| LOW⚡ | .github/workflows/android-maintenance-worker.md | 128 | ### Step 4: Implement the task | COMMENT |
| LOW | .github/workflows/android-maintenance-worker.md | 140 | ### Step 5: Verify the work | COMMENT |
| LOW | .github/workflows/android-maintenance-worker.md | 156 | ### Step 6: Open the draft PR | COMMENT |
| LOW | .github/workflows/android-maintenance-worker.md | 183 | ### Step 7: If stuck | COMMENT |
| LOW | .github/workflows/workflow-failure-classifier.md | 79 | ## Step 1: Find what actually failed | COMMENT |
| LOW | .github/workflows/workflow-failure-classifier.md | 105 | ## Step 2: Ours, or infrastructure | COMMENT |
| LOW | .github/workflows/workflow-failure-classifier.md | 128 | ## Step 3: History | COMMENT |
| LOW | .github/workflows/workflow-failure-classifier.md | 139 | ## Step 4: Candidate changes | COMMENT |
| LOW | .github/workflows/workflow-failure-classifier.md | 185 | ## Step 5: Write the report | COMMENT |
| LOW⚡ | .github/workflows/drift-audit.md | 89 | ### Step 1: Find what changed recently | COMMENT |
| LOW⚡ | .github/workflows/drift-audit.md | 94 | ### Step 2: Re-check the docs for the areas that changed | COMMENT |
| LOW⚡ | .github/workflows/drift-audit.md | 100 | ### Step 3: Decide | COMMENT |
| LOW⚡ | .github/workflows/drift-audit.md | 106 | ### Step 4: Open the draft PR | COMMENT |
| LOW | .github/workflows/drift-audit.md | 134 | ### Step 5: If unsure | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/src/main/res/raw/login_form_detection_functions.js | 46 | function scanPasswordFieldsInIFrame() { | CODE |
| LOW | …main/java/com/duckduckgo/app/browser/WebDataManager.kt | 75 | class WebViewDataManager @Inject constructor( | CODE |
| LOW | …/java/com/duckduckgo/app/browser/BrowserTabFragment.kt | 5744 | function buildCoordinateCandidates(raw, densityValue, scaleValue) { | CODE |
| LOW | …ckduckgo/duckchat/impl/sync/DuckChatSyncDataManager.kt | 61 | class DuckChatSyncDataManager @Inject constructor( | CODE |
| LOW | …/impl/messaging/DuckChatStandaloneJsMessageHandlers.kt | 67 | class StoreMigrationDataHandler @Inject constructor( | CODE |
| LOW | …/impl/messaging/DuckChatStandaloneJsMessageHandlers.kt | 181 | class ClearMigrationDataHandler @Inject constructor( | CODE |
| LOW | perf-benchmarks/pageload_benchmark.py | 287 | def merge_reload_interrupted_slices(durations: list[float], expected_total: int) -> list[float]: | CODE |
| LOW | scripts/ps-analysis/ps_review_anomaly.py | 8 | def fetch_reviews_all_languages_countries(package_name, langs, countries, count=10000, date_range=None): | CODE |
| LOW | scripts/release/create-asana-internal-release.py | 71 | def get_latest_internal_tag_before_commit(repo_path: str, current_tag: str) -> str | None: | CODE |
| LOW⚡ | scripts/release/test_asana_release_utils.py | 36 | def test_returns_only_release_tags(self, mock_run): | CODE |
| LOW⚡ | scripts/release/test_asana_release_utils.py | 46 | def test_returns_empty_when_no_release_tags(self, mock_run): | CODE |
| LOW⚡ | scripts/release/test_asana_release_utils.py | 51 | def test_returns_empty_on_empty_repo(self, mock_run): | CODE |
| LOW⚡ | scripts/release/test_asana_release_utils.py | 58 | def test_returns_latest_release_tag(self, mock_run): | CODE |
| LOW⚡ | scripts/release/test_asana_release_utils.py | 67 | def test_returns_none_when_no_release_tags(self, mock_run): | CODE |
| LOW⚡ | scripts/release/test_asana_release_utils.py | 74 | def test_returns_previous_tag(self, mock_run): | CODE |
| LOW⚡ | scripts/release/test_asana_release_utils.py | 83 | def test_returns_none_when_first_tag(self, mock_run): | CODE |
| LOW⚡ | scripts/release/test_asana_release_utils.py | 88 | def test_returns_none_when_tag_not_found(self, mock_run): | CODE |
| LOW⚡ | scripts/release/test_asana_release_utils.py | 93 | def test_ignores_non_release_tags(self, mock_run): | CODE |
| LOW⚡ | scripts/release/test_asana_release_utils.py | 108 | def test_returns_base_normal_when_no_prior_hotfix(self, mock_run): | CODE |
| LOW⚡ | scripts/release/test_asana_release_utils.py | 116 | def test_returns_newest_prior_hotfix(self, mock_run): | CODE |
| LOW⚡ | scripts/release/test_asana_release_utils.py | 125 | def test_ignores_patch_greater_or_equal(self, mock_run): | CODE |
| LOW⚡ | scripts/release/test_asana_release_utils.py | 135 | def test_ignores_other_minor_lines(self, mock_run): | CODE |
| LOW⚡ | scripts/release/test_asana_release_utils.py | 144 | def test_returns_none_for_malformed_version(self, mock_run): | CODE |
| LOW⚡ | scripts/release/test_asana_release_utils.py | 239 | def test_prefix_on_separate_line_from_url(self): | CODE |
| LOW⚡ | scripts/release/test_asana_release_utils.py | 245 | def test_flexible_whitespace_between_prefix_words(self): | CODE |
| LOW⚡ | scripts/release/test_asana_release_utils.py | 251 | def test_flexible_whitespace_around_slash(self): | CODE |
| LOW⚡ | scripts/release/test_asana_release_utils.py | 257 | def test_spaces_around_slash_and_extra_whitespace(self): | CODE |
| LOW⚡ | scripts/release/test_asana_release_utils.py | 263 | def test_prefix_in_multiline_commit_message(self): | CODE |
| LOW⚡ | scripts/release/test_asana_release_utils.py | 275 | def test_wrong_domain_not_matched(self): | CODE |
| LOW⚡ | scripts/release/test_asana_release_utils.py | 284 | def test_url_stops_at_whitespace(self): | CODE |
| LOW⚡ | scripts/release/test_asana_release_utils.py | 290 | def test_prefix_newline_between_words(self): | CODE |
| LOW⚡ | scripts/release/test_asana_release_utils.py | 301 | def test_resolves_id_from_valid_url(self): | CODE |
| LOW⚡ | scripts/release/test_asana_release_utils.py | 305 | def test_resolves_id_from_new_style_url(self): | CODE |
| LOW⚡ | scripts/release/test_asana_release_utils.py | 310 | def test_returns_none_when_no_url(self): | CODE |
| LOW⚡ | scripts/release/test_asana_release_utils.py | 315 | def test_returns_none_on_malformed_url(self, _mock_extract): | CODE |
| LOW⚡ | scripts/release/test_asana_release_utils.py | 320 | def test_returns_none_when_extracted_id_is_empty(self, _mock_extract): | CODE |
| LOW⚡ | scripts/release/test_asana_release_utils.py | 619 | def test_base_normal_of_zero_patch(self): | CODE |
| LOW⚡ | scripts/release/test_asana_release_utils.py | 623 | def test_returns_none_for_malformed(self): | CODE |
| LOW⚡ | scripts/release/test_asana_release_utils.py | 629 | def test_keeps_first_occurrence_and_drops_urlless(self): | CODE |
| LOW⚡ | scripts/release/test_asana_release_utils.py | 642 | def test_single_section_when_no_previous_links(self): | CODE |
| LOW⚡ | scripts/release/test_asana_release_utils.py | 648 | def test_two_sections_when_previous_links_given(self): | CODE |
| LOW⚡ | scripts/release/test_asana_release_utils.py | 657 | def test_empty_previous_links_stays_single_section(self): | CODE |
| LOW⚡ | scripts/release/test_asana_release_utils.py | 667 | def test_appends_release_tag_to_base_url(self): | CODE |
| LOW⚡ | scripts/release/test_asana_release_utils.py | 673 | def test_replaces_placeholder_when_base_url_given(self): | CODE |
| LOW⚡ | scripts/release/test_asana_release_utils.py | 678 | def test_leaves_placeholder_when_base_url_missing(self): | CODE |
| LOW⚡ | scripts/release/test_asana_release_utils.py | 683 | def test_leaves_notes_unchanged_when_placeholder_absent(self): | CODE |
| LOW⚡ | scripts/release/test_asana_release_utils.py | 687 | def test_never_raises_on_unexpected_failure(self): | CODE |
| LOW | scripts/release/test_asana_release_utils.py | 172 | def test_skips_unresolvable_hashes(self, mock_repo_cls): | CODE |
| LOW | scripts/release/test_asana_release_utils.py | 221 | def test_url_with_query_params(self): | CODE |
| LOW | scripts/release/test_asana_release_utils.py | 333 | def test_words_joined_with_flexible_whitespace(self): | CODE |
| LOW | scripts/release/test_asana_release_utils.py | 337 | def test_slash_gets_flexible_whitespace(self): | CODE |
| LOW | scripts/release/test_asana_release_utils.py | 356 | def test_excludes_task_shipped_in_hotfix_tag_merged_back_to_develop( | CODE |
| LOW | scripts/release/test_asana_release_utils.py | 378 | def test_no_shipped_tags_yields_empty_set( | CODE |
| LOW | scripts/release/test_asana_release_utils.py | 394 | def test_task_shipped_in_prior_release_is_excluded( | CODE |
| LOW | scripts/release/test_asana_release_utils.py | 412 | def test_no_prior_tag_still_walks_forward_from_earliest( | CODE |
| LOW | scripts/release/test_asana_release_utils.py | 430 | def test_unrecognized_start_tag_fails_safe_without_walking_history( | CODE |
| LOW | scripts/release/test_asana_release_utils.py | 446 | def test_single_tag_returns_empty(self, mock_tags, mock_prior, mock_commits): | CODE |
| LOW | scripts/release/test_asana_release_utils.py | 496 | def test_filters_out_already_shipped_task(self): | CODE |
| LOW | scripts/release/test_asana_release_utils.py | 513 | def test_no_overlap_keeps_all_new_tasks(self): | CODE |
| LOW | scripts/release/test_asana_release_utils.py | 529 | def test_start_tag_override_used_as_start(self): | CODE |
| 20 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …ckchat/impl/clearing/DuckChatDataClearingPluginTest.kt | 76 | // ── Regular mode via AllForMode(REGULAR) ────────────────────────────────── | COMMENT |
| MEDIUM | …ckchat/impl/clearing/DuckChatDataClearingPluginTest.kt | 125 | // ── DuckChats.All routes to both modes ──────────────────────────────────── | COMMENT |
| MEDIUM | …ckchat/impl/clearing/DuckChatDataClearingPluginTest.kt | 151 | // ── Fire mode — AllForMode(FIRE) ────────────────────────────────────────── | COMMENT |
| MEDIUM | …ckchat/impl/clearing/DuckChatDataClearingPluginTest.kt | 176 | // ── Fire mode — SelectedForMode(FIRE) ───────────────────────────────────── | COMMENT |
| MEDIUM | …uckduckgo/duckchat/internal/store/DuckAiDebugServer.kt | 457 | // ── Collapsible sections ───────────────────────────────────────────── | COMMENT |
| MEDIUM | …uckduckgo/duckchat/internal/store/DuckAiDebugServer.kt | 465 | // ── Load ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …uckduckgo/duckchat/internal/store/DuckAiDebugServer.kt | 605 | // ── CRUD ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …uckduckgo/duckchat/internal/store/DuckAiDebugServer.kt | 700 | // ── Setting edit modal ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | …uckduckgo/duckchat/internal/store/DuckAiDebugServer.kt | 717 | // ── Chat edit modal ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …uckduckgo/duckchat/internal/store/DuckAiDebugServer.kt | 742 | // ── File preview modal ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | …uckduckgo/duckchat/internal/store/DuckAiDebugServer.kt | 808 | // ── Modal helpers ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …uckduckgo/duckchat/internal/store/DuckAiDebugServer.kt | 812 | // ── Utilities ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | .maestro/performance/page_load_warm.yaml | 18 | # ── Cold load (cache seed) ──────────────────────────────────────── | COMMENT |
| MEDIUM | .maestro/performance/page_load_warm.yaml | 21 | # ── Warm loads ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …java/com/duckduckgo/app/anr/ndk/NativeCrashInitTest.kt | 66 | // ── Process routing ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …java/com/duckduckgo/app/anr/ndk/NativeCrashInitTest.kt | 104 | // ── Feature toggles ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …java/com/duckduckgo/app/anr/ndk/NativeCrashInitTest.kt | 127 | // ── Handler registered pixel ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | …java/com/duckduckgo/app/anr/ndk/NativeCrashInitTest.kt | 150 | // ── onCrash pixel ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …java/com/duckduckgo/app/anr/ndk/NativeCrashInitTest.kt | 190 | // ── Helpers ─────────────────────────────────────────────────────────────── | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …o/eventhub/impl/pixels/RealEventHubPixelManagerTest.kt | 1270 | // Step 1: config [1] loads — both pixels registered with 60s/120s periods | COMMENT |
| LOW | …o/eventhub/impl/pixels/RealEventHubPixelManagerTest.kt | 1289 | // Step 2: config [2] loads — pixels A and B still use config [1] | COMMENT |
| LOW | …o/eventhub/impl/pixels/RealEventHubPixelManagerTest.kt | 1315 | // Step 3: pixel A fires — new cycle uses config [2], pixel B still on config [1] | COMMENT |
| LOW | …o/eventhub/impl/pixels/RealEventHubPixelManagerTest.kt | 1334 | // Step 4: config [3] loads — pixel A on [2], pixel B still on [1] | COMMENT |
| LOW | …o/eventhub/impl/pixels/RealEventHubPixelManagerTest.kt | 1353 | // Step 5: pixel B fires — new cycle uses config [3] | COMMENT |
| LOW⚡ | …einput/discovery/InputScreenDiscoveryFunnelImplTest.kt | 324 | // Step 1: Settings seen | COMMENT |
| LOW⚡ | …einput/discovery/InputScreenDiscoveryFunnelImplTest.kt | 328 | // Step 2: Feature enabled | COMMENT |
| LOW⚡ | …einput/discovery/InputScreenDiscoveryFunnelImplTest.kt | 332 | // Step 3: Omnibar interacted | COMMENT |
| LOW⚡ | …einput/discovery/InputScreenDiscoveryFunnelImplTest.kt | 336 | // Step 4: Search submitted | COMMENT |
| LOW⚡ | …einput/discovery/InputScreenDiscoveryFunnelImplTest.kt | 340 | // Step 5: Prompt submitted | COMMENT |
| LOW⚡ | …ckduckgo/duckchat/impl/clearing/RealDuckChatDeleter.kt | 241 | // Step 1: Load empty HTML with base URL | COMMENT |
| LOW⚡ | …ckduckgo/duckchat/impl/clearing/RealDuckChatDeleter.kt | 246 | // Step 2: Wait for page load | COMMENT |
| LOW⚡ | …ckduckgo/duckchat/impl/clearing/RealDuckChatDeleter.kt | 249 | // Step 3: Wait for duckAiClearDataReady notification | COMMENT |
| LOW⚡ | …ckduckgo/duckchat/impl/clearing/RealDuckChatDeleter.kt | 252 | // Step 4: Send duckAiClearData subscription with chatId params | COMMENT |
| LOW | …ckduckgo/duckchat/impl/clearing/RealDuckChatDeleter.kt | 265 | // Step 5: Wait for duckAiClearDataCompleted or duckAiClearDataFailed | COMMENT |
| LOW⚡ | …o/autofill/store/keys/RealSecureStorageKeyStoreTest.kt | 870 | // Step 1: Write key in multi-process mode | COMMENT |
| LOW⚡ | …o/autofill/store/keys/RealSecureStorageKeyStoreTest.kt | 879 | // Step 2: Disable feature and create new instance | COMMENT |
| LOW⚡ | …o/autofill/store/keys/RealSecureStorageKeyStoreTest.kt | 885 | // Step 3: Read key - should come from legacy | COMMENT |
| LOW | …degen/ksp/ContributesActivePluginPointProcessorTest.kt | 544 | // Step 1: Simulate Module B having produced a deferred marker for a | COMMENT |
| LOW | …degen/ksp/ContributesActivePluginPointProcessorTest.kt | 556 | // Step 2: Simulate Module A having produced a sentinel for "pluginPointFoo" | COMMENT |
| LOW | …degen/ksp/ContributesActivePluginPointProcessorTest.kt | 571 | // Step 3: "App" module has its own plugin point (so Phase 2 fires) and sees | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …pir-impl/src/main/assets/brokers/peoplelooker.com.json | 96 | "selector": "#comprehensive-form", | CODE |
| MEDIUM | …pir-impl/src/main/assets/brokers/peoplelooker.com.json | 103 | "selector": "#comprehensive-form", | CODE |
| MEDIUM | …pir-impl/src/main/assets/brokers/peoplelooker.com.json | 131 | "selector": "#comprehensive-form", | CODE |
| MEDIUM | …/pir-impl/src/main/assets/brokers/neighborwho.com.json | 105 | "selector": "#comprehensive-form", | CODE |
| MEDIUM | …/pir-impl/src/main/assets/brokers/neighborwho.com.json | 112 | "selector": "#comprehensive-form", | CODE |
| MEDIUM | …/pir-impl/src/main/assets/brokers/neighborwho.com.json | 140 | "selector": "#comprehensive-form", | CODE |
| MEDIUM | …pir-impl/src/main/assets/brokers/beenverified.com.json | 160 | "selector": "#comprehensive-form", | CODE |
| MEDIUM | …pir-impl/src/main/assets/brokers/beenverified.com.json | 167 | "selector": "#comprehensive-form", | CODE |
| MEDIUM | …pir-impl/src/main/assets/brokers/beenverified.com.json | 195 | "selector": "#comprehensive-form", | CODE |
| MEDIUM | …pir-impl/src/main/assets/brokers/beenverified.com.json | 349 | "selector": "#comprehensive-form", | CODE |
| MEDIUM | …pir-impl/src/main/assets/brokers/beenverified.com.json | 356 | "selector": "#comprehensive-form", | CODE |
| MEDIUM | …pir-impl/src/main/assets/brokers/beenverified.com.json | 384 | "selector": "#comprehensive-form", | CODE |
| MEDIUM | …omptscoordinator/impl/ModalEvaluatorCoordinatorTest.kt | 294 | // Timestamps keep recording regardless of the flag so kill-switch flips stay seamless. | COMMENT |
| MEDIUM | …o/promptscoordinator/impl/ModalEvaluatorCoordinator.kt | 121 | // Recorded either way so kill-switch flips stay seamless. | COMMENT |
| MEDIUM | .github/actions/assign-release-task/action.yml | 48 | # Using jq to extract the task_id - ensure it's robust | COMMENT |
| MEDIUM | …ava/com/duckduckgo/sync/impl/RealSyncCodeDispatcher.kt | 590 | // to a genuine v1 code so the parseSyncAuthCode round-trip stays robust. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …a/com/duckduckgo/settings/api/HideAiGeneratedImages.kt | 36 | // The SERP key carrying the hide-AI-generated-images value in the serpSettings blob. | COMMENT |
| HIGH | …/duckchat/impl/ui/settings/DuckChatSettingsActivity.kt | 168 | // AI-generated images are hidden, there is nothing left to do, so it's greyed out, non-tappable, | COMMENT |
| HIGH | …duckchat/impl/ui/settings/DuckChatSettingsViewModel.kt | 139 | // Search Assist is Never and AI-generated images are hidden, there's nothing left to do. | COMMENT |
| HIGH | …duckchat/impl/ui/settings/DuckChatSettingsViewModel.kt | 203 | // Turn off Duck.ai, silence Search Assist, and hide AI-generated images in one tap. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/src/main/res/raw/inject_alias.js | 1 | // | COMMENT |
| LOW | app/src/main/res/raw/url_extraction.js | 1 | // | COMMENT |
| LOW | app/src/main/res/raw/signout_autofill.js | 1 | // | COMMENT |
| LOW | app/src/main/res/raw/blob_converter.js | 1 | // | COMMENT |
| LOW | …/generalsettings/showonapplaunch/FirstScreenHandler.kt | 81 | private val tabRepository: TabRepository | COMMENT |
| LOW | …hat/impl/ui/nativeinput/views/NativeInputModeWidget.kt | 401 | // never reset. Used to prevent the shared per-tab NativeInputStateProvider from leaking | COMMENT |
| LOW | …hat/impl/ui/nativeinput/views/NativeInputModeWidget.kt | 1281 | inputMode = inputMode, | COMMENT |
| LOW | scripts/dump_all_symbols.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/gen_breakpad_symbols.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/check_elf_alignment.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | .github/workflows/android-maintenance-worker.lock.yml | 1 | # ___ _ _ | COMMENT |
| LOW | .github/workflows/android-maintenance-worker.lock.yml | 721 | run: bash ${RUNNER_TEMP}/gh-aw/actions/clean_git_credentials.sh | COMMENT |
| LOW | .github/workflows/android-maintenance-worker.lock.yml | 741 | # - mcp__github__get_code_scanning_alert | COMMENT |
| LOW | .github/workflows/android-maintenance-worker.lock.yml | 761 | # - mcp__github__get_tag | COMMENT |
| LOW | .github/workflows/android-maintenance-worker.lock.yml | 781 | # - mcp__github__list_workflow_jobs | COMMENT |
| LOW | .github/workflows/android-maintenance-worker.lock.yml | 1181 | # Allowed tools (sorted): | COMMENT |
| LOW | .github/workflows/workflow-failure-classifier.lock.yml | 1 | # ___ _ _ | COMMENT |
| LOW | .github/workflows/workflow-failure-classifier.lock.yml | 421 | # - NotebookEdit | COMMENT |
| LOW | .github/workflows/workflow-failure-classifier.lock.yml | 441 | # - mcp__github__get_pull_request_diff | COMMENT |
| LOW | .github/workflows/workflow-failure-classifier.lock.yml | 461 | # - mcp__github__list_label | COMMENT |
| LOW | .github/workflows/drift-audit.lock.yml | 1 | # ___ _ _ | COMMENT |
| LOW | .github/workflows/drift-audit.lock.yml | 561 | name: activation | COMMENT |
| LOW | .github/workflows/drift-audit.lock.yml | 581 | # - Task | COMMENT |
| LOW | .github/workflows/drift-audit.lock.yml | 601 | # - mcp__github__get_pull_request_reviews | COMMENT |
| LOW | .github/workflows/drift-audit.lock.yml | 621 | # - mcp__github__list_releases | COMMENT |
| LOW | .github/actions/develocity-runner-info/action.yml | 21 | # shell runs, so a value containing a newline or shell metacharacter could otherwise | COMMENT |
| LOW | …obile/android/vpn/service/TrackerBlockingVpnService.kt | 841 | // | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | scripts/release/create-asana-internal-release.py | 44 | # Create the task | COMMENT |
| MEDIUM | scripts/release/create-asana-internal-release.py | 141 | # Create the Asana task with the tag name | COMMENT |
| MEDIUM | scripts/release/create-asana-hotfix-release.py | 162 | # Create the Asana hotfix task by duplicating the release template. | COMMENT |
| MEDIUM | scripts/release/create-asana-public-release.py | 67 | # Create the Asana release task | COMMENT |
| MEDIUM | .github/workflows/hotfix_orchestrator.yml | 33 | # Create the Asana hotfix tracking task up-front; mirrors the manual "task first, then tag" order | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/ps-analysis/ps_review_anomaly.py | 58 | except Exception as e: | CODE |
| LOW | scripts/release/create-asana-internal-release.py | 148 | except Exception as e: | CODE |
| LOW | scripts/release/asana_release_utils.py | 196 | except Exception as e: | CODE |
| LOW | scripts/release/asana_release_utils.py | 221 | except Exception as e: | CODE |
| LOW | scripts/release/asana_release_utils.py | 347 | except Exception as e: | CODE |
| LOW | scripts/release/asana_release_utils.py | 468 | except Exception as e: | CODE |
| LOW | scripts/release/asana_release_utils.py | 487 | except Exception as e: | CODE |
| LOW | scripts/release/collect-lgc-asana-tasks.py | 86 | except Exception as e: | CODE |
| LOW | scripts/release/create-asana-hotfix-release.py | 186 | except Exception as e: | CODE |
| LOW | scripts/release/create-asana-public-release.py | 90 | except Exception as e: | CODE |
| LOW | build-benchmarks/run-benchmark.py | 238 | except Exception as e: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/ps-analysis/ps_review_anomaly.py | 8 | CODE | |
| LOW | scripts/ps-analysis/ps_review_anomaly.py | 143 | CODE | |
| LOW | scripts/pir-broker-update/update_pir_brokers.py | 62 | CODE | |
| LOW | build-benchmarks/run-benchmark.py | 85 | CODE | |
| LOW | build-benchmarks/run-benchmark.py | 145 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/ps-analysis/ps_review_anomaly.py | 1 | CODE | |
| LOW | scripts/release/test_asana_release_utils.py | 5 | CODE | |
| LOW | scripts/piranha/clean.py | 4 | CODE | |
| LOW | scripts/piranha/clean.py | 4 | CODE | |
| LOW | build-benchmarks/run-benchmark.py | 19 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .github/actionlint.yaml | 7 | # gh-aw agentic workflows compile to `*.lock.yml` (generated, "DO NOT EDIT"). | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .github/actions/check-for-changes-since-tag/action.yml | 20 | # Check if there are any new commits since the tag | COMMENT |
| LOW | .github/actions/assign-release-task/action.yml | 68 | # Check if the assignment was successful | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/piranha/clean.py | 11 | logger = logging.getLogger(__name__) | CODE |