AI Slop Code RIsk Monitor

nginx-proxy/nginx-proxy

Automated Nginx Reverse Proxy for Docker

18.8 Elevated pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for nginx-proxy/nginx-proxy, a Python project with 19,923 GitHub stars. SynthScan examined 9,638 lines of code across 234 source files, recording 147 pattern matches distributed across 7 syntactic categories. The legacy adjusted pattern signal is 18.8 (Elevated 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.

18.8
Adjusted Signal
18.8
Raw Pattern Score
100%
Time Factor
2026-10-07
Last Push
19.9K
Stars
Python
Language
9.6K
Lines of Code
234
Files
147
Pattern Hits
2026-10-12
Scan Date
0.01
HC Hit Rate

Risk Review · v3

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

Cognitive Ownership Risk 56.9/100 · HIGH

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

Hallucinated Dependency & Supply Chain Risk 0.5/100 · LOW

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

Agent Over-Engineering Ratio 59.1/100 · HIGH

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

PR Review Velocity Impact 58.2/100 · HIGH

Which changes need focused human review? 147 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 3MEDIUM 3LOW 141

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 147 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.

Hyper-Verbose Identifiers137 hits · 154 pts
SeverityFileLineSnippetContext
LOWtest/conftest.py103 def get_nginx_proxy_container() -> Container:CODE
LOWtest/conftest.py265def docker_container_dns_resolver(domain_name: str) -> Optional[str]:CODE
LOWtest/conftest.py294def monkey_patch_urllib_dns_resolver():CODE
LOWtest/conftest.py337def restore_urllib_dns_resolver(getaddrinfo_func):CODE
LOWtest/conftest.py341def get_nginx_conf_from_container(container: Container) -> bytes:CODE
LOWtest/conftest.py356def __prepare_and_execute_compose_cmd(compose_files: List[str], project_name: str, cmd: str):CODE
LOWtest/conftest.py392def wait_for_nginxproxy_to_be_ready():CODE
LOWtest/conftest.py676def pytest_runtest_makereport(item, call):CODE
LOWtest/test_resolvers/test_resolvers.py17def test_user_provided_resolvers_is_honored(docker_compose):CODE
LOWtest/test_resolvers/test_resolvers.py24def test_resolvers_are_autodetected_when_unset(docker_compose):CODE
LOWtest/test_nominal/test_nominal.py7def test_unknown_virtual_host(docker_compose, nginxproxy):CODE
LOWtest/test_nominal/test_nominal.py33def test_container_version_is_displayed(docker_compose, nginxproxy):CODE
LOWtest/test_virtual-proto/test_virtual-proto.py5def test_upstream_with_https_virtual_proto(docker_compose, nginxproxy, subdomain):CODE
LOW⚡…st_acme-http-challenge-location-accept-unknown-host.py1def test_redirect_acme_challenge_location_enabled(docker_compose, nginxproxy, acme_challenge_path):CODE
LOW⚡…st_acme-http-challenge-location-accept-unknown-host.py8def test_redirect_acme_challenge_location_disabled(docker_compose, nginxproxy, acme_challenge_path):CODE
LOW⚡…st_acme-http-challenge-location-accept-unknown-host.py15def test_noredirect_acme_challenge_location_enabled(docker_compose, nginxproxy, acme_challenge_path):CODE
LOW⚡…st_acme-http-challenge-location-accept-unknown-host.py22def test_noredirect_acme_challenge_location_disabled(docker_compose, nginxproxy, acme_challenge_path):CODE
LOW⚡…st_acme-http-challenge-location-accept-unknown-host.py29def test_unknown_domain_acme_challenge_location_default_enabled(docker_compose, nginxproxy, acme_challenge_path):CODE
LOW⚡…location/test_acme-http-challenge-location-disabled.py1def test_redirect_acme_challenge_location_disabled(docker_compose, nginxproxy, acme_challenge_path):CODE
LOW⚡…location/test_acme-http-challenge-location-disabled.py8def test_redirect_acme_challenge_location_enabled(docker_compose, nginxproxy, acme_challenge_path):CODE
LOW⚡…location/test_acme-http-challenge-location-disabled.py15def test_noredirect_acme_challenge_location_disabled(docker_compose, nginxproxy, acme_challenge_path):CODE
LOW⚡…location/test_acme-http-challenge-location-disabled.py22def test_noredirect_acme_challenge_location_enabled(docker_compose, nginxproxy, acme_challenge_path):CODE
LOW⚡…location/test_acme-http-challenge-location-disabled.py29def test_unknown_domain_acme_challenge_location_disabled(docker_compose, nginxproxy, acme_challenge_path):CODE
LOW⚡…est_acme-http-challenge-location-enabled-is-default.py1def test_redirect_acme_challenge_location_enabled(docker_compose, nginxproxy, acme_challenge_path):CODE
LOW⚡…est_acme-http-challenge-location-enabled-is-default.py8def test_redirect_acme_challenge_location_disabled(docker_compose, nginxproxy, acme_challenge_path):CODE
LOW⚡…est_acme-http-challenge-location-enabled-is-default.py15def test_noredirect_acme_challenge_location_enabled(docker_compose, nginxproxy, acme_challenge_path):CODE
LOW⚡…est_acme-http-challenge-location-enabled-is-default.py22def test_noredirect_acme_challenge_location_disabled(docker_compose, nginxproxy, acme_challenge_path):CODE
LOW⚡…est_acme-http-challenge-location-enabled-is-default.py29def test_unknown_domain_acme_challenge_location_default_enabled(docker_compose, nginxproxy, acme_challenge_path):CODE
LOW⚡…e-location/test_acme-http-challenge-location-legacy.py1def test_redirect_acme_challenge_location_legacy(docker_compose, nginxproxy, acme_challenge_path):CODE
LOW⚡…e-location/test_acme-http-challenge-location-legacy.py8def test_noredirect_acme_challenge_location_legacy(docker_compose, nginxproxy, acme_challenge_path):CODE
LOW⚡…e-location/test_acme-http-challenge-location-legacy.py15def test_unknown_domain_acme_challenge_location_legacy(docker_compose, nginxproxy, acme_challenge_path):CODE
LOWtest/test_ssl/test_nohttps.py16def test_http_acme_challenge_does_not_work(docker_compose, nginxproxy, acme_challenge_path):CODE
LOWtest/test_ssl/test_cert-selection.py12def test_certificate_selection(CODE
LOWtest/test_ssl/test_mtls-client-certificate.py46def test_mtls_client_certificates(docker_compose, nginxproxy, clientcerts, description, url, cert, expected_code, expectCODE
LOWtest/test_ssl/test_virtual-path.py20def test_acme_challenge_does_not_work(docker_compose, nginxproxy, acme_challenge_path, port):CODE
LOWtest/test_ssl/test_redirect_default.py15def test_default_redirect_by_method(CODE
LOWtest/test_ssl/test_redirect_custom.py24def test_custom_redirect_by_method(CODE
LOWtest/test_ssl/test_wildcard-cert-nohttps.py12def test_http_redirects_to_https(docker_compose, nginxproxy, subdomain, should_redirect_to_https):CODE
LOWtest/test_ssl/test_wildcard-cert-nohttps.py28def test_https_request_to_nohttps_vhost_goes_to_fallback_server(docker_compose, nginxproxy):CODE
LOWtest/test_ssl/test_wildcard-cert-nohttps.py43def test_acme_challenge_works(CODE
LOWtest/test_ssl/test_dhparam.py92def can_negotiate_dhe_ciphersuite(sut_container, dh_bits=4096, additional_params=''):CODE
LOWtest/test_ssl/test_dhparam.py104def cannot_negotiate_dhe_ciphersuite(sut_container):CODE
LOWtest/test_ssl/test_dhparam.py128def can_verify_chain_of_trust(sut_container, ca_cert, fqdn):CODE
LOWtest/test_ssl/test_dhparam.py135def should_be_equivalent_content(sut_container, expected, actual):CODE
LOWtest/test_ssl/test_dhparam.py177def test_can_change_dhparam_group(docker_compose):CODE
LOWtest/test_ssl/test_dhparam.py194def test_fail_if_dhparam_group_not_supported(docker_compose):CODE
LOWtest/test_ssl/test_dhparam.py209def test_custom_dhparam_is_supported(docker_compose):CODE
LOWtest/test_ssl/test_dhparam.py231def test_custom_dhparam_is_supported_per_site(docker_compose, ca_root_certificate):CODE
LOWtest/test_ssl/test_dhparam.py272def test_can_skip_dhparam_backward_compatibility(docker_compose):CODE
LOW⚡test/test_debug-endpoint/test_per-container.py6def test_debug_endpoint_is_disabled_globally(docker_compose, nginxproxy):CODE
LOW⚡test/test_debug-endpoint/test_per-container.py13def test_debug_endpoint_is_enabled_per_container(docker_compose, nginxproxy):CODE
LOW⚡test/test_debug-endpoint/test_per-container.py18def test_debug_endpoint_response_contains_expected_values(docker_compose, nginxproxy):CODE
LOWtest/test_debug-endpoint/test_global.py6def test_debug_endpoint_is_enabled_globally(docker_compose, nginxproxy):CODE
LOWtest/test_debug-endpoint/test_global.py13def test_debug_endpoint_response_contains_expected_values(docker_compose, nginxproxy):CODE
LOWtest/test_debug-endpoint/test_global.py24def test_debug_endpoint_paths_stripped_if_response_too_long(docker_compose, nginxproxy):CODE
LOWtest/test_debug-endpoint/test_global.py36def test_debug_endpoint_hostname_replaced_by_warning_if_regexp(docker_compose, nginxproxy):CODE
LOWtest/test_debug-endpoint/test_global.py46def test_debug_endpoint_is_disabled_per_container(docker_compose, nginxproxy):CODE
LOWtest/test_external-ports/test_multiports-priority.py1def test_multiports_external_port_takes_precedence_over_virtualhost_external_port(docker_compose, nginxproxy):CODE
LOWtest/test_htpasswd/test_htpasswd-virtual-host.py1def test_htpasswd_virtual_host_is_restricted(docker_compose, nginxproxy):CODE
LOWtest/test_htpasswd/test_htpasswd-virtual-host.py8def test_htpasswd_virtual_host_basic_auth(docker_compose, nginxproxy):CODE
77 more matches not shown…
Empty Error Handlers3 hits · 15 pts
SeverityFileLineSnippetContext
HIGHtest/test_events/test_events.py30except NotFound:CODE
HIGHtest/test_events/test_events.py55except NotFound:CODE
HIGHtest/test_virtual-path/test_virtual-paths.py48except NotFound:CODE
Self-Referential Comments2 hits · 6 pts
SeverityFileLineSnippetContext
MEDIUMtest/certs/create_server_certificate.sh24# Create a nginx container (which conveniently provides the `openssl` command)COMMENT
MEDIUMtest/certs/create_server_certificate.sh138# Create a CA root certificateCOMMENT
Excessive Try-Catch Wrapping2 hits · 4 pts
SeverityFileLineSnippetContext
LOW⚡…t_proxy_protocol/test_proxy-protocol-global-enabled.py10 except Exception as e:CODE
MEDIUM…t_proxy_protocol/test_proxy-protocol-global-enabled.py4def test_proxy_protocol_global_enabled_normal_request_fails(docker_compose, nginCODE
Over-Commented Block1 hit · 1 pts
SeverityFileLineSnippetContext
LOWtest/pytest.sh1#!/bin/shCOMMENT
Unused Imports1 hit · 1 pts
SeverityFileLineSnippetContext
LOWtest/test_ssl/test_mtls-client-certificate.py4CODE
Deep Nesting1 hit · 1 pts
SeverityFileLineSnippetContext
LOWtest/requirements/web/webserver.py8CODE