Skip to content

History / Relocating an Installation

Revisions

  • Six passages of this wiki's own text say what the documents say with batch51 on master, 5e49abf06, where they said otherwise: the Glossary's entry on CodeQL and Changes Since 6.2.10's note on the C++ analysis say that since 18 October 2026 CodeQL analyses the code of the copy on GitHub, GitHub's default setup at first and then the project's workflow .github/workflows/codeql.yml in its place, the Glossary adding that OpenSSF Scorecard's SAST check counts the workflow where it did not count the default setup, where they said that GitHub's own default setup, no workflow of the project's, analysed it; the Project Handbook's section 8 says that from batch51 .github/ also holds CODEOWNERS and workflows/codeql.yml, the two workflows of the project's that GitHub Actions runs, where it called Scorecard's the one; Installing hMailServer says that under NT SERVICE\hMailServer the service says in the application log at a reinitialise, where application logging is on, that the file's copy is not refreshed, as ServiceAccount.md now says, where it said so once a start, and that the file keeps from 6.3.6 the live update's trust beside PasswordPepper; Migration sends a move to another folder or drive to Relocating an Installation and one to a new machine to Backup and Restore, where it sent a new machine to Relocating an Installation, which covers another directory or drive; and Relocating an Installation's own paragraph on moving to new hardware says that from 6.3.6 the live update's trust is read from the file alone and no backup carries it, so that a site that sets it copies it to the new machine with the file (Backup.md), and its header says so. Signed-off-by: Christopher Holloway <chris.holloway@progressiverobot.com>

    Christopher Holloway committed Oct 21, 2026
  • The ten copies whose documents batch51 changes - the Assurance Case, Contributing, Governance, the Release Process, the Security Policy, Regulatory Scope, Relocating an Installation, The Service Account, Third-Party Binaries and The Update Feed - are copied again from the documents as master has them from batch51, 5e49abf06 (21 October 2026), and each header says so and what the document changes, where they were the documents at batch50, 0c0b6bae7, or at batch49, f14412d39, which batch50 left as they were. Relocating an Installation: a new paragraph after the opening sends an installation whose programs somebody who is not an administrator may have changed to The Service Account's Reinstalling into a new folder; step 0 converts full message paths with the Data Directory Synchronizer on the installation before anything is copied, a row that names a file outside the data directory first, in the folder it names, in five numbered points, where step 8 ran the synchronizer against the new data directory after the copy, which would have imported each such message a second time, and step 8 checks that none is left and converts one that is the same way in the old data folder; step 3 makes the new root with the permissions setup gives a program folder before the copy, since a copy takes the permissions of the folder it lands in; step 4 says that the server reads Bin\hMailServer.ini under the folder the registry's InstallLocation names, so the edited copy only from step 5 on, where it said the file beside the running hMailServer.exe was read first, and, with step 1, that an edit of a stored setting in the file is put back only where the service may write the file; step 6 runs hMailServer.exe /ProtectFolders after /Register, and /GrantServiceAccess for a service that runs as anything but LocalSystem; step 7 names the Diagnostics page's Installation paths, where it named Settings, Directories; step 9 changes a certificate's files with Edit... rather than deleting it and adding it again; step 11 runs the release's setup again at the new root with /DIR, the 32-bit uninstall entry taken away first, and never the old uninstaller; and step 12 keeps the old tree private until it is deleted by hand. Three sentences of this wiki's own additions there say what the document now says: the passage that ends step 4 has a value edited into the file reported as HM5804 and the stored value used, the line put back where the service may write the file, so that the settings-store paths go on pointing at the old tree, and the store writing a new value into the file's copy where the service may write the file, where it had the line put back and the copy written whatever the account; and the paragraph on moving to new hardware has the stored settings written into the new machine's file at its first start where the service may write it. The Security Policy: Build provenance says that from the release after 6.3.7 a release also carries hmailserver-<version>.intoto.jsonl, the provenance bundle's DSSE envelope alone as one line of JSON, no second signature, which OpenSSF Scorecard's Signed-Releases check counts as provenance, where it said the provenance was not copied under that name; and What ran on GitHub has CodeQL there from GitHub's default setup at first and then .github/workflows/codeql.yml. The Release Process: release-verify writes the .intoto.jsonl and holds it to the bundle, the release has 161 links and files where it had 160, release-publish refuses an .intoto.jsonl that is not the envelope, the copy on GitHub carries it, the rehearsal writes and checks it, and GitHub Actions runs two workflows there, which make nothing a release carries; its note marked Now under step 9 of Order of operations stays. The Update Feed: a release from the one after 6.3.7 has 161 links, the .intoto.jsonl adding 308 bytes to releases.json and 302 to releases/latest. The Service Account: Reinstalling into a new folder points at Relocating an Installation for an installation whose programs only the administrators could have changed, and its table of the writes to hMailServer.INI says that the application log's line on the read-only file is written at a reinitialise where application logging is on and dropped at the service's start, where it said once per start. Contributing lists .github/CODEOWNERS and build/check-osv-ignores.py. The Assurance Case, Contributing, Governance, the Release Process, Regulatory Scope, Third-Party Binaries and The Update Feed say that GitHub Actions runs two workflows of the project's on the copy on GitHub, OpenSSF Scorecard's and .github/workflows/codeql.yml, which takes the place of GitHub's CodeQL default setup, where they said one workflow and the default setup; Governance also says that GitHub's rules there let the administrator role alone write master, the batch* branches and the release tags and hold a pull request to two approvals, the code owner's among them, and to CodeQL's check. A link of the copied text to a document the wiki copies is a wiki link, and every other link to a repository file points at it as 5e49abf06 has it, where they pointed at 0c0b6bae7 or at f14412d39; the text is otherwise the document's, but for the adaptations and additions the headers declare. Signed-off-by: Christopher Holloway <chris.holloway@progressiverobot.com>

    Christopher Holloway committed Oct 21, 2026
  • Four passages of this wiki's own text say what the code and the documents say, where they said otherwise before batch50 and still did after it: Relocating an Installation changes the stored [Settings] paths in step 9, once the moved server is running, or through a [SettingsOverride] section at its first start, where its own route stored them "before step 2, while the old server is still running" and said they took effect at the next start - each stored value is applied at once, but for the listeners' certificate paths and the ACME certificate directory, which wait for a reinitialise, so that route pointed the running old server at a tree not yet copied; the same passage says the two trust files are not among the rows that would come back pointing at the old tree, and that from 6.3.6 the live update's trust is read from the file alone like PasswordPepper, with UpdateTrustRootsFile and UpdateLogPublicKeyFile changed there in step 4, where it called PasswordPepper the one exception; the Regression Test Environment's table names pre-flight check 8, the protocol listeners, for a missing SMTP listener, where it named check 11, the orphan test files (build/preflight-tests.ps1); and Migrating the Database Backend and the Upgrading Guide say that a database password re-entered on another machine is written protected by DBSetup.exe, or as a plain value with PasswordEncryption=0, which the server reads as it is and does not protect again, where they said the server would re-protect a plain value (IniFileSettings reads the password by its PasswordEncryption type, and only the COM Database methods DBSetup uses write a protected one). Signed-off-by: Christopher Holloway <chris.holloway@progressiverobot.com>

    Christopher Holloway committed Oct 20, 2026
  • The headers of three more of the copies 90a1f71 brought to batch50 on master, 0c0b6bae7, name what this wiki adds to them, as the other copies' headers do and as that commit said each header did: Regression Test Environment's, the section The bench, drawn, with its diagram of the bench, its table of where each piece listens, what sets it and what happens without it, and its parts on the one thing that is not real, DNS, and on one run, end to end; Relocating an Installation's, the paragraph on moving to new hardware, the pointers to Monitoring and Health 16.8 in step 0 and under Seeing where the paths are, what 6.3.3 and earlier do - in the note under step 1's table of the settings store, in the hm_inisettings row of its table of the database's columns and in the passage that ends step 4, which also gives two ways of moving the [Settings] paths - and the sentence in step 7 on reading the ERROR log since 6.3.4, where it said only that the copy and the document are kept the same; and Command Line's, the note above its header, beside the note under What it does not carry that it named already. Command Line's header also says that its links point at this wiki's copy of a document where there is one, as they do for The Update Feed and Secrets at Rest, where it said that they point at the documents as 0c0b6bae7 has them. The headers of the Assurance Case, Governance, the Release Process, the Security Policy and Regulatory Scope already name every addition, and Event Scripts and The Service Account have none. Signed-off-by: Christopher Holloway <chris.holloway@progressiverobot.com>

    Christopher Holloway committed Oct 20, 2026
  • The eleven copies whose documents batch50 changes - the Assurance Case, Governance, the Release Process, the Security Policy, Regulatory Scope, Command Line, Event Scripts, Relocating an Installation, the Regression Test Environment, The Service Account and Migrating the Database Backend - are copied again from the documents as master has them from batch50, 0c0b6bae7, and each header says so and what the document changes, where they were the documents at batch49, f14412d39, or at v6.3.7, which batch49 left as they were. Migrating the Database Backend: step 3 runs DBSetup.exe - the wizard's Create a new hMailServer database, or DBSetup.exe /unattended with the HM_DB_* variables and HM_ADMIN_PASSWORD - which creates the database and its schema, writes the [Database] section through the service, the password encrypted (PasswordEncryption=6), and restarts the server on the new database, the login allowed to create a database and the database not existing yet, with Not DBSetupQuick.exe and the refusal of DBSetup under NT SERVICE\hMailServer, where it said to create an empty database, point hMailServer.ini at it by hand and run DBSetupQuick.exe, which made no usable database there; the short version, the MySQL and MariaDB section's account of who creates the database on Windows and on Linux, and step 4's first open of the new database follow it; the PostgreSQL row says that SQL Server's, PostgreSQL's and SQL Server Compact's DDL is transactional and that only MySQL and MariaDB commit each step's DDL as it runs, where it called PostgreSQL the only one of the four; and the note after the restore says that the schema is created in no transaction on every backend, where it said so of MySQL and SQL Server Compact alone. This wiki's comparison table under Choosing a target now has SQL Server and SQL Server Compact transactional and a failed upgrade leaving nothing applied on them, where it had SQL Server mostly transactional and SQL Server Compact committing as it goes, and its flowchart of the procedure has one step for DBSetup between the backup and the restore, where it stopped the service, created an empty database, edited the ini file, ran DBSetupQuick and started the service again; the table's link to DatabaseTls.md goes to this wiki's copy, Database TLS. The Service Account: in Reinstalling into a new folder, step 2 changes the settings file's other paths into the old installation - PostgreSQLSslRootCert and TlsCaFile, UpdateTrustRootsFile and UpdateLogPublicKeyFile, a path in [SettingsOverride] - to copies where nobody but the administrators may change them and deletes the lines the site did not set, and step 4 keeps the old folder private to SYSTEM and the Administrators until it is deleted; the live update's internal tests name 6.3.1 and 6.3.3 to 6.3.5, where they said 6.3.1 to 6.3.5; and its link to RelocatingAnInstallation.md under the message files outside the data folder goes to this wiki's copy, as its two others do. Relocating an Installation: step 1's inventory and step 4 name TlsCaFile beside PostgreSQLSslRootCert, and Seeing where the paths are says that Installation paths lists every path-shaped setting but that one. The Regression Test Environment: the list of what a new Windows bench needs names the release installers build/fetch-installer-fixtures.ps1 fetches for AdminUpdateTester and AdminUpdateStageTester. Command Line: the two queue examples filter on tries, the field a queue item has, where they named retry_count. Event Scripts: the rule action is "Run script function", as the Control Panel lists it, where it said "Run function". Regulatory Scope: the releases up to 6.3.3 whose files GitLab has are re-published there, 6.2.0 and 6.0.0-B4 being notes-only; SBOMs from 6.2.3, the five earlier releases that carry an installer having a CycloneDX SBOM of it alone; the assets from 6.2.19 to 6.3.3 signed but for 6.2.22-pre3's two SBOMs; and the releases before 6.3.1 unsigned because their original files are published byte for byte, where it gave a published release's immutability as the reason. The Assurance Case, Governance and the Release Process: GitHub's signer signed the releases from 6.2.19 to 6.3.3, where they said the releases up to 6.3.3. The Security Policy: Verifying a release names 6.2.22-pre3's two SBOMs and 6.3.4 beside the withdrawn and superseded pre-releases as the assets from 6.2.19 on without a Sigstore bundle. A link of the copied text to a document the wiki copies is a wiki link, and every other link to a repository file points at it as 0c0b6bae7 has it, where they pointed at f14412d39 or at v6.3.7; the text is otherwise the document's, but for the adaptations and additions the headers declare. The wiki's own tables on these pages say what the documents now say: the Assurance Case's traceability row for anyone downloading has the Sigstore signatures from 6.2.19 to 6.3.3 and the SBOMs from 6.2.3, and the Security Policy's row on the supply chain among the standing controls has 6.2.22-pre3's two SBOMs carrying no bundle and the SBOMs from 6.2.3, the five earlier releases that carry an installer having a CycloneDX SBOM of it alone, made afterwards. Signed-off-by: Christopher Holloway <chris.holloway@progressiverobot.com>

    Christopher Holloway committed Oct 20, 2026
  • The twelve copies whose document lines still linked to a repository document at master - Architecture, the Assurance Case, Command Line, Contributing, Governance, the High Availability Runbook, Regulatory Scope, Security Policy, Third-Party Binaries, the Upgrading Guide, Warm Standby and Relocating an Installation - link to this wiki's copy of each document they name, and to DkimKeyRotation.md and SettingsApply.md, which it does not copy, as the tag v6.3.7 has them, where forty-six links named master. Each document's own link is relative and resolves at the tag; these forty-six pointed at master, which is the tag only while master stays at 31d656c0c, and had done so since before 5e44fd4, so that the copies from v6.3.7 took a link to a copied document as a wiki link and one at v6.3.6 to v6.3.7, and left these. Forty-three now name the copy: Security Policy (SECURITY.md), Release Process (RELEASE.md), Contributing, Governance, Architecture, Secrets at Rest, the Upgrading Guide (Upgrading.md), The Service Account, the Regression Test Environment, Third-Party Binaries, Fuzzing, Event Scripts and Migrating the Database Backend, with the document's anchor where it gives one (Governance#maintainers, Security-Policy#secrets-and-credentials, Third-Party-Binaries#where-the-build-gets-them, Upgrading-Guide#an-upgrade-without-a-window twice, Migrating-the-Database-Backend#mysql-and-mariadb), and the other three, DkimKeyRotation.md on Warm Standby and Relocating an Installation and SettingsApply.md on Relocating an Installation, are links at v6.3.7. No text but the links changes. Command Line's header and Architecture's, which say that the page's links point at the documents as that tag has them, are now true of every link of the copied text, the Source of truth link aside, which names master on every copy; the links in this wiki's own notes and tables are as they were. Signed-off-by: Christopher Holloway <chris.holloway@progressiverobot.com>

    Christopher Holloway committed Oct 18, 2026
  • Warm Standby and Relocating an Installation, the two pages that copy a repository document without a Source of truth note, are copied again from WarmStandby.md and RelocatingAnInstallation.md as the tag v6.3.7 (31d656c0c) has them - as v6.3.6 left them, which neither copy had been brought to - and each header says so, where it said that the copy was the same at the tag v6.3.4. Warm Standby: the live update's five trust settings, which from 6.3.6 are each machine's own, in its INI, never in the store or a backup, and are copied to the standby by hand with the two files they may name - a row added to this wiki's own table of what is where, beside PasswordPepper - and the document's paragraph that what two nodes serving one database at once would need is designed in ActiveActive.md and not built, so that the section stands. Relocating an Installation: UpdateTrustRootsFile and UpdateLogPublicKeyFile, which from 6.3.6 are read from the file alone and so move in step 4, in a row of their own apart from OAuth2PublicKeyFile, and the six [Settings] keys kept out of the database, where it named PasswordPepper alone. The links the new text adds point at the documents as v6.3.7 has them, or at this wiki's copy. Signed-off-by: Christopher Holloway <chris.holloway@progressiverobot.com>

    Christopher Holloway committed Oct 18, 2026
  • Every link to the project points at its address in the group, gitlab.com/hmailserver/hmailserver, where it has been since 29 September 2026; the identities 6.3.5 was signed with, and the setting row that lists both paths, keep the path the project began at. The project's path in all 63 pages that linked it (548 links), 6.3.6 being the first release made at the group's path. Left as they were: the seven signing identities https://gitlab.com/Progressiverobot/hmailserver//.gitlab-ci.yml@refs/tags/v... (Release Process, Security Policy, The Update Feed, and the UpdateSigningIdentity row of Settings Reference), which name what 6.3.5 was signed as; and the UpdateSourceRepository row of Settings Reference, which lists both paths on purpose. The container registry's name is corrected with the container page. Signed-off-by: Christopher Holloway <chris.holloway@progressiverobot.com>

    Christopher Holloway committed Oct 5, 2026
  • The wiki is brought up to the published release: 6.3.4 is the signed tag v6.3.4 at 51e2dbda0, published on GitLab on 27 September 2026 (02:37:56 UTC), not 8adce850a of 26 September, where the tag was first made and whose release gate failed. Every page that named 8adce850a as the tag or the release names 51e2dbda0, and every page that dated the release 26 September dates it 27 September: the footer, the sidebar, the page headers, the landing page's Current release, the release timeline's row and picture, section 4e's heading. Each fact those pages took from 8adce850a was checked at 51e2dbda0: the commits between the two change 42 files, whose only documents are CHANGELOG.md, BrandLogos.md, OpenPGP.md and SecretsAtRest.md, none of which a page copies, and which include none of Constants.h, Version.h, formMain.cs, the create scripts, IniFileSettings.cpp, SettingsDefaults.h, the IDL, the Control Panel or .gitlab/allowed_signers, so every file and line cited at the tag holds. Where a page said it read the tag on 26 September, it says it read 8adce850a and that what it read is the same at the tag. The suite has 3,811 [Test] attributes at the tag, not 3,809 (the fixes add two tests); twelve places say so. Changes Since 6.2.10 gains, in batch 40, what the release gate found and the eleven fixes: three change tests alone; of the other eight, three fix what 6.3.3 did too - a relay that refused the OAuth2 login got the server's token into the bounce and the logs (open since 6.2.22-pre1), a rule's forward, copy, reply or notice and an account's forwarding could wait a minute in the queue, and IMAP LIST and LSUB took a literal's length for the pattern - and five fix code new in 6.3.4 (sealed mail and an unnamed part, a closed key's FETCH refusal logged as a critical error, the help desk's password reset read as bytes, the logo and key-directory holds, an alert's encoded Subject over 76 characters). The gate table and the timeline give the re-run on 51e2dbda0 as the logs have it: 2,349 on the first bench (2,252 passed, 0 failed, 97 skipped) and 1,462 on the second (1,446 passed, 0 failed, 16 skipped), the 71 live-update tests elevated, all passed, and the Linux suite on the packaged binary, 2,013 tests, 1,562 passed, 0 failed, 451 skipped (results/b40full3 on linix); the database upgrade gates, the security scans, the fuzzers and the installer smoke test, 65 of 65. The JScript flaw is CVE-2026-100741 (CVSS 3.1 9.8), and the project's issue #43 is public: Security Hardening 17.11, the scripting page, the changes, the capabilities and the API reference name them. The project's download links work (the site has served HTTPS since 26 September; on 27 September they led to 6.3.4's files), so Installing on Linux and Running in a Container no longer say they work once it does. The copies of SECURITY.md and CONTRIBUTING.md give the day GitLab published the release, and the security policy's copy counts the 455 findings .gitlab/security-exceptions.yml accepts at the tag - the 169 of the SAST triage and the 286 that held the release scan - where the repository document still says 169; each header says where the copy differs. Three places said no pipeline had run on the fixed tree; one has, the schedule of 27 September 2026 on master 6bc09509d, which ran the update feed's pages and package-repos jobs alone, and they say so.

    Christopher Holloway committed Sep 27, 2026
  • The wiki is brought up to the release itself, the signed tag v6.3.4 at 8adce850a: what it said of 6.3.4 had been read from master 92b8f9f63, which the tag's last batch, batch40, follows. Schema 6104, not 6103: 6.3.4 is sixty-four steps from 6.3.3's 6040, the last, 6103 to 6104, adding hm_fetchaccounts.faorigin (Constants.h:1224, formMain.cs:314 and the three create scripts at the tag); every header, table, count and diagram that gave 6103 as 6.3.4's schema says 6104, the upgrade table's step counts are each one more, the step tables gain the 6104 row, and where 6103 means the secrets-at-rest step it stays. No page calls 92b8f9f63 the release or the tree 6.3.4 was cut from any more: a page checked against it says so and that the tag adds a last batch, and a page that copies a repository document the tag leaves as it was says the document is the same at the tag. The copies of repository documents batch40 changes are brought up to the tag, hunk by hunk from the version each copy had reached, their own additions kept: Security Policy (the SSH-signed sums of a release made by hand and the two commands that check a download, an SBOM for every compiled file, a release held by its security scans, secrets refused before they are pushed; its note no longer says the document calls 6.3.3 the latest), Release Process (A release made by hand, the security gate, the SBOM jobs), Upgrading Guide (the installer's HM_ADMIN_PASSWORD, the named lock on MySQL and MariaDB, the probe that stops an upgrade on too old a server at 6041 and the repair of a half-done one), Contributing, Governance (rebuilt on the tag's document, which gives the GitLab roles the owner set on 26 September 2026; the map and the note on code-signing material kept), Assurance Case, Regulatory Scope, Third-Party Binaries, Fuzzing, Migrating the Database Backend and Regression Test Environment. The installer's password handling as the tag has it: the password page is skipped for HM_ADMIN_PASSWORD as for /adminpassword, the database step hands the password (or the live update's token, as token:<hex>) to DBSetupQuick and DBSetup in HM_ADMIN_PASSWORD and DBSetupQuick to DBUpdater the same way, never on a command line, the switch table has the variable, and the unattended upgrade takes either (Installing hMailServer, Upgrading hMailServer 18.4a). How to verify a download: 6.3.4's hmailserver-6.3.4-SHA256SUMS.txt and its .sig, checked with ssh-keygen -Y verify against .gitlab/allowed_signers and sha256sum -c, as SECURITY.md at the tag gives them, and each installer's and package's own SBOM (Installing hMailServer 4.1, Installing on Linux, Upgrading hMailServer 18.4 and 18.4c, home, Release Process, Project Handbook, Troubleshooting, Glossary, Assurance Case, Regulatory Scope). The /download/ links no longer wait on issue #30: the feed's site has had its certificate since 26 September 2026. Changes Since 6.2.10 gains batch 40 in section 4e (the audit before the release, GitLab's SAST and the release gate, the installer's password, the SBOMs and signed sums, the stable download links, the release chain and landing through merge requests, what the first pipeline found, Windows on ARM compiled), items 47 to 51 in section 5 (reserved domain names, a one-time code taken once, the outbound relay's OAuth2 token over TLS only, the fetchers and schema 6104, a pre-6.3.4 hash of a password above U+00FF refused), SQLOLEDB in item 38, the 6041 probe in item 36, and the installer's own PBKDF2 in item 39. Also what the tag makes false elsewhere: the suite has 3,809 [Test] attributes, not 3,698; hmailserver/docs holds 105 documents; Windows on ARM compiles and has never run, where it was "not built"; IMAP offers STARTTLS only before sign-in and TLS and COMPRESS=DEFLATE only after sign-in (Capabilities and Configuration); a parent-domain passkey relying party needs passkey_allowed_origins (Sign-in and Identity); the Settings Reference counts 193 hm_settings rows with PasskeyAllowedOrigins and WebPushLoopbackHttpForTests; and the Linux suite's CI job first ran in the pipeline of 26 September 2026 rather than never.

    Christopher Holloway committed Sep 26, 2026
  • The eighteen pages that copy repository documents are copied again from master 92b8f9f63, the 6.3.4 release, so they say what the repository says on the day 6.3.4 is published. Each was brought forward from the version it was last copied from, 540347500, hunk by hunk, and the wiki's own additions were kept where they are still true. What the documents gained: the stored-secrets key in the command line, the high-availability runbook and the warm standby, which now say that it is made once, exported and imported on the other node, and what a node without it does (HM7495); the service account, the COM rule that a change to an item of a shared collection is written onto a copy until Save(), and MySQL's utf8mb4 step in the upgrading guide; database TLS and utf8mb4 in the backend migration; the fuzz job moved from GitHub Actions to GitLab CI's linux-fuzz; the Windows and Linux suites on GitLab CI in the regression environment; the security policy's scans on the project's own runner and its questionnaire pointer; the contributing guide's CI checks; MessageStore and QuickJS in the architecture; a pre-release tag's suffix and the pinned .NET runtime in the release checklist; the update verifier's two signers in the assurance case. Third-Party Binaries follows a rewritten document: the tree commits no executable binary, and the sections this copy had added about where the forty committed binaries lived and their dispositions described the tree before 11 September 2026, so they are gone. Regulatory Scope's note loses four of the five things it called out of date, which the repository has corrected, and its own Annex I table now says the installer has been Authenticode-signed since 6.3.1, that 6.3.x is the supported line, and what a new installation's secure defaults are. The wiki's labels that said "in the tree after 6.3.3, not yet released" now say what is new in 6.3.4, and each header names 92b8f9f63. Where the repository text itself is now stale - the release checklist's and Regulatory Scope's statements that no release can be cut while the chain is on GitHub, the contributing guide and the security policy naming 6.3.3 as the latest release, the assurance case pointing at the changelog's Unreleased section - the copy keeps the repository's words and the header says so where a reader would be misled; 6.3.4 was built and Authenticode-signed by hand and carries no Sigstore bundle.

    Christopher Holloway committed Sep 26, 2026
  • The pages that copy repository documents are copied again from master 540347500, so they say what the repository says after the move to GitLab and after the batches that have landed since each was last copied. Contributing and Security Policy follow their files to the root of the repository, where both were rewritten for GitLab: the contributing guide is now the full one - where things are, how to report, the rule for GitHub's issue numbers, the prerequisites, one build command per component, the suites, every checker, the change checklists, commits, sign-off and merge requests - and the security policy supports 6.3.x and takes a report by a GitLab confidential issue or the project's Service Desk address. Governance names two maintainers, and it, the Release Process and the Assurance Case carry the repository's note that the release chain runs on GitHub Actions and cannot run until it moves. The runbooks gain what the tree after 6.3.3 added to them: the settings store in the database and a save that applies the setting, the drain as a state of its own and UpgradeOnStart, the message held for a sandbox, SPF as an RFC 7208 implementation, the Linux update helper, the locked copies of shared collections, the second bench and the gate in halves. Command Line becomes the whole current document, with every verb the clients have gained since 15 September. Most of these pages carry the wiki's own additions - diagrams, tables, worked commands, and corrections the repository has not taken - so each was merged three ways, from the version of the document it was last copied from to master, and the additions were kept wherever they are still true. Where the repository text describes something in the tree after 6.3.3 and not yet released, the page labels it, as the wiki does elsewhere, and says what 6.3.3 does instead where that matters to someone running it. Additions the repository has overtaken are gone or rewritten: the contribution flowchart and the table of required checks, which were GitHub's, are gone; so are the governance duty table and the bus-factor section, which the document now covers with two maintainers; the security flowchart and timeline send a report to GitLab and ask for the CVE there. The Project Handbook and the release diagram describe build/generate-com-wrapper.ps1, which replaced build/regenerate-interop.ps1 on 11 September 2026 when the COM wrapper left git. Each copy says at the top that it was re-copied from master 540347500 on 24 September 2026. Two say plainly where the repository document is itself out of date, and the copy with it: Third-Party Binaries and Regulatory Scope still count forty committed binaries, none of which has been in git since 11 September 2026, and Regulatory Scope still calls Authenticode signing outstanding and the releases GitHub's. The regression environment's 7-Zip path, which the repository document writes with a control character where \7 belongs, reads correctly here. Fuzzing.md has not changed since the wiki's copy, and its page says so.

    Christopher Holloway committed Sep 24, 2026
  • The wiki's links move from GitHub to GitLab, where the project has lived since 22 September 2026. GitHub suspended the account on 18 September and every one of the project's GitHub addresses answers 404, so the download links, the source links, the security route, the support route and the "report an error" link all led nowhere. Every link to a file in the repository now opens it on GitLab, and the four community files that moved to the repository root on master 540347500 - CONTRIBUTING.md, SECURITY.md, SUPPORT.md and CODE_OF_CONDUCT.md - are linked there, which also mends the seven links to a root SECURITY.md that did not exist when they were written. The download links open the latest GitLab release, and the installer has a link that always fetches the latest one. A private report goes to a GitLab confidential issue or the project's Service Desk address, a question is an issue with the Question template because GitLab has no Discussions, and a reader who wants to hear of releases is told how to watch the project on GitLab. The Project Handbook, written against GitHub on 4 September, says that its GitHub process is the project as it was then. The GitHub facts that stay are facts about the product, and each now says what is true of it: the update feed the server reads by default, which answers 404, so a check fails with "The update feed answered HTTP 404." until UpdateFeedUrl names another feed; the Sigstore identity and issuer that signed every release up to 6.3.3, which verify those files wherever they are hosted and which the verifier's defaults still name, so a release signed anywhere else is refused unless the three settings are changed; and the two GitHub addresses compiled into the product, the Policy line of the security.txt the server serves and the Control Panel's About link. Every GitHub issue, discussion and pull-request number written with a hash is now written in words - "GitHub issue 114", "GitHub discussion 18", "upstream PR 602" - with the kind the repository's CHANGELOG gives each number, because GitLab turns a hash and a number into a link to its own issue of that number, which is something else. The one maintainer handle left in running text is in code, and the webmail's mentions no longer read as a GitLab user. Four things GitLab rendered wrongly are put right. The Stopping Spam link to Routes and Relays was split by a line break and led to a page that does not exist. The Fuzzing page's two repository-relative links resolved inside the wiki; they open the fuzz folder and its regression README on GitLab. Placeholders written outside code, such as <host:port>, <addr> and <culture>, were read as HTML and dropped or turned into links; they are in code now. And the Assurance Case's eight section headings began "1. " above a setext rule, which CommonMark reads as a list and a thematic break, so its contents links had nothing to land on; they are ATX headings with the ids those links name.

    Christopher Holloway committed Sep 24, 2026
  • The wiki describes the tree after 6.3.3 as it lands on master: the settings store, the audit trail and alerts, what a domain does to a message, remote-domain policy, a backup that carries everything, and the rest of three batches Twenty-seven pages, each written from the code at 3233b0cc4 and then checked sentence by sentence against it by a second reader: 166 claims verified, 23 corrected before this commit. Everything the tree holds that no release has is labelled as in the tree after 6.3.3 and not yet released, and the next release is called that rather than given a number. The changes page carries the four schema steps 6042 to 6045 in section 2, the second and third batches in section 4e beside the first, the gate for 3233b0cc4 (2,410 tests, 2,402 passed, none failed, 8 skipped; the Linux figures are a placeholder until that run lands), and in section 5 the changes an upgrade makes with no switch - above all that the database is the settings store, that an edit to [Settings] in hMailServer.ini is undone at the next start and reported as HM5804, what to do instead, and that the password pepper stays in the file and out of every backup, so a restore onto new hardware needs it brought along. Fourteen pages that told a reader to edit the file now say how the same setting is changed once the store lands, and what an edit to the file does then; the settings reference says the table of INI keys is closed. The feature pages cover the backup that carries every per-account store, the audit trail and alerts with what each does not yet record or raise, syslog export, per-domain reports, remote-domain policy and mandatory TLS, SPF as RFC 7208, hmctl's configuration document, the tours, and the REST routes counted at the commit rather than guessed at. The checking found things the tree itself gets wrong, which are recorded for the next batch rather than papered over here: hmctl's configuration document has an empty ini section because it reads a route that answers names only; the packaged Linux ini's RestApiPort=0 is adopted into the store at first start, so the packaging README's edit-the-file way of turning the REST listener on no longer works; the OpenAPI text for the ini routes and the note the server writes into hMailServer.ini still describe the file as the store; and five repository documents say what their wiki copies said before this commit.

    @chrisholloway5 chrisholloway5 committed Sep 15, 2026
  • 6.3.0 is published, so the pages that were waiting for it say so: Linux is released rather than "in the tree", the write surface has a release number, and the version that never existed is gone The Linux page opened with a banner saying the port was in the tree and not yet released, and that the first release to carry packages would be "the next one". That release is 6.3.0 and it went out on 10 September 2026, so the banner now points at it and the install commands name the packages that are actually on the release page rather than a version number nobody can download. Five places named 6.2.29. There is no such version and there never will be - the release after 6.2.28 is 6.3.0, and README.md already says why - so the two package filenames, the two "since 6.2.29" notes about relative directory values and the Installation paths diagnostic's label all move to 6.3.0. The API reference's route tables gained the write surface a day before the release but nothing in them said which release it belonged to, while the rows around them carried 6.2.27 and 6.2.28. A reader could reasonably have read the settings, rules and certificate routes as shipping in 6.2.27, which is half true and the misleading half: those routes could only be read then. Section 4 now says which routes arrived in 6.3.0 and why the method column is the one to read, and the scope note names the units the write surface was split into. The landing page's At a glance table was stale in five of its rows: the release and its build number, the platform (Windows only, when the whole point of 6.3 is that it is not), the administration surfaces, the suite's size and the wiki's own page count. The route count was stale in a way worth recording: it said 65, which matched neither the number of rows in the reference table nor the number of distinct paths at the commit it was written from, so it is now 82 routes over 68 paths, both countable from the page it points at. The Control Panel reference said "the latest, v6.2.28", and one thing under ControlPanel did move in 6.3.0: the sign-in box's user name is a literal again (#156), which is why a fresh installation in Chinese could not sign in. The page says so, with the twenty-one files that differ between the tags. The footer stamped 6.2.28 on all fifty-one pages.

    @chrisholloway5 chrisholloway5 committed Sep 10, 2026
  • Linux: an Installing on Linux page from the packages to a delivered message, the relocation runbook as a page, the Installation paths diagnostic in the Monitoring table, the domain routes on the REST page, and the platform notes the Settings and Capabilities pages needed

    @chrisholloway5 chrisholloway5 committed Sep 9, 2026