The server side of the 27.1 rc.1 gate. 2026.x continues on release/2026 (cut at 3645987, "Version 2026.10.28"), security fixes only.
One version.[workspace.package] version = "27.1.0-rc.1" in Cargo.toml; every member inherits it. brand_version! shows it the way tags and images name it (27.1, 27.1.3, 27.1-rc.1) through a small proc macro; anything else fails the build. The "(upstream 0.16.27)" suffix is gone from --version, the banner, telemetry, the JMAP session and IMAP ID.
Release workflows.tools/release/version.py reads, maps, checks and bumps the version (Cargo.toml + Cargo.lock). publish: the tag must be v<shown version>; a release moves :<version>, :<series> and :latest; a release candidate moves :<version> and :<series>-rc, never :latest, and its Release is a pre-release. weekly-release: next patch of the series; does nothing while main is on an RC.
upstream-watch retired. 0.16.27 was the last import. The spam-filter half stays as spam-rules-watch.yml.
Checked: inbuxa --version prints 27.1-rc.1; jmap and imap suites pass; the weekly script stops cleanly on an RC; version.py round-trips Cargo.toml/Cargo.lock and Cargo accepts the result with --locked; fork checks and fmt pass.
Not tagged yet: rc.1 waits for the rest of the suite to move to the same number.
The server side of the 27.1 rc.1 gate. 2026.x continues on `release/2026` (cut at 3645987, "Version 2026.10.28"), security fixes only.
- **One version.** `[workspace.package] version = "27.1.0-rc.1"` in Cargo.toml; every member inherits it. `brand_version!` shows it the way tags and images name it (`27.1`, `27.1.3`, `27.1-rc.1`) through a small proc macro; anything else fails the build. The "(upstream 0.16.27)" suffix is gone from --version, the banner, telemetry, the JMAP session and IMAP ID.
- **Release workflows.** `tools/release/version.py` reads, maps, checks and bumps the version (Cargo.toml + Cargo.lock). publish: the tag must be `v<shown version>`; a release moves `:<version>`, `:<series>` and `:latest`; a release candidate moves `:<version>` and `:<series>-rc`, never `:latest`, and its Release is a pre-release. weekly-release: next patch of the series; does nothing while main is on an RC.
- **upstream-watch retired.** 0.16.27 was the last import. The spam-filter half stays as `spam-rules-watch.yml`.
Checked: `inbuxa --version` prints `27.1-rc.1`; jmap and imap suites pass; the weekly script stops cleanly on an RC; `version.py` round-trips Cargo.toml/Cargo.lock and Cargo accepts the result with `--locked`; fork checks and fmt pass.
Not tagged yet: rc.1 waits for the rest of the suite to move to the same number.
The version is set once, in [workspace.package] in Cargo.toml, and every
member inherits it. brand_version! now comes from it through a small proc
macro (proc_macros::display_version) that names it the way tags and images
will: 27.1.0 is "27.1", 27.1.3 is "27.1.3", 27.1.0-rc.1 is "27.1-rc.1".
Anything else, including the old dated scheme, fails the build.
brand_version_full! is gone, and with it the "(upstream 0.16.27)" suffix
in --version, the startup banner, the data-store console, telemetry, the
JMAP session's "implementation" field and IMAP ID. 0.16.27 was the last
import, so there is no upstream version left to show.
Semver's parser skips a pre-release or build suffix, so Semver::current()
can't panic on an RC. It has no callers today; it gets a test anyway.
tools/release/version.py reads the workspace version, maps it the way the
server does (the same test cases), checks a tag against it, lists a
version's image tags and bumps Cargo.toml with Cargo.lock.
publish (GitHub and Gitea): the tag must be v<shown version>, read from
Cargo.toml instead of branding.rs. A release moves :<version>, the
series tag and :latest; a release candidate moves :<version> and
:<series>-rc, never :latest, and its Release is a pre-release.
weekly-release: cuts the next patch of the current series (27.1 ->
27.1.1) and commits Cargo.toml and Cargo.lock together. While main is on
a release candidate it says so and stops: a series and its candidates
are cut by hand.
CI runs the helper's tests next to the fork tools'.
0.16.27 was the last import, so the daily "Import upstream vX" issues
would only ever be noise. The same workflow also watched spam-filter,
whose rules the server bundles; that half stays, as spam-rules-watch.yml.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
The server side of the 27.1 rc.1 gate. 2026.x continues on
release/2026(cut at3645987, "Version 2026.10.28"), security fixes only.[workspace.package] version = "27.1.0-rc.1"in Cargo.toml; every member inherits it.brand_version!shows it the way tags and images name it (27.1,27.1.3,27.1-rc.1) through a small proc macro; anything else fails the build. The "(upstream 0.16.27)" suffix is gone from --version, the banner, telemetry, the JMAP session and IMAP ID.tools/release/version.pyreads, maps, checks and bumps the version (Cargo.toml + Cargo.lock). publish: the tag must bev<shown version>; a release moves:<version>,:<series>and:latest; a release candidate moves:<version>and:<series>-rc, never:latest, and its Release is a pre-release. weekly-release: next patch of the series; does nothing while main is on an RC.spam-rules-watch.yml.Checked:
inbuxa --versionprints27.1-rc.1; jmap and imap suites pass; the weekly script stops cleanly on an RC;version.pyround-trips Cargo.toml/Cargo.lock and Cargo accepts the result with--locked; fork checks and fmt pass.Not tagged yet: rc.1 waits for the rest of the suite to move to the same number.