chore(release): v0.2.20 #36

Merged
jlxq0 merged 1 commit from release/v0.2.20 into main 2026-09-01 17:09:03 +00:00
Owner

Version bump so the read path can be tagged. Lucy sends a briefing tomorrow morning and cannot check her own output until this is serving; the issue is closed in the repository and still true of the instance she talks to.

What it carries

  • read_email returns body_html, with Email/get asking for htmlBody and fetchHTMLBodyValues
  • the HTML body escaped with sanitize_external_text, judged before escaping, wrapped not at all
  • src/config.rs names the cluster's role rather than the cluster

The escaping shipped in the same release as the field it protects, so body_html was never live unescaped.

Gate

Toolchain read from ci.yml: 1.93.0, through build-slot.sh.

cargo +1.93.0 fmt --all --check                                          rc=0
cargo +1.93.0 clippy --all-targets --all-features --locked -- -D warnings rc=0
cargo +1.93.0 test --all-features --locked                               rc=0
test result: ok. 195 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out

The first run of that gate was fmt rc=1, clippy rc=101, test showing 196. An uncommitted #31 probe in src/main.rs had followed me across git switch, so the count was the tell rather than the failures. Set aside, re-gated clean.

Version bump so the read path can be tagged. Lucy sends a briefing tomorrow morning and cannot check her own output until this is serving; the issue is closed in the repository and still true of the instance she talks to. ## What it carries - `read_email` returns `body_html`, with `Email/get` asking for `htmlBody` and `fetchHTMLBodyValues` - the HTML body escaped with `sanitize_external_text`, judged before escaping, wrapped not at all - `src/config.rs` names the cluster's role rather than the cluster **The escaping shipped in the same release as the field it protects**, so `body_html` was never live unescaped. ## Gate Toolchain read from `ci.yml`: `1.93.0`, through `build-slot.sh`. ``` cargo +1.93.0 fmt --all --check rc=0 cargo +1.93.0 clippy --all-targets --all-features --locked -- -D warnings rc=0 cargo +1.93.0 test --all-features --locked rc=0 test result: ok. 195 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out ``` The first run of that gate was `fmt rc=1`, `clippy rc=101`, `test` showing **196**. An uncommitted `#31` probe in `src/main.rs` had followed me across `git switch`, so the count was the tell rather than the failures. Set aside, re-gated clean.
chore(release): v0.2.20
All checks were successful
CI / cargo (pull_request) Successful in 1m32s
CI / tag-ancestry (pull_request) Successful in 3s
CI / docker (pull_request) Successful in 1m32s
eef630d845
Carries the read path returning body_html, the escaping that protects it, and
the src/config.rs cluster-name rewrite.

The escaping shipped in the same release as the field it protects, so
body_html was never live unescaped.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
jlxq0 merged commit 5fb21f20fa into main 2026-09-01 17:09:03 +00:00
jlxq0 deleted branch release/v0.2.20 2026-09-01 17:09:03 +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!36
No description provided.