AI Slop Code Risk Monitor

EvoMap/evolver

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

The GEP-powered self-evolving engine for AI agents. Auditable evolution with Genes, Capsules, and Events. | evomap.ai

3.0 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for EvoMap/evolver, a JavaScript project with 8,714 GitHub stars. SynthScan examined 120,354 lines of code across 462 source files, recording 333 pattern matches distributed across 9 syntactic categories. The legacy adjusted pattern signal is 3.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.

3.0
Adjusted Signal
3.0
Raw Pattern Score
100%
Time Factor
2026-10-30
Last Push
8.7K
Stars
JavaScript
Language
120.4K
Lines of Code
462
Files
333
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 13.1/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.9/100 · LOW

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

Agent Over-Engineering Ratio 3.6/100 · LOW

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

PR Review Velocity Impact 13.8/100 · LOW

Which changes need focused human review? 333 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 8LOW 324

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 333 distinct pattern matches across 9 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 Block221 hits · 218 pts
SeverityFileLineSnippetContext
LOWindex.js221COMMENT
LOWindex.js241 // Step 1: load .env from process.cwd() before any internal require.COMMENT
LOWindex.js561const {COMMENT
LOWindex.js581 // target path fails atomically with EEXIST if the target alreadyCOMMENT
LOWindex.js641 uid: typeof process.getuid === 'function' ? process.getuid() : null,COMMENT
LOWindex.js701 // Round-9: a lease-aware daemon has not refreshed this lock's mtimeCOMMENT
LOWindex.js721 console.warn(`[Singleton] Lock owned by PID ${payload.pid} (different user). Refusing to take over. ` +COMMENT
LOWindex.js781 if (fs.existsSync(lockFile)) {COMMENT
LOWindex.js801// valid secret in ~/.evomap/node_secret, so the right thing for the CLICOMMENT
LOWindex.js861 // run IS a Mad Dog loop) but hard-cuts the network + ATP, snapshots theCOMMENT
LOWindex.js961 // crash / PID reuse via stale mtime instead of trusting kill(0).COMMENT
LOWindex.js1001COMMENT
LOWindex.js1081 }COMMENT
LOWindex.js1141 try { require('./src/gep/a2aProtocol').stopEventDelivery(); } catch (e) {}COMMENT
LOWindex.js1161 // the undici pool, poke the heartbeat, and restart the SSE stream, whichCOMMENT
LOWindex.js1201 a2aForSd2._sdNotify('READY=1');COMMENT
LOWindex.js1221 // (a2aProtocol) interrupt the outer evolve sleepMs and poke theCOMMENT
LOWindex.js1261 // seconds. We add a liveness gate so an actively-recoveringCOMMENT
LOWindex.js1281 // module load failed on this turn.COMMENT
LOWindex.js3301 // after a manual web reset (https://evomap.ai/account -> Reset Secret)COMMENT
LOWtest/execBridgeSpawnNpmShim.test.js1'use strict';COMMENT
LOWtest/lifecycleForceUpdateTrigger.test.js1'use strict';COMMENT
LOWtest/heartbeatResilienceRound6.test.js1// Regression coverage for the round-6 audit (2026-05-28) heartbeatCOMMENT
LOWtest/heartbeatResilienceRound6.test.js21// validator dormant, outer evolve sleepMs sitting out theCOMMENT
LOWtest/forceUpdateConcurrencyGuard.test.js1// Tests for the concurrency guard added to src/forceUpdate.js (PR #188 fix).COMMENT
LOWtest/forceUpdateConcurrencyGuard.test.js101 const stub = function () {COMMENT
LOWtest/forceUpdateConcurrencyGuard.test.js221COMMENT
LOWtest/forceUpdateLastUpdateReport.test.js661 // ForceUpdate warns. The threshold-fire moment must bypass thatCOMMENT
LOWtest/forceUpdateLastUpdateReport.test.js721 console.warn = originalWarn;COMMENT
LOWtest/forceUpdateLastUpdateReport.test.js1001 finished_at: Date.now(),COMMENT
LOWtest/evolveGuardsCooperativeYield.test.js1'use strict';COMMENT
LOWtest/hubUrlTlsEnforcementConsistency.test.js1// Multi-module TLS-enforcement consistency.COMMENT
LOWtest/hubUrlTlsEnforcementConsistency.test.js181 }COMMENT
LOWtest/proxyPublishValidation.test.js1'use strict';COMMENT
LOWtest/adaptersSyntax.test.js1// test/adaptersSyntax.test.jsCOMMENT
LOWtest/trajectoryMarkedSessionGate.test.js1'use strict';COMMENT
LOWtest/heartbeatResilienceRound5.test.js1// Regression coverage for the round-5 audit (2026-05-28) heartbeatCOMMENT
LOWtest/heartbeatResilienceRound5.test.js21// so the cache has time to refresh.COMMENT
LOWtest/heartbeatResilienceRound5.test.js121 // detector lives in an internal setInterval (a2aProtocol.js aroundCOMMENT
LOWtest/sync-dedup.test.js1// End-to-end test for `node index.js sync` dedup logic.COMMENT
LOWtest/forceUpdateMidCopyWedge.test.js1const { describe, it, before, after, beforeEach } = require('node:test');COMMENT
LOWtest/paths.test.js541 // large enough cap recovers cwdCOMMENT
LOWtest/idleSchedulerLinuxFallbacks.test.js1'use strict';COMMENT
LOWtest/lifecycleStaleNodeSecret.test.js1'use strict';COMMENT
LOWtest/heartbeatResilienceRound4.test.js1// Regression coverage for the round-4 audit (2026-05-28) heartbeatCOMMENT
LOWtest/heartbeatResilienceRound4.test.js21// same payload. Wrap in try/catch so a sync throw never breaks theCOMMENT
LOWtest/heartbeatResilienceRound4.test.js161 });COMMENT
LOWtest/heartbeatResilienceRound4.test.js261 if (origAllow === undefined) delete process.env.EVOMAP_HUB_ALLOW_INSECURE;COMMENT
LOWtest/lifecycleNodeIdLegacyFallback.test.js1'use strict';COMMENT
LOWtest/lifecycleNodeIdUnification.test.js1'use strict';COMMENT
LOWtest/lifecycleNodeIdUnification.test.js21//COMMENT
LOWtest/lifecycleNodeIdUnification.test.js721// (only getNodeId() sets it, proxy never calls getNodeId), and the legacyCOMMENT
LOWtest/savingsCoreConformance.test.js1'use strict';COMMENT
LOWtest/hubFetch.test.js1// Tests for src/gep/hubFetch.jsCOMMENT
LOWtest/heartbeatResilienceRound8.test.js1// Regression coverage for the round-8 audit (2026-05-28) heartbeatCOMMENT
LOWtest/heartbeatResilienceRound8.test.js21// clause defeated every caller of the hook, because all callersCOMMENT
LOWtest/heartbeatResilienceRound8.test.js261 // detector body around it), then observe that test-utilityCOMMENT
LOWtest/prompt.test.js101 //COMMENT
LOWtest/heartbeatResilienceRound9.test.js1'use strict';COMMENT
LOWtest/spawnReplacementProcess.test.js1// Issue #528: Windows-friendly spawn-replacement policy.COMMENT
161 more matches not shown…
Hyper-Verbose Identifiers86 hits · 88 pts
SeverityFileLineSnippetContext
LOWindex.js506function logTimedOutEvolveRejection(error, logFn) {CODE
LOWindex.js516function observeTimedOutEvolvePromise(evolvePromise, logFn = console.error) {CODE
LOWindex.js531async function waitForTimedOutEvolvePromise(evolvePromise, logFn = console.error) {CODE
LOWindex.js810function refuseHelloIfDaemonRunning(toolLabel) {CODE
LOWindex.js2829 function skipUnverifiedListIdCollision(stage) {CODE
LOWcli-options.js54function prepareProxyCliEnvironment(argv, env = process.env, dotenv = require('dotenv')) {CODE
LOWtest/forceUpdateKeepList.test.js52function makeDegitWithLocalStateFiles(version) {CODE
LOWtest/forceUpdateKeepList.test.js76function makeNpxMissingThenTarballSuccess(version) {CODE
LOWtest/forceUpdateKeepList.test.js127function makeDegitFailureThenTarballSuccess(version, degitError) {CODE
LOWtest/forceUpdateKeepList.test.js168function assertPrivateArchiveDownload(execStub) {CODE
LOWtest/forceUpdateMidCopyWedge.test.js54function makeSuccessfulDegitWithIndex(version, indexContent) {CODE
LOWtest/lifecycleStaleNodeSecret.test.js92function assertNoRawHubResponseSecrets(logText, raw) {CODE
LOWtest/identityTupleSync.test.js125function assertUsesSameNodeMailboxTuple(requests) {CODE
LOWtest/a2aProtocol.test.js58function assertNoRawHubResponseSecrets(logText, raw) {CODE
LOWtest/evolveHub.test.js101async function withCleanGeneDirectiveEnv(fn) {CODE
LOWtest/spawnReplacementProcess.test.js19function loadSpawnReplacementProcess() {CODE
LOWtest/canonicalIdentityLock.test.js190 fs.rmdirSync = function injectReleaseCleanupFailure(dir, options) {CODE
LOWtest/syncEngineLoopResilience.test.js105function assertNoRawHubBodySecrets(text, raw) {CODE
LOWtest/forceUpdateFailureCodes.test.js52function writeStrongEvolverMarkers() {CODE
LOWtest/forceUpdateFailureCodes.test.js143function makeDegitFailureThenTarballSuccess(version) {CODE
LOWscripts/check-changelog.js65function listReleasedVersionHeadings(text) {CODE
LOWscripts/harness-governance-check.js52function changedFilesTouchGovernanceSurface(files) {CODE
LOWsrc/canonicalIdentityLock.js40function readLinuxProcessStartIdentity(pid) {CODE
LOWsrc/canonicalIdentityLock.js76function readDarwinProcessStartIdentity(pid) {CODE
LOWsrc/canonicalIdentityLock.js197function currentAbandonedSnapshotMatches(lockDir, expected) {CODE
LOWsrc/canonicalIdentityLock.js326function releaseCanonicalIdentityLock(lockDir, ownerFile, token) {CODE
LOWsrc/canonicalIdentityLock.js348function acquireCanonicalIdentityLock(nodeIdFile) {CODE
LOWsrc/canonicalIdentityLock.js425function withCanonicalIdentityLock(nodeIdFile, operation) {CODE
LOW⚡src/forceUpdate.js681function isNumericPrereleaseIdentifier(value) {CODE
LOW⚡src/forceUpdate.js685function compareNumericIdentifierStrings(left, right) {CODE
LOW⚡src/forceUpdate.js692function comparePrereleaseIdentifiers(left, right) {CODE
LOWsrc/proxy/index.js53function canonicalCompatibleBaseUrl(raw) {CODE
LOWsrc/proxy/index.js82function allowedCompatibleBaseUrls() {CODE
LOWsrc/proxy/clientSettings.js36function isValidReusableProxyToken(value) {CODE
LOWsrc/proxy/clientSettings.js80function resolveClaudeSettingsFile(opts = {}, env = process.env) {CODE
LOWsrc/proxy/clientSettings.js147function isManagedProxyClientSettings(settings, cfg, opts = {}) {CODE
LOWsrc/proxy/clientSettings.js151function isManagedProxyUpstreamResidual(settings, cfg, baseValue, tokenValue, apiKeyValue) {CODE
LOWsrc/proxy/clientSettings.js162function safeStoredUpstreamBaseUrl(settings, cfg, value, opts = {}) {CODE
LOWsrc/proxy/clientSettings.js175function readReusableClientProxyToken(opts = {}) {CODE
LOWsrc/proxy/mailbox/state.js88function isHubRotatedNodeSecretState(state) {CODE
LOWsrc/proxy/mailbox/state.js100function isFullNodeSecretTupleUpdate(updatedSet) {CODE
LOWsrc/proxy/mailbox/state.js104function canApplyPartialNodeSecretTupleWrite(key, disk, next) {CODE
LOWsrc/proxy/mailbox/state.js190function writeMergedMailboxStateFile(stateFile, nextState, updatedKeys) {CODE
LOWsrc/proxy/mailbox/state.js212function updateMergedMailboxStateFile(stateFile, buildUpdate) {CODE
LOWsrc/proxy/lifecycle/manager.js635function matchSecretDivergenceReason(value) {CODE
LOWsrc/proxy/lifecycle/manager.js641function extractSecretDivergenceReason(data) {CODE
LOWsrc/proxy/lifecycle/manager.js674function normalizeNodeSecretEnvSuppression(value) {CODE
LOWsrc/proxy/sync/outbound.js39function resolveHardOutboundBodyBytes(env = process.env) {CODE
LOWsrc/proxy/sync/outbound.js47function resolveMaxOutboundBodyBytes(env = process.env, store = null) {CODE
LOWsrc/proxy/router/responses_route.js12function hasOpenAIUpstreamCredential() {CODE
LOWsrc/proxy/router/responses_route.js22function safeOpenAIConfigDiagnostic(err) {CODE
LOWsrc/proxy/router/responses_route.js56function copyOpenAIResponseHeaders(headers = {}) {CODE
LOWsrc/proxy/router/responses_route.js160function buildChatCompletionsHandler(opts = {}) {CODE
LOWsrc/proxy/router/gemini_route.js18function hasGeminiUpstreamCredential() {CODE
LOWsrc/proxy/router/gemini_route.js51function copyGeminiResponseHeaders(headers = {}) {CODE
LOWsrc/adapters/opencode.js102function isEvolverManagedPluginFile(filePath) {CODE
LOWsrc/adapters/scripts/evolver-session-start.js299function readRecentWorkspaceEntries(filePath, currentId, currentDir, n) {CODE
LOWsrc/ops/lifecycle.js259function clientSettingsExpectProxy(env) {CODE
LOWsrc/ops/lifecycle.js491function commandUsesCurrentRepoRelativeIndex(cmd, cwd) {CODE
LOWsrc/gep/idleScheduler.js317function getScheduleRecommendation() {CODE
26 more matches not shown…
Fake / Example Data10 hits · 12 pts
SeverityFileLineSnippetContext
LOWtest/solidifyIntegration.test.js63 execSync('git config user.email "test@test.com"', { cwd: tmpDir, stdio: 'ignore' });CODE
LOWtest/trajectoryExport.test.js3156 authorization: 'placeholder',CODE
LOWtest/trajectoryExport.test.js3162 headers: { 'set-cookie': 'placeholder', 'x-trace-id': 'trace-1' },CODE
LOW⚡test/trajectoryExport.test.js3210 metadata: { source: 'raw-fixture', authorization: 'placeholder' },CODE
LOW⚡test/trajectoryExport.test.js3215 source_record: { authorization: 'placeholder', raw: 'source' },CODE
LOW⚡test/trajectoryExport.test.js3216 raw_row: { cookie: 'placeholder', raw: 'row' },CODE
LOW⚡test/trajectoryExport.test.js3217 headers: { 'set-cookie': 'placeholder', 'x-upstream': 'ok' },CODE
LOWtest/sanitize.test.js16assert.strictEqual(redactString('user@example.com'), REDACTED);CODE
LOWtest/proxyOutboundSync.test.js400 const fakeToken = 'fake-token-413-abcdefghijklmnopqrstuvwxyz';CODE
LOWtest/proxyOutboundSync.test.js443 const fakeToken = 'fake-token-retry-abcdefghijklmnopqrstuvwxyz';CODE
AI Slop Vocabulary4 hits · 12 pts
SeverityFileLineSnippetContext
MEDIUMtest/rollbackSafety.test.js96// Reading the source directly is robust and unambiguous about what theCOMMENT
MEDIUMsrc/proxy/lifecycle/manager.js540 // keeps this robust against partial test mocks of forceUpdate that stubCOMMENT
MEDIUMsrc/adapters/scripts/_runtimePaths.js359// secret file paths.js uses, so installing the package later is seamless.COMMENT
MEDIUMsrc/gep/validator/sandboxExecutor.js137 // Reject shell metacharacters that would give injection leverage even withCOMMENT
Modern AI Meta-Vocabulary4 hits · 12 pts
SeverityFileLineSnippetContext
MEDIUMtest/webuiServer.test.js96 // Cursor agentic security review (HIGH): matchPath used to callCOMMENT
MEDIUMtest/webuiObserver.test.js179 // Cursor agentic security review (MEDIUM): /webui/status used toCOMMENT
MEDIUMtest/webuiObserver.test.js205 // Cursor agentic security review (HIGH): the original SECRET_TEXT_RECOMMENT
MEDIUMsrc/gep/skill2gepAudit.js34// Generic English / Python / benchmark-scaffold stopwords. NOT domain-specific.COMMENT
Hallucination Indicators1 hit · 10 pts
SeverityFileLineSnippetContext
CRITICALtest/experimentComparison.test.js273 assert.ok(res.data.arms.baseline.resultText.includes('[REDACTED]'));CODE
Verbosity Indicators3 hits · 4 pts
SeverityFileLineSnippetContext
LOWindex.js241 // Step 1: load .env from process.cwd() before any internal require.COMMENT
LOWtest/forceUpdateLastUpdateReport.test.js318 // Step 1: persist the FIRST outcome and start a heartbeat that capturesCOMMENT
LOWtest/forceUpdateLastUpdateReport.test.js330 // Step 2: while the hub call is "in flight" (before our fetchResponderCOMMENT
Structural Annotation Overuse3 hits · 4 pts
SeverityFileLineSnippetContext
LOWindex.js241 // Step 1: load .env from process.cwd() before any internal require.COMMENT
LOWtest/forceUpdateLastUpdateReport.test.js318 // Step 1: persist the FIRST outcome and start a heartbeat that capturesCOMMENT
LOWtest/forceUpdateLastUpdateReport.test.js330 // Step 2: while the hub call is "in flight" (before our fetchResponderCOMMENT
TODO Padding1 hit · 1 pts
SeverityFileLineSnippetContext
LOWtest/signalDetect.test.js63 const input = 'The system failed because:\n// TODO: Handle error cases\n// Need to catch exceptions\nActual error: conCODE