AI Slop Code Risk Monitor

freelensapp/freelens

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

Free IDE for Kubernetes

0.5 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for freelensapp/freelens, a TypeScript project with 5,763 GitHub stars. SynthScan examined 306,399 lines of code across 4601 source files, recording 149 pattern matches distributed across 4 syntactic categories. The legacy adjusted pattern signal is 0.5 (Low pattern signal); it is not an authorship estimate.

Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.

0.5
Adjusted Signal
0.5
Raw Pattern Score
100%
Time Factor
2026-10-31
Last Push
5.8K
Stars
TypeScript
Language
306.4K
Lines of Code
4.6K
Files
149
Pattern Hits
2026-10-31
Scan Date
0.00
HC Hit Rate

Risk Review · Payload v1

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

Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.

Cognitive Ownership Risk 2.5/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.1/100 · LOW

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

Agent Over-Engineering Ratio 1.5/100 · LOW

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

PR Review Velocity Impact 2.4/100 · LOW

Which changes need focused human review? 149 finding(s).

What These Metrics Mean

Adjusted Signal
Legacy pattern score normalized per 1,000 scanned lines and multiplied by the repository-level time factor. It is not an estimate of AI authorship.
Raw Pattern Score
Sum of severity- and context-weighted pattern findings before applying the time factor.
Time Factor
A coarse multiplier based on repository last-push metadata. It does not identify when individual code was written.
Pattern Hits
Count of configured pattern findings. Review each location and surrounding code before acting.
HC Hit Rate
High- and critical-severity findings per scanned file. Severity is a configured detector weight, not proof of a vulnerability or authorship.
Lines / Files
Scan coverage denominators used by the legacy normalized score.

Pattern-Signal History

This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.

Severity Breakdown

Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.

CRITICAL 0HIGH 0MEDIUM 1LOW 148

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 149 distinct pattern matches across 4 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.

Hyper-Verbose Identifiers84 hits · 90 pts
SeverityFileLineSnippetContext
LOWfreelens/electron.vite.config.ts98function rewriteElectronNamedImportsPlugin() {CODE
LOWfreelens/electron.vite.config.ts212function runtimeRequireExternalsPlugin() {CODE
LOWfreelens/integration/helpers/utils.ts155export async function launchKindClusterFromCatalog(kindClusterName: string, window: Page): Promise<Frame> {CODE
LOWpackages/ensure-binaries/src/verify.ts255async function verifyHelmWindowsSignature(artifact: Artifact, artifactPath: string, workDir: string): Promise<string> {CODE
LOWpackages/ensure-binaries/src/lock.ts161export function assertLockMatchesVersions(lock: BinariesLock, versions: ToolVersions, pathToLock: string): void {CODE
LOWpackages/generate-license/src/index.ts34async function getDependenciesFromPnpmApi(prod: boolean) {CODE
LOW…src/renderer/components/cluster/cluster-no-metrics.tsx25export function NonInjectedClusterNoMetrics({CODE
LOW…/src/renderer/components/cluster/metrics-time-range.ts8function parseDateTimeLocalToUnixSeconds(value: string): number | undefined {CODE
LOW…/src/renderer/components/cluster/metrics-time-range.ts40export function formatMetricsDateTimeLocal(date: Date) {CODE
LOW…/src/renderer/components/cluster/metrics-time-range.ts50export function validateCustomMetricsTimeRange({CODE
LOW…renderer/components/cluster/overview/time-range-key.ts8export function createMetricsTimeRangeKey({ duration, customStart, customEnd }: MetricsTimeRange) {CODE
LOW…ts/network-ingresses/ingress-class-menu.injectable.tsx31export function NonInjectedIngressClassMenu(props: IngressClassMenuProps & Dependencies) {CODE
LOW…ts/network-ingresses/ingress-class-menu.injectable.tsx34 function markItemAsDefaultIngressClass() {CODE
LOW…/components/kube-object-link/link-to-storage-class.tsx26function NonInjectedLinkToStorageClass({CODE
LOW…/components/kube-object-link/link-to-runtime-class.tsx26function NonInjectedLinkToRuntimeClass({CODE
LOW…rer/components/kube-object-link/link-to-config-map.tsx27function NonInjectedLinkToConfigMap({CODE
LOW…omponents/kube-object-link/link-to-service-account.tsx27function NonInjectedLinkToServiceAccount({CODE
LOW…er/components/kube-object-link/link-to-replica-set.tsx27function NonInjectedLinkToReplicaSet({CODE
LOW…components/kube-object-link/link-to-priority-class.tsx26function NonInjectedLinkToPriorityClass({CODE
LOW…erer/components/kube-object-link/link-to-namespace.tsx26function NonInjectedLinkToNamespace({CODE
LOW…r/components/kube-object-link/link-to-cluster-role.tsx26function NonInjectedLinkToClusterRole({CODE
LOW…core/src/renderer/components/input/input_validators.ts101export function unionInputValidatorsAsync(CODE
LOW…enderer/components/catalog/hotbar-toggle-menu-item.tsx29function NonInjectedHotbarToggleMenuItem({CODE
LOW…derer/components/namespaces/namespace-select-badge.tsx29export function NamespaceSelectBadgeNonInjected({CODE
LOW…-select-filter-model/namespace-select-filter-model.tsx55export function namespaceSelectFilterModelFor(dependencies: Dependencies): NamespaceSelectFilterModel {CODE
LOW…e/registered-commands/internal-commands.injectable.tsx27export function isKubernetesClusterActive(context: CommandContext): boolean {CODE
LOW…ents/cluster-settings/namespace-auth-check-setting.tsx17export const NamespaceAuthCheckSetting = observer(function NamespaceAuthCheckSetting({CODE
LOW…re/src/renderer/components/workloads-cronjobs/utils.ts18export function getScheduleFullDescription(cronJob: CronJob): string {CODE
LOW…ernal-kubernetes-cluster/proxy-settings.injectable.tsx20function NonInjectedProxyKubernetesClusterSettings({ entity, getClusterById }: EntitySettingViewProps & Dependencies) {CODE
LOW…-kubernetes-cluster/node-shell-settings.injectable.tsx20function NonInjectedNodeShellKubernetesClusterSettings({CODE
LOW…al-kubernetes-cluster/terminal-settings.injectable.tsx20function NonInjectedTerminalKubernetesClusterSettings({CODE
LOW…nal-kubernetes-cluster/general-settings.injectable.tsx23function NonInjectedGeneralKubernetesClusterSettings({CODE
LOW…l-kubernetes-cluster/namespace-settings.injectable.tsx21function NonInjectedNamespaceKubernetesClusterSettings({CODE
LOW…nal-kubernetes-cluster/metrics-settings.injectable.tsx22function NonInjectedMetricsKubernetesClusterSettings({CODE
LOW…untime-classes/runtime-classes-details-tolerations.tsx22export function RuntimeClassDetailsTolerations({ runtimeClass: runtimeClass }: RuntimeClassDetailsTolerationsProps) {CODE
LOW…r-management/service-accounts/service-account-menu.tsx21function NonInjectedServiceAccountMenu(props: KubeObjectMenuProps<ServiceAccount> & Dependencies) {CODE
LOW…edit-resource-model/edit-resource-model.injectable.tsx101function getPodResizePatchContainer(container: Container): PodResizePatchContainer {CODE
LOW…edit-resource-model/edit-resource-model.injectable.tsx161function setEditResourceVersionAnnotation(object: RawKubeObject) {CODE
LOW…derer/components/dock/logs/default-container-helper.ts8export function findOptimalDefaultContainerOfPod(pod: Pod): Container | EphemeralContainer {CODE
LOW…derer/components/dock/logs/default-container-helper.ts12export function findOptimalDefaultContainer(CODE
LOW…r/components/dock/logs/get-timestamped-log-filename.ts6export function getTimestampedLogFilename(prefix: string): string {CODE
LOW…c/renderer/components/dock/logs/__test__/test-utils.ts17export function initializeDefaultLogViewerPreferences(userPreferencesState: UserPreferencesState) {CODE
LOW…c/renderer/components/dock/logs/__test__/test-utils.ts21export function getDefaultOnePodLogTabData(overrides: Partial<LogTabData> = {}): LogTabData {CODE
LOW…c/renderer/components/dock/logs/__test__/test-utils.ts32export function createMockLogTabViewModel(CODE
LOWpackages/core/src/renderer/ipc/index.ts47export function emitOpenAppMenuAsContextMenu(): void {CODE
LOWpackages/core/src/renderer/ipc/index.ts54export function emitWindowLocationChanged(location: Partial<Location>): void {CODE
LOW⚡packages/core/src/renderer/ipc/index.ts66export function requestInitialClusterStates(): Promise<{ id: string; state: ClusterState }[]> {CODE
LOW⚡packages/core/src/renderer/ipc/index.ts70export function requestInitialExtensionDiscovery(): Promise<{ isLoaded: boolean }> {CODE
LOW⚡packages/core/src/renderer/ipc/index.ts74export function requestExtensionLoaderInitialState(): Promise<[LensExtensionId, InstalledExtension][]> {CODE
LOW⚡packages/core/src/renderer/ipc/index.ts78export function requestExtensionLoaderMainLoadFailures(): Promise<[LensExtensionId, ExtensionLoadFailure][]> {CODE
LOW⚡packages/core/src/renderer/ipc/index.ts82export function requestExtensionLoaderSetIsEnabled(extensionId: LensExtensionId, isEnabled: boolean): Promise<void> {CODE
LOW⚡packages/core/src/renderer/ipc/index.ts86export function requestExtensionLoaderTornDown(extensionId: LensExtensionId): Promise<void> {CODE
LOW…ster-enumeration/__tests__/cluster-enumeration.test.ts12function createRendererEnumeration(clusters: KubernetesCluster[], activeId?: string) {CODE
LOW…es/core/src/features/cluster/execute/common/testing.ts59export function createMockProxyKubeconfig(options: MockProxyKubeconfigOptions) {CODE
LOW…c/features/hotbar/storage/common/storage.injectable.ts104function ensureExactHotbarItemLength(hotbar: Hotbar) {CODE
LOW…ensions/loader/renderer/require-deprecation-warning.ts66export function createRequireDeprecationWarning(CODE
LOW…ensions/loader/renderer/require-deprecation-warning.ts106export function installRequireDeprecationWarning(CODE
LOW…src/features/extensions/loader/common/build-segment.ts32export function isDevelopmentBuildSegment(segment: string): boolean {CODE
LOW…/src/features/extensions/installer/common/checksums.ts49export function verifySubresourceIntegrity(data: Buffer, integrity: string): ChecksumMismatch | undefined {CODE
LOW…tures/extensions/installer/common/version-directory.ts36export function parseVersionDirectoryName(name: string): ParsedVersionDirectory | undefined {CODE
24 more matches not shown…
Over-Commented Block61 hits · 61 pts
SeverityFileLineSnippetContext
LOWvitest.electron-stub.ts1/**COMMENT
LOWvitest.config.ts21 .map((p) => join(root, dirname(p)))COMMENT
LOWpnpm-workspace.yaml181COMMENT
LOWpnpm-workspace.yaml201 # monaco-editor pins dompurify 3.4.15, which GHSA-cg2g-xh64-v4q7 affects, andCOMMENT
LOWfreelens/electron.vite.config.ts1/**COMMENT
LOWfreelens/electron.vite.config.ts41COMMENT
LOWfreelens/electron.vite.config.ts61// NODE_ENV=development while still running `electron-vite build`, so this keysCOMMENT
LOWfreelens/electron.vite.config.ts81COMMENT
LOWfreelens/electron.vite.config.ts141// `length` and `name`. A `prototype` named export then makes Rollup'sCOMMENT
LOWfreelens/electron.vite.config.ts261 // the bundler cannot recognise a static require() call. Under Vite 8COMMENT
LOWfreelens/electron.vite.config.ts421 emptyOutDir: false,COMMENT
LOWfreelens/electron-builder.yml21 - "!node_modules/electron"COMMENT
LOWfreelens/src/freelens-extension-api.ts1/**COMMENT
LOWfreelens/src/renderer/index.ts81// the contract -- the modules an extension must share with the host ratherCOMMENT
LOWfreelens/src/main/index.ts61// The global's ambient type lives in `../freelens-extension-api.ts`.COMMENT
LOW.trunk/trunk.yaml61 # See https://github.com/trunk-io/plugins/pull/1063COMMENT
LOW…check-environments/renderer-type-roots/node/index.d.ts1/**COMMENT
LOWpackages/core/__mocks__/selfsigned.ts1/**COMMENT
LOWpackages/core/src/vitest.setup.tsx61// entry, so neither externalization nor vi.mock automocking can load it.COMMENT
LOWpackages/core/src/vitest-after-env.setup.ts21// @testing-library/dom): otherwise `waitFor` falls back to a real-timerCOMMENT
LOWpackages/core/src/extensions/renderer-api/k8s-api.ts141export { detailsFor, menuItemFor } from "./kube-object-registrations";COMMENT
LOW…es/core/src/extensions/__tests__/extension-api.test.ts1/**COMMENT
LOW…es/core/src/extensions/__tests__/extension-api.test.ts21// `renderer-api/components.ts`. #2366 then tried the thorough version of theCOMMENT
LOW…nsions/__tests__/extension-api-declared-values.test.ts1/**COMMENT
LOW…nsions/__tests__/extension-api-declared-values.test.ts21// nested in them, and each member it declares as a value has to be a key of theCOMMENT
LOW…s/core/src/extensions/__tests__/extension-api.types.ts1/**COMMENT
LOW…s/core/src/extensions/__tests__/extension-api.types.ts21// that reason.COMMENT
LOW…nsions/__tests__/extension-registration-moment.test.ts1/**COMMENT
LOW…re/src/extensions/__tests__/fixture-extension.test.tsx1/**COMMENT
LOW…re/src/extensions/__tests__/fixture-extension.test.tsx21// while the extension carries a duplicate. The reactivity is asserted allCOMMENT
LOW…core/src/extensions/api-globals/renderer-singletons.ts1/**COMMENT
LOW…core/src/extensions/api-globals/renderer-singletons.ts21//COMMENT
LOW…rc/extensions/api-globals/global-name-for-module-id.ts1/**COMMENT
LOW…ges/core/src/extensions/api-globals/main-singletons.ts1/**COMMENT
LOW…ges/core/src/extensions/api-globals/main-singletons.ts21// container is not shared with extensions, so its registry identity is nothingCOMMENT
LOW…ges/core/src/extensions/api-globals/main-singletons.ts41//COMMENT
LOW…re/src/extensions/extension-loader/extension-loader.ts141 // when its element is taken out again: see `removeInjectedStyles`.COMMENT
LOW…re/src/extensions/extension-loader/extension-loader.ts161 // flight, and the extension would end up running the older build under theCOMMENT
LOW…re/src/extensions/extension-loader/extension-loader.ts901COMMENT
LOW…re/src/extensions/extension-loader/extension-loader.ts1021 for (const fileName of candidates) {COMMENT
LOW…ons/extension-loader/extension/extension.injectable.ts21// An extension's own view of the host's DI container: injecting this createsCOMMENT
LOWpackages/core/src/extensions/common-api/k8s-api.ts121 type SecretReference as ISecretRef,COMMENT
LOWpackages/core/src/common/utils/registrator-helper.ts1/**COMMENT
LOWpackages/fixture-extension/src/renderer/index.tsx1/**COMMENT
LOW…ixture-extension/src/renderer/registration-pairings.ts1/**COMMENT
LOWpackages/fixture-extension/src/common/contract-types.ts1/**COMMENT
LOWpackages/extensions/src/extension-api.ts1/**COMMENT
LOWpackages/extensions/src/extension-api.ts21// This module is never executed in the workspace (the package's runtime entryCOMMENT
LOW…ckages/utility-features/test-utils/src/act-async-fn.ts21// resulting `.then(setState)` fires outside `act()` and is neither committed norCOMMENT
LOW…/utility-features/utilities/src/kustomize-hash.test.ts61 "76k6bhg66g",COMMENT
LOWpackages/utility-features/utilities/src/prevDefault.ts1/**COMMENT
LOW.github/workflows/release-scan.yaml1name: Release ScanCOMMENT
LOW.github/workflows/release-scan.yaml161 # Reduce the SBOM to runtime packages before scanning.COMMENT
LOW.github/workflows/release.yaml761 # The "v" is added here, not in SYFT_VERSION: the installer resolvesCOMMENT
LOW.github/workflows/publish-npm.yaml1name: Publish npmCOMMENT
LOW.github/workflows/claude.yaml1# Claude Code – on-demand assistant via @claude in PRs and issuesCOMMENT
LOW.github/workflows/claude.yaml21# - Every marker resolves to a value from a fixed list or a strict pattern,COMMENT
LOW.github/workflows/release-apt-repository.yaml1name: Release APT repositoryCOMMENT
LOW.github/workflows/integration-tests.yaml601 fiCOMMENT
LOW.github/workflows/integration-tests.yaml681 ' > sbom-paths.jsonCOMMENT
1 more matches not shown…
Fake / Example Data3 hits · 3 pts
SeverityFileLineSnippetContext
LOW…omponents/render-delay/__tests__/render-delay.test.tsx74 <RenderDelay placeholder={<div data-testid="placeholder"></div>}>CODE
LOW…omponents/render-delay/__tests__/render-delay.test.tsx89 expect(result.queryByTestId("placeholder")).toBeInTheDocument();CODE
LOW…omponents/render-delay/__tests__/render-delay.test.tsx106 expect(result.queryByTestId("placeholder")).not.toBeInTheDocument();CODE
AI Slop Vocabulary1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUMpackages/core/src/renderer/components/chart/chart.tsx174 // Mutating inner chart datasets to enable seamless transitionsCOMMENT