chore(release): v0.2.18 #28

Merged
jlxq0 merged 1 commit from release/v0.2.18 into main 2026-08-29 12:33:53 +00:00
Owner

The first image containing #27. v0.2.17 carries #25's Basic path and the old flat parser.

v0.2.17 must not receive the new value, and the failure is worse than losing an address

julian@kampong.social=julian@lindner.earth split on @ yields three parts:

[julian, kampong.social=julian, lindner.earth]

The old parser binds (Some(local), Some(domain), None) and three parts falls to the else arm, so it bails. Config::new returns Err, main exits, and the pod crashloops. It does not degrade to the address being unsendable; it does not start.

So the flag and the value change belong to this image, together, and pointing the manifest at v0.2.17 would take the service down.

Gates

Five on the pinned 1.93.0: fmt, clippy -D warnings, test (183), audit, deny.

The manifest change this image expects

JMAP_MCP_ALLOW_STALWART_APP_PASSWORD = true
JMAP_MCP_EXTRA_FROM_ADDRESSES        = julian@kampong.social=julian@lindner.earth

Both, or the second alone leaves the Basic path unreachable and the first alone leaves his address unsendable with a startup warning.

The first image containing `#27`. `v0.2.17` carries `#25`'s Basic path and the **old flat parser**. ## v0.2.17 must not receive the new value, and the failure is worse than losing an address `julian@kampong.social=julian@lindner.earth` split on `@` yields **three** parts: ``` [julian, kampong.social=julian, lindner.earth] ``` The old parser binds `(Some(local), Some(domain), None)` and three parts falls to the `else` arm, so it **bails**. `Config::new` returns `Err`, `main` exits, and **the pod crashloops**. It does not degrade to the address being unsendable; it does not start. So the flag and the value change belong to this image, together, and pointing the manifest at `v0.2.17` would take the service down. ## Gates Five on the pinned 1.93.0: `fmt`, `clippy -D warnings`, `test` (183), `audit`, `deny`. ## The manifest change this image expects ``` JMAP_MCP_ALLOW_STALWART_APP_PASSWORD = true JMAP_MCP_EXTRA_FROM_ADDRESSES = julian@kampong.social=julian@lindner.earth ``` Both, or the second alone leaves the Basic path unreachable and the first alone leaves his address unsendable with a startup warning.
chore(release): v0.2.18
All checks were successful
CI / tag-ancestry (pull_request) Successful in 3s
CI / cargo (pull_request) Successful in 1m11s
CI / docker (pull_request) Successful in 1m17s
4446ed324d
Carries #27: operator-declared From addresses are scoped to the account that
owns them, and the owner is matched against the account Stalwart reports rather
than against a Logto claim.

v0.2.17 must not receive the new JMAP_MCP_EXTRA_FROM_ADDRESSES value. Its
parser splits an entry on @ and requires exactly two parts, so
owner@domain=address@domain yields three, falls to the else arm and bails.
Config::new returns Err and the process exits, so the pod crashloops rather
than degrading. The flag and the value change belong to this image.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
jlxq0 merged commit 08cab9f47b into main 2026-08-29 12:33:52 +00:00
jlxq0 deleted branch release/v0.2.18 2026-08-29 12:33:53 +00:00
Sign in to join this conversation.
No reviewers
No labels
waiting-on-julian
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
jlxq0/jmap-mcp!28
No description provided.