AI Slop Code RIsk Monitor

docker-mailserver/docker-mailserver

Production-ready fullstack but simple mail server (SMTP, IMAP, LDAP, Antispam, Antivirus, etc.) running inside a container.

6.6 Moderate pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for docker-mailserver/docker-mailserver, a Shell project with 19,252 GitHub stars. SynthScan examined 22,174 lines of code across 182 source files, recording 92 pattern matches distributed across 8 syntactic categories. The legacy adjusted pattern signal is 6.6 (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.

6.6
Adjusted Signal
6.6
Raw Pattern Score
100%
Time Factor
2026-10-04
Last Push
19.3K
Stars
Shell
Language
22.2K
Lines of Code
182
Files
92
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 24.5/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.7/100 · LOW

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

Agent Over-Engineering Ratio 4.0/100 · LOW

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

PR Review Velocity Impact 27.4/100 · MEDIUM

Which changes need focused human review? 92 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 25LOW 67

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 92 distinct pattern matches across 8 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 Block56 hits · 56 pts
SeverityFileLineSnippetContext
LOWcompose.yaml21 - /etc/localtime:/etc/localtime:roCOMMENT
LOWtest/config/junk-mailbox/user-patches.sh1#!/bin/bashCOMMENT
LOWtest/config/dovecot-lmtp/user-patches.sh21# unix_listener lmtp {COMMENT
LOWtest/config/user-patches/user-patches.sh1#!/bin/bashCOMMENT
LOWtest/config/rspamd_full/user-patches.sh1#!/bin/bashCOMMENT
LOWtest/helper/log_and_filtering.bash1#!/bin/bashCOMMENT
LOWtest/helper/change-detection.bash1#!/bin/bashCOMMENT
LOWtest/helper/common.bash1#!/bin/bashCOMMENT
LOWtest/helper/common.bash21 load "${REPOSITORY_ROOT}/test/helper/log_and_filtering"COMMENT
LOWtest/helper/common.bash41# If neither an explicit non-empty argument is given nor `CONTAINER_NAME`COMMENT
LOWtest/helper/common.bash101# Execute a command inside the container with name ${CONTAINER_NAME}. The commandCOMMENT
LOWtest/helper/common.bash121COMMENT
LOWtest/helper/common.bash421 [[ -v CONTAINER_NAME ]] || return 1COMMENT
LOWtest/helper/sending.bash1#!/bin/bashCOMMENT
LOWtest/helper/sending.bash21# The very first parameter **may** be `--expect-rejection` - use it of you expect the mail transaction to not finishCOMMENT
LOWtest/helper/sending.bash101 echo "${output}"COMMENT
LOWtest/helper/setup.bash1#!/bin/bashCOMMENT
LOWtest/helper/setup.bash41COMMENT
LOWtest/helper/setup.bash81# - Use `local <VARIABLE>` to override within a specific test case.COMMENT
LOWtest/helper/setup.bash101 export TEST_FILES_VOLUME="${REPOSITORY_ROOT}/test/files:${TEST_FILES_CONTAINER_PATH}:ro"COMMENT
LOWtest/helper/tls.bash1#!/bin/bashCOMMENT
LOWconfig-examples/user-patches.sh1#!/bin/bashCOMMENT
LOWtarget/scripts/check-for-changes.sh1#!/bin/bashCOMMENT
LOWtarget/scripts/startup/variables-stack.sh41 _log 'error' "'ENABLE_RSPAMD_REDIS' has been renamed to 'ENABLE_RSPAMD_VALKEY' since DMS v17"COMMENT
LOWtarget/scripts/startup/setup.d/dovecot.sh21 # Dovecot 3.0 docs:COMMENT
LOWtarget/scripts/helpers/relay.sh1#!/bin/bashCOMMENT
LOWtarget/scripts/helpers/relay.sh21#COMMENT
LOWtarget/scripts/helpers/relay.sh41# There is a minor chance of a lookup occurring during a rebuild of these files that may affect or delay delivery?COMMENT
LOWtarget/scripts/helpers/relay.sh101 'smtp_tls_security_level = encrypt'COMMENT
LOWtarget/scripts/helpers/relay.sh201}COMMENT
LOWtarget/scripts/helpers/relay.sh221# relay-service.test relay-account:relay-passCOMMENT
LOWtarget/scripts/helpers/relay.sh241# setup /etc/postfix/relayhost_mapCOMMENT
LOWtarget/scripts/helpers/relay.sh261# smtp_tls_security_level = encryptCOMMENT
LOWtarget/scripts/helpers/relay.sh281COMMENT
LOWtarget/scripts/helpers/relay.sh301# https://www.mailjet.com/blog/news/which-smtp-port-mailjet/#port-465COMMENT
LOWtarget/scripts/helpers/relay.sh321# and incorrectly describe how they deliver mail:COMMENT
LOWtarget/scripts/helpers/relay.sh341#COMMENT
LOWtarget/scripts/helpers/utils.sh101COMMENT
LOWtarget/scripts/helpers/ssl.sh161 # This same sequence is used for the Traefik `acme.json` certificate extraction process, which outputs the FQDN foCOMMENT
LOWtarget/scripts/helpers/ssl.sh321 # smtpd_tls_security_level (default: 'may', port 587 'encrypt') | http://www.postfix.org/postconf.5.html#smtpd_tlsCOMMENT
LOWtarget/scripts/helpers/dns.sh1#!/bin/bashCOMMENT
LOWtarget/scripts/helpers/dns.sh21 # TODO: `OVERRIDE_HOSTNAME` was introduced for non-Docker runtimes that could not configure an explicit hostname.COMMENT
LOWtarget/scripts/helpers/dns.sh41 # Emulates the intended behaviour of `hostname -d`:COMMENT
LOWtarget/scripts/helpers/accounts.sh81# Required when using Dovecot Quotas to avoid blacklisting risk from backscatter.COMMENT
LOWtarget/scripts/helpers/log.sh21LCYAN=$(echo -ne '\e[1;36m')COMMENT
LOWtarget/scripts/helpers/rspamd.sh81 #COMMENT
LOWtarget/scripts/helpers/postfix.sh1#!/bin/bashCOMMENT
LOWtarget/scripts/helpers/postfix.sh81 [[ ${ACCOUNT_PROVISIONER} == 'LDAP' ]] && echo "${DOMAINNAME}" >>"${TMP_VHOST}"COMMENT
LOW…get/scripts/helpers/database/manage/postfix-virtual.sh1#!/bin/bashCOMMENT
LOWdocs/content/faq.md421 Edit the system cron file `nano ./docker-data/dms/cron/sa-learn`, and set an appropriate configuration:COMMENT
LOWdocs/content/config/advanced/full-text-search.md61 # falls back to a slow non-indexed search.COMMENT
LOW…content/config/advanced/mail-forwarding/relay-hosts.md121 ```cf-extraCOMMENT
LOW…cs/content/examples/use-cases/ios-mail-push-support.md141 # 2. You don't need your mailboxes to synchronize immediately since they are automatically synchronized when opeCOMMENT
LOW.github/FUNDING.yml1github: [georglauterbach]COMMENT
LOW.github/workflows/docs-preview-deploy.yml101 with:COMMENT
LOW.github/workflows/docs-preview-deploy.yml121 # Disable adding a comment about successful deployment status to the PR.COMMENT
Self-Referential Comments16 hits · 48 pts
SeverityFileLineSnippetContext
MEDIUMtest/helper/common.bash16# This function is internal and should not be used in tests.COMMENT
MEDIUMtest/helper/common.bash54# This function is internal and should not be used in tests.COMMENT
MEDIUMtest/helper/setup.bash17# This function is internal and should not be used in tests.COMMENT
MEDIUMtest/helper/setup.bash56# Create a dedicated configuration directory for a test file.COMMENT
MEDIUMtarget/scripts/startup/variables-stack.sh20# This function handles variables that are deprecated. This allows aCOMMENT
MEDIUMtarget/scripts/startup/variables-stack.sh197# This function handles environment variables related to LDAP.COMMENT
MEDIUMtarget/scripts/startup/variables-stack.sh215# This function handles environment variables related to SASLAUTHDCOMMENT
MEDIUMtarget/scripts/startup/setup.d/getmail.sh14 # Create the directory /etc/getmailrc.d to place the user config in later.COMMENT
MEDIUMtarget/scripts/startup/setup.d/saslauthd.sh13 # Create a config based on ENVCOMMENT
MEDIUMtarget/scripts/startup/setup.d/fetchmail.sh71 # Create a new fetchmail config for this poll entry:COMMENT
MEDIUMtarget/scripts/startup/setup.d/security/rspamd.sh3# This file is executed during startup of DMS. Hence, the `index.sh` helper has alreadyCOMMENT
MEDIUMtarget/scripts/startup/setup.d/security/rspamd.sh277# This function handles setup of the Hfilter module (seeCOMMENT
MEDIUMtarget/scripts/startup/setup.d/security/rspamd.sh303# This function handles setup of the neural module (seeCOMMENT
MEDIUMtarget/scripts/helpers/relay.sh125 # Create the relayhost_map config file:COMMENT
MEDIUMtarget/scripts/helpers/log.sh29# This function provides the logging for scripts used by DMS.COMMENT
MEDIUMtarget/scripts/helpers/rspamd.sh20# Create a temporary log file (with `mktemp`) that one can filter to searchCOMMENT
Decorative Section Separators6 hits · 18 pts
SeverityFileLineSnippetContext
MEDIUMtarget/scripts/start-mailserver.sh10# ------------------------------------------------------------COMMENT
MEDIUMtarget/scripts/start-mailserver.sh12# ------------------------------------------------------------COMMENT
MEDIUMtarget/scripts/start-mailserver.sh29# ------------------------------------------------------------COMMENT
MEDIUMtarget/scripts/start-mailserver.sh33# ------------------------------------------------------------COMMENT
MEDIUMtarget/scripts/start-mailserver.sh163# ------------------------------------------------------------COMMENT
MEDIUMtarget/scripts/start-mailserver.sh167# ------------------------------------------------------------COMMENT
Redundant / Tautological Comments6 hits · 9 pts
SeverityFileLineSnippetContext
LOWtest/helper/change-detection.bash80 # Read file in reverse, collect lines until match with sed is found,COMMENT
LOWtest/helper/common.bash383# Check if a container is running.COMMENT
LOWtarget/scripts/startup/setup.d/getmail.sh17 # Check if custom getmailrc_general.cf file is present.COMMENT
LOWtarget/scripts/startup/setup.d/security/rspamd.sh286 # Check if we received a number firstCOMMENT
LOWtarget/scripts/helpers/utils.sh153# Check if an environment variable's value is zero or one. This aids in checking variablesCOMMENT
LOWtarget/scripts/helpers/utils.sh176# Check if an environment variable's value is an integer.COMMENT
AI Slop Vocabulary3 hits · 9 pts
SeverityFileLineSnippetContext
MEDIUMtest/helper/common.bash27# test suite more robust as we can be sure that the container name isCOMMENT
MEDIUMtarget/scripts/helpers/relay.sh117# By sender: `sender_dependent_default_transport_maps = texthash:/etc/postfix/sender_transport_map` (the current opt-oCOMMENT
MEDIUM…et/scripts/helpers/database/manage/postfix-accounts.sh48# Dovecot Master account support can leverage the same management logic:COMMENT
Fake / Example Data3 hits · 3 pts
SeverityFileLineSnippetContext
LOWtest/files/emails/quota-exceeded.txt6Lorem ipsum dolor sit amet. Et quidem architecto id Quis saepe vel corporis odit aut nesciunt nisi. Et voluptatem exerciCODE
LOWtest/files/emails/quota-exceeded.txt6Lorem ipsum dolor sit amet. Et quidem architecto id Quis saepe vel corporis odit aut nesciunt nisi. Et voluptatem exerciCODE
LOWdocs/content/config/security/ssl.md453 LETSENCRYPT_mail_EMAIL='admin@example.com'CODE
Slop Phrases1 hit · 2 pts
SeverityFileLineSnippetContext
LOWconfig-examples/user-patches.sh6# If you modify any supervisord configuration, make sure to runCOMMENT
Deep Nesting1 hit · 1 pts
SeverityFileLineSnippetContext
LOWtarget/bin/acme_extract.py22CODE