From 90779e87ef473b272fffcae42ed90e0d537cde3d Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Tue, 7 Apr 2026 06:51:24 -0400 Subject: [PATCH 01/38] spelling: . used by Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- data/settings.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/data/settings.js b/data/settings.js index ade5ddd2c..f45aea0dd 100644 --- a/data/settings.js +++ b/data/settings.js @@ -1598,7 +1598,7 @@ yielded no (implicit) keep.` values: setting_types.STRING, text: ` Points to a directory relative to the [[setting,base_dir]] where -the plugin looks for script service sockets for the \`vnd.dovecot.pipe\` +the plugin looks for script service sockets. Used by the \`vnd.dovecot.pipe\` extension.` }, @@ -1607,7 +1607,7 @@ extension.` values: setting_types.STRING, text: ` Points to a directory relative to the [[setting,base_dir]] where -the plugin looks for script service sockets for the \`vnd.dovecot.filter\` +the plugin looks for script service sockets. Used by the \`vnd.dovecot.filter\` extension.` }, @@ -1616,8 +1616,8 @@ extension.` values: setting_types.STRING, text: ` Points to a directory relative to the [[setting,base_dir]] where -the plugin looks for script service sockets for the \`vnd.dovecot.execute\` -extension.` +the plugin looks for script service sockets. Used by the +\`vnd.dovecot.execute\` extension.` }, 'sieve_pipe_bin_dir': { @@ -1625,8 +1625,8 @@ extension.` values: setting_types.STRING, text: ` Points to a directory where the plugin looks for programs (shell -scripts) to execute directly and pipe messages to for the \`vnd.dovecot.pipe\` -extension.` +scripts) to execute directly and pipe messages to. Used by the +\`vnd.dovecot.pipe\` extension.` }, 'sieve_filter_bin_dir': { @@ -1634,7 +1634,7 @@ extension.` values: setting_types.STRING, text: ` Points to a directory where the plugin looks for programs (shell -scripts) to execute directly and filter messages through for the +scripts) to execute directly and filter messages through. Used by the \`vnd.dovecot.filter\` extension.` }, @@ -1643,7 +1643,7 @@ scripts) to execute directly and filter messages through for the values: setting_types.STRING, text: ` Points to a directory where the plugin looks for programs (shell -scripts) to execute directly for the \`vnd.dovecot.execute\` extension.` +scripts) to execute directly. Used by the \`vnd.dovecot.execute\` extension.` }, 'sieve_pipe_exec_timeout': { From 36970e49af80a268d352cc8c2a5fabfa572576ee Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Tue, 7 Apr 2026 05:47:44 -0400 Subject: [PATCH 02/38] spelling: a Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- data/lua.js | 2 +- docs/core/admin/lua/lib_lua.md | 2 +- docs/core/config/proxy/referrals.md | 2 +- docs/core/man/include/doveadm-dict.inc | 2 +- docs/core/man/pigeonhole.7.md | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/data/lua.js b/data/lua.js index 6a3d89f91..52d403167 100644 --- a/data/lua.js +++ b/data/lua.js @@ -607,7 +607,7 @@ debugging.` name: 'passthrough_event', tags: [ 'event' ], text: ` -Returns an passthrough event. +Returns a passthrough event. A log message *must be* logged or else a panic will occur.` }, diff --git a/docs/core/admin/lua/lib_lua.md b/docs/core/admin/lua/lib_lua.md index e0e16ff54..679f5392e 100644 --- a/docs/core/admin/lua/lib_lua.md +++ b/docs/core/admin/lua/lib_lua.md @@ -53,7 +53,7 @@ Pushes an Dovecot Event to stack. ### `void dlua_push_timeval(lua_State *L, const struct timeval *tv)` -Pushes an timeval struct to stack as integer. +Pushes a timeval struct to stack as integer. ## Lua API diff --git a/docs/core/config/proxy/referrals.md b/docs/core/config/proxy/referrals.md index 77da6e114..08ccb9a9d 100644 --- a/docs/core/config/proxy/referrals.md +++ b/docs/core/config/proxy/referrals.md @@ -11,7 +11,7 @@ Login referrals are an IMAP extension specified by [[rfc,2221]]. It is practically not used by anyone, so this page exists mainly for historical reasons. -Their purpose is to redirect clients to an different IMAP server in case +Their purpose is to redirect clients to a different IMAP server in case of hardware failures or organizational changes. No client action is needed to invoke the LOGIN-REFERRALS capability: the redirection is triggered by the server and occurs transparently. diff --git a/docs/core/man/include/doveadm-dict.inc b/docs/core/man/include/doveadm-dict.inc index 155d017bf..8ca9c7225 100644 --- a/docs/core/man/include/doveadm-dict.inc +++ b/docs/core/man/include/doveadm-dict.inc @@ -74,7 +74,7 @@ Fetch a key from a dictionary. [**-1RV**] *config-filter-name* *prefix* -Find the keys matching the a prefix in a dictionary. +Find the keys matching a prefix in a dictionary. **-1** : Exact match. diff --git a/docs/core/man/pigeonhole.7.md b/docs/core/man/pigeonhole.7.md index 3ed411ca2..83a69ec29 100644 --- a/docs/core/man/pigeonhole.7.md +++ b/docs/core/man/pigeonhole.7.md @@ -11,7 +11,7 @@ dovecotComponent: pigeonhole Pigeonhole adds support for the Sieve language ([[rfc,5228]]) and the ManageSieve protocol ([[rfc,5804]]) to Dovecot ([[man,dovecot]]). -In the literal sense, a pigeonhole is a a hole or recess inside a dovecot for +In the literal sense, a pigeonhole is a hole or recess inside a dovecot for pigeons to nest in. It is, however, also the name for one of a series of small, open compartments in a cabinet used for filing or sorting mail. As a verb, it describes the act of putting an item into one of those From 49390e39867ec407b801e5ea6221ddf7324acb48 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Tue, 7 Apr 2026 05:58:04 -0400 Subject: [PATCH 03/38] spelling: above Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- docs/core/admin/errors.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/core/admin/errors.md b/docs/core/admin/errors.md index 5fe44b89b..0fd6e350c 100644 --- a/docs/core/admin/errors.md +++ b/docs/core/admin/errors.md @@ -208,7 +208,7 @@ These usually happen because the `dovecot.index.cache` file is so large that it can't fit into the memory. The solution is usually to either raise the imap service's -[[setting,service_vsz_limit]] or to somewhat higher than the maximum cache file +[[setting,service_vsz_limit]] or to somewhat above the maximum cache file size. For example to `1500M`. An alternative solution to this is to reduce the maximum cache file size to From 4f3215d5c4df73e44420097b9c218bf52486d473 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Tue, 7 Apr 2026 06:43:07 -0400 Subject: [PATCH 04/38] spelling: also implicitly Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- data/settings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/settings.js b/data/settings.js index f45aea0dd..0b709a129 100644 --- a/data/settings.js +++ b/data/settings.js @@ -1586,7 +1586,7 @@ imapsieve_url = sieve://sieve.example.com values: setting_types.BOOLEAN, default: 'no', text: ` -This setting determines whether de IMAPSieve plugin implicitly also expunges +This setting determines whether de IMAPSieve plugin also implicitly expunges messages that were discarded by the executed Sieve script sequence; i.e., Sieve yielded no (implicit) keep.` }, From 3688b7d045c0a2dd07760432ffca6a6c9001777e Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Tue, 7 Apr 2026 05:52:09 -0400 Subject: [PATCH 05/38] spelling: an Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- README.md | 2 +- data/settings.js | 3 ++- docs/core/config/auth/databases/oauth2.md | 2 +- docs/core/config/delivery/lda.md | 2 +- docs/developers/design/dict_protocol.md | 2 +- 5 files changed, 6 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 849afe621..65eec3ff3 100644 --- a/README.md +++ b/README.md @@ -362,7 +362,7 @@ If section is defined, will link to the sub-section. Valid sub-sections: ***Syntax: `[[(update),tag_name]]`*** -Create a update tag based on a tag_name. +Create an update tag based on a tag_name. The tag_name must be defined in `data/updates.js`. diff --git a/data/settings.js b/data/settings.js index 0b709a129..3483ca240 100644 --- a/data/settings.js +++ b/data/settings.js @@ -9733,7 +9733,8 @@ mechanism.` default: 100, seealso: [ 'service_restart_request_count' ], text: ` -Number of requests a auth-worker process handles for passdb pam before it dies. +Number of requests an auth-worker process handles for passdb pam before it +dies. This configures similar behaviour as the [[setting,service_restart_request_count]] setting but it limits only the number of pam passdb requests, not all requests to be handled by an auth-worker.` diff --git a/docs/core/config/auth/databases/oauth2.md b/docs/core/config/auth/databases/oauth2.md index d7b7b506d..e482d1cca 100644 --- a/docs/core/config/auth/databases/oauth2.md +++ b/docs/core/config/auth/databases/oauth2.md @@ -15,7 +15,7 @@ You are recommended to use `oauthbearer` (preferred) or `xoauth2` The responses from endpoints must be JSON objects. [[changed,auth_oauth2_no_passdb_changed]]: The OAuth2 mechanism no longer uses -a passdb for token authentication. Password Grant still needs a oauth2 passdb. +a passdb for token authentication. Password Grant still needs an oauth2 passdb. ## Settings diff --git a/docs/core/config/delivery/lda.md b/docs/core/config/delivery/lda.md index 5412fd9b4..7ae9787a5 100644 --- a/docs/core/config/delivery/lda.md +++ b/docs/core/config/delivery/lda.md @@ -64,7 +64,7 @@ example: dovecot-lda -f $FROM_ENVELOPE -d $DEST_USERNAME ``` -You'll need to set up a auth-userdb socket for dovecot-lda so it knows +You'll need to set up an auth-userdb socket for dovecot-lda so it knows where to find mailboxes for the users: ```doveconf[dovecot.conf] diff --git a/docs/developers/design/dict_protocol.md b/docs/developers/design/dict_protocol.md index 46c90deb3..53babec10 100644 --- a/docs/developers/design/dict_protocol.md +++ b/docs/developers/design/dict_protocol.md @@ -126,7 +126,7 @@ Used to iterate over a key path. C: ITABTABTAB ``` -The iteration flag is a integer with following options, which can be `OR`ed +The iteration flag is an integer with following options, which can be `OR`ed together. | Flag | Value | Description | From 795421ba91cef767b62ac8b89627c455c608ed5e Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Tue, 7 Apr 2026 05:53:36 -0400 Subject: [PATCH 06/38] spelling: case-insensitive Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- data/settings.js | 2 +- docs/core/settings/types.md | 2 +- docs/howto/lmtp/exim.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/data/settings.js b/data/settings.js index 3483ca240..792be56a8 100644 --- a/data/settings.js +++ b/data/settings.js @@ -2095,7 +2095,7 @@ The list of headers to include or exclude. - The default is the preexisting behavior, i.e. index all headers. - \`includes\` take precedence over \`excludes\`: if a header matches both, it is indexed. -- The terms are case insensitive. +- The terms are case-insensitive. - An asterisk \`*\` at the end of a header name matches anything starting with that header name. - The asterisk can only be used at the end of the header name. diff --git a/docs/core/settings/types.md b/docs/core/settings/types.md index 5edf46881..a040cf7da 100644 --- a/docs/core/settings/types.md +++ b/docs/core/settings/types.md @@ -96,7 +96,7 @@ All these are case-insensitive. Other values give errors. The size value type is used in Dovecot configuration to define the amount of space taken by something, such as a file, cache or memory limit. The size value -type is case insensitive. The following suffixes can be used to define size: +type is case-insensitive. The following suffixes can be used to define size: | Suffix | Value | | ------ | ----- | diff --git a/docs/howto/lmtp/exim.md b/docs/howto/lmtp/exim.md index 9bd3cb04a..4a8e8f76a 100644 --- a/docs/howto/lmtp/exim.md +++ b/docs/howto/lmtp/exim.md @@ -123,7 +123,7 @@ protocol lmtp { } ``` -(If you don't mind allowing case insensitive logins for dovecot +(If you don't mind allowing case-insensitive logins for dovecot authentication, you may set [[setting,auth_username_format]] in the global configuration accordingly and renounce the above change). From 6136ac00b15b1b86269403ef8aa96eaded393699 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Tue, 7 Apr 2026 05:53:53 -0400 Subject: [PATCH 07/38] spelling: case-sensitive Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- data/settings.js | 2 +- docs/core/admin/doveadm.md | 2 +- docs/core/plugins/mail_crypt.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/data/settings.js b/data/settings.js index 792be56a8..3ec2ab837 100644 --- a/data/settings.js +++ b/data/settings.js @@ -2733,7 +2733,7 @@ Example: crypt_user_key_curve = secp521r1 \`\`\` -For EdDSA, you need to use X448 or X25519, case sensitive.` +For EdDSA, you need to use X448 or X25519, case-sensitive.` }, crypt_global_public_key_file: { diff --git a/docs/core/admin/doveadm.md b/docs/core/admin/doveadm.md index 6b47d7388..a6cc9e59f 100644 --- a/docs/core/admin/doveadm.md +++ b/docs/core/admin/doveadm.md @@ -215,7 +215,7 @@ Also it is not guaranteed that the commands will be processed in order. ::: ::: info -All commands are case sensitive. +All commands are case-sensitive. ::: #### Response diff --git a/docs/core/plugins/mail_crypt.md b/docs/core/plugins/mail_crypt.md index 2ce2a5d09..0e004030b 100644 --- a/docs/core/plugins/mail_crypt.md +++ b/docs/core/plugins/mail_crypt.md @@ -220,7 +220,7 @@ Then `newkey.pem` can be used with mail-crypt plugin. [[added,mail_crypt_eddsa]] -You can use EdSDA keys by using algorithm `X25519` or `X448` (case sensitive). +You can use EdSDA keys by using algorithm `X25519` or `X448` (case-sensitive). To generate a suitable keypair, use From 60fd2a1270c971e493bcb0cb88fc6d57e6ce286e Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Tue, 7 Apr 2026 06:34:48 -0400 Subject: [PATCH 08/38] spelling: content Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- data/settings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/settings.js b/data/settings.js index 3ec2ab837..af2e16788 100644 --- a/data/settings.js +++ b/data/settings.js @@ -5363,7 +5363,7 @@ Available options: : When this setting is enabled and one dsync side doesn't support mail GUIDs (i.e. imapc), there is no fallback to using header hashes. Instead, dsync assumes that all mails with identical IMAP UIDs contain the same - mail contents. This can significantly improve dsync performance with some + mail content. This can significantly improve dsync performance with some IMAP servers that don't support caching Date/Message-ID headers.` }, From aafd4f01efd19d6b3ac497985ff1bff7c49fb8bc Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Tue, 7 Apr 2026 06:36:05 -0400 Subject: [PATCH 09/38] spelling: exceed Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- docs/core/admin/errors.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/core/admin/errors.md b/docs/core/admin/errors.md index 0fd6e350c..83c671343 100644 --- a/docs/core/admin/errors.md +++ b/docs/core/admin/errors.md @@ -29,7 +29,7 @@ tries to help with it. IMAP uses unsigned 32bit integers for unique message identifiers. Unfortunately a lot of IMAP clients use 32bit signed integers, which -means that if the UIDs go higher than 2147483647, they'll wrap to +means that if the UIDs exceed 2147483647, they'll wrap to negative integers. This causes errors such as above. However normally the UIDs should never go that high, so it's possible to From 344eb96c90479d49f5b01c350baf1499d596feb7 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Tue, 7 Apr 2026 05:56:15 -0400 Subject: [PATCH 10/38] spelling: execute Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- docs/core/man/doveadm-search.1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/core/man/doveadm-search.1.md b/docs/core/man/doveadm-search.1.md index 31f227297..220d957aa 100644 --- a/docs/core/man/doveadm-search.1.md +++ b/docs/core/man/doveadm-search.1.md @@ -34,7 +34,7 @@ When used with the **-A** or **-u** *wildcard* options, [[man,doveadm]] will print the fields **username**, **mailbox-guid** and **uid** for each matching message. -In the first form, [[man,doveadm]] will executed the **search** action +In the first form, [[man,doveadm]] will execute the **search** action will be performed for all users. In the second form, the command will be performed for all users listed in From d40afa3e6abf1b6e04028070d0573848f9a4a2a8 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Tue, 7 Apr 2026 05:52:48 -0400 Subject: [PATCH 11/38] spelling: extra Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- docs/core/plugins/sieve.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/core/plugins/sieve.md b/docs/core/plugins/sieve.md index 73d107d82..e1f8a6ec9 100644 --- a/docs/core/plugins/sieve.md +++ b/docs/core/plugins/sieve.md @@ -637,7 +637,7 @@ This can be done in two ways: 1. Define the full [[setting,sieve_script]] block in dovecot configuration. -2. Return the user-specific settings as a extra fields from +2. Return the user-specific settings as extra fields from [[link,userdb_extra_fields]]. For example, to use a Sieve script file named `.sieve` in From 9650707757c0c6ffc149d95f2b5b711f6dda3e6d Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Tue, 7 Apr 2026 05:57:32 -0400 Subject: [PATCH 12/38] spelling: fall back Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- docs/core/config/auth/mutltiple.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/core/config/auth/mutltiple.md b/docs/core/config/auth/mutltiple.md index 304abeecd..936128326 100644 --- a/docs/core/config/auth/mutltiple.md +++ b/docs/core/config/auth/mutltiple.md @@ -50,7 +50,7 @@ passdb sql { query = SELECT userid AS user, password FROM users WHERE userid = '%{user}' } -# fallback to PAM +# fall back to PAM passdb pam { } @@ -59,7 +59,7 @@ userdb sql { query = SELECT uid, gid, '/var/vmail/%{user | domain}/%{user | username}' AS home FROM users WHERE userid = '%{user}' } -# if not found, fallback to /etc/passwd +# if not found, fall back to /etc/passwd userdb passwd { } ``` From 5e776954402dbcc405740dff4073e1f7067ee23b Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Tue, 7 Apr 2026 05:57:12 -0400 Subject: [PATCH 13/38] spelling: for Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- docs/core/man/doveadm-search.1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/core/man/doveadm-search.1.md b/docs/core/man/doveadm-search.1.md index 220d957aa..929af71c8 100644 --- a/docs/core/man/doveadm-search.1.md +++ b/docs/core/man/doveadm-search.1.md @@ -35,7 +35,7 @@ When used with the **-A** or **-u** *wildcard* options, and **uid** for each matching message. In the first form, [[man,doveadm]] will execute the **search** action -will be performed for all users. +for all users. In the second form, the command will be performed for all users listed in the given *file*. From a2b12938ed50f7ac87fa290a81b90765270da188 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Tue, 7 Apr 2026 05:58:55 -0400 Subject: [PATCH 14/38] spelling: greater Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- data/settings.js | 2 +- docs/core/config/include/login_process_high_security.inc | 4 ++-- docs/core/config/service.md | 4 ++-- docs/developers/design/dsync.md | 2 +- docs/developers/design/mailbox_saving.md | 2 +- docs/developers/design/mailbox_transaction.md | 2 +- docs/howto/sieve.md | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/data/settings.js b/data/settings.js index af2e16788..8a021b1be 100644 --- a/data/settings.js +++ b/data/settings.js @@ -5800,7 +5800,7 @@ Maximum number of connection attempts to a host before all associated requests f If non-zero, the maximum will be enforced across all IPs for that host, meaning that IPs may be tried more than once eventually if the number of IPs is smaller -than the specified maximum attempts. If the number of IPs is higher than the +than the specified maximum attempts. If the number of IPs is greater than the maximum attempts not all IPs are tried. If \`0\`, all IPs are tried at most once.` diff --git a/docs/core/config/include/login_process_high_security.inc b/docs/core/config/include/login_process_high_security.inc index d05e7f9d8..c200ca5e0 100644 --- a/docs/core/config/include/login_process_high_security.inc +++ b/docs/core/config/include/login_process_high_security.inc @@ -24,7 +24,7 @@ Since one login process can handle only one connection, the service's be logging in at the same time (defaults to [[setting,default_process_limit]]). SSL/TLS proxying processes are also counted here, so if you're using -SSL/TLS you'll need to make sure this count is higher than the maximum +SSL/TLS you'll need to make sure this count is greater than the maximum number of users that can be logged in simultaneously. With TLS/SSL connections, the login process will not terminate, and remains @@ -33,6 +33,6 @@ to perform proxying between imap backend process and the client. * If the maximum login process count is reached, the oldest process in logging-in state (ie. non-proxying) is destroyed. * To avoid startup latency for new client connections, set - [[setting,service_process_min_avail]] to higher than zero. That many idling + [[setting,service_process_min_avail]] to greater than zero. That many idling processes are always kept around waiting for new connections. * [[setting,service_vsz_limit]] should be fine at its default value. diff --git a/docs/core/config/service.md b/docs/core/config/service.md index bc837c738..f36acb15e 100644 --- a/docs/core/config/service.md +++ b/docs/core/config/service.md @@ -89,7 +89,7 @@ There are 3 types of services that need to be optimized in different ways: could mean that all the processes are simply waiting for the existing connections to die away before the process can die and a new one can be created. Although this could be made less likely by setting - [[setting,service_process_limit]] higher than + [[setting,service_process_limit]] greater than [[setting,service_process_min_avail]], but that's still not a guarantee since each process could get a very long running connection and the [[setting,service_process_limit]] would be eventually reached. @@ -320,7 +320,7 @@ connections. lock or disk I/O. In the future these waits may be reduced or avoided completely, but for - now it's not safe to set this value higher than `1` in enterprise mail + now it's not safe to set this value greater than `1` in enterprise mail systems. For small, mostly-idling hobbyist servers, a larger number may work diff --git a/docs/developers/design/dsync.md b/docs/developers/design/dsync.md index d25fef837..9a41dc8f7 100644 --- a/docs/developers/design/dsync.md +++ b/docs/developers/design/dsync.md @@ -105,7 +105,7 @@ the mailbox is included in sync. ::: warning A superfast mode should still be implemented, where once a mailbox is selected for syncing, it should sync only mails whose modseq -is higher than a given one. This would improve performance and network +is greater than a given one. This would improve performance and network traffic with large mailboxes. ::: diff --git a/docs/developers/design/mailbox_saving.md b/docs/developers/design/mailbox_saving.md index f8b6ef2d9..da1306393 100644 --- a/docs/developers/design/mailbox_saving.md +++ b/docs/developers/design/mailbox_saving.md @@ -43,7 +43,7 @@ metadata. ### `mailbox_save_set_uid()` -Set message's UID. If mailbox's next_uid is already higher than the specified +Set message's UID. If mailbox's next_uid is already greater than the specified UID, the UID request is ignored. ::: info diff --git a/docs/developers/design/mailbox_transaction.md b/docs/developers/design/mailbox_transaction.md index 69186871b..5ce05e6c9 100644 --- a/docs/developers/design/mailbox_transaction.md +++ b/docs/developers/design/mailbox_transaction.md @@ -100,6 +100,6 @@ memory used by it with `pool_unref(&changes->pool)`. ## Atomic Changes `mailbox_transaction_set_max_modseq()` can be used to implement atomic -conditional flag changes. If message's modseq is higher than the given +conditional flag changes. If message's modseq is greater than the given max_modseq while transaction is being committed, the change isn't done and the message's sequence number is added to the given array. diff --git a/docs/howto/sieve.md b/docs/howto/sieve.md index c350fc502..aedb5544a 100644 --- a/docs/howto/sieve.md +++ b/docs/howto/sieve.md @@ -100,7 +100,7 @@ if header :contains "X-Spam-Flag" "YES" { ``` The following example discards SpamAssassin-tagged mails with level -higher than or equal to 10: +greater than or equal to 10: ``` if header :contains "X-Spam-Level" "**********" { From 0ff17c4a6dcd1f6faf1a435cdb6266feb0558860 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Tue, 7 Apr 2026 07:00:08 -0400 Subject: [PATCH 15/38] spelling: it does not fall back Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- data/settings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/settings.js b/data/settings.js index 8a021b1be..49d05a8e2 100644 --- a/data/settings.js +++ b/data/settings.js @@ -5361,7 +5361,7 @@ Available options: \`no-header-hashes\` : When this setting is enabled and one dsync side doesn't support mail - GUIDs (i.e. imapc), there is no fallback to using header hashes. Instead, + GUIDs (i.e. imapc), it does not fall back to using header hashes. Instead, dsync assumes that all mails with identical IMAP UIDs contain the same mail content. This can significantly improve dsync performance with some IMAP servers that don't support caching Date/Message-ID headers.` From 9aa46a8108a6465e2d405f03975ce367ba426a98 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Tue, 7 Apr 2026 06:16:28 -0400 Subject: [PATCH 16/38] spelling: its Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- docs/core/admin/lua/lib_lua.md | 2 +- docs/developers/coding_style.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/core/admin/lua/lib_lua.md b/docs/core/admin/lua/lib_lua.md index 679f5392e..4cd6bda73 100644 --- a/docs/core/admin/lua/lib_lua.md +++ b/docs/core/admin/lua/lib_lua.md @@ -13,7 +13,7 @@ dovecotlinks: Dovecot provides a lib-lua internal helper as part of libdovecot.so. It has facilities for loading scripts from various sources, and also helps with reusing scripts by keeping track of which scripts are loaded. Each script has -it's own memory pool, which is guaranteed to be released when script is +its own memory pool, which is guaranteed to be released when script is unloaded. ::: danger diff --git a/docs/developers/coding_style.md b/docs/developers/coding_style.md index 81b724a2b..8f3264bb8 100644 --- a/docs/developers/coding_style.md +++ b/docs/developers/coding_style.md @@ -141,7 +141,7 @@ you probably should split it into two. ### Bracing -- Braces are kept on same line, and not moved onto line on it's own. +- Braces are kept on same line, and not moved onto line on its own. - Unnecessary braces can be left out, but avoid removing them to create extra diff. From 6a3862989869430d254e4a1e0976e6ea12f4efa1 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Tue, 7 Apr 2026 07:00:59 -0400 Subject: [PATCH 17/38] spelling: last to first Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- docs/core/man/doveconf.1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/core/man/doveconf.1.md b/docs/core/man/doveconf.1.md index dc0b003e0..03ba57745 100644 --- a/docs/core/man/doveconf.1.md +++ b/docs/core/man/doveconf.1.md @@ -62,7 +62,7 @@ configuration in easy human readable output. Next is the list of filters, which begin with `:FILTER` followed by the filter in the event filter syntax. An empty filter matches everything. - The filters are processed from end to beginning. The settings are taken + The filters are processed from last to first. The settings are taken from the first matching filter (i.e. the last in the output). Since not all filters have all settings defined, the processing continues until all settings have been found. From 851acf03e50e39891ea98f4a789ff02f735e1b11 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Tue, 7 Apr 2026 06:39:00 -0400 Subject: [PATCH 18/38] spelling: less Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- data/settings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/settings.js b/data/settings.js index 49d05a8e2..e11129057 100644 --- a/data/settings.js +++ b/data/settings.js @@ -5799,7 +5799,7 @@ returned.` Maximum number of connection attempts to a host before all associated requests fail. If non-zero, the maximum will be enforced across all IPs for that host, meaning -that IPs may be tried more than once eventually if the number of IPs is smaller +that IPs may be tried more than once eventually if the number of IPs is less than the specified maximum attempts. If the number of IPs is greater than the maximum attempts not all IPs are tried. From 1d2307c1f65a2e64d70ce1a53bc9c302c78239d2 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Tue, 7 Apr 2026 06:58:58 -0400 Subject: [PATCH 19/38] spelling: little-endian and big-endian Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- docs/developers/design/indexes/index_format.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/developers/design/indexes/index_format.md b/docs/developers/design/indexes/index_format.md index c32d00772..7ce229a53 100644 --- a/docs/developers/design/indexes/index_format.md +++ b/docs/developers/design/indexes/index_format.md @@ -41,8 +41,8 @@ At times there have been thoughts about changing index handling so it wouldn't care about CPU endianness or alignment, but this would be a huge change and the end result would almost certainly be worse performance. This is mostly a theoretical problem anyway: It's very unlikely that index files are moving -between little and big endian CPUs, and if that is actually wanted the mails -can be migrated with dsync. +between little-endian and big-endian CPUs, and if that is actually wanted the +mails can be migrated with dsync. ## Main Index From 6f4d134c9c39dedd5fe1801a1c7485068c4b1183 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Tue, 7 Apr 2026 06:17:02 -0400 Subject: [PATCH 20/38] spelling: log in Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- data/settings.js | 2 +- docs/core/config/mail_cache.md | 2 +- docs/core/plugins/last_login.md | 2 +- docs/core/plugins/sieve.md | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/data/settings.js b/data/settings.js index e11129057..90f25cf9c 100644 --- a/data/settings.js +++ b/data/settings.js @@ -11408,7 +11408,7 @@ If enabled, ignore version mismatches between different Dovecot versions.` tags: [ 'auth-ldap', 'dict-ldap', 'sieve-storage-ldap' ], values: setting_types.STRING, text: ` -Specify the Distinguished Name (the username used to login to the LDAP server). +Specify the Distinguished Name (the username used to log in to the LDAP server). Leave it commented out to bind anonymously (useful with [[setting,passdb_ldap_bind,yes]]). diff --git a/docs/core/config/mail_cache.md b/docs/core/config/mail_cache.md index 5b5e4a61b..3b97950ce 100644 --- a/docs/core/config/mail_cache.md +++ b/docs/core/config/mail_cache.md @@ -18,7 +18,7 @@ to be cached. So Dovecot needs to be told what to initially add to This can be useful even after migration. For example a user might normally use their mobile app IMAP client, but once a few months they -would login to the webmail. Dovecot would normally preserve the fields +would log in to the webmail. Dovecot would normally preserve the fields used by the mobile IMAP client, but drop the extra fields used only by webmail after a month. This might not be wanted. diff --git a/docs/core/plugins/last_login.md b/docs/core/plugins/last_login.md index 46566bccc..628f0a9f6 100644 --- a/docs/core/plugins/last_login.md +++ b/docs/core/plugins/last_login.md @@ -13,7 +13,7 @@ dictionary. Last login information is useful for troubleshooting scenarios, which usually starts with end user contacting customer care agent that the mailbox is unreachable or empty. Amongst the first things is to check when the customer -last successfully did login to the mailbox and using which protocol, as this +last successfully did log in to the mailbox and using which protocol, as this might indicate that there might be some device with POP3 configured thus emptying the mailbox. Last login feature is designed for this use case, to allow easy way to search per any account the timestamp of last login or last diff --git a/docs/core/plugins/sieve.md b/docs/core/plugins/sieve.md index e1f8a6ec9..c94ef1fd9 100644 --- a/docs/core/plugins/sieve.md +++ b/docs/core/plugins/sieve.md @@ -582,7 +582,7 @@ sieve_script personal { # Space separated list of LDAP URIs to use. ldap_uris = ldap://localhost - # Distinguished Name - the username used to login to the LDAP server. + # Distinguished Name - the username used to log in to the LDAP server. # Leave it commented out to bind anonymously. ldap_auth_dn = cn=sieve,ou=Programs,dc=example,dc=org From a1a671a401ceaa1fdb1c7b4bf470cdec6eb2a62e Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Tue, 7 Apr 2026 06:18:21 -0400 Subject: [PATCH 21/38] spelling: lowercase Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- docs/core/plugins/fts.md | 4 ++-- docs/howto/lda.md | 2 +- docs/howto/lmtp/exim.md | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/core/plugins/fts.md b/docs/core/plugins/fts.md index 3573984df..02b6ab4ef 100644 --- a/docs/core/plugins/fts.md +++ b/docs/core/plugins/fts.md @@ -229,7 +229,7 @@ direction of the data flow needs some special attention. In filters, the data flows from parent to child, so tokens are first passed to the grandparent of all filters and then further down the chain. For some filtering chains the order is important. E.g. the snowball stemmer wants all -input in lower case, so the filter lower casing the tokens will need to be +input in lowercase, so the filter lower casing the tokens will need to be listed before it. In tokenizers however, the data however flows from child to parent. This @@ -291,7 +291,7 @@ Available filters: ### `lowercase` -Change all text to lower case. Supports UTF8, when compiled with libicu +Change all text to lowercase. Supports UTF8, when compiled with libicu and the library is installed. Otherwise only ASCII characters are lowercased. diff --git a/docs/howto/lda.md b/docs/howto/lda.md index 79b2e93fd..595d038a3 100644 --- a/docs/howto/lda.md +++ b/docs/howto/lda.md @@ -241,7 +241,7 @@ to deliver to the folder 'extension' in your maildir (If you wish to preserve the case of `${extension}`, remove the `hu` [flags](http://www.postfix.org/pipe.8.html), and be sure to utilize [[variable]] in your `dovecot.conf` for mail locations and other -configuration parameters that are expecting lower case): +configuration parameters that are expecting lowercase): ``` dovecot unix - n n - - pipe diff --git a/docs/howto/lmtp/exim.md b/docs/howto/lmtp/exim.md index 4a8e8f76a..1bc23519a 100644 --- a/docs/howto/lmtp/exim.md +++ b/docs/howto/lmtp/exim.md @@ -107,7 +107,7 @@ http://www.exim.org/exim-html-current/doc/html/spec_html/ch-access_control_lists ## Delivering Mails Case Insensitively ::: WARNING -Just use this setup if all your login names contain only lower case +Just use this setup if all your login names contain only lowercase characters! (On Linux see `/etc/adduser.conf` under NAME_REGEX variable). ::: @@ -127,12 +127,12 @@ protocol lmtp { authentication, you may set [[setting,auth_username_format]] in the global configuration accordingly and renounce the above change). -In case you prefer to configure exim to lower case the local part +In case you prefer to configure exim to lowercase the local part instead, add a router just before your local delivery router: ``` lowercase_local: - debug_print = "R: lower case local_part for local delivery" + debug_print = "R: lowercase local_part for local delivery" driver = redirect redirect_router = local_user data = ${lc:${local_part}} From f13189d1278c67f00932ab6ca09fcfcb187bfacd Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Tue, 7 Apr 2026 06:45:17 -0400 Subject: [PATCH 22/38] spelling: may eventually be tried more than once Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- data/settings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/settings.js b/data/settings.js index 90f25cf9c..6d74d9892 100644 --- a/data/settings.js +++ b/data/settings.js @@ -5799,7 +5799,7 @@ returned.` Maximum number of connection attempts to a host before all associated requests fail. If non-zero, the maximum will be enforced across all IPs for that host, meaning -that IPs may be tried more than once eventually if the number of IPs is less +that IPs may eventually be tried more than once if the number of IPs is less than the specified maximum attempts. If the number of IPs is greater than the maximum attempts not all IPs are tried. From acc6850798d81c70dd854f7e5718033d67a68586 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Tue, 7 Apr 2026 05:50:21 -0400 Subject: [PATCH 23/38] spelling: name the namespace Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- docs/core/config/namespaces.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/core/config/namespaces.md b/docs/core/config/namespaces.md index aa553b97d..184e23a86 100644 --- a/docs/core/config/namespaces.md +++ b/docs/core/config/namespaces.md @@ -343,7 +343,7 @@ See also [[link,migrating_mailboxes]] ### Per-user Namespace Location From SQL -You need to give the namespace a name, for example "docs" below: +You need to name the namespace, for example "docs" below: ```doveconf[dovecot.conf] namespace docs { From ecffd777fa91efd13fa511f2a84d6537b370ea29 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Tue, 7 Apr 2026 06:41:00 -0400 Subject: [PATCH 24/38] spelling: often Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 65eec3ff3..cd097ddc6 100644 --- a/README.md +++ b/README.md @@ -84,7 +84,7 @@ npm run docs:preview Depending on when an issue occurs, errors may be displayed on the development screen (and in the terminal where the `docs:dev` command is being run). -However, some errors only occur when viewing a page, and will oftentimes +However, some errors only occur when viewing a page, and will often result in a blank or incomplete page render. In these cases, looking at the browser developer console will generally show the error that has occurred. From 149c7a0169e179ff96026879ff9ed60b16c82042 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Tue, 7 Apr 2026 05:54:47 -0400 Subject: [PATCH 25/38] spelling: only does Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- docs/developers/design/mailbox_searching.md | 2 +- docs/developers/design/processes.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/developers/design/mailbox_searching.md b/docs/developers/design/mailbox_searching.md index 8d1419060..81edd75c4 100644 --- a/docs/developers/design/mailbox_searching.md +++ b/docs/developers/design/mailbox_searching.md @@ -47,7 +47,7 @@ Dovecot optimizes them internally. If the search needs to parse message bodies and the mailbox is large, this call can take a long time. If you want to do other things while -searching, you can use `mailbox_search_next_nonblock()` that does only +searching, you can use `mailbox_search_next_nonblock()` that only does a bit of work and then returns either with a result or "try again later" status. Dovecot attempts to keep each non-matching call to this function between 200 and 250 milliseconds, although the upper bound can't be diff --git a/docs/developers/design/processes.md b/docs/developers/design/processes.md index 6d41a49e4..f8155e9cd 100644 --- a/docs/developers/design/processes.md +++ b/docs/developers/design/processes.md @@ -5,7 +5,7 @@ title: Processes # Dovecot processes -Dovecot is split into multiple processes where each process does only +Dovecot is split into multiple processes where each process only does one thing. This is partially because it makes the code cleaner, but also because it allows setting up different privileges for each process. The most important processes are: From 8543b2542541c865abe4c7e4f97bcb072406aa1d Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Tue, 7 Apr 2026 06:37:01 -0400 Subject: [PATCH 26/38] spelling: only happen Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- docs/core/admin/errors.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/core/admin/errors.md b/docs/core/admin/errors.md index 83c671343..89036acd8 100644 --- a/docs/core/admin/errors.md +++ b/docs/core/admin/errors.md @@ -42,7 +42,7 @@ especially contained these intentionally broken `X-UID:` headers. With newer Dovecot versions these broken `X-UID:` headers aren't practically ever used. It happens only if the mail has a valid `X-IMAPbase`: header, `X-UID:` header, and the mail is written to an empty -mbox file. Note that this can happen only to new mboxes, because expunging +mbox file. Note that this can only happen to new mboxes, because expunging all messages in a mailbox causes Dovecot to create a metadata message at the beginning of the mbox file. From 368a3f6302901129d075a7da3189c4b89aad59bb Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Tue, 7 Apr 2026 06:19:49 -0400 Subject: [PATCH 27/38] spelling: otherwise, Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- data/events.js | 4 ++-- data/settings.js | 6 +++--- docs/core/config/auth/databases/ldap.md | 2 +- docs/core/config/auth/databases/sql.md | 2 +- docs/core/config/auth/passdb.md | 2 +- docs/core/config/delivery/lmtp.md | 2 +- docs/core/config/mail_cache.md | 2 +- docs/core/config/mail_location.md | 2 +- docs/core/config/mailbox_formats/mbox.md | 4 ++-- docs/core/config/namespaces.md | 2 +- docs/core/config/nfs.md | 2 +- docs/core/config/service.md | 2 +- docs/core/config/shared_mailboxes.md | 4 ++-- docs/core/config/sieve/managesieve.md | 2 +- docs/core/man/doveadm-who.1.md | 2 +- docs/core/plugins/fts.md | 2 +- docs/core/settings/variables.md | 8 ++++---- docs/developers/design/istreams.md | 2 +- docs/howto/active_directory.md | 2 +- 19 files changed, 27 insertions(+), 27 deletions(-) diff --git a/data/events.js b/data/events.js index 35a5e0e6b..f5ef524a9 100644 --- a/data/events.js +++ b/data/events.js @@ -1470,8 +1470,8 @@ Transport security indicator. Values: user: `Full username. This can change during authentication, for example due to passdb lookups.`, original_user: `Original username exactly as provided by the client.`, translated_user: `Similar to \`original_user\`, except after [[setting,auth_username_translation]] translations are applied.`, - login_user: `When doing a master user login, the user we are logging in as. Otherwise not set.`, - master_user: `When doing a master user login, the master username. Otherwise not set.`, + login_user: `When doing a master user login, the user we are logging in as. Otherwise, not set.`, + master_user: `When doing a master user login, the master username. Otherwise, not set.`, mechanism: `Name of used SASL mechanism (e.g. PLAIN).`, service: { removed: { diff --git a/data/settings.js b/data/settings.js index 6d74d9892..71d216f42 100644 --- a/data/settings.js +++ b/data/settings.js @@ -2070,7 +2070,7 @@ cache. This may be a useful optimization if the user's client only uses header searches. ::: info -Only the \`yes\` option guarantees consistent search results. Otherwise it's +Only the \`yes\` option guarantees consistent search results. Otherwise, it's possible that the search results will be different depending on whether the search was performed via FTS index or not. :::` @@ -9125,7 +9125,7 @@ Configures a modifier string for values grouped by the \`%{user | domain}\` : If the value is in \`user@domain\` format, this contains the \`domain\` - text. Otherwise empty.` + text. Otherwise, empty.` }, metric_group_by_method_exponential_min_magnitude: { @@ -10357,7 +10357,7 @@ The maximum number of processes that may exist for this service. [[changed,service_process_limit_changed]] However, if [[setting,service_client_limit]] > 1, when the process reaches [[setting,service_restart_request_count]], the process is no longer counted -towards its process limit. Otherwise long-lived connections in the old process +towards its process limit. Otherwise, long-lived connections in the old process could prevent creation of new processes.` }, diff --git a/docs/core/config/auth/databases/ldap.md b/docs/core/config/auth/databases/ldap.md index 325fa7f60..9da65db80 100644 --- a/docs/core/config/auth/databases/ldap.md +++ b/docs/core/config/auth/databases/ldap.md @@ -238,7 +238,7 @@ which contains the user's password. The next thing Dovecot needs to know is what format the password is in. If all the passwords are in same format, you can use [[setting,passdb_default_password_scheme]] -setting in `dovecot.conf` to specify it. Otherwise each password needs +setting in `dovecot.conf` to specify it. Otherwise, each password needs to be prefixed with `{password-scheme}`, for example `{plain}plaintext-password`. diff --git a/docs/core/config/auth/databases/sql.md b/docs/core/config/auth/databases/sql.md index d9052bd25..c88118df0 100644 --- a/docs/core/config/auth/databases/sql.md +++ b/docs/core/config/auth/databases/sql.md @@ -43,7 +43,7 @@ password ..`). You can use all the normal [[variable]] such as `%{user}` in the SQL query. If all the passwords are in same format, you can use -[[setting,passdb_default_password_scheme]] to specify it. Otherwise each +[[setting,passdb_default_password_scheme]] to specify it. Otherwise, each password needs to be prefixed with `{password-scheme}`, for example `{plain}cleartext-password`. See [[link,password_schemes]] for a list of supported password schemes. diff --git a/docs/core/config/auth/passdb.md b/docs/core/config/auth/passdb.md index c8e04040c..6204e824e 100644 --- a/docs/core/config/auth/passdb.md +++ b/docs/core/config/auth/passdb.md @@ -266,7 +266,7 @@ Remove this field entirely. Change the username (eg. lowercase it). This is mostly useful in case-insensitive username lookups to get the username -returned back using the same casing always. Otherwise depending on your +returned back using the same casing always. Otherwise, depending on your configuration it may cause problems, such as `/var/mail/user` and `/var/mail/User` mailboxes created for the same user. diff --git a/docs/core/config/delivery/lmtp.md b/docs/core/config/delivery/lmtp.md index c4f9232de..92035f634 100644 --- a/docs/core/config/delivery/lmtp.md +++ b/docs/core/config/delivery/lmtp.md @@ -64,7 +64,7 @@ protocols setting contains lmtp. ## Security Unfortunately LMTP process currently needs to run as root, and only -temporarily drop privileges to users. Otherwise it couldn't handle mail +temporarily drop privileges to users. Otherwise, it couldn't handle mail deliveries to more than a single user with different UID. If you're using only a single global UID/GID (i.e. virtual users), you can diff --git a/docs/core/config/mail_cache.md b/docs/core/config/mail_cache.md index 3b97950ce..4b448e4a0 100644 --- a/docs/core/config/mail_cache.md +++ b/docs/core/config/mail_cache.md @@ -80,7 +80,7 @@ IMAP ENVELOPE is used by many clients, which includes: | `imap.bodystructure` | IMAP BODYSTRUCTURE response, which describes what the message's MIME structure looks like. | | `imap.body` | IMAP BODY response. This is the short version of imap.bodystructure, not the message body itself. If imap.bodystructure is cached, this field isn't cached because it can be generated from the imap.bodystructure. | | `imap.envelope` | IMAP ENVELOPE response, which contains the From, To, Cc, Bcc, Sender, Reply-To, Date, Subject, Message-ID and In-Reply-To headers in parsed forms. This is typically in the [[setting,mail_never_cache_fields]] because the raw headers are more useful in the cache and the ENVELOPE can be generated from them. | -| `pop3.uidl` | POP3 UIDL responses. This is useful especially if some of the UIDLs have been migrated from an old system or if [[setting,pop3_reuse_xuidl]] is used. Otherwise Dovecot generates the UIDL in a way that usually doesn't require cache. | +| `pop3.uidl` | POP3 UIDL responses. This is useful especially if some of the UIDLs have been migrated from an old system or if [[setting,pop3_reuse_xuidl]] is used. Otherwise, Dovecot generates the UIDL in a way that usually doesn't require cache. | | `pop3.order` | POP3 messages' order. This is used after migration from another system where the IMAP and POP3 messages' order differs. | | `guid` | Internal Dovecot GUID for messages. | | `mime.parts` | MIME parts' sizes. | diff --git a/docs/core/config/mail_location.md b/docs/core/config/mail_location.md index a3aaa0afe..2f17bd148 100644 --- a/docs/core/config/mail_location.md +++ b/docs/core/config/mail_location.md @@ -230,7 +230,7 @@ exec env "NAMESPACE/INBOX/MAIL_DRIVER=$mail_driver" "NAMESPACE/INBOX/MAIL_PATH=$ Before configuring Dovecot, you'll need to know where your mails are located. You should already have an SMTP server installed and configured to deliver mails somewhere, so the easiest way to make Dovecot work is -to just use the same location. Otherwise you could create a `~/Maildir` +to just use the same location. Otherwise, you could create a `~/Maildir` directory and configure your SMTP server to use the Maildir format. First send a test mail to yourself (as your own non-root user): diff --git a/docs/core/config/mailbox_formats/mbox.md b/docs/core/config/mailbox_formats/mbox.md index 435a5531a..bdfc44490 100644 --- a/docs/core/config/mailbox_formats/mbox.md +++ b/docs/core/config/mailbox_formats/mbox.md @@ -262,7 +262,7 @@ only the keywords are listed in X-IMAP header are used. The UID for a new message is calculated from last used UID in X-IMAP header + 1. This is done always, so fake X-UID headers don't really matter. This is -also why the pseudo-message is important. Otherwise the UIDs could easily +also why the pseudo-message is important. Otherwise, the UIDs could easily grow over 231 which some clients start treating as negative numbers, which then cause all kinds of problems. Also when 232 is exceeded, Dovecot will also start having some problems. @@ -494,7 +494,7 @@ Since the problems usually have been related to broken headers, you should be able to avoid them by filtering out all the Dovecot's internal metadata headers. This is a good idea to do in any case. -If you use [[link,lda]] it does this filtering automatically. Otherwise you +If you use [[link,lda]] it does this filtering automatically. Otherwise, you could do this in your SMTP server. The headers that you should filter out are: - Content-Length diff --git a/docs/core/config/namespaces.md b/docs/core/config/namespaces.md index 184e23a86..638bccde9 100644 --- a/docs/core/config/namespaces.md +++ b/docs/core/config/namespaces.md @@ -324,7 +324,7 @@ namespace compat { } ``` -The `separator=/` allows the INBOX to have child mailboxes. Otherwise with +The `separator=/` allows the INBOX to have child mailboxes. Otherwise, with `separator=.` it wouldn't be possible to know if "INBOX.foo" means INBOX's "foo" child or the root "foo" mailbox in "INBOX." compatibility namespace. With `separator=/` the difference is clear with "INBOX/foo" vs. "INBOX.foo". diff --git a/docs/core/config/nfs.md b/docs/core/config/nfs.md index ffbddbf89..8228300f2 100644 --- a/docs/core/config/nfs.md +++ b/docs/core/config/nfs.md @@ -21,7 +21,7 @@ to all mailbox access, including mail delivery. (i.e. keep them as `no`) * Do **not** use the `quota-status` service. * Unmounted NFS mount point directory should not be writable to Dovecot - mail processes (i.e. often the `vmail` user). Otherwise if the NFS + mail processes (i.e. often the `vmail` user). Otherwise, if the NFS isn't mounted for some reason and user access mails, a new empty user mail directory is created, which breaks things. diff --git a/docs/core/config/service.md b/docs/core/config/service.md index f36acb15e..488350301 100644 --- a/docs/core/config/service.md +++ b/docs/core/config/service.md @@ -84,7 +84,7 @@ There are 3 types of services that need to be optimized in different ways: serve all the needed connections (max connections = [[setting,service_process_limit]] * [[setting,service_client_limit]]). [[setting,service_restart_request_count]] is commonly set to `unlimited` for - these services. Otherwise when the limit is beginning to be reached, the + these services. Otherwise, when the limit is beginning to be reached, the total number of available connections will shrink. With very bad luck that could mean that all the processes are simply waiting for the existing connections to die away before the process can die and a new one can be diff --git a/docs/core/config/shared_mailboxes.md b/docs/core/config/shared_mailboxes.md index b4fe854ce..a5ac1cea5 100644 --- a/docs/core/config/shared_mailboxes.md +++ b/docs/core/config/shared_mailboxes.md @@ -101,7 +101,7 @@ namespace public { ### Maildir: Keyword Sharing Make sure you don't try to use per-user [[setting,mail_control_path]] -directory. Otherwise `dovecot-keywords` file doesn't get shared and keyword +directory. Otherwise, `dovecot-keywords` file doesn't get shared and keyword mapping breaks. ### Subscriptions @@ -158,7 +158,7 @@ per-user path. Note that if the Maildir has any keywords, the per-user control directory breaks the keywords since there is no `dovecot-keywords` file. When configuring multiple namespaces, the control/index path must be -different for each namespace. Otherwise if namespaces have identically +different for each namespace. Otherwise, if namespaces have identically named mailboxes their control/index directories will conflict and cause all kinds of problems. diff --git a/docs/core/config/sieve/managesieve.md b/docs/core/config/sieve/managesieve.md index eb11d3550..357d71dcb 100644 --- a/docs/core/config/sieve/managesieve.md +++ b/docs/core/config/sieve/managesieve.md @@ -211,7 +211,7 @@ client. If you do not use TLS, you can connect using a simple `telnet` or `netcat` connection to the configured port (typically 4190 or 2000 -for older setups). Otherwise you must use a TLS-capable text protocol +for older setups). Otherwise, you must use a TLS-capable text protocol client like `gnutls-cli` as described below. Upon connection, the server presents the initial greeting with its diff --git a/docs/core/man/doveadm-who.1.md b/docs/core/man/doveadm-who.1.md index ca4568894..3a6c6f349 100644 --- a/docs/core/man/doveadm-who.1.md +++ b/docs/core/man/doveadm-who.1.md @@ -27,7 +27,7 @@ This command uses by default the output formatter **table**. ## OPTIONS **-1** -: Print one line per user and connection. Otherwise the connections are +: Print one line per user and connection. Otherwise, the connections are grouped by the username. **-a** *anvil_socket_path* diff --git a/docs/core/plugins/fts.md b/docs/core/plugins/fts.md index 02b6ab4ef..38f7d62a2 100644 --- a/docs/core/plugins/fts.md +++ b/docs/core/plugins/fts.md @@ -292,7 +292,7 @@ Available filters: ### `lowercase` Change all text to lowercase. Supports UTF8, when compiled with libicu -and the library is installed. Otherwise only ASCII characters are +and the library is installed. Otherwise, only ASCII characters are lowercased. ### `stopwords` diff --git a/docs/core/settings/variables.md b/docs/core/settings/variables.md index 9cd8f7c49..d89966d78 100644 --- a/docs/core/settings/variables.md +++ b/docs/core/settings/variables.md @@ -232,7 +232,7 @@ Variables that work nearly everywhere where there is a username: | -------- | ----------- | | `user` | Full username (e.g. user@domain) | | `session` | Session ID for this client connection (unique for 9 years) | -| `auth_user` | SASL authentication ID (e.g. if master user login is done, this contains the master username). If username changes during authentication, this value contains the original username. Otherwise the same as `user`. | +| `auth_user` | SASL authentication ID (e.g. if master user login is done, this contains the master username). If username changes during authentication, this value contains the original username. Otherwise, the same as `user`. | ## Mail Service User Variables @@ -286,7 +286,7 @@ See also: | `real_remote_port` | Similar to `real_remote_ip` except for port instead of IP. | | `real_local_port` | Similar to `real_local_ip` except for port instead of IP. | | `mechanism` | [[link,sasl]], e.g., PLAIN. | -| `secured` | "TLS" with established SSL/TLS connections, "TLS handshaking", or "TLS [handshaking]: error text" if disconnecting due to TLS error. "secured" with secured connections (see: [[setting,ssl]]). Otherwise empty. | +| `secured` | "TLS" with established SSL/TLS connections, "TLS handshaking", or "TLS [handshaking]: error text" if disconnecting due to TLS error. "secured" with secured connections (see: [[setting,ssl]]). Otherwise, empty. | | `ssl_security` | TLS session security string. If HAProxy is configured and it terminated the TLS connection, contains "(proxied)". | | `ssl_ja3` | [[link,ssl_ja3]] composed from TLS Client Hello. | | `ssl_ja3_hash` | MD5 hash from [[link,ssl_ja3]] composed from TLS Client Hello. | @@ -325,7 +325,7 @@ See also: | `session_pid` | For user logins: The PID of the IMAP/POP3 process handling the session. | | `mechanism` | [[link,sasl]], e.g., PLAIN. | | `password` | Cleartext password from cleartext authentication mechanism. | -| `secured` | "TLS" with established SSL/TLS connections, "secured" with secured connections (see: [[setting,ssl]]). Otherwise empty. | +| `secured` | "TLS" with established SSL/TLS connections, "secured" with secured connections (see: [[setting,ssl]]). Otherwise, empty. | | `ssl_ja3_hash` | MD5 hash from JA3 string composed from TLS Client Hello. | | `ssl_client_cert_fp` | [[setting,ssl_peer_certificate_fingerprint_hash]] of client certificate. | | `ssl_client_cert_pubkey_fp` | [[setting,ssl_peer_certificate_fingerprint_hash]] of client certificate public key. | @@ -373,7 +373,7 @@ The difference is that `if` can be used to do single comparison, and `switch` ca Examples: ``` -# If %{user} is "testuser", return "INVALID". Otherwise return %{user} uppercased. +# If %{user} is "testuser", return "INVALID". Otherwise, return %{user} uppercased. %{user | if ("=", "testuser, "invalid", user) | upper } # Select subdomain for tenant diff --git a/docs/developers/design/istreams.md b/docs/developers/design/istreams.md index 36045f957..cc79d30b4 100644 --- a/docs/developers/design/istreams.md +++ b/docs/developers/design/istreams.md @@ -221,7 +221,7 @@ common helper functions and variables: - `i_stream_compress()` attempts to compress the current `w_buffer` by removing already-skipped data with `memmove()`. If `skip` is 0, it does nothing. Note that this function must - not be called if `memarea` has refcount > 1. Otherwise that could + not be called if `memarea` has refcount > 1. Otherwise, that could be modifying a snapshotted memarea. The snapshots have made implementing istreams slightly more complicated than diff --git a/docs/howto/active_directory.md b/docs/howto/active_directory.md index 84d0db277..3b47e6239 100644 --- a/docs/howto/active_directory.md +++ b/docs/howto/active_directory.md @@ -46,7 +46,7 @@ passdb ldap { ::: - Use auth worker processes to perform LDAP lookups in order to use multiple -concurrent LDAP connections. Otherwise only a single LDAP connection is used. +concurrent LDAP connections. Otherwise, only a single LDAP connection is used. ::: code-group ```doveconf[dovecot.conf] From dc4df269a1e8037a48826344d0939955ce415bd3 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Tue, 7 Apr 2026 06:22:53 -0400 Subject: [PATCH 28/38] spelling: prerequisites Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- docs/core/config/auth/mechanisms/kerberos.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/core/config/auth/mechanisms/kerberos.md b/docs/core/config/auth/mechanisms/kerberos.md index 3400e4d9b..af739f3c3 100644 --- a/docs/core/config/auth/mechanisms/kerberos.md +++ b/docs/core/config/auth/mechanisms/kerberos.md @@ -20,7 +20,7 @@ If you only wish to authenticate clients using their Kerberos want to use [[link,auth_pam]] with `pam_krb5.so` instead. ::: -## Pre-requisites +## Prerequisites This document assumes that you already have a Kerberos Realm up and functioning correctly at your site, and that each host in your realm From cc7963b1387a9bc12d2a1dbe3ce80554cc5dc53b Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Tue, 7 Apr 2026 05:54:14 -0400 Subject: [PATCH 29/38] spelling: quick and dirty Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- docs/developers/debugging.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/developers/debugging.md b/docs/developers/debugging.md index a1a45834f..64999dd83 100644 --- a/docs/developers/debugging.md +++ b/docs/developers/debugging.md @@ -366,7 +366,7 @@ and Then just use #include those files around just the functions you want un-optimised. -Another dirty and quick way to opt out the optimization is to use pragma +Another quick and dirty way to opt out the optimization is to use pragma to quote the code. ```c From 6302b8bfebf00b3f4699e88d76dd963685f64068 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Tue, 7 Apr 2026 06:23:16 -0400 Subject: [PATCH 30/38] spelling: set up Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- docs/developers/design/dcrypt.md | 2 +- docs/installation/docker.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/developers/design/dcrypt.md b/docs/developers/design/dcrypt.md index 13cc161ef..0b52cd4a9 100644 --- a/docs/developers/design/dcrypt.md +++ b/docs/developers/design/dcrypt.md @@ -168,7 +168,7 @@ wget https://raw.githubusercontent.com/dovecot/tools/refs/heads/main/dcrypt-decr ``` ::: -Setup a local python environment (optional) and install the necessary +Set up a local python environment (optional) and install the necessary dependencies. ```sh diff --git a/docs/installation/docker.md b/docs/installation/docker.md index a0344e733..881cb90bf 100644 --- a/docs/installation/docker.md +++ b/docs/installation/docker.md @@ -165,7 +165,7 @@ docker run -v /etc/dovecot-config:/etc/dovecot/conf.d:ro --security-opt "no-new- To run the Docker image as a test install, a password needs to be set - by default, the Docker image does not allow authentication. -To quickly setup a local system to test IMAP: +To quickly set up a local system to test IMAP: ```console docker run --rm --name dovecot-test -p 31143:31143 -e USER_PASSWORD=password --pull always dovecot/dovecot:latest-dev From 3f8b4fc7133b50815d6e0e8974ce9b6da340a78b Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Tue, 7 Apr 2026 05:48:52 -0400 Subject: [PATCH 31/38] spelling: that Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- docs/contributing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/contributing.md b/docs/contributing.md index 87205a2ce..25decb9b6 100644 --- a/docs/contributing.md +++ b/docs/contributing.md @@ -34,7 +34,7 @@ submit your changes directly to the documentation repository. The commit message should use imperative language ("Fix", "Change", "Add"), not past-tense ("Fixed", "Changed", "Added"). Use a single prefix term - that describes the area of the documentation the commit affects (e.g., + that describes the area of that the documentation the commit affects (e.g., "settings", "fts"). ```shell git commit -am "installation: Fix a typo in the installation guide" From 6033be3fc0f7946daad17d5da956e5e3b7ebb298 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Tue, 7 Apr 2026 06:42:51 -0400 Subject: [PATCH 32/38] spelling: the Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- data/settings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/settings.js b/data/settings.js index 71d216f42..9a86e4ba5 100644 --- a/data/settings.js +++ b/data/settings.js @@ -1586,7 +1586,7 @@ imapsieve_url = sieve://sieve.example.com values: setting_types.BOOLEAN, default: 'no', text: ` -This setting determines whether de IMAPSieve plugin also implicitly expunges +This setting determines whether the IMAPSieve plugin also implicitly expunges messages that were discarded by the executed Sieve script sequence; i.e., Sieve yielded no (implicit) keep.` }, From 2cf3d09258a046939c6b4d676987d13fb3b944f7 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Tue, 7 Apr 2026 06:52:15 -0400 Subject: [PATCH 33/38] spelling: to pipe messages Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- data/settings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/settings.js b/data/settings.js index 9a86e4ba5..d480f1fc9 100644 --- a/data/settings.js +++ b/data/settings.js @@ -1625,7 +1625,7 @@ the plugin looks for script service sockets. Used by the values: setting_types.STRING, text: ` Points to a directory where the plugin looks for programs (shell -scripts) to execute directly and pipe messages to. Used by the +scripts) to execute directly and to pipe messages. Used by the \`vnd.dovecot.pipe\` extension.` }, From d55bbf884b478a4a74e6f16c03b4ef500678ddb5 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Tue, 7 Apr 2026 05:49:36 -0400 Subject: [PATCH 34/38] spelling: to which the user belongs Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- data/settings.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/data/settings.js b/data/settings.js index d480f1fc9..3724f4a20 100644 --- a/data/settings.js +++ b/data/settings.js @@ -1831,7 +1831,8 @@ used.` plugin: 'acl', values: setting_types.STRING, text: ` -A comma-separated string which contains all the groups the user belongs to. +A comma-separated string which contains all the groups to which the user +belongs. A user's UNIX groups have no effect on ACLs (you can enable them by using a special [[link,post_login_scripting]]. From 6797a4550d13ed63a8ad77d43d5a5dbbfeff0983 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Tue, 7 Apr 2026 06:24:51 -0400 Subject: [PATCH 35/38] spelling: uppercase Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- docs/core/plugins/fts.md | 2 +- docs/howto/sieve.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/core/plugins/fts.md b/docs/core/plugins/fts.md index 38f7d62a2..e38d3da23 100644 --- a/docs/core/plugins/fts.md +++ b/docs/core/plugins/fts.md @@ -327,7 +327,7 @@ There is a caveat for the Norwegian language: The default normalizer filter does not modify `U+00F8` (Latin Small Letter O with Stroke). In some configurations it might be desirable to rewrite it to, -e.g., `o`. Same goes for the upper case version. This can be done by passing +e.g., `o`. Same goes for the uppercase version. This can be done by passing a modified `id` setting to the normalizer filter. Similar cases can exist for other languages as well. diff --git a/docs/howto/sieve.md b/docs/howto/sieve.md index aedb5544a..325df2875 100644 --- a/docs/howto/sieve.md +++ b/docs/howto/sieve.md @@ -212,7 +212,7 @@ The following more advanced example uses the subaddress extension to handle recipient addresses structured as `sales+@company.com` in a special way. The `` part is extracted from the address using [[link,sieve_variables]] extension, transformed into a format with the -first letter in upper case and subsequently used to create the folder +first letter in uppercase and subsequently used to create the folder name where the message is stored. The folder name is structured as `users/`. If the `+` From b2db9157163ac9ccea5b9d6d3c45f3cb0501219d Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Tue, 7 Apr 2026 06:25:15 -0400 Subject: [PATCH 36/38] spelling: whether or not Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- docs/core/config/auth/policy.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/core/config/auth/policy.md b/docs/core/config/auth/policy.md index 4573b60cf..bc0df435d 100644 --- a/docs/core/config/auth/policy.md +++ b/docs/core/config/auth/policy.md @@ -175,7 +175,7 @@ Obsolete field indicating whether the request was rejected by policy server. ### `success` -Overall indicator whether the request succeeded or not. +Overall indicator whether or not the request succeeded. ## Expected Response From 4f110f59c5f6146d75de1723d5e5787c1c8bec0c Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Tue, 7 Apr 2026 05:30:48 -0400 Subject: [PATCH 37/38] Refresh check-spelling Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- .github/actions/spelling/README.md | 1 - .github/actions/spelling/candidate.patterns | 273 ++++- .github/actions/spelling/excludes.txt | 13 +- .github/actions/spelling/expect.txt | 46 +- .../actions/spelling/line_forbidden.patterns | 1010 ++++++++++++++++- .github/actions/spelling/patterns.txt | 65 +- .github/actions/spelling/reject.txt | 35 +- .github/workflows/spelling.yml | 31 +- 8 files changed, 1302 insertions(+), 172 deletions(-) diff --git a/.github/actions/spelling/README.md b/.github/actions/spelling/README.md index 1f699f3de..8dd5e9f88 100644 --- a/.github/actions/spelling/README.md +++ b/.github/actions/spelling/README.md @@ -2,7 +2,6 @@ File | Purpose | Format | Info -|-|-|- -[dictionary.txt](dictionary.txt) | Replacement dictionary (creating this file will override the default dictionary) | one word per line | [dictionary](https://github.com/check-spelling/check-spelling/wiki/Configuration#dictionary) [allow.txt](allow.txt) | Add words to the dictionary | one word per line (only letters and `'`s allowed) | [allow](https://github.com/check-spelling/check-spelling/wiki/Configuration#allow) [reject.txt](reject.txt) | Remove words from the dictionary (after allow) | grep pattern matching whole dictionary words | [reject](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-reject) [excludes.txt](excludes.txt) | Files to ignore entirely | perl regular expression | [excludes](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-excludes) diff --git a/.github/actions/spelling/candidate.patterns b/.github/actions/spelling/candidate.patterns index ec038f0af..0a58ceccf 100644 --- a/.github/actions/spelling/candidate.patterns +++ b/.github/actions/spelling/candidate.patterns @@ -1,3 +1,6 @@ +# Repeated letters +\b([A-Za-z])\g{-1}{2,}\b + # marker to ignore all code on line ^.*/\* #no-spell-check-line \*/.*$ # marker to ignore all code on line @@ -7,13 +10,19 @@ # cspell inline ^.*\b[Cc][Ss][Pp][Ee][Ll]{2}:\s*[Dd][Ii][Ss][Aa][Bb][Ll][Ee]-[Ll][Ii][Nn][Ee]\b +# copyright +Copyright (?:\([Cc]\)|©|)(?:[-\d, ]|and)+(?: [A-Z][a-z]+ [A-Z][a-z]+,?)+ + # patch hunk comments -^\@\@ -\d+(?:,\d+|) \+\d+(?:,\d+|) \@\@ .* +^@@ -\d+(?:,\d+|) \+\d+(?:,\d+|) @@ .* # git index header index (?:[0-9a-z]{7,40},|)[0-9a-z]{7,40}\.\.[0-9a-z]{7,40} # file permissions -['"`\s][-bcdLlpsw](?:[-r][-w][-Ssx]){2}[-r][-w][-SsTtx]\+?['"`\s] +(?:^|['"`\s])(?!-+\s)[-bcdLlpsw](?:[-r][-w][-Ssx]){2}[-r][-w][-SsTtx]\+?['"`\s] + +# css fonts +\bfont(?:-family(?:[-\w+]*)|):[^;}]+ # css url wrappings \burl\([^)]+\) @@ -26,13 +35,13 @@ index (?:[0-9a-z]{7,40},|)[0-9a-z]{7,40}\.\.[0-9a-z]{7,40} # data url in quotes ([`'"])data:(?:[^ `'"].*?|)(?:[A-Z]{3,}|[A-Z][a-z]{2,}|[a-z]{3,}).*\g{-1} # data url -data:[-a-zA-Z=;:/0-9+]*,\S* +\bdata:[-a-zA-Z=;:/0-9+_]*,\S* # https/http/file urls -#(?:\b(?:https?|ftp|file)://)[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|] +#(?:\b(?:https?|ftp|file)://)[-A-Za-z0-9+&@#/*%?=~_|!:,.;]+[-A-Za-z0-9+&@#/*%=~_|] # mailto urls -mailto:[-a-zA-Z=;:/?%&0-9+@.]{3,} +mailto:[-a-zA-Z=;:/?%&0-9+@._]{3,} # magnet urls magnet:[?=:\w]+ @@ -65,6 +74,8 @@ magnet:[?=:\w]+ # Amazon \bamazon\.com/[-\w]+/(?:dp/[0-9A-Z]+|) +# AWS ARN +arn:aws:[-/:\w]+ # AWS S3 \b\w*\.s3[^.]*\.amazonaws\.com/[-\w/&#%_?:=]* # AWS execute-api @@ -76,6 +87,9 @@ magnet:[?=:\w]+ # AWS VPC vpc-\w+ +# Azure AD +\baad\.\w{48}\b + # While you could try to match `http://` and `https://` by using `s?` in `https?://`, sometimes there # YouTube url \b(?:(?:www\.|)youtube\.com|youtu.be)/(?:channel/|embed/|user/|playlist\?list=|watch\?v=|v/|)[-a-zA-Z0-9?&=_%]* @@ -91,6 +105,8 @@ vpc-\w+ \bgoogle-analytics\.com/collect.[-0-9a-zA-Z?%=&_.~]* # Google APIs \bgoogleapis\.(?:com|dev)/[a-z]+/(?:v\d+/|)[a-z]+/[-@:./?=\w+|&]+ +# Google Artifact Registry +\.pkg\.dev(?:/[-\w]+)+(?::[-\w]+|) # Google Storage \b[-a-zA-Z0-9.]*\bstorage\d*\.googleapis\.com(?:/\S*|) # Google Calendar @@ -126,6 +142,8 @@ themes\.googleusercontent\.com/static/fonts/[^/\s"]+/v\d+/[^.]+. \bscholar\.google\.com/citations\?user=[A-Za-z0-9_]+ # Google Colab Research Drive \bcolab\.research\.google\.com/drive/[-0-9a-zA-Z_?=]* +# Google Cloud regions +(?:us|(?:north|south)america|europe|asia|australia|me|africa)-(?:north|south|east|west|central){1,2}\d+ # GitHub SHAs (api) \bapi.github\.com/repos(?:/[^/\s"]+){3}/[0-9a-f]+\b @@ -152,6 +170,9 @@ themes\.googleusercontent\.com/static/fonts/[^/\s"]+/v\d+/[^.]+. # GHSA GHSA(?:-[0-9a-z]{4}){3} +# GitHub actions +\buses:\s+(['"]?)[-\w.]+/[-\w./]+@[-\w.]+\g{-1} + # GitLab commit \bgitlab\.[^/\s"]*/\S+/\S+/commit/[0-9a-f]{7,16}#[0-9a-f]{40}\b # GitLab merge requests @@ -161,6 +182,12 @@ GHSA(?:-[0-9a-z]{4}){3} # GitLab commits \bgitlab\.[^/\s"]*/(?:[^/\s"]+/){2}commits?/[0-9a-f]+\b +# #includes +^\s*#include\s*(?:<.*?>|".*?") + +# #pragma lib +^\s*#pragma comment\(lib, ".*?"\) + # binance accounts\.binance\.com/[a-z/]*oauth/authorize\?[-0-9a-zA-Z&%]* @@ -210,10 +237,10 @@ accounts\.binance\.com/[a-z/]*oauth/authorize\?[-0-9a-zA-Z&%]* # medium link \blink\.medium\.com/[a-zA-Z0-9]+ # medium -\bmedium\.com/\@?[^/\s"]+/[-\w]+ +\bmedium\.com/@?[^/\s"]+/[-\w]+ # microsoft -\b(?:https?://|)(?:(?:download\.visualstudio|docs|msdn2?|research)\.microsoft|blogs\.msdn)\.com/[-_a-zA-Z0-9()=./%]* +\b(?:https?://|)(?:(?:(?:blogs|download\.visualstudio|docs|msdn2?|research)\.|)microsoft|blogs\.msdn)\.co(?:m|\.\w\w)/[-_a-zA-Z0-9()=./%?#]* # powerbi \bapp\.powerbi\.com/reportEmbed/[^"' ]* # vs devops @@ -275,7 +302,7 @@ slack://[a-zA-Z0-9?&=]+ [0-9a-f]{32}\@o\d+\.ingest\.sentry\.io\b # Twitter markdown -\[\@[^[/\]:]*?\]\(https://twitter.com/[^/\s"')]*(?:/status/\d+(?:\?[-_0-9a-zA-Z&=]*|)|)\) +\[@[^[/\]:]*?\]\(https://twitter.com/[^/\s"')]*(?:/status/\d+(?:\?[-_0-9a-zA-Z&=]*|)|)\) # Twitter hashtag \btwitter\.com/hashtag/[\w?_=&]* # Twitter status @@ -330,7 +357,7 @@ ipfs://[0-9a-zA-Z]{3,} [^"\s]+/gitweb/\S+;h=[0-9a-f]+ # HyperKitty lists -/archives/list/[^@/]+\@[^/\s"]*/message/[^/\s"]*/ +/archives/list/[^@/]+@[^/\s"]*/message/[^/\s"]*/ # lists /thread\.html/[^"\s]+ @@ -348,7 +375,7 @@ ipfs://[0-9a-zA-Z]{3,} \bopen\.spotify\.com/embed/playlist/\w+ # Mastodon -\bmastodon\.[-a-z.]*/(?:media/|\@)[?&=0-9a-zA-Z_]* +\bmastodon\.[-a-z.]*/(?:media/|@)[?&=0-9a-zA-Z_]* # scastie \bscastie\.scala-lang\.org/[^/]+/\w+ @@ -387,12 +414,12 @@ ipfs://[0-9a-zA-Z]{3,} \bgetopts\s+(?:"[^"]+"|'[^']+') # ANSI color codes -(?:\\(?:u00|x)1[Bb]|\x1b|\\u\{1[Bb]\})\[\d+(?:;\d+|)m +(?:\\(?:u00|x)1[Bb]|\\03[1-7]|\x1b|\\u\{1[Bb]\})\[(?:\d+(?:;\d+)*|)m # URL escaped characters -\%[0-9A-F][A-F](?=[A-Za-z]) +%[0-9A-F][A-F](?=[A-Za-z]) # lower URL escaped characters -\%[0-9a-f][a-f](?=[a-z]{2,}) +%[0-9a-f][a-f](?=[a-z]{2,}) # IPv6 \b(?:[0-9a-fA-F]{0,4}:){3,7}[0-9a-fA-F]{0,4}\b # c99 hex digits (not the full format, just one I've seen) @@ -400,11 +427,11 @@ ipfs://[0-9a-zA-Z]{3,} # Punycode \bxn--[-0-9a-z]+ # sha -sha\d+:[0-9]*[a-f]{3,}[0-9a-f]* +sha\d+:[0-9a-f]*?[a-f]{3,}[0-9a-f]* # sha-... -- uses a fancy capture (\\?['"]|")[0-9a-f]{40,}\g{-1} # hex runs -\b[0-9a-fA-F]{16,}\b +\b(?=(?:[a-fA-F]{0,2}\d)*[a-fA-F]{3})[0-9a-fA-F]{16,}\b # hex in url queries =[0-9a-fA-F]*?(?:[A-F]{3,}|[a-f]{3,})[0-9a-fA-F]*?& # ssh @@ -420,10 +447,21 @@ sha\d+:[0-9]*[a-f]{3,}[0-9a-f]* # pki -----BEGIN.*-----END +# pki (base64) +LS0tLS1CRUdJT.* + +# C# includes +^\s*using [^;]+; + # uuid: \b[0-9a-fA-F]{8}-(?:[0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}\b -# hex digits including css/html color classes: -(?:[\\0][xX]|\\u|[uU]\+|#x?|\%23)[0-9_a-fA-FgGrR]*?[a-fA-FgGrR]{2,}[0-9_a-fA-FgGrR]*(?:[uUlL]{0,3}|[iu]\d+)\b + +# unicode escaped characters (4) +\\u[0-9a-fA-F]{4} + +# hex digits including css/html color classes +(?:[\\0][xX]|\\u\{?|[uU]\+|#x?|%23|&H)[0-9_a-fA-FgGrR]*?[a-fA-FgGrR]{2,}[0-9_a-fA-FgGrR]*(?:[uUlL]{0,3}|[iu]\d+)\b + # integrity integrity=(['"])(?:\s*sha\d+-[-a-zA-Z=;:/0-9+]{40,})+\g{-1} @@ -441,20 +479,56 @@ integrity=(['"])(?:\s*sha\d+-[-a-zA-Z=;:/0-9+]{40,})+\g{-1} Name\[[^\]]+\]=.* # IServiceProvider / isAThing -\b(?:I|isA)(?=(?:[A-Z][a-z]{2,})+\b) +(?:(?:\b|_|(?<=[a-z]))I|(?:\b|_)(?:nsI|isA))(?=(?:[A-Z][a-z]{2,})+(?:[A-Z\d]|\b)) + +# python +\b(?i)py(?!gment|gmy|lon|ramid|ro|th)(?=[a-z]{2,}) # crypt (['"])\$2[ayb]\$.{56}\g{-1} +# apache/old crypt +(['"]|)\$+(?:apr|)1\$+.{8}\$+.{22}\g{-1} + +# sha1 hash +\{SHA\}[-a-zA-Z=;:/0-9+]{3,} + +# machine learning (?) +\b(?i)ml(?=[a-z]{2,}) + # scrypt / argon \$(?:scrypt|argon\d+[di]*)\$\S+ # go.sum \bh1:\S+ +# golang print-f-style functions +(?i)(?<=append|comma|debug|equal|err|error|exit|fatal|format|info|log|name|panic|print|skip|scan|string|trace|true|warn|warning|wrap|write)(?:f|ln)(?:[ (]|$) + +# golang regular expression +(?|m([|!/@#,;']).*?\g{-1}) @@ -491,11 +575,17 @@ content: (['"])[-a-zA-Z=;:/0-9+]*=\g{-1} # perl qr regex (?|\(.*?\)|([|!/@#,;']).*?\g{-1}) +# perl run +perl(?:\s+-[a-zA-Z]\w*)+ + +# C network byte conversions +#(?:\d|\bh)to(?!ken)(?=[a-z])|to(?=[adhiklpun]\() + # Go regular expressions -regexp?\.MustCompile\(`[^`]*`\) +regexp?\.MustCompile\((?:`[^`]*`|".*"|'.*')\) # regex choice -#\(\?:[^)]+\|[^)]+\) +#\((?:\?:|)[^)|]+(?.*?< + # jetbrains schema https://youtrack.jetbrains.com/issue/RSRP-489571 urn:shemas-jetbrains-com +# Debian changelog severity +[-\w]+ \(.*\) (?:\w+|baseline|unstable|experimental); urgency=(?:low|medium|high|emergency|critical)\b + +# Red Hat Package management spec file dependencies +^(?:Build|)Requires: [-.\w]+ + # kubernetes pod status lists # https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#pod-phase \w+(?:-\w+)+\s+\d+/\d+\s+(?:Running|Pending|Succeeded|Failed|Unknown)\s+ @@ -519,20 +618,29 @@ urn:shemas-jetbrains-com # kubectl - pods in CrashLoopBackOff \w+-[0-9a-f]+-\w+\s+\d+/\d+\s+CrashLoopBackOff\s+ +# kubernetes applications +\.apps/[-\w]+ + # kubernetes object suffix -[0-9a-f]{10}-\w{5}\s +# kubernetes crd patterns +^\s*pattern: .*$ + # posthog secrets ([`'"])phc_[^"',]+\g{-1} # xcode # xcodeproject scenes -(?:Controller|destination|ID|id)="\w{3}-\w{2}-\w{3}" +(?:Controller|destination|(?:first|second)Item|ID|id)="\w{3}-\w{2}-\w{3}" # xcode api botches customObjectInstantitationMethod +# msvc api botches +PrependWithABINamepsace + # configure flags .* \| --\w{2,}.*?(?=\w+\s\w+) @@ -540,23 +648,44 @@ customObjectInstantitationMethod \.fa-[-a-z0-9]+ # bearer auth -(['"])Bear[e][r] .*?\g{-1} +(['"])[Bb]ear[e][r] .{3,}?\g{-1} + +# bearer auth +#\b[Bb]ear[e][r]:? [-a-zA-Z=;:/0-9+.]{3,} + +# basic auth +(['"])[Bb]asic [-a-zA-Z=;:/0-9+]{3,}\g{-1} # basic auth -(['"])Basic [-a-zA-Z=;:/0-9+]{3,}\g{-1} +: [Bb]asic [-a-zA-Z=;:/0-9+.]{3,} # base64 encoded content -([`'"])[-a-zA-Z=;:/0-9+]+=\g{-1} +([`'"])[-a-zA-Z=;:/0-9+]{3,}=\g{-1} # base64 encoded content in xml/sgml ->[-a-zA-Z=;:/0-9+]+=[-a-zA-Z=;:/0-9+]{3,}=?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_]{40,} + +# DNS rr data +#(?:\d+\s+){3}(?:[-+/=.\w]{2,}\s*){1,2} # encoded-word =\?[-a-zA-Z0-9"*%]+\?[BQ]\?[^?]{0,75}\?= +# numerator +\bnumer\b(?=.*denom) + # Time Zones -\b(?:Africa|Atlantic|America|Antarctica|Asia|Australia|Europe|Indian|Pacific)(?:/\w+)+ +\b(?:Africa|Atlantic|America|Antarctica|Arctic|Asia|Australia|Europe|Indian|Pacific)(?:/[-\w]+)+ # linux kernel info ^(?:bugs|flags|Features)\s+:.* @@ -564,16 +693,22 @@ customObjectInstantitationMethod # systemd mode systemd.*?running in system mode \([-+].*\)$ +# Lorem # Update Lorem based on your content (requires `ge` and `w` from https://github.com/jsoref/spelling; and `review` from https://github.com/check-spelling/check-spelling/wiki/Looking-for-items-locally ) # grep '^[^#].*lorem' .github/actions/spelling/patterns.txt|perl -pne 's/.*i..\?://;s/\).*//' |tr '|' "\n"|sort -f |xargs -n1 ge|perl -pne 's/^[^:]*://'|sort -u|w|sed -e 's/ .*//'|w|review - # Warning, while `(?i)` is very neat and fancy, if you have some binary files that aren't proper unicode, you might run into: -## Operation "substitution (s///)" returns its argument for non-Unicode code point 0x1C19AE (the code point will vary). -## You could manually change `(?i)X...` to use `[Xx]...` -## or you could add the files to your `excludes` file (a version after 0.0.19 should identify the file path) -# Lorem -(?:\w|\s|[,.])*\b(?i)(?:amet|consectetur|cursus|dolor|eros|ipsum|lacus|libero|ligula|lorem|magna|neque|nulla|suscipit|tempus)\b(?:\w|\s|[,.])* +# ... Operation "substitution (s///)" returns its argument for non-Unicode code point 0x1C19AE (the code point will vary). +# ... You could manually change `(?i)X...` to use `[Xx]...` +# ... or you could add the files to your `excludes` file (a version after 0.0.19 should identify the file path) +(?:(?:\w|\s|[,.])*\b(?i)(?:amet|consectetur|cursus|dolor|eros|ipsum|lacus|libero|ligula|lorem|magna|neque|nulla|suscipit|tempus)\b(?:\w|\s|[,.])*) # Non-English +# Even repositories expecting pure English content can unintentionally have Non-English content... People will occasionally mistakenly enter [homoglyphs](https://en.wikipedia.org/wiki/Homoglyph) which are essentially typos, and using this pattern will mean check-spelling will not complain about them. +# . +# If the content to be checked should be written in English and the only Non-English items will be people's names, then you can consider adding this. +# . +# Alternatively, if you're using check-spelling v0.0.25+, and you would like to _check_ the Non-English content for spelling errors, you can. For information on how to do so, see: +# https://docs.check-spelling.dev/Feature:-Configurable-word-characters.html#unicode [a-zA-Z]*[ÀÁÂÃÄÅÆČÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæčçèéêëìíîïðñòóôõöøùúûüýÿĀāŁłŃńŅņŒœŚśŠšŜŝŸŽžź][a-zA-Z]{3}[a-zA-ZÀÁÂÃÄÅÆČÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæčçèéêëìíîïðñòóôõöøùúûüýÿĀāŁłŃńŅņŒœŚśŠšŜŝŸŽžź]*|[a-zA-Z]{3,}[ÀÁÂÃÄÅÆČÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæčçèéêëìíîïðñòóôõöøùúûüýÿĀāŁłŃńŅņŒœŚśŠšŜŝŸŽžź]|[ÀÁÂÃÄÅÆČÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæčçèéêëìíîïðñòóôõöøùúûüýÿĀāŁłŃńŅņŒœŚśŠšŜŝŸŽžź][a-zA-Z]{3,} # highlighted letters @@ -583,31 +718,54 @@ systemd.*?running in system mode \([-+].*\)$ # This corpus only had capital letters, but you probably want lowercase ones as well. \b[LN]'+[a-z]{2,}\b -# latex (check-spelling >= 0.0.22) +# LaTeX \\\w{2,}\{ +# American Mathematical Society (AMS) / Doxygen +TeX/AMS + +# File extensions +\*\.[+\w]+, + # eslint "varsIgnorePattern": ".+" +# nolint +nolint:\s*[\w,]+ + # Windows short paths -[/\\][^/\\]{5,6}~\d{1,2}[/\\] +[/\\][^/\\]{5,6}~\d{1,2}(?=[/\\]) + +# Windows Resources with accelerators +\b[A-Z]&[a-z]+\b(?!;) + +# signed off by +(?i)Signed-off-by: .* + +# cygwin paths +/cygdrive/[a-zA-Z]/(?:Program Files(?: \(.*?\)| ?)(?:/[-+.~\\/()\w ]+)*|[-+.~\\/()\w])+ -# in check-spelling@v0.0.22+, printf markers aren't automatically consumed # printf markers #(?"'`=(])-(?:(?:J-|)[DPWXY]|[Llf])(?=[A-Z]{2,}|[A-Z][a-z]|[a-z]{2,}) +#(?:^|[\t ,>"'`=\[(#])-(?:(?:J-|)[DPWXY]|[Llf])(?=[A-Z]{2,}|[A-Z][a-z]|[a-z]{2,}) # Compiler flags (Windows / PowerShell) # This is a subset of the more general compiler flags pattern. # It avoids matching `-Path` to prevent it from being treated as `ath` -#(?:^|[\t ,"'`=(])-(?:[DPL](?=[A-Z]{2,})|[WXYlf](?=[A-Z]{2,}|[A-Z][a-z]|[a-z]{2,})) +#(?:^|[\t ,"'`=\[(#])-(?:[DPL](?=[A-Z]{2,})|[WXYlf](?=[A-Z]{2,}|[A-Z][a-z]|[a-z]{2,})) # Compiler flags (linker) ,-B +# Library prefix +# e.g., `lib`+`archive`, `lib`+`raw`, `lib`+`unwind` +# (ignores some words that happen to start with `lib`) +(?:\b|_)[Ll]ib(?!era[lt])(?:re(?=office)|era|)(?!ero|erty|rar(?:i(?:an|es)|y))(?=[a-z]) + +# iSCSI iqn (approximate regex) +\biqn\.[0-9]{4}-[0-9]{2}(?:[\.-][a-z][a-z0-9]*)*\b + +# WWNN/WWPN (NAA identifiers) +\b(?:0x)?10[0-9a-f]{14}\b|\b(?:0x|3)?[25][0-9a-f]{15}\b|\b(?:0x|3)?6[0-9a-f]{31}\b + # curl arguments -\b(?:\\n|)curl(?:\s+-[a-zA-Z]{1,2}\b)*(?:\s+-[a-zA-Z]{3,})(?:\s+-[a-zA-Z]+)* +\b(?:\\n|)curl(?:\.exe|)(?:\s+-[a-zA-Z]{1,2}\b)*(?:\s+-[a-zA-Z]{3,})(?:\s+-[a-zA-Z]+)* # set arguments -\bset(?:\s+-[abefimouxE]{1,2})*\s+-[abefimouxE]{3,}(?:\s+-[abefimouxE]+)* +\b(?:bash|(?]|depth|frame|page|project|select)\s[1-9] (?!byte|day|hour|meaning|minute|month|(?:new |)page|people|(?:more |)space|year)[a-z]+ [a-z]+\s + +# Write out numbers at the start of a sentence +# https://www.scribendi.com/academy/articles/when_to_spell_out_numbers_in_writing.en.html#:~:text=Beginning%20a%20Sentence%20with%20a%20Number,may%20be%2e +#(?:\b[a-z]{4,}|\s(?:[a-eg-z][a-z]{2}|f[a-hj-z][a-z]|fi[a-fh][a-z]))[:.?!] [1-9] [a-z]{3,} [a-z]+\s\w+ + +# Don't write two numbers in a row +# https://www.scribendi.com/academy/articles/when_to_spell_out_numbers_in_writing.en.html#:~:text=Paired%20Numbers%20%28Two%20Numbers%20in,librarian%20to%20begin%20story%20time%2e +(?:[a-z]{4,}|\s(?!apr|aug|dec|feb|fri|jan|mar|mon|nov|oct|sat|sep|sun|thu|tue|wed)[a-z]{3})\s\d+\s\d+(?!--)[-\s](?:(?!--)[-A-Za-z]){2,}\s + +# This probably indicates Mojibake https://en.wikipedia.org/wiki/Mojibake +# You probably should try to unbake this content +Ã(?:Â[¤¶¥]|[£¢])|à + +# Should be `HH:MM:SS` +\bHH:SS:MM\b + +# Should be `86400` (seconds in a standard day) +\b84600\b(?:.*\bday\b) + +# Should probably be `2006-01-02` (yyyy-mm-dd) +# Assuming that the time is being passed to https://go.dev/src/time/format.go +\b2006-02-01\b + +# Should probably have a trailing `.` +\s([a-z]\.){2,}[a-z]\s(?=\w) + +# Should probably end with `”` +# Likely bad OCR +“.+[^'‘\\\[]+’'(?!['"]) + +# Should probably end with `”` or with only one of `’`/`'` +\s\w+[^'‘\\\[]+’'(?!['"]) + +# Should probably be matching (smart)quotes or backticks (if Markdown) +# Unless the file format is TeX +^[^`]+(? Don't use `can not` when you mean `cannot`. The only time you're likely to see `can not` written as separate words is when the word `can` happens to precede some other phrase that happens to start with `not`. +# > `Can't` is a contraction of `cannot`, and it's best suited for informal writing. +# > In formal writing and where contractions are frowned upon, use `cannot`. +# > It is possible to write `can not`, but you generally find it only as part of some other construction, such as `not only . . . but also.` +# - if you encounter such a case, add a pattern for that case to patterns.txt. +\b[Cc]an not\b(?! only\b) + +# Should be `chart` +(?i)\bhelm\b.*\bchard\b + +# Should be `chute` +(?i)(?<=laundry )shoot\b + +# Should be `code` +(?<=\bof )a code(?= that\b) -# s.b. GitHub -(?|\[)(?:(?:click |)here|link|(?:read |)more)(?:> /etc/apt/sources.list.d/something-distro.list +# ```` +\bapt-key add\b + +# Should be `nearby` +\bnear by\b + +# Should be `necessary` +(?<=\blonger )needed(?= to\b) + +# Should probably be a person named `Nick` or the abbreviation `NIC` +\bNic\b + +# Should be `not supposed` +\bsupposed not\b + +# Should be `Once this` or `On this` or even `One that`. Rarely `One, this` +[?!.] One this\b + +# Should probably be `much more` +\bmore much\b + +# Should be `perform its` +\bperform it's\b + +# Should be `PowerPoint` +\bPowerpoint\b + +# Should be `opt-in` +(? below for the` +(?i)\bfind below the\b + +# Should be `then any` unless there's a comparison before the `,` +, than any\b + +# Should be `did not exist` +\bwere not existent\b + +# Should be `not exist` or `nonexistent` +(?v# (?:(?<=[A-Z]{2})V|(?<=[a-z]{2}|[A-Z]{2})v)\d+(?:\b|(?=[a-zA-Z_])) +# hit-count: 93 file-count: 24 +# Library prefix +# e.g., `lib`+`archive`, `lib`+`raw`, `lib`+`unwind` +# (ignores some words that happen to start with `lib`) +(?:\b|_)[Ll]ib(?!era[lt])(?:re(?=office)|era|)(?!ero|erty|rar(?:i(?:an|es)|y))(?=[a-z]) + +# hit-count: 48 file-count: 30 +# Repeated letters +\b([A-Za-z])\g{-1}{2,}\b + +# hit-count: 17 file-count: 6 +# golang print-f-style functions +(?i)(?<=append|comma|debug|equal|err|error|exit|fatal|format|info|log|name|panic|print|skip|scan|string|trace|true|warn|warning|wrap|write)(?:f|ln)(?:[ (]|$) + # hit-count: 14 file-count: 6 # hex digits including css/html color classes: (?:[\\0][xX]|\\u|[uU]\+|#x?|\%23)[0-9_a-fA-FgGrR]*?[a-fA-FgGrR]{2,}[0-9_a-fA-FgGrR]*(?:[uUlL]{0,3}|[iu]\d+)\b @@ -35,7 +49,11 @@ # hit-count: 6 file-count: 3 # tar arguments -\b(?:\\n|)g?tar(?:\.exe|)(?:(?:\s+--[-a-zA-Z]+|\s+-[a-zA-Z]+|\s[ABGJMOPRSUWZacdfh-pr-xz]+\b)(?:=[^ ]*|))+ +\b(?:\\n|)g?tar(?:\.exe|)(?:(?:\s+--[-a-zA-Z]+|\s+-[a-zA-Z]+|\s[ABGJMOPRSUWZacdfh-pr-xz]+\b)(?:=(?:\$\{\{.*?\}\}|[^ ])*|))+ + +# hit-count: 5 file-count: 4 +# Markdown anchor links +\(#\S*?[a-zA-Z]\S*?\) # hit-count: 5 file-count: 3 # alternate markers if you run into latex and friends @@ -65,6 +83,10 @@ mailto:[-a-zA-Z=;:/?%&0-9+@.]{3,} # uuid: \b[0-9a-fA-F]{8}-(?:[0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}\b +# hit-count: 2 file-count: 1 +# perl run +perl(?:\s+-[a-zA-Z]\w*)+ + # hit-count: 1 file-count: 1 # oracle \bdocs\.oracle\.com/[-0-9a-zA-Z./_?#&=]* @@ -73,6 +95,18 @@ mailto:[-a-zA-Z=;:/?%&0-9+@.]{3,} # Non-English [a-zA-Z]*[ÀÁÂÃÄÅÆČÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæčçèéêëìíîïðñòóôõöøùúûüýÿĀāŁłŃńŅņŒœŚśŠšŜŝŸŽžź][a-zA-Z]{3}[a-zA-ZÀÁÂÃÄÅÆČÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæčçèéêëìíîïðñòóôõöøùúûüýÿĀāŁłŃńŅņŒœŚśŠšŜŝŸŽžź]*|[a-zA-Z]{3,}[ÀÁÂÃÄÅÆČÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæčçèéêëìíîïðñòóôõöøùúûüýÿĀāŁłŃńŅņŒœŚśŠšŜŝŸŽžź]|[ÀÁÂÃÄÅÆČÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæčçèéêëìíîïðñòóôõöøùúûüýÿĀāŁłŃńŅņŒœŚśŠšŜŝŸŽžź][a-zA-Z]{3,} +# hit-count: 3 file-count: 3 +# microsoft +\b(?:https?://|)(?:(?:(?:blogs|download\.visualstudio|docs|msdn2?|research)\.|)microsoft|blogs\.msdn)\.co(?:m|\.\w\w)/[-_a-zA-Z0-9()=./%?#]* + +# hit-count: 1 file-count: 1 +# #includes +^\s*#include\s*(?:<.*?>|".*?") + +# hit-count: 1 file-count: 1 +# GitHub actions +\buses:\s+(['"]?)[-\w.]+/[-\w./]+@[-\w.]+\g{-1} + (?:\[[0-9a-f]+\]\(https:/|)/(?:www\.|)github\.com/[^/]+/[^/]+(?:/[^/]+/[0-9a-f]+(?:[-0-9a-zA-Z/#.]*|)\b|) x-amz-request-id:[0-9A-F]+ @@ -131,24 +165,41 @@ key=[0-9a-f]+:\w+\}\s*=\s*(?:[0-9a-f$]+|pass) # Questionably acceptable forms of `in to` # Personally, I prefer `log into`, but people object # https://www.tprteaching.com/log-into-log-in-to-login/ -\b(?:[Ll]og|[Ss]ign) in to\b +\b(?:(?:[Ll]og(?:g(?=[a-z])|)|[Ss]ign)(?:ed|ing)?) in to\b # to opt in \bto opt in\b +# pass(ed|ing) in +\bpass(?:ed|ing) in\b + # acceptable duplicates # ls directory listings -[-bcdlpsw](?:[-r][-w][-SsTtx]){3}[\.+*]?\s+\d+\s+\S+\s+\S+\s+\d+\s+ +[-bcdlpsw](?:[-r][-w][-SsTtx]){3}[\.+*]?\s+\d+\s+\S+\s+\S+\s+[.\d]+(?:[KMGT]|)\s+ # mount \bmount\s+-t\s+(\w+)\s+\g{-1}\b # C types and repeated CSS values -\s(auto|blah|center|div|inherit|long|LONG|none|normal|solid|thin|transparent|very)(?: \g{-1})+\s -# C struct -\bstruct\s+(\w+)\s+\g{-1}\b +\s(auto|await|blah|buffalo|center|div|inherit|long|LONG|none|normal|solid|thin|transparent|very)(?:\s\g{-1})+\s +# C enum and struct +\b(?:enum|struct)\s+(\w+)\s+\g{-1}\b # go templates \s(\w+)\s+\g{-1}\s+\`(?:graphql|inject|json|yaml): # doxygen / javadoc / .net -(?:[\\@](?:brief|groupname|t?param|return|retval)|(?:public|private|\[Parameter(?:\(.+\)|)\])(?:\s+static|\s+override|\s+readonly)*)(?:\s+\{\w+\}|)\s+(\w+)\s+\g{-1}\s +(?:[\\@](?:brief|defgroup|groupname|link|t?param|return|retval)|(?:public|private|\[Parameter(?:\(.+\)|)\])(?:\s+(?:static|override|readonly|required|virtual))*)(?:\s+\{\w+\}|)\s+(\w+)\s+\g{-1}\s +# C# getter/setter +\s(\w+)\s+\g{-1}\s*\{\s*[gs]et; + +# macOS file path +(?:Contents\W+|(?!iOS)/)MacOS\b + +# Python package registry has incorrect spelling for macOS / Mac OS X +"Operating System :: MacOS :: MacOS X" + +# "company" in Germany +\bGmbH\b + +# IntelliJ +\bIntelliJ\b # Commit message -- Signed-off-by and friends ^\s*(?:(?:Based-on-patch|Co-authored|Helped|Mentored|Reported|Reviewed|Signed-off)-by|Thanks-to): (?:[^<]*<[^>]*>|[^<]*)\s*$ diff --git a/.github/actions/spelling/reject.txt b/.github/actions/spelling/reject.txt index e5e4c3eef..6006dbed7 100644 --- a/.github/actions/spelling/reject.txt +++ b/.github/actions/spelling/reject.txt @@ -1,11 +1,30 @@ -^attache$ -^bellow$ +attache +aroynt.* +bellows? benefitting occurences? -^dependan.* -^oer$ +.*dnt +dependan.* +developement +developp?e +Devers? +devex.* +devide +Devinn?[ae] +devisals? +devisors? +diables? +hasta? +hastat.* +immediatly +inisle +inital +linge +oer Sorce -^[Ss]pae.* -^untill$ -^untilling$ -^wether.* +[Ss]pae.* +Teh +untill +untilling +venders? +wether.* diff --git a/.github/workflows/spelling.yml b/.github/workflows/spelling.yml index 71164354d..e87075b56 100644 --- a/.github/workflows/spelling.yml +++ b/.github/workflows/spelling.yml @@ -33,14 +33,14 @@ name: Spell checking # # For background, see: https://github.com/check-spelling/check-spelling/wiki/Feature:-Update-with-deploy-key -# Sarif reporting +# SARIF reporting # -# Access to Sarif reports is generally restricted (by GitHub) to members of the repository. +# Access to SARIF reports is generally restricted (by GitHub) to members of the repository. # # Requires enabling `security-events: write` # and configuring the action with `use_sarif: 1` # -# For information on the feature, see: https://github.com/check-spelling/check-spelling/wiki/Feature:-Sarif-output +# For information on the feature, see: https://github.com/check-spelling/check-spelling/wiki/Feature:-SARIF-output # Minimal workflow structure: # @@ -54,7 +54,7 @@ name: Spell checking # spelling: # # remove `security-events: write` and `use_sarif: 1` # # remove `experimental_apply_changes_via_bot: 1` -# ... otherwise adjust the `with:` as you wish +# ... otherwise, adjust the `with:` as you wish on: push: @@ -73,6 +73,8 @@ on: types: - 'created' +permissions: {} + jobs: spelling: name: Spell checking @@ -84,7 +86,7 @@ jobs: outputs: followup: ${{ steps.spelling.outputs.followup }} runs-on: ubuntu-latest - if: ${{ contains(github.event_name, 'pull_request') || github.event_name == 'push' }} + if: ${{ (contains(github.event_name, 'pull_request') && github.event.pull_request.state == 'open') || github.event_name == 'push' }} concurrency: group: spelling-${{ github.event.pull_request.number || github.ref }} # note: If you use only_check_changed_files, you do not want cancel-in-progress @@ -127,34 +129,31 @@ jobs: comment-push: name: Report (Push) # If your workflow isn't running on push, you can remove this job - runs-on: ubuntu-latest + runs-on: ubuntu-slim needs: spelling permissions: + actions: read contents: write if: (success() || failure()) && needs.spelling.outputs.followup && github.event_name == 'push' steps: - name: comment uses: check-spelling/check-spelling@v0.0.26 with: - checkout: true - spell_check_this: check-spelling/spell-check-this@prerelease task: ${{ needs.spelling.outputs.followup }} comment-pr: name: Report (PR) # If you workflow isn't running on pull_request*, you can remove this job - runs-on: ubuntu-latest + runs-on: ubuntu-slim needs: spelling permissions: - contents: read + actions: read pull-requests: write if: (success() || failure()) && needs.spelling.outputs.followup && contains(github.event_name, 'pull_request') steps: - name: comment uses: check-spelling/check-spelling@v0.0.26 with: - checkout: true - spell_check_this: check-spelling/spell-check-this@prerelease task: ${{ needs.spelling.outputs.followup }} experimental_apply_changes_via_bot: ${{ github.repository_owner != 'dovecot' && 1 }} @@ -164,19 +163,21 @@ jobs: contents: write pull-requests: write actions: read - runs-on: ubuntu-latest + runs-on: ubuntu-slim if: ${{ github.repository_owner != 'dovecot' && github.event_name == 'issue_comment' && github.event.issue.pull_request && - contains(github.event.comment.body, '@check-spelling-bot apply') + contains(github.event.comment.body, '@check-spelling-bot') && + contains(github.event.comment.body, 'apply') && + contains(github.event.comment.body, 'https://') }} concurrency: group: spelling-update-${{ github.event.issue.number }} cancel-in-progress: false steps: - name: apply spelling updates - uses: check-spelling/check-spelling@prerelease + uses: check-spelling/check-spelling@v0.0.26 with: experimental_apply_changes_via_bot: 1 checkout: true From 2bb489f6411b292f71d3de9e588025b9f7f340bf Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Tue, 7 Apr 2026 08:00:19 -0400 Subject: [PATCH 38/38] Add linguist mapping for `.inc` files --- .gitattributes | 1 + 1 file changed, 1 insertion(+) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000..a51dbbe2a --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +*.inc linguist-language=Markdown