AI Slop Code Risk Monitor

redis/go-redis

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

Redis Go client

3.2 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for redis/go-redis, a Go project with 22,286 GitHub stars. SynthScan examined 246,883 lines of code across 559 source files, recording 754 pattern matches distributed across 7 syntactic categories. The legacy adjusted pattern signal is 3.2 (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.2
Adjusted Signal
3.2
Raw Pattern Score
100%
Time Factor
2026-10-31
Last Push
22.3K
Stars
Go
Language
246.9K
Lines of Code
559
Files
754
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 12.9/100 · LOW

Can maintainers explain intent, assumptions, and trade-offs? 716 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 2.0/100 · LOW

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

PR Review Velocity Impact 15.6/100 · LOW

Which changes need focused human review? 754 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 1MEDIUM 38LOW 715

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 754 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 Block648 hits · 552 pts
SeverityFileLineSnippetContext
LOWautopipeline_bench_test.go601COMMENT
LOWhash_commands.go121 }COMMENT
LOWhash_commands.go141// type MyHash struct { Key1 string `redis:"key1"`; Key2 int `redis:"key2"` }COMMENT
LOWerror.go21COMMENT
LOWsearch_builders.go341// SortBy adds SORTBY <field> ASC|DESC. Consecutive SortBy calls (with noCOMMENT
LOWcommand.go481 ctx context.ContextCOMMENT
LOWcommand.go561 // returns); return the not-yet-executed state instead — the sameCOMMENT
LOWcommand.go1341 return nilCOMMENT
LOWcommand.go2481COMMENT
LOWhimport.go21// SET can lazily prepare them on whichever pooled connection it executes.COMMENT
LOWhimport.go181//COMMENT
LOWhimport.go401 }COMMENT
LOWoptions.go41 // whether it is a success or a failure.COMMENT
LOWoptions.go61 Network stringCOMMENT
LOWoptions.go81 // Network and Addr options.COMMENT
LOWoptions.go101 // or the User Password when connecting to a Redis 6.0 instance, or greater,COMMENT
LOWoptions.go121 // CredentialsProviderContext is an enhanced parameter of CredentialsProvider,COMMENT
LOWoptions.go141 // default: 3 retriesCOMMENT
LOWoptions.go161 // A value <= 0 uses the default.COMMENT
LOWoptions.go181 // ReadTimeout for socket reads. If reached, commands will failCOMMENT
LOWoptions.go201 ContextTimeoutEnabled boolCOMMENT
LOWoptions.go221 //COMMENT
LOWoptions.go241 // then plateaus; going beyond ~128 KiB gives no further gain and very largeCOMMENT
LOWoptions.go261 // PipelineWriteBufferSize is the size of the bufio.Writer buffer for pipelineCOMMENT
LOWoptions.go281 // default: 0 (the larger of WriteBufferSize and DefaultPipelineBufferSize)COMMENT
LOWoptions.go301 // (a non-blocking TryGet on the pipeline pool) rather than waiting a graceCOMMENT
LOWoptions.go321 // against PipelinePoolSize and are dialed but not initialized (init runs onCOMMENT
LOWoptions.go341 // default: 0COMMENT
LOWoptions.go361 // but it helps closing idle connections faster reducing the pool size.COMMENT
LOWoptions.go381 // preserve an explicit dial cap for the pipeline pool instead of expanding it.COMMENT
LOWoptions.go401 // default: 0COMMENT
LOWoptions.go421 // If d <= 0, connections are not closed due to a connection's idle time.COMMENT
LOWoptions.go441 //COMMENT
LOWoptions.go461 // Deprecated: Use DisableIdentity instead.COMMENT
LOWoptions.go481 // PushNotificationProcessor is the processor for handling push notifications.COMMENT
LOWoptions.go501 // be monotonic: a value observed through an uncached path can be newerCOMMENT
LOWoptions.go521 //COMMENT
LOWoptions.go541COMMENT
LOWoptions.go561 // overrides. Nil is the static default.COMMENT
LOWoptions.go581 // invalidated key as soon as its invalidation arrives, instead of waiting forCOMMENT
LOWoptions.go601 // tail at a small pool.COMMENT
LOWoptions.go621 //COMMENT
LOWoptions.go641 // to a *LocalCache), like ClientSideCacheCoalesceMisses: the batcher'sCOMMENT
LOWoptions.go661 // pool connection runs plain CLIENT TRACKING ON and a background drainer appliesCOMMENT
LOWoptions.go681// TYPICAL (small-command) traffic, while very large buffers (>=512 KiB) canCOMMENT
LOWoptions.go961// Unix connection:COMMENT
LOWoptions.go981// - unknown parameter names will result in an errorCOMMENT
LOWtls_cert_auth_test.go21COMMENT
LOWlocal_cache.go41COMMENT
LOWlocal_cache.go61COMMENT
LOWlocal_cache.go101// cscFetchSeq is the global monotonic counter feeding cacheEntry.fetchSeq. ItCOMMENT
LOWlocal_cache.go121 // MaxEntries limits the number of entries. Zero or negative means unlimited.COMMENT
LOWlocal_cache.go141 StaleTimeout time.DurationCOMMENT
LOWlocal_cache.go161// All methods may be called concurrently. Cache keys and Redis keys are opaqueCOMMENT
LOWlocal_cache.go321}COMMENT
LOWlocal_cache.go961COMMENT
LOWlocal_cache_test.go781// and eviction picks the oldest entry whose bit is CLEAR. If nothing everCOMMENT
LOWautopipeline_fd_pipeline.go21// The submit queue already has the primitive for it. fdQueue.pushBatch appendsCOMMENT
LOWautopipeline_fd_pipeline.go41// using the cluster pipeline, as it did before FD batches existed.COMMENT
LOWautopipeline_fd_pipeline.go61 "redis: FDPipelined batch has keys on different full-duplex engines")COMMENT
588 more matches not shown…
Decorative Section Separators35 hits · 99 pts
SeverityFileLineSnippetContext
MEDIUM⚡example/otel/uptrace.yml1# =============================================================================COMMENT
MEDIUM⚡example/otel/uptrace.yml3# =============================================================================COMMENT
MEDIUM⚡example/otel/uptrace.yml11# =============================================================================COMMENT
MEDIUM⚡example/otel/uptrace.yml13# -----------------------------------------------------------------------------COMMENT
MEDIUM⚡example/otel/uptrace.yml15# -----------------------------------------------------------------------------COMMENT
MEDIUM⚡example/otel/uptrace.yml21# -----------------------------------------------------------------------------COMMENT
MEDIUM⚡example/otel/uptrace.yml23# -----------------------------------------------------------------------------COMMENT
MEDIUM⚡example/otel/uptrace.yml246# -----------------------------------------------------------------------------COMMENT
MEDIUM⚡example/otel/uptrace.yml248# -----------------------------------------------------------------------------COMMENT
MEDIUM⚡example/otel/uptrace.yml255# -----------------------------------------------------------------------------COMMENT
MEDIUM⚡example/otel/uptrace.yml257# -----------------------------------------------------------------------------COMMENT
MEDIUMexample/otel/uptrace.yml42# -----------------------------------------------------------------------------COMMENT
MEDIUMexample/otel/uptrace.yml44# -----------------------------------------------------------------------------COMMENT
MEDIUMexample/otel/uptrace.yml67# -----------------------------------------------------------------------------COMMENT
MEDIUMexample/otel/uptrace.yml69# -----------------------------------------------------------------------------COMMENT
MEDIUMexample/otel/uptrace.yml85# -----------------------------------------------------------------------------COMMENT
MEDIUMexample/otel/uptrace.yml87# -----------------------------------------------------------------------------COMMENT
MEDIUMexample/otel/uptrace.yml142# -----------------------------------------------------------------------------COMMENT
MEDIUMexample/otel/uptrace.yml144# -----------------------------------------------------------------------------COMMENT
MEDIUMexample/otel/uptrace.yml185# -----------------------------------------------------------------------------COMMENT
MEDIUMexample/otel/uptrace.yml187# -----------------------------------------------------------------------------COMMENT
MEDIUMexample/otel/uptrace.yml201# -----------------------------------------------------------------------------COMMENT
MEDIUMexample/otel/uptrace.yml203# -----------------------------------------------------------------------------COMMENT
MEDIUMexample/otel/uptrace.yml225# -----------------------------------------------------------------------------COMMENT
MEDIUMexample/otel/uptrace.yml227# -----------------------------------------------------------------------------COMMENT
MEDIUMexample/otel/uptrace.yml274# -----------------------------------------------------------------------------COMMENT
MEDIUMexample/otel/uptrace.yml276# -----------------------------------------------------------------------------COMMENT
MEDIUMexample/otel/uptrace.yml333# -----------------------------------------------------------------------------COMMENT
MEDIUMexample/otel/uptrace.yml335# -----------------------------------------------------------------------------COMMENT
MEDIUMexample/otel/uptrace.yml350# -----------------------------------------------------------------------------COMMENT
MEDIUMexample/otel/uptrace.yml352# -----------------------------------------------------------------------------COMMENT
MEDIUMexample/otel/uptrace.yml377# -----------------------------------------------------------------------------COMMENT
MEDIUMexample/otel/uptrace.yml379# -----------------------------------------------------------------------------COMMENT
MEDIUMexample/otel/uptrace.yml405# -----------------------------------------------------------------------------COMMENT
MEDIUMexample/otel/uptrace.yml407# -----------------------------------------------------------------------------COMMENT
Verbosity Indicators32 hits · 56 pts
SeverityFileLineSnippetContext
LOW⚡tls_cert_auth_test.go88 // Step 3: Load CA certificate for server verificationCOMMENT
LOW⚡tls_cert_auth_test.go94 // Step 4: Load the pre-generated client certificate with CN=testcertuserCOMMENT
LOW⚡tls_cert_auth_test.go104 // Step 5: Create TLS config with the client certificateCOMMENT
LOW⚡tls_cert_auth_test.go206 // Step 2: Load CA certificate for server verificationCOMMENT
LOW⚡tls_cert_auth_test.go212 // Step 3: Load the client certificate with CN=testcertuserCOMMENT
LOW⚡tls_cert_auth_test.go222 // Step 4: Create TLS config with the client certificateCOMMENT
LOW⚡tls_cert_auth_test.go233 // Step 5: Connect with TLS using the certificateCOMMENT
LOW⚡tls_cert_auth_test.go240 // Step 6: Verify we're authenticated as "default" (fallback)COMMENT
LOWtls_cert_auth_test.go50 // Step 1: Create a non-TLS client to set up the ACL userCOMMENT
LOWtls_cert_auth_test.go64 // Step 2: Create ACL user with specific permissionsCOMMENT
LOWtls_cert_auth_test.go115 // Step 6: Connect with TLS using the certificateCOMMENT
LOWtls_cert_auth_test.go126 // Step 7: Verify we're authenticated as the correct userCOMMENT
LOWtls_cert_auth_test.go137 // Step 8: Test that we can execute allowed commandsCOMMENT
LOWtls_cert_auth_test.go151 // Step 9: Test that we CANNOT execute disallowed commandsCOMMENT
LOWtls_cert_auth_test.go180 // Step 1: Create a non-TLS client to ensure the user does NOT existCOMMENT
LOWtls_cert_auth_test.go252 // Step 7: Verify we can execute commands as default userCOMMENT
LOWexample/tls-cert-auth/main.go42 // Step 1: First, ensure the ACL user exists (using non-TLS connection)COMMENT
LOW⚡example/tls-cert-auth/main.go60 // Step 2: Load CA certificateCOMMENT
LOW⚡example/tls-cert-auth/main.go68 // Step 3: Load client certificate (CN must match the Redis ACL username)COMMENT
LOW⚡example/tls-cert-auth/main.go77 // Step 4: Create TLS configCOMMENT
LOW⚡example/tls-cert-auth/main.go85 // Step 5: Connect to Redis with TLS - NO username/password needed!COMMENT
LOW⚡example/tls-cert-auth/main.go93 // Step 6: Verify authenticationCOMMENT
LOW⚡example/tls-cert-auth/main.go100 // Step 7: Test some commandsCOMMENT
LOW⚡example/ts-querylabels/main.go33 // Step 1: first dropdown - which labels does the sensor group carry?COMMENT
LOW⚡example/ts-querylabels/main.go42 // Step 2: second dropdown - which values does "location" take in thatCOMMENT
LOW⚡example/ts-querylabels/main.go50 // Step 3: third dropdown - the keys matching the fully-selected filterCOMMENT
LOWmaintnotifications/e2e/proxy_fault_injector_server.go499 // Step 1: Inject SMIGRATING notificationCOMMENT
LOWmaintnotifications/e2e/proxy_fault_injector_server.go519 // Step 2: Inject SMIGRATED notificationCOMMENT
LOWmaintnotifications/e2e/proxy_fault_injector_server.go645 // Step 1: Inject FAILING_OVER notificationCOMMENT
LOWmaintnotifications/e2e/proxy_fault_injector_server.go664 // Step 2: Inject FAILED_OVER notificationCOMMENT
LOWmaintnotifications/e2e/proxy_fault_injector_server.go688 // Step 1: Inject MIGRATING notification (no MOVING for migrate action)COMMENT
LOWmaintnotifications/e2e/proxy_fault_injector_server.go709 // Step 2: Inject MIGRATED notificationCOMMENT
Structural Annotation Overuse32 hits · 56 pts
SeverityFileLineSnippetContext
LOW⚡tls_cert_auth_test.go88 // Step 3: Load CA certificate for server verificationCOMMENT
LOW⚡tls_cert_auth_test.go94 // Step 4: Load the pre-generated client certificate with CN=testcertuserCOMMENT
LOW⚡tls_cert_auth_test.go104 // Step 5: Create TLS config with the client certificateCOMMENT
LOW⚡tls_cert_auth_test.go206 // Step 2: Load CA certificate for server verificationCOMMENT
LOW⚡tls_cert_auth_test.go212 // Step 3: Load the client certificate with CN=testcertuserCOMMENT
LOW⚡tls_cert_auth_test.go222 // Step 4: Create TLS config with the client certificateCOMMENT
LOW⚡tls_cert_auth_test.go233 // Step 5: Connect with TLS using the certificateCOMMENT
LOW⚡tls_cert_auth_test.go240 // Step 6: Verify we're authenticated as "default" (fallback)COMMENT
LOWtls_cert_auth_test.go50 // Step 1: Create a non-TLS client to set up the ACL userCOMMENT
LOWtls_cert_auth_test.go64 // Step 2: Create ACL user with specific permissionsCOMMENT
LOWtls_cert_auth_test.go115 // Step 6: Connect with TLS using the certificateCOMMENT
LOWtls_cert_auth_test.go126 // Step 7: Verify we're authenticated as the correct userCOMMENT
LOWtls_cert_auth_test.go137 // Step 8: Test that we can execute allowed commandsCOMMENT
LOWtls_cert_auth_test.go151 // Step 9: Test that we CANNOT execute disallowed commandsCOMMENT
LOWtls_cert_auth_test.go180 // Step 1: Create a non-TLS client to ensure the user does NOT existCOMMENT
LOWtls_cert_auth_test.go252 // Step 7: Verify we can execute commands as default userCOMMENT
LOWexample/tls-cert-auth/main.go42 // Step 1: First, ensure the ACL user exists (using non-TLS connection)COMMENT
LOW⚡example/tls-cert-auth/main.go60 // Step 2: Load CA certificateCOMMENT
LOW⚡example/tls-cert-auth/main.go68 // Step 3: Load client certificate (CN must match the Redis ACL username)COMMENT
LOW⚡example/tls-cert-auth/main.go77 // Step 4: Create TLS configCOMMENT
LOW⚡example/tls-cert-auth/main.go85 // Step 5: Connect to Redis with TLS - NO username/password needed!COMMENT
LOW⚡example/tls-cert-auth/main.go93 // Step 6: Verify authenticationCOMMENT
LOW⚡example/tls-cert-auth/main.go100 // Step 7: Test some commandsCOMMENT
LOW⚡example/ts-querylabels/main.go33 // Step 1: first dropdown - which labels does the sensor group carry?COMMENT
LOW⚡example/ts-querylabels/main.go42 // Step 2: second dropdown - which values does "location" take in thatCOMMENT
LOW⚡example/ts-querylabels/main.go50 // Step 3: third dropdown - the keys matching the fully-selected filterCOMMENT
LOWmaintnotifications/e2e/proxy_fault_injector_server.go499 // Step 1: Inject SMIGRATING notificationCOMMENT
LOWmaintnotifications/e2e/proxy_fault_injector_server.go519 // Step 2: Inject SMIGRATED notificationCOMMENT
LOWmaintnotifications/e2e/proxy_fault_injector_server.go645 // Step 1: Inject FAILING_OVER notificationCOMMENT
LOWmaintnotifications/e2e/proxy_fault_injector_server.go664 // Step 2: Inject FAILED_OVER notificationCOMMENT
LOWmaintnotifications/e2e/proxy_fault_injector_server.go688 // Step 1: Inject MIGRATING notification (no MOVING for migrate action)COMMENT
LOWmaintnotifications/e2e/proxy_fault_injector_server.go709 // Step 2: Inject MIGRATED notificationCOMMENT
AI Slop Vocabulary3 hits · 9 pts
SeverityFileLineSnippetContext
MEDIUMautopipeline.go1402 // three document intent and are robust to any init reordering.COMMENT
MEDIUMautopipeline_fullduplex.go155// clean fdRecycle. The maintnotifications OnPut hook then performs the seamlessCOMMENT
MEDIUMautopipeline_fullduplex.go2281 // seamless handoff for a moving conn, or the conn simply returns to the pool forCOMMENT
Synthetic Comment Markers1 hit · 8 pts
SeverityFileLineSnippetContext
HIGHosscluster_test.go3339 // Values should be in the same order as requested keysCOMMENT
Fake / Example Data3 hits · 3 pts
SeverityFileLineSnippetContext
LOWsearch_builders_test.go367 client.HSet(ctx, "doc1", "title", "hello world", "body", "lorem ipsum")CODE
LOWsearch_test.go316 client.HSet(ctx, "doc2", "f1", "very important", "f2", "lorem ipsum")CODE
LOWsearch_test.go4752 client.HSet(ctx, "doc2", "f1", "very important", "f2", "lorem ipsum")CODE