AI Slop Code RIsk Monitor

caddyserver/caddy

Fast and extensible multi-platform HTTP/1-2-3 web server with automatic HTTPS

5.0 Moderate pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for caddyserver/caddy, a Go project with 77,686 GitHub stars. SynthScan examined 129,670 lines of code across 447 source files, recording 622 pattern matches distributed across 9 syntactic categories. The legacy adjusted pattern signal is 5.0 (Moderate 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.

5.0
Adjusted Signal
5.0
Raw Pattern Score
100%
Time Factor
2026-10-10
Last Push
77.7K
Stars
Go
Language
129.7K
Lines of Code
447
Files
622
Pattern Hits
2026-10-12
Scan Date
0.00
HC Hit Rate

Risk Review · v3

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

Cognitive Ownership Risk 22.1/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.1/100 · LOW

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

Agent Over-Engineering Ratio 0.0/100 · LOW

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

PR Review Velocity Impact 22.1/100 · LOW

Which changes need focused human review? 622 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 12LOW 610

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 622 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 Block598 hits · 598 pts
SeverityFileLineSnippetContext
LOWadmin_origin_case_test.go1// Copyright 2015 Matthew Holt and The Caddy AuthorsCOMMENT
LOWusagepool.go1// Copyright 2015 Matthew Holt and The Caddy AuthorsCOMMENT
LOWusagepool.go21)COMMENT
LOWusagepool.go41// their lifespan. This is helpful, for example, whenCOMMENT
LOWlisteners.go1// Copyright 2015 Matthew Holt and The Caddy AuthorsCOMMENT
LOWlisteners.go41// NetworkAddress represents one or more network addresses.COMMENT
LOWlisteners.go101}COMMENT
LOWlisteners.go121// listeners, be sure to Close() them when you are done.COMMENT
LOWlisteners.go701 return network + "/" + addrCOMMENT
LOWlisteners_port_span_test.go1// Copyright 2015 Matthew Holt and The Caddy AuthorsCOMMENT
LOWlogging.go1// Copyright 2015 Matthew Holt and The Caddy AuthorsCOMMENT
LOWlogging.go41// Logging facilitates logging within Caddy. The default log isCOMMENT
LOWlogging.go61// servers.COMMENT
LOWlogging.go461COMMENT
LOWcaddy_test.go1// Copyright 2015 Matthew Holt and The Caddy AuthorsCOMMENT
LOWsigtrap.go1// Copyright 2015 Matthew Holt and The Caddy AuthorsCOMMENT
LOWservice_windows.go1// Copyright 2015 Matthew Holt and The Caddy AuthorsCOMMENT
LOWreplacer_fuzz.go1// Copyright 2015 Matthew Holt and The Caddy AuthorsCOMMENT
LOWusagepool_test.go1// Copyright 2015 Matthew Holt and The Caddy AuthorsCOMMENT
LOWadmin_checkhost_case_test.go1// Copyright 2015 Matthew Holt and The Caddy AuthorsCOMMENT
LOWlisten_unix_test.go1// Copyright 2015 Matthew Holt and The Caddy AuthorsCOMMENT
LOWfilesystem.go1// Copyright 2015 Matthew Holt and The Caddy AuthorsCOMMENT
LOWadmin_test.go1// Copyright 2015 Matthew Holt and The Caddy AuthorsCOMMENT
LOWlogging_test.go1// Copyright 2015 Matthew Holt and The Caddy AuthorsCOMMENT
LOWlisteners_fuzz.go1// Copyright 2015 Matthew Holt and The Caddy AuthorsCOMMENT
LOWcontext_test.go1// Copyright 2015 Matthew Holt and The Caddy AuthorsCOMMENT
LOWstorage.go1// Copyright 2015 Matthew Holt and The Caddy AuthorsCOMMENT
LOWstorage.go101}COMMENT
LOWmodules_test.go1// Copyright 2015 Matthew Holt and The Caddy AuthorsCOMMENT
LOWfilepath_windows.go1// Copyright 2015 Matthew Holt and The Caddy AuthorsCOMMENT
LOWadmin.go1// Copyright 2015 Matthew Holt and The Caddy AuthorsCOMMENT
LOWadmin.go61 // by setting the `CADDY_ADMIN` environment variable.COMMENT
LOWadmin.go81 // parsed by Caddy. Accepts placeholders.COMMENT
LOWadmin.go101 // socket's network interface or if `enforce_origin` is true. If notCOMMENT
LOWadmin.go121 //COMMENT
LOWadmin.go141 LoadRaw json.RawMessage `json:"load,omitempty" caddy:"namespace=caddy.config_loaders inline_key=module"`COMMENT
LOWadmin.go161 // secure TLS connections can be made using them.COMMENT
LOWadmin.go181// EXPERIMENTAL: Subject to change.COMMENT
LOWadmin.go301func (admin AdminConfig) allowedOrigins(addr NetworkAddress) []*url.URL {COMMENT
LOWadmin.go321 // security checks, the infosec community assures me that it is secure to doCOMMENT
LOWadmin.go361 origin = &url.URL{Host: originStr}COMMENT
LOWcontext.go1// Copyright 2015 Matthew Holt and The Caddy AuthorsCOMMENT
LOWcontext.go141// pointer and returns the loaded module(s). The struct pointer and its field name asCOMMENT
LOWcontext.go161// in the "http.handlers" namespace, you'd put: `namespace=http.handlers` in theCOMMENT
LOWcontext.go461 }COMMENT
LOWcontext.go561// Originally, this method's signature was `Logger(mod Module)`,COMMENT
LOWlisten_unix.go1// Copyright 2015 Matthew Holt and The Caddy AuthorsCOMMENT
LOWlisten_reuseUnixSocket_windows.go1// Copyright 2015 Matthew Holt and The Caddy AuthorsCOMMENT
LOWreplacer.go1// Copyright 2015 Matthew Holt and The Caddy AuthorsCOMMENT
LOWreplacer_test.go1// Copyright 2015 Matthew Holt and The Caddy AuthorsCOMMENT
LOWsigtrap_nonposix.go1// Copyright 2015 Matthew Holt and The Caddy AuthorsCOMMENT
LOWcaddy.go1// Copyright 2015 Matthew Holt and The Caddy AuthorsCOMMENT
LOWcaddy.go41COMMENT
LOWcaddy.go61// have good, documented default values. If a parameter is required, the docsCOMMENT
LOWcaddy.go141 return errCOMMENT
LOWcaddy.go401COMMENT
LOWcaddy.go481// If `newCfg` is nil a new empty configuration will be created.COMMENT
LOWcaddy.go941// CustomVersion is an optional string that overrides Caddy'sCOMMENT
LOWcaddy.go961// Set this variable during `go build` with `-ldflags`:COMMENT
LOWcaddy.go981var CustomLongDescription stringCOMMENT
538 more matches not shown…
AI Slop Vocabulary12 hits · 33 pts
SeverityFileLineSnippetContext
MEDIUMlisteners.go397 // port to take advantage of standard library's robust parser, thenCOMMENT
MEDIUMcaddyconfig/caddyfile/formatter_test.go908 // equal that of the input. This is stronger and more robust than comparingCOMMENT
MEDIUMcaddyconfig/httpcaddyfile/addresses.go192// Identical entries are deleted from the addrToServerBlocks map. Essentially, each pairing (eachCOMMENT
MEDIUMmodules/caddyhttp/app.go43// App is a robust, production-ready HTTP server.COMMENT
MEDIUM⚡…ddyhttp/encode/testdata/caddy_config_http_servers.json1{"status_code":200,"result":{"structure":{"type":"map","map_keys":{"type":"string"},"elems":{"type":"struct","type_name"CODE
MEDIUM⚡…ddyhttp/encode/testdata/caddy_config_http_servers.json1{"status_code":200,"result":{"structure":{"type":"map","map_keys":{"type":"string"},"elems":{"type":"struct","type_name"CODE
MEDIUM⚡…ddyhttp/encode/testdata/caddy_config_http_servers.json1{"status_code":200,"result":{"structure":{"type":"map","map_keys":{"type":"string"},"elems":{"type":"struct","type_name"CODE
LOW⚡…ddyhttp/encode/testdata/caddy_config_http_servers.json1{"status_code":200,"result":{"structure":{"type":"map","map_keys":{"type":"string"},"elems":{"type":"struct","type_name"CODE
MEDIUM⚡…ddyhttp/encode/testdata/caddy_config_http_servers.json1{"status_code":200,"result":{"structure":{"type":"map","map_keys":{"type":"string"},"elems":{"type":"struct","type_name"CODE
LOWmodules/caddyhttp/headers/headers.go343 // see issue #4330 for why we don't simply use hdr[fieldName]COMMENT
MEDIUMmodules/caddytls/ech.go442 // TODO: Potentially utilize the timestamp (map value) for recent-enough publication, instead of just checking for COMMENT
MEDIUMmodules/caddytls/tls.go541 // It's a bit nuanced: managed certs can sometimes be different enough that we have toCOMMENT
Slop Phrases2 hits · 4 pts
SeverityFileLineSnippetContext
LOWmodules/caddyhttp/encode/testdata/caddy_home.html1311 <div title="Don't forget to sign our guestbook!"><img alt="0" title="Hit counter" src="data:image/png;base64,iVBORw0KCODE
MEDIUM⚡…ddyhttp/encode/testdata/caddy_config_http_servers.json1{"status_code":200,"result":{"structure":{"type":"map","map_keys":{"type":"string"},"elems":{"type":"struct","type_name"CODE
Redundant / Tautological Comments2 hits · 3 pts
SeverityFileLineSnippetContext
LOW.github/workflows/release.yml238 # Check if commits match (if proposal had a target commit)COMMENT
LOW.github/workflows/release-proposal.yml61 # Check if commit existsCOMMENT
Self-Referential Comments1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUM.github/workflows/release-proposal.yml135 # Create a new branch for the release proposalCOMMENT
TODO Padding2 hits · 3 pts
SeverityFileLineSnippetContext
LOWmodules/caddyhttp/reverseproxy/fastcgi/client.go143 // keepAlive bool // TODO: implementCOMMENT
LOWmodules/caddypki/maintain.go71 // TODO: implement root renewal (use same key)COMMENT
Structural Annotation Overuse2 hits · 3 pts
SeverityFileLineSnippetContext
LOWmodules/caddyhttp/templates/tplcontext.go531// NOTE: This function is EXPERIMENTAL and subject to change or removal.COMMENT
LOWmodules/caddyhttp/templates/templates.go368// NOTE: This function is EXPERIMENTAL and subject to change or removal.COMMENT
Fake / Example Data2 hits · 2 pts
SeverityFileLineSnippetContext
LOWreplacer_test.go544 name: "placeholder",CODE
LOWmodules/caddyhttp/templates/tplcontext.go91 "placeholder": c.funcPlaceholder,CODE
Verbosity Indicators1 hit · 2 pts
SeverityFileLineSnippetContext
LOWmodules/caddyhttp/rewrite/rewrite.go228 // before continuing, we need to check if a query stringCOMMENT