Repository Analysis

redis/go-redis

Redis Go client

2.7 Likely human-written View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of redis/go-redis, a Go project with 22,192 GitHub stars. SynthScan v2.0 examined 142,192 lines of code across 365 source files, recording 276 pattern matches distributed across 6 syntactic categories. The overall adjusted score of 2.7 places this repository in the Likely human-written band.

The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).

2.7
Adjusted Score
2.7
Raw Score
100%
Time Factor
2026-07-14
Last Push
22.2K
Stars
Go
Language
142.2K
Lines of Code
365
Files
276
Pattern Hits
2026-07-14
Scan Date
0.00
HC Hit Rate

What These Metrics Mean

Adjusted Score
Primary synthetic code indicator. Raw score normalised per 1,000 lines of code and multiplied by the temporal discount factor. This is the definitive comparative metric — use it to rank repositories by AI authorship density.
Raw Score
The unmodified sum of all severity-weighted, context-multiplied pattern match scores before temporal discounting. Reflects the absolute signal strength independent of when the repository was last active.
Time Factor
The temporal discount multiplier (0–100%) applied to the raw score. Repositories last updated before ChatGPT's launch (Nov 2022) receive a 5% factor. Full signal is only assigned to repositories active in the post-adoption era (Jan 2024+).
Pattern Hits
Total count of individual pattern matches across all files and categories. A high hit count with a low score may indicate a very large codebase with isolated AI snippets; a low count with a high score indicates dense, concentrated AI signatures.
HC Hit Rate
High+Critical pattern hits per file, averaged across the repository. This orthogonal signal catches repositories where a few files are densely packed with high-severity AI tells — a strong indicator even when the normalised score appears moderate due to codebase size.
Lines of Code / Files
Total lines and files analysed. The scanner examines 94 file extensions. These denominators are used to normalise the score, enabling fair comparison between repositories of vastly different sizes.

Score History

This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.

Severity Breakdown

Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.

CRITICAL 0HIGH 1MEDIUM 35LOW 240

Directory Score Breakdown

This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.

Pattern Findings

The scanner identified 276 distinct pattern matches across 6 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. 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 diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.

Over-Commented Block178 hits · 170 pts
SeverityFileLineSnippetContext
LOWhash_commands.go121 return cmdCOMMENT
LOWcommand.go961 return trueCOMMENT
LOWcommand.go2001// Many commands will respond to two formats:COMMENT
LOWoptions.go41 Allow() errorCOMMENT
LOWoptions.go61 //COMMENT
LOWoptions.go81 Protocol intCOMMENT
LOWoptions.go101 // There will be a conflict between them; if CredentialsProviderContext exists, we will ignore CredentialsProvider.COMMENT
LOWoptions.go121 // MinRetryBackoff is the minimum backoff between each retry.COMMENT
LOWoptions.go141COMMENT
LOWoptions.go161 ReadTimeout time.DurationCOMMENT
LOWoptions.go181 ReadBufferSize intCOMMENT
LOWoptions.go201 // Default is 10 connections per every available CPU as reported by runtime.GOMAXPROCS.COMMENT
LOWoptions.go221 // default: 0COMMENT
LOWoptions.go241 // If d <= 0, connections are not closed due to a connection's idle time.COMMENT
LOWoptions.go261 //COMMENT
LOWoptions.go281 // Deprecated: Use DisableIdentity instead.COMMENT
LOWoptions.go461// Scheme is required.COMMENT
LOWoptions.go481// names will be treated as unknown parametersCOMMENT
LOWosscluster.go141 //COMMENT
LOWosscluster.go281// The URL must be in the form:COMMENT
LOWosscluster.go301// - fields "network", "addr", "username" and "password" can only be set using otherCOMMENT
LOWhset_benchmark_test.go21//COMMENT
LOWsortedset_commands.go341 return cmdCOMMENT
LOWsortedset_commands.go361type ZRangeArgs struct {COMMENT
LOWsortedset_commands.go381 // Stop: "(3",COMMENT
LOWsortedset_commands.go401 // Start: "(def",COMMENT
LOWinternal_maint_notif_test.go21//COMMENT
LOWhotkeys_commands.go1package redisCOMMENT
LOWhotkeys_commands.go41 // Duration is the auto-stop tracking after this many seconds.COMMENT
LOWpubsub.go81COMMENT
LOWosscluster_maintnotifications_test.go221// +SMIGRATED <- message nameCOMMENT
LOWpipeline.go1package redisCOMMENT
LOWuniversal_test.go81 // reports zero usable replicas (post-failover replicas oftenCOMMENT
LOWstream_commands.go81COMMENT
LOWstream_commands.go401)COMMENT
LOWstream_commands.go421 // counter is set to MAXINT, which will immediately move the message toCOMMENT
LOWstream_commands.go561 int64(a.MinIdle/time.Millisecond))COMMENT
LOWredis.go141 if h.txPipeline == nil {COMMENT
LOWredis.go161// return nilCOMMENT
LOWredis.go261 // by NewFailoverClient to tear down sentinel failover background work.COMMENT
LOWredis.go641COMMENT
LOWredis.go1601// Channels can be omitted to create empty subscription.COMMENT
LOWredis.go1741//COMMENT
LOWset_commands.go161// Returns if member is a member of the set stored at key.COMMENT
LOWset_commands.go201}COMMENT
LOWset_commands.go241// This version returns up to count random members.COMMENT
LOWset_commands.go261 return cmdCOMMENT
LOWstring_commands.go81 //COMMENT
LOWstring_commands.go121//COMMENT
LOWstring_commands.go181func (c cmdable) GetDel(ctx context.Context, key string) *StringCmd {COMMENT
LOWstring_commands.go261 // Saturate clamps the result to LBOUND/UBOUND (or ±LDBL_MAX when noCOMMENT
LOWstring_commands.go501 // MatchDigest is used with IFDEQ/IFDNE modes for digest-based compare-and-set.COMMENT
LOWstring_commands.go581// to the socket — effectively zero-copy on the send path.COMMENT
LOWstring_commands.go761 _ = c(ctx, cmd)COMMENT
LOWstring_commands.go801// SetIFDEQGet sets the value only if the current value's digest equals matchDigest,COMMENT
LOWstring_commands.go841// The matchDigest parameter is a uint64 xxh3 hash value.COMMENT
LOWinternal_test.go341 }COMMENT
LOWinternal_test.go1021func (*stubCredentialsListener) OnNext(auth.Credentials) {}COMMENT
LOWinternal_test.go1081 }COMMENT
LOWuniversal.go121 // DisableIndentity - Disable set-lib on connect.COMMENT
118 more matches not shown…
Decorative Section Separators35 hits · 99 pts
SeverityFileLineSnippetContext
MEDIUMexample/otel/uptrace.yml1# =============================================================================COMMENT
MEDIUMexample/otel/uptrace.yml3# =============================================================================COMMENT
MEDIUMexample/otel/uptrace.yml11# =============================================================================COMMENT
MEDIUMexample/otel/uptrace.yml13# -----------------------------------------------------------------------------COMMENT
MEDIUMexample/otel/uptrace.yml15# -----------------------------------------------------------------------------COMMENT
MEDIUMexample/otel/uptrace.yml21# -----------------------------------------------------------------------------COMMENT
MEDIUMexample/otel/uptrace.yml23# -----------------------------------------------------------------------------COMMENT
MEDIUMexample/otel/uptrace.yml246# -----------------------------------------------------------------------------COMMENT
MEDIUMexample/otel/uptrace.yml248# -----------------------------------------------------------------------------COMMENT
MEDIUMexample/otel/uptrace.yml255# -----------------------------------------------------------------------------COMMENT
MEDIUMexample/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
Structural Annotation Overuse30 hits · 51 pts
SeverityFileLineSnippetContext
LOWtls_cert_auth_test.go91 // Step 3: Load CA certificate for server verificationCOMMENT
LOWtls_cert_auth_test.go97 // Step 4: Load the pre-generated client certificate with CN=testcertuserCOMMENT
LOWtls_cert_auth_test.go107 // Step 5: Create TLS config with the client certificateCOMMENT
LOWtls_cert_auth_test.go209 // Step 2: Load CA certificate for server verificationCOMMENT
LOWtls_cert_auth_test.go215 // Step 3: Load the client certificate with CN=testcertuserCOMMENT
LOWtls_cert_auth_test.go225 // Step 4: Create TLS config with the client certificateCOMMENT
LOWtls_cert_auth_test.go236 // Step 5: Connect with TLS using the certificateCOMMENT
LOWtls_cert_auth_test.go243 // Step 6: Verify we're authenticated as "default" (fallback)COMMENT
LOWtls_cert_auth_test.go53 // Step 1: Create a non-TLS client to set up the ACL userCOMMENT
LOWtls_cert_auth_test.go67 // Step 2: Create ACL user with specific permissionsCOMMENT
LOWtls_cert_auth_test.go118 // Step 6: Connect with TLS using the certificateCOMMENT
LOWtls_cert_auth_test.go129 // Step 7: Verify we're authenticated as the correct userCOMMENT
LOWtls_cert_auth_test.go140 // Step 8: Test that we can execute allowed commandsCOMMENT
LOWtls_cert_auth_test.go154 // Step 9: Test that we CANNOT execute disallowed commandsCOMMENT
LOWtls_cert_auth_test.go183 // Step 1: Create a non-TLS client to ensure the user does NOT existCOMMENT
LOWtls_cert_auth_test.go255 // 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
LOWexample/tls-cert-auth/main.go60 // Step 2: Load CA certificateCOMMENT
LOWexample/tls-cert-auth/main.go68 // Step 3: Load client certificate (CN must match the Redis ACL username)COMMENT
LOWexample/tls-cert-auth/main.go77 // Step 4: Create TLS configCOMMENT
LOWexample/tls-cert-auth/main.go85 // Step 5: Connect to Redis with TLS - NO username/password needed!COMMENT
LOWexample/tls-cert-auth/main.go93 // Step 6: Verify authenticationCOMMENT
LOWexample/tls-cert-auth/main.go100 // Step 7: Test some commandsCOMMENT
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
LOWlogging/logging.go41// NOTE: This function is not thread-safe.COMMENT
Verbosity Indicators29 hits · 50 pts
SeverityFileLineSnippetContext
LOWtls_cert_auth_test.go91 // Step 3: Load CA certificate for server verificationCOMMENT
LOWtls_cert_auth_test.go97 // Step 4: Load the pre-generated client certificate with CN=testcertuserCOMMENT
LOWtls_cert_auth_test.go107 // Step 5: Create TLS config with the client certificateCOMMENT
LOWtls_cert_auth_test.go209 // Step 2: Load CA certificate for server verificationCOMMENT
LOWtls_cert_auth_test.go215 // Step 3: Load the client certificate with CN=testcertuserCOMMENT
LOWtls_cert_auth_test.go225 // Step 4: Create TLS config with the client certificateCOMMENT
LOWtls_cert_auth_test.go236 // Step 5: Connect with TLS using the certificateCOMMENT
LOWtls_cert_auth_test.go243 // Step 6: Verify we're authenticated as "default" (fallback)COMMENT
LOWtls_cert_auth_test.go53 // Step 1: Create a non-TLS client to set up the ACL userCOMMENT
LOWtls_cert_auth_test.go67 // Step 2: Create ACL user with specific permissionsCOMMENT
LOWtls_cert_auth_test.go118 // Step 6: Connect with TLS using the certificateCOMMENT
LOWtls_cert_auth_test.go129 // Step 7: Verify we're authenticated as the correct userCOMMENT
LOWtls_cert_auth_test.go140 // Step 8: Test that we can execute allowed commandsCOMMENT
LOWtls_cert_auth_test.go154 // Step 9: Test that we CANNOT execute disallowed commandsCOMMENT
LOWtls_cert_auth_test.go183 // Step 1: Create a non-TLS client to ensure the user does NOT existCOMMENT
LOWtls_cert_auth_test.go255 // 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
LOWexample/tls-cert-auth/main.go60 // Step 2: Load CA certificateCOMMENT
LOWexample/tls-cert-auth/main.go68 // Step 3: Load client certificate (CN must match the Redis ACL username)COMMENT
LOWexample/tls-cert-auth/main.go77 // Step 4: Create TLS configCOMMENT
LOWexample/tls-cert-auth/main.go85 // Step 5: Connect to Redis with TLS - NO username/password needed!COMMENT
LOWexample/tls-cert-auth/main.go93 // Step 6: Verify authenticationCOMMENT
LOWexample/tls-cert-auth/main.go100 // Step 7: Test some commandsCOMMENT
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
Synthetic Comment Markers1 hit · 8 pts
SeverityFileLineSnippetContext
HIGHosscluster_test.go2611 // Values should be in the same order as requested keysCOMMENT
Fake / Example Data3 hits · 3 pts
SeverityFileLineSnippetContext
LOWsearch_builders_test.go324 client.HSet(ctx, "doc1", "title", "hello world", "body", "lorem ipsum")CODE
LOWsearch_test.go313 client.HSet(ctx, "doc2", "f1", "very important", "f2", "lorem ipsum")CODE
LOWsearch_test.go4478 client.HSet(ctx, "doc2", "f1", "very important", "f2", "lorem ipsum")CODE