AI Slop Code Risk Monitor

evcc-io/evcc

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

smart charging ☀️🚘

0.7 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for evcc-io/evcc, a Go project with 7,484 GitHub stars. SynthScan examined 452,166 lines of code across 2879 source files, recording 258 pattern matches distributed across 7 syntactic categories. The legacy adjusted pattern signal is 0.7 (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.7
Adjusted Signal
0.7
Raw Pattern Score
100%
Time Factor
2026-10-31
Last Push
7.5K
Stars
Go
Language
452.2K
Lines of Code
2.9K
Files
258
Pattern Hits
2026-10-31
Scan Date
0.00
HC Hit Rate

Risk Review · Payload v1

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

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

Cognitive Ownership Risk 2.9/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.3/100 · LOW

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

Agent Over-Engineering Ratio 0.1/100 · LOW

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

PR Review Velocity Impact 3.1/100 · LOW

Which changes need focused human review? 258 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 1HIGH 0MEDIUM 10LOW 247

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 258 distinct pattern matches across 7 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.

Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.

Over-Commented Block205 hits · 205 pts
SeverityFileLineSnippetContext
LOWevcc.dist.yaml1network:COMMENT
LOWevcc.dist.yaml21# telemetry enables aggregated statisticsCOMMENT
LOWevcc.dist.yaml41 db: errorCOMMENT
LOWevcc.dist.yaml161 # co2 tariff provides co2 intensity forecast and is for co2-optimized target charging if no variable grid tariff is COMMENT
LOWevcc.dist.yaml181influx:COMMENT
LOWevcc.dist.yaml221 title: Plan overrunCOMMENT
LOWcore/loadpoint.go2321}COMMENT
LOWcore/site_tariffs.go261// solarScale computes a scale factor for the solar forecast by sorting the dailyCOMMENT
LOWcore/loadpoint/api.go41 //COMMENT
LOWcore/loadpoint/api.go61 // SetDefaultVehicleRef sets the loadpoint default vehicleCOMMENT
LOWcore/loadpoint/api.go141COMMENT
LOWvehicle/tronity.go1package vehicleCOMMENT
LOWvehicle/ford/connect/provider.go81}COMMENT
LOWvehicle/mercedes/pb/client.pb.go21 _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)COMMENT
LOWvehicle/mercedes/pb/client.pb.go41 // *ClientMessage_AcknowledgeUserDataUpdateCOMMENT
LOWvehicle/mercedes/pb/vehicle-events.pb.go781 // *VehicleAttributeStatus_GasConsumptionUnit_COMMENT
LOWvehicle/mercedes/pb/vehicle-events.pb.go2441 //COMMENT
LOWvehicle/mercedes/pb/vehicle-commands.pb.go1001// with the process id.COMMENT
LOWvehicle/mercedes/pb/vehicle-commands.pb.go1021 // *CommandRequest_SunroofCloseCOMMENT
LOWvehicle/mercedes/pb/vehicle-commands.pb.go1041 // *CommandRequest_ChargeOptStartCOMMENT
LOWvehicle/mercedes/pb/vehicle-commands.pb.go3521 // => only if time profile entry is unchanged, do not provide attribute "id" if new profile entry shall be addedCOMMENT
LOWvehicle/mercedes/pb/acp.pb.go401 // Duplicate value: 18: "atp",COMMENT
LOWvehicle/mercedes/pb/acp.pb.go941 // Duplicate value: 117: "chargeflapUnlock",COMMENT
LOWvehicle/mercedes/pb/acp.pb.go961 // Duplicate value: 560: "engineStop",COMMENT
LOWvehicle/mercedes/pb/acp.pb.go981 // Duplicate value: 945: "dc2ServiceactivationConfigure",COMMENT
LOWvehicle/mercedes/pb/acp.pb.go1001 // Duplicate value: 2020: "chargeprogramconfigure",COMMENT
LOWvehicle/mercedes/pb/acp.pb.go1021 // Duplicate value: 1210: "udxActiveUserProfile",COMMENT
LOWvehicle/mercedes/pb/acp.pb.go1041 // Duplicate value: 1438: "rootCertificateRemove",COMMENT
LOWvehicle/aiways/provider.go81 }COMMENT
LOWvehicle/aiways/types.go41 // DoorOpenStsLf string `json:"doorOpenStsLf"`COMMENT
LOWvehicle/aiways/types.go61 // AutoLightOpenSts string `json:"autoLightOpenSts"`COMMENT
LOWvehicle/aiways/types.go81 // AirconAcSts string `json:"airconAcSts"`COMMENT
LOWvehicle/aiways/types.go101 // ChgConnStsAc string `json:"chgConnStsAc"`COMMENT
LOWvehicle/polestar/pb/polestar_grpc.pb.go1// Code generated by protoc-gen-go-grpc. DO NOT EDIT.COMMENT
LOWvehicle/polestar/pb/polestar.pb.go1// Code generated by protoc-gen-go. DO NOT EDIT.COMMENT
LOWvehicle/vw/eudataact/provider.go21// Provider implements the vehicle api on top of the EU Data Act dataset.COMMENT
LOWutil/sponsor/hemspro.go1//go:build !linuxCOMMENT
LOWutil/sponsor/auth.go1package sponsorCOMMENT
LOWutil/sponsor/docs.go1package sponsorCOMMENT
LOWutil/sponsor/hemspro_linux.go1//go:build linuxCOMMENT
LOWutil/sponsor/hardware.go1package sponsorCOMMENT
LOWutil/sponsor/victron.go1package sponsorCOMMENT
LOWutil/sponsor/pulsares.go1package sponsorCOMMENT
LOWutil/templates/types.go201}COMMENT
LOWutil/templates/template.go381 }COMMENT
LOWcharger/sungrow.go1package chargerCOMMENT
LOWcharger/alpitronic.go1package chargerCOMMENT
LOWcharger/mypv_common.go1package chargerCOMMENT
LOWcharger/foxess-evc.go1package chargerCOMMENT
LOWcharger/sigenergy-evdc.go1package chargerCOMMENT
LOWcharger/versicharge.go1package chargerCOMMENT
LOWcharger/ocpp.go1package chargerCOMMENT
LOWcharger/em2go.go1package chargerCOMMENT
LOWcharger/deye-evse.go1package chargerCOMMENT
LOWcharger/tuya-depow.go1package chargerCOMMENT
LOWcharger/tuya-depow.go21// Tuya model ids differ per product, e.g. e1krltgk for witok7vhhjohtr02. Not all firmware versions report all data poinCOMMENT
LOWcharger/tuya-depow.go41// 108 x_downcounter ro countdown remaining sCOMMENT
LOWcharger/zaptec.go1package chargerCOMMENT
LOWcharger/hesotec.go1package chargerCOMMENT
LOWcharger/_blueprint.go1package chargerCOMMENT
145 more matches not shown…
Slop Phrases11 hits · 22 pts
SeverityFileLineSnippetContext
LOWvehicle/mercedes/pb/vehicle-commands.pb.go336// don't forget to set the field 36 to reserved.COMMENT
MEDIUM.github/workflows/codeql.yml60 # If you are analyzing a compiled language, you can modify the 'build-mode' for that language to customize howCOMMENT
MEDIUMtemplates/definition/charger/demo-charger.yaml9 en: For demonstration purposes. Charger with a fixed set of values.CODE
MEDIUMtemplates/definition/charger/demo-switch.yaml9 en: For demonstration purposes. Switchable device with a fixed set of values.CODE
MEDIUMtemplates/definition/charger/demo-heatpump.yaml9 en: For demonstration purposes. Heat pump with a fixed set of values.CODE
MEDIUM…lates/definition/tariff/demo-temperature-forecast.yaml9 en: For demonstration purposes. Provides outdoor temperature data based on a typical daily cycle.CODE
MEDIUMtemplates/definition/tariff/demo-co2-forecast.yaml9 en: For demonstration purposes. Provides CO₂ intensity data based on typical central european summer values.CODE
MEDIUMtemplates/definition/tariff/demo-solar-forecast.yaml9 en: For demonstration purposes. Provides optimal solar production curve peaking at noon.CODE
MEDIUMtemplates/definition/tariff/demo-dynamic-grid.yaml9 en: For demonstration purposes. Simulates dynamic electricity prices similar to EPEX spot market with typical daily CODE
MEDIUMtemplates/definition/meter/demo-meter.yaml9 en: For demonstration purposes. Meter with a fixed set of values.CODE
MEDIUMtemplates/definition/meter/demo-battery.yaml9 en: For demonstration purposes. Battery with a fixed set of values.CODE
Fake / Example Data19 hits · 19 pts
SeverityFileLineSnippetContext
LOWvehicle/vw/eudataact/api_test.go116 user: "test@example.org",CODE
LOWvehicle/vw/eudataact/api_test.go145 assert.Equal(t, "test@example.org", req.PostForm.Get("email"))CODE
LOWvehicle/livewire/api_test.go34 assert.Equal(t, "user@example.org", r.PostForm.Get("loginID"))CODE
LOWvehicle/livewire/api_test.go68 identity := NewIdentity(util.NewLogger("test"), "user@example.org", "secret", "device-1")CODE
LOWvehicle/bluelink/identity_test.go105 require.NoError(t, identity.Login("user@example.com", tt.password, "en", "kia"))CODE
LOWvehicle/bluelink/identity_test.go128 require.NoError(t, identity.Login("user@example.com", strings.Repeat("A", 48), "en", "kia"))CODE
LOWvehicle/bluelink/identity_test.go192 require.NoError(t, identity.Login("user@example.com", "s3cret-Passw0rd!", "en", "kia"))CODE
LOWvehicle/bluelink/identity_test.go220 err := identity.Login("user@example.com", strings.Repeat("A", 48), "en", "kia")CODE
LOWvehicle/bluelink/identity_test.go238 err := identity.Login("user@example.com", "s3cret-Passw0rd!", "en", "kia")CODE
LOWutil/templates/defaults.yaml70 example: "user@example.com"CODE
LOWtests/config-loadpoint.spec.ts56 await expect(lpModal.getByLabel("Title")).not.toHaveAttribute("placeholder");CODE
LOWtests/issue.spec.ts44 expect(configContent).not.toContain("test@example.org");CODE
LOWtests/config-template-defaults.spec.ts52 await expect(power).toHaveAttribute("placeholder", "1000");CODE
LOWtemplates/definition/tariff/octopus-de.yaml16 example: "user@example.com"CODE
LOWtemplates/definition/tariff/octopus-it.yaml16 example: "user@example.com"CODE
LOWi18n/de.json1050 "placeholder": "Token einfügen",CODE
LOWi18n/en.json1050 "placeholder": "Paste token",CODE
LOWassets/js/utils/placeholder.test.ts4describe("placeholder", () => {CODE
LOWassets/js/components/Helper/Combobox.vue17 :placeholder="placeholder"CODE
Verbosity Indicators7 hits · 16 pts
SeverityFileLineSnippetContext
LOW⚡templates/definition/meter/indevolt-battery.yaml109 # Step 1: Set Mode to Self-consumed Prioritized (47005=1), which is the default for this batteryCOMMENT
LOW⚡templates/definition/meter/indevolt-battery.yaml115 # Step 2: Also Set Grid Charging Setting to Disable (1143=0) to enable normal operationCOMMENT
LOW⚡templates/definition/meter/indevolt-battery.yaml125 # Step 1: Set Mode to Real-time control (47005=4), which is necessary to write State Setting (Step 2)COMMENT
LOW⚡templates/definition/meter/indevolt-battery.yaml131 # Step 2: Set State Setting to Standby (47015=0), additionally adjusting power and SOC to valid values to avCOMMENT
LOW⚡templates/definition/meter/indevolt-battery.yaml142 # Step 1: Set Mode to Real-time control (47005=4), which is necessary to write State Setting (Step 3)COMMENT
LOW⚡templates/definition/meter/indevolt-battery.yaml148 # Step 2: Set Grid Charging Setting to Charging (1143=1)COMMENT
LOW⚡templates/definition/meter/indevolt-battery.yaml154 # Step 3: Set State Setting to Charging (47015=1), additionally adjusting power and SOC to valid values, whiCOMMENT
Structural Annotation Overuse7 hits · 16 pts
SeverityFileLineSnippetContext
LOW⚡templates/definition/meter/indevolt-battery.yaml109 # Step 1: Set Mode to Self-consumed Prioritized (47005=1), which is the default for this batteryCOMMENT
LOW⚡templates/definition/meter/indevolt-battery.yaml115 # Step 2: Also Set Grid Charging Setting to Disable (1143=0) to enable normal operationCOMMENT
LOW⚡templates/definition/meter/indevolt-battery.yaml125 # Step 1: Set Mode to Real-time control (47005=4), which is necessary to write State Setting (Step 2)COMMENT
LOW⚡templates/definition/meter/indevolt-battery.yaml131 # Step 2: Set State Setting to Standby (47015=0), additionally adjusting power and SOC to valid values to avCOMMENT
LOW⚡templates/definition/meter/indevolt-battery.yaml142 # Step 1: Set Mode to Real-time control (47005=4), which is necessary to write State Setting (Step 3)COMMENT
LOW⚡templates/definition/meter/indevolt-battery.yaml148 # Step 2: Set Grid Charging Setting to Charging (1143=1)COMMENT
LOW⚡templates/definition/meter/indevolt-battery.yaml154 # Step 3: Set State Setting to Charging (47015=1), additionally adjusting power and SOC to valid values, whiCOMMENT
Hallucination Indicators1 hit · 10 pts
SeverityFileLineSnippetContext
CRITICAL.github/workflows/command-pr-build.yml190 const issues = res.repository.pullRequest.closingIssuesReferences.nodes.map((n) => n.number);CODE
Hyper-Verbose Identifiers8 hits · 8 pts
SeverityFileLineSnippetContext
LOWtests/plan.spec.ts28async function setAndVerifyPlan(CODE
LOWtests/plan.spec.ts51async function verifyRepeatingPlanAvailable(page: Page, lp: Locator, expected: boolean) {CODE
LOWassets/js/i18n.ts107export async function ensureCurrentLocaleMessages(i18n: VueI18nInstance) {CODE
LOWassets/js/theme.ts58function updateMetaThemeForBackdrop() {CODE
LOWassets/js/utils/version.ts26export function isNewVersionUnacknowledged(CODE
LOWassets/js/components/Config/DeviceModal/index.ts120export function applyDefaultsFromTemplate(template: Template | null, values: DeviceValues) {CODE
LOWassets/js/components/Auth/auth.ts70export function getAndClearNextUrl() {CODE
LOWassets/js/components/Auth/auth.ts76export function getAndClearNextModal() {CODE