镜像站点 · 本页由第三方 GitHub 只读镜像提供,非 GitHub 官方站点,不接受任何登录或凭据输入。前往 github.com
Skip to content

fix(pgp): decrypt bare armored messages - #1716

Open
chiliec wants to merge 87 commits into
floatpane:masterfrom
chiliec:fix/pgp-bare-armor
Open

chiliec wants to merge 87 commits into
floatpane:masterfrom
chiliec:fix/pgp-bare-armor

Conversation

@chiliec

@chiliec chiliec commented Sep 11, 2026

Copy link
Copy Markdown

What?

decryptPGPMessage now handles a bare ASCII-armored payload: when the data starts with -----BEGIN PGP MESSAGE----- it decodes the armor and decrypts with openpgp.ReadMessage directly. Complete PGP/MIME entities still go through pgpmail.Read as before.

Adds fetcher/pgp_test.go covering both paths (bare armor + multipart/encrypted entity) using a throwaway key generated in the test.

Why?

Fixes #1715. checkPart extracts the application/octet-stream part of a multipart/encrypted message and passes just that armored block to decryptPGPMessage, which handed it to pgpmail.Read. pgpmail.Read expects a full MIME entity and runs textproto.ReadHeader first, so the armor header line has no colon and decryption aborted with malformed MIME header line: -----BEGIN PGP MESSAGE----- before the private key was ever used. Server-side encrypted mail (mailbox.org Encrypted Inbox) hits this on every message.

Verification (Go 1.26.5, GOTOOLCHAIN=local):

  • go test ./fetcher/ -run TestDecryptPGP -v — both tests pass.
  • RED→GREEN: with the fix stashed, TestDecryptPGPMessageBareArmor fails with the exact reported error (failed to decrypt PGP message: message: malformed MIME header line: -----BEGIN PGP MESSAGE-----); TestDecryptPGPMessageMIMEEntity passes before and after, so the existing PGP/MIME path is unchanged.
  • go test ./fetcher/ — full package green; go vet ./fetcher/, gofmt -l, golangci-lint run ./fetcher/ (v2.13.2, repo config) — 0 issues.

Not run locally: ./sender tests (need pkg-config/pcsclite for the YubiKey dep on this box) — untouched by this change.

andrinoff and others added 30 commits June 1, 2026 23:20
## What?

Adds a v1 release backporting, merge queue behaivor, e.t.c.

## Why?

We are ready to start working on v1 of matcha. v0 will still be
maintained and supplied security updates, bug fixes, QoL features

---------

Signed-off-by: drew <me@andrinoff.com>
## What?

Uses [`go-keybind`](https://github.com/floatpane/go-keybind).

## Why?

Easier to maintain/expand

Signed-off-by: drew <me@andrinoff.com>
## What?

Implements a complete test suite for the `encryption.go`.

## Why?

The previous implementation had no test coverage for the
`encryption.go`.

Closes floatpane#886
## What?

Deduplicate unread badge counting across `emailsByAcct` and
`folderEmails` by tracking seen emails with `AccountID + UID`.

Added a regression test for the case where the same unread email exists
in both stores.

<img width="595" height="652" alt="image"
src="https://github.com/user-attachments/assets/8c837fb8-017c-4c7c-aa2c-052f244288b2"
/>

## Why?

Closes floatpane#1107

`syncUnreadBadge` counted unread emails from both stores independently,
but the stores can contain the same fetched messages. This could make
the macOS unread badge show roughly double the real unread count.

<img width="598" height="647" alt="image"
src="https://github.com/user-attachments/assets/f2b1c267-29bc-4d4c-a116-4c91af789722"
/>
## What?

Updates `flake.lock` to the latest revisions of all flake inputs
(`nixpkgs`, `flake-utils`, etc.).

## Why?

Keeps Nix inputs current so contributors and CI build against fresh
`nixpkgs`. Picks up upstream security and toolchain fixes. Generated
automatically by the flake-lock update workflow on changes to `go.sum`.
## What?

Regenerates `gomod2nix.toml` to reflect the current `go.mod` / `go.sum`.

## Why?

Keeps the Nix build in sync with Go module changes. Without this, `nix
build` fails when new or upgraded Go deps are missing from
`gomod2nix.toml`. Generated automatically by the gomod2nix sync
workflow.
## What?

This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
|
[charm.land/bubbletea/v2](https://github.com/proxy/redirect.github.com/charmbracelet/bubbletea)
| `v2.0.6` → `v2.0.7` |
![age](https://developer.mend.io/api/mc/badges/age/go/charm.land%2fbubbletea%2fv2/v2.0.7?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/go/charm.land%2fbubbletea%2fv2/v2.0.6/v2.0.7?slim=true)
|

---

### Release Notes

<details>
<summary>charmbracelet/bubbletea (charm.land/bubbletea/v2)</summary>

###
[`v2.0.7`](https://github.com/proxy/redirect.github.com/charmbracelet/bubbletea/releases/tag/v2.0.7)

[Compare
Source](https://github.com/proxy/redirect.github.com/charmbracelet/bubbletea/compare/v2.0.6...v2.0.7)

### A few lil’ stability patches

Hi! This is a patch release with a few solid improvements around
stability and correctness.

- [@&#8203;lrstanley](https://github.com/proxy/redirect.github.com/lrstanley), one of our
faves, fixed a race condition around mice in the Cursed Renderer
- [@&#8203;lawrence3699](https://github.com/proxy/redirect.github.com/lawrence3699) fixed
a panic that could happen when input's not available
- We fixed a correctness issue with regard to mouse releases when Kitty
Keyboard was active (thanks,
[@&#8203;mitchellh](https://github.com/proxy/redirect.github.com/mitchellh))

Thanks for using Bubble Tea, and if you see anything awry please do let
us know!

—Charm 👋

#### Changelog

##### Fixed

-
[`c60f0c5`](https://github.com/proxy/redirect.github.com/charmbracelet/bubbletea/commit/c60f0c53042238305ec13b486326588f12aea0ec):
fix: prevent data race with cursedRenderer.onMouse
([#&#8203;1691](https://github.com/proxy/redirect.github.com/charmbracelet/bubbletea/issues/1691))
([@&#8203;lrstanley](https://github.com/proxy/redirect.github.com/lrstanley))
-
[`074596e`](https://github.com/proxy/redirect.github.com/charmbracelet/bubbletea/commit/074596e14e2f5ca5e3986ee72e7c08f1569c4178):
fix: skip input reader restore when input is disabled
([#&#8203;1680](https://github.com/proxy/redirect.github.com/charmbracelet/bubbletea/issues/1680))
([@&#8203;lawrence3699](https://github.com/proxy/redirect.github.com/lawrence3699))
-
[`878d7df`](https://github.com/proxy/redirect.github.com/charmbracelet/bubbletea/commit/878d7df2f2b02f3ca8db177fa8553834bc35ea7c):
fix(deps): bump ultraviolet for kitty keyboard fix
([@&#8203;meowgorithm](https://github.com/proxy/redirect.github.com/meowgorithm))

***

<a href="https://charm.land/"><img alt="The Charm logo"
src="https://stuff.charm.sh/charm-banner-next.jpg" width="400"></a>

Thoughts? Questions? We love hearing from you. Feel free to reach out on
[X](https://x.com/charmcli), [Discord](https://charm.land/discord),
[Slack](https://charm.land/slack), [The
Fediverse](https://mastodon.social/@&#8203;charmcli),
[Bluesky](https://bsky.app/profile/charm.land).

</details>

## Why?

Automated dependency update via Renovate.

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://github.com/proxy/redirect.github.com/renovatebot/renovate).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yMDcuNCIsInVwZGF0ZWRJblZlciI6IjQzLjIwNy40IiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
## What?

This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [react](https://react.dev/)
([source](https://github.com/proxy/redirect.github.com/facebook/react/tree/HEAD/packages/react))
| [`19.2.6` →
`19.2.7`](https://renovatebot.com/diffs/npm/react/19.2.6/19.2.7) |
![age](https://developer.mend.io/api/mc/badges/age/npm/react/19.2.7?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/react/19.2.6/19.2.7?slim=true)
|
| [react-dom](https://react.dev/)
([source](https://github.com/proxy/redirect.github.com/facebook/react/tree/HEAD/packages/react-dom))
| [`19.2.6` →
`19.2.7`](https://renovatebot.com/diffs/npm/react-dom/19.2.6/19.2.7) |
![age](https://developer.mend.io/api/mc/badges/age/npm/react-dom/19.2.7?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/react-dom/19.2.6/19.2.7?slim=true)
|

---

### Release Notes

<details>
<summary>facebook/react (react)</summary>

###
[`v19.2.7`](https://github.com/proxy/redirect.github.com/facebook/react/releases/tag/v19.2.7):
19.2.7 (June 1st, 2026)

[Compare
Source](https://github.com/proxy/redirect.github.com/facebook/react/compare/v19.2.6...v19.2.7)

##### React Server Components

- Fixed missing `FormData` entries in Server Actions which regressed in
19.2.6
([#&#8203;36566](https://github.com/proxy/redirect.github.com/facebook/react/pull/36566)
by [@&#8203;unstubbable](https://github.com/proxy/redirect.github.com/unstubbable))

</details>

## Why?

Automated dependency update via Renovate.

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these
updates again.

---

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://github.com/proxy/redirect.github.com/renovatebot/renovate).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yMDcuNCIsInVwZGF0ZWRJblZlciI6IjQzLjIwNy40IiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
## What?

Regenerates `gomod2nix.toml` to reflect the current `go.mod` / `go.sum`.

## Why?

Keeps the Nix build in sync with Go module changes. Without this, `nix
build` fails when new or upgraded Go deps are missing from
`gomod2nix.toml`. Generated automatically by the gomod2nix sync
workflow.
## What?

Adds a mention about v1 release in the README (master branch

## Why?

So that people know, that, even, if there are no commits on master, we
still are developing

Signed-off-by: drew <me@andrinoff.com>
Signed-off-by: drew <me@andrinoff.com>
## What?

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [go](https://github.com/proxy/redirect.github.com/actions/go-versions) | uses-with |
patch | `1.26.3` → `1.26.4` |

---

### Release Notes

<details>
<summary>actions/go-versions (go)</summary>

###
[`v1.26.4`](https://github.com/proxy/redirect.github.com/actions/go-versions/releases/tag/1.26.4-26891772857):
1.26.4

[Compare
Source](https://github.com/proxy/redirect.github.com/actions/go-versions/compare/1.26.3-25533533231...1.26.4-26891772857)

Go 1.26.4

</details>

## Why?

Automated dependency update via Renovate.

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://github.com/proxy/redirect.github.com/renovatebot/renovate).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yMDkuNCIsInVwZGF0ZWRJblZlciI6IjQzLjIwOS40IiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
## What?

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [actions/checkout](https://github.com/proxy/redirect.github.com/actions/checkout)
([changelog](https://github.com/proxy/redirect.github.com/actions/checkout/compare/de0fac2e4500dabe0009e67214ff5f5447ce83dd..df4cb1c069e1874edd31b4311f1884172cec0e10))
| action | digest | `de0fac2` → `df4cb1c` |

## Why?

Automated dependency update via Renovate.

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://github.com/proxy/redirect.github.com/renovatebot/renovate).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yMDkuNCIsInVwZGF0ZWRJblZlciI6IjQzLjIwOS40IiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->

Co-authored-by: Drew Smirnoff <drew@floatpane.com>
Co-authored-by: Drew Smirnoff <drew@floatpane.com>
## What?

Gate the `LIST ... RETURN (STATUS (UNSEEN))` request in `FetchFolders`
on the server advertising the LIST-STATUS capability (RFC 5819). When
the server doesn't support it, send a plain `LIST "" "*"` and populate
unread counts with a per-mailbox `STATUS (UNSEEN)` fallback instead.

## Why?

Fixes floatpane#1426

Signed-off-by: drew <me@andrinoff.com>
## What?

Checks if the composer has contents at the moment of interrupt signal
(`ctrl+c`). If so, it saves the draft before quitting

## Why?

It is easy to accidentally quit, and it was unforgiving, without saving
anything. Especially including that the default quit keybind is the same
as "copy" on linux and windows (`ctrl+c`)

Signed-off-by: drew <me@andrinoff.com>
…1437)

## What?

This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
|
[github.com/floatpane/bubble-overlay](https://github.com/proxy/redirect.github.com/floatpane/bubble-overlay)
| `v0.0.1` → `v0.1.0` |
![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2ffloatpane%2fbubble-overlay/v0.1.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2ffloatpane%2fbubble-overlay/v0.0.1/v0.1.0?slim=true)
|

---

### Release Notes

<details>
<summary>floatpane/bubble-overlay
(github.com/floatpane/bubble-overlay)</summary>

###
[`v0.1.0`](https://github.com/proxy/redirect.github.com/floatpane/bubble-overlay/releases/tag/v0.1.0)

[Compare
Source](https://github.com/proxy/redirect.github.com/floatpane/bubble-overlay/compare/v0.0.1...v0.1.0)

<!-- Release notes generated using configuration in .github/release.yml
at v0.1.0 -->

#### What's Changed

##### Dependencies

- chore(deps): github.com/charmbracelet/x/ansi ^ v0.11.7 by
[@&#8203;floatpanebot](https://github.com/proxy/redirect.github.com/floatpanebot) in
[#&#8203;5](https://github.com/proxy/redirect.github.com/floatpane/bubble-overlay/pull/5)
- chore(deps): go ^ 1.26.4 by
[@&#8203;floatpanebot](https://github.com/proxy/redirect.github.com/floatpanebot) in
[#&#8203;11](https://github.com/proxy/redirect.github.com/floatpane/bubble-overlay/pull/11)

#### New Contributors

- [@&#8203;floatpanebot](https://github.com/proxy/redirect.github.com/floatpanebot) made
their first contribution in
[#&#8203;5](https://github.com/proxy/redirect.github.com/floatpane/bubble-overlay/pull/5)

**Full Changelog**:
<floatpane/bubble-overlay@v0.0.1...v0.1.0>

***

**Install:**

```bash
go get github.com/floatpane/bubble-overlay@v0.1.0
```

See the [Go
reference](https://pkg.go.dev/github.com/floatpane/bubble-overlay) for
full API documentation.

</details>

## Why?

Automated dependency update via Renovate.

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://github.com/proxy/redirect.github.com/renovatebot/renovate).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yMTEuMCIsInVwZGF0ZWRJblZlciI6IjQzLjIxMS4wIiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
## What?

Regenerates `gomod2nix.toml` to reflect the current `go.mod` / `go.sum`.

## Why?

Keeps the Nix build in sync with Go module changes. Without this, `nix
build` fails when new or upgraded Go deps are missing from
`gomod2nix.toml`. Generated automatically by the gomod2nix sync
workflow.
## What?

Updates `flake.lock` to the latest revisions of all flake inputs
(`nixpkgs`, `flake-utils`, etc.).

## Why?

Keeps Nix inputs current so contributors and CI build against fresh
`nixpkgs`. Picks up upstream security and toolchain fixes. Generated
automatically by the flake-lock update workflow on changes to `go.sum`.
## What?

Uses `overlay.Center` for the move modal. 

## Why?

The previous version messed with the inbox contents on both sides. Like
in floatpane#1435

Signed-off-by: drew <me@andrinoff.com>
## What?

Makes the protocol selection a "combobox"

## Why?

Closes floatpane#1230

---------

Signed-off-by: drew <me@andrinoff.com>
## What?

Moves the log message for i18n to loglevel `verbose`

## Why?

Each time you used to load matcha in secure mode, these messages would
appear and possibly block the UI

Signed-off-by: drew <me@andrinoff.com>
## What?
The code to support JMAP authentication via API tokens was in place, it
just wasn't wired up correctly. This fixes that.


- JMAP protocol selection ended up getting routed to IMAP code
- no way to specify `token` for `account.AuthMethod`
- `hasBackendProvider` didn't account for/support `jmap`
- modified placeholder when `account.AuthMethod` is `token` to say `API
Token` instead of `Password / App Password`
- modified tip for `inputAuthMethod` when protocol is `jmap`

## Why?
Because I use Fastmail, want to use JMAP, and want to be able to read my
email.

JMAP authentication with Fastmail via API Tokens wasn't working for
multiple reasons. Fastmail is the largest (only?) JMAP supporting email
host and they require API Tokens.

I have manually confirmed that this authenticates just fine with my
Fastmail account via JMAP and the API token.
## What?
in `jmap.go`

- added a `resolveUID` function
- added a `resolveUIDByQuery` function

## Why?
Email body fetch always failed with "jmap: no cached ID"
(backend/jmap/jmap.go)
FetchEmailBody relied on p.idToJMAPID being pre-populated by FetchEmails
on the same Provider instance. However, the fetcher layer creates a
fresh Provider for every call, so the map is always empty when
FetchEmailBody runs.

The fix adds a resolveUID method that checks the in-memory cache first
(fast path when the daemon reuses the same instance), then falls back to
resolveUIDByQuery. The fallback issues an Email/query for the folder,
reads the JMAP string IDs directly from QueryResponse.IDs, hashes each
one with FNV-32a, and returns the match — also warming the cache as a
side effect.
## What?

Messages are held for `N` seconds before delivery, with a recall window.

## Why?

Saves users from sending mistakes, just like Gmail/Outlook.


Closes floatpane#1139
## What?

Makes Background daemon optional in the settings

## Why?

Temporary fix for floatpane#1448, also a good option to have for users to turn
off, if they do not want the daemon on.

---------

Signed-off-by: drew <me@andrinoff.com>
## What?

Refreshes the feature screenshots in `docs/docs/assets/features/`.

### Screenshots included:
- `compose_email.png`
- `compose_empty.png`
- `drafts.png`
- `email_view.png`
- `inbox_view.png`
- `main_menu.png`
- `settings.png`
- `theme_settings.png`
- `threading_demo.png`

## Why?

Keeps documentation visuals aligned with the current TUI. Generated
automatically by the Generate Screenshots workflow on the latest
release.

Co-authored-by: floatpanebot <278062430+floatpanebot@users.noreply.github.com>
## What?

Replaces `public/assets/demo.gif` with a freshly recorded VHS run.

## Why?

Keeps the demo GIF aligned with the latest release so README and docs
reflect current behaviour. Generated automatically by the Update Demo
VHS workflow.

Co-authored-by: floatpanebot <278062430+floatpanebot@users.noreply.github.com>
## What?

Fixes crashes when sending. 

## Why?

Fixes floatpane#1453

Signed-off-by: drew <me@andrinoff.com>
## What?

Improves queue, by making undo non-blocking

## Why?

You had to wait for 5 seconds in order to use Matcha again

Signed-off-by: drew <me@andrinoff.com>
floatpanebot and others added 23 commits July 5, 2026 08:12
## What?

This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
|
[charm.land/bubbles/v2](https://github.com/proxy/redirect.github.com/charmbracelet/bubbles)
| `v2.1.0` → `v2.1.1` |
![age](https://developer.mend.io/api/mc/badges/age/go/charm.land%2fbubbles%2fv2/v2.1.1?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/go/charm.land%2fbubbles%2fv2/v2.1.0/v2.1.1?slim=true)
|

---

### Release Notes

<details>
<summary>charmbracelet/bubbles (charm.land/bubbles/v2)</summary>

###
[`v2.1.1`](https://github.com/proxy/redirect.github.com/charmbracelet/bubbles/releases/tag/v2.1.1)

[Compare
Source](https://github.com/proxy/redirect.github.com/charmbracelet/bubbles/compare/v2.1.0...v2.1.1)

### Lil’ Textarea Fix

This is a tiny patch to fix a bug in `textarea` where the prompt
character could be missing styling on empty lines. That’s all for now!

Thanks for using Bubbles,
Charm 🌞

#### Changelog

##### Fixed

-
[`d2b2217`](https://github.com/proxy/redirect.github.com/charmbracelet/bubbles/commit/d2b2217d6352ce04183623d66d4266115419733c):
fix(textarea): apply prompt style on all lines, including fillers
([@&#8203;meowgorithm](https://github.com/proxy/redirect.github.com/meowgorithm))

##### Docs

-
[`a13f110`](https://github.com/proxy/redirect.github.com/charmbracelet/bubbles/commit/a13f110fba4f13ce5fe9bc7fd51619f5782077b9):
docs: fix typo in README
([#&#8203;921](https://github.com/proxy/redirect.github.com/charmbracelet/bubbles/issues/921))
([@&#8203;Rohan5commit](https://github.com/proxy/redirect.github.com/Rohan5commit))

***

<a href="https://charm.land/"><img alt="The Charm logo"
src="https://stuff.charm.sh/charm-banner-next.jpg" width="400"></a>

Thoughts? Questions? We love hearing from you. Feel free to reach out on
[X](https://x.com/charmcli), [Discord](https://charm.land/discord),
[Slack](https://charm.land/slack), [The
Fediverse](https://mastodon.social/@&#8203;charmcli),
[Bluesky](https://bsky.app/profile/charm.land).

</details>

## Why?

Automated dependency update via Renovate.

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://github.com/proxy/redirect.github.com/renovatebot/renovate).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNTEuMyIsInVwZGF0ZWRJblZlciI6IjQzLjI1MS4zIiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
## What?

This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
|
[charm.land/lipgloss/v2](https://github.com/proxy/redirect.github.com/charmbracelet/lipgloss)
| `v2.0.4` → `v2.0.5` |
![age](https://developer.mend.io/api/mc/badges/age/go/charm.land%2flipgloss%2fv2/v2.0.5?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/go/charm.land%2flipgloss%2fv2/v2.0.4/v2.0.5?slim=true)
|

---

### Release Notes

<details>
<summary>charmbracelet/lipgloss (charm.land/lipgloss/v2)</summary>

###
[`v2.0.5`](https://github.com/proxy/redirect.github.com/charmbracelet/lipgloss/releases/tag/v2.0.5)

[Compare
Source](https://github.com/proxy/redirect.github.com/charmbracelet/lipgloss/compare/v2.0.4...v2.0.5)

### Graphemes, Schmraphemes

If you’re using emojis in the terminal you're in for a rough ride. That
said, we do what we can. This release brings some in some very specific
edge case rendering improvements. Enjoy.

Enjoy!

#### Changelog

-
[`10f9584`](https://github.com/proxy/redirect.github.com/charmbracelet/lipgloss/commit/10f9584edb197ddbbfc789081d33b6fadaea5742):
chore(deps): bump ultraviolet for emoji-related improvements

***

<a href="https://charm.land/"><img alt="The Charm logo"
src="https://stuff.charm.sh/charm-banner-next.jpg" width="400"></a>

Thoughts? Questions? We love hearing from you. Feel free to reach out on
[X](https://x.com/charmcli), [Discord](https://charm.land/discord),
[Slack](https://charm.land/slack), [The
Fediverse](https://mastodon.social/@&#8203;charmcli),
[Bluesky](https://bsky.app/profile/charm.land).

</details>

## Why?

Automated dependency update via Renovate.

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://github.com/proxy/redirect.github.com/renovatebot/renovate).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNTEuMCIsInVwZGF0ZWRJblZlciI6IjQzLjI1MS4wIiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
## What?

Regenerates `gomod2nix.toml` to reflect the current `go.mod` / `go.sum`.

## Why?

Keeps the Nix build in sync with Go module changes. Without this, `nix
build` fails when new or upgraded Go deps are missing from
`gomod2nix.toml`. Generated automatically by the gomod2nix sync
workflow.
## What?

Updates `flake.lock` to the latest revisions of all flake inputs
(`nixpkgs`, `flake-utils`, etc.).

## Why?

Keeps Nix inputs current so contributors and CI build against fresh
`nixpkgs`. Picks up upstream security and toolchain fixes. Generated
automatically by the flake-lock update workflow on changes to `go.sum`.
## What?

Improves threaded view, making the first email (latest) accessible

## Why?

Previously, you could not access the last email

---------

Signed-off-by: drew <me@andrinoff.com>
## What?

All Sent mailbox lookups now resolve via `getMailboxByAttr(c,
imap.MailboxAttrSent)` with fallback to the hardcoded `getSentMailbox`,
matching the existing Trash/Archive pattern.

## Why?

Fixes floatpane#1641

Signed-off-by: drew <me@andrinoff.com>
## What?

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [go](https://github.com/proxy/redirect.github.com/actions/go-versions) | uses-with |
patch | `1.26.4` → `1.26.5` |

---

### Release Notes

<details>
<summary>actions/go-versions (go)</summary>

###
[`v1.26.5`](https://github.com/proxy/redirect.github.com/actions/go-versions/releases/tag/1.26.5-28913679792):
1.26.5

[Compare
Source](https://github.com/proxy/redirect.github.com/actions/go-versions/compare/1.26.4-26891772857...1.26.5-28913679792)

Go 1.26.5

</details>

## Why?

Automated dependency update via Renovate.

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://github.com/proxy/redirect.github.com/renovatebot/renovate).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNTUuMiIsInVwZGF0ZWRJblZlciI6IjQzLjI1NS4yIiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
## What?

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [go](https://go.dev/)
([source](https://github.com/proxy/redirect.github.com/golang/go)) | golang | patch |
`1.26.4` → `1.26.5` |

## Why?

Automated dependency update via Renovate.

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://github.com/proxy/redirect.github.com/renovatebot/renovate).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNTUuMiIsInVwZGF0ZWRJblZlciI6IjQzLjI1NS4yIiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->

Co-authored-by: Drew Smirnoff <drew@floatpane.com>
## What?

This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [golang.org/x/text](https://pkg.go.dev/golang.org/x/text) | [`v0.38.0`
→
`v0.40.0`](https://cs.opensource.google/go/x/text/+/refs/tags/v0.38.0...refs/tags/v0.40.0)
|
![age](https://developer.mend.io/api/mc/badges/age/go/golang.org%2fx%2ftext/v0.40.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/go/golang.org%2fx%2ftext/v0.38.0/v0.40.0?slim=true)
|

## Why?

Automated dependency update via Renovate.

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://github.com/proxy/redirect.github.com/renovatebot/renovate).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNTIuNSIsInVwZGF0ZWRJblZlciI6IjQzLjI1Ni4wIiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
…1663)

## What?

This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
|
[github.com/floatpane/bubble-overlay](https://github.com/proxy/redirect.github.com/floatpane/bubble-overlay)
| `v0.2.0` → `v0.3.0` |
![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2ffloatpane%2fbubble-overlay/v0.3.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2ffloatpane%2fbubble-overlay/v0.2.0/v0.3.0?slim=true)
|

---

### Release Notes

<details>
<summary>floatpane/bubble-overlay
(github.com/floatpane/bubble-overlay)</summary>

###
[`v0.3.0`](https://github.com/proxy/redirect.github.com/floatpane/bubble-overlay/releases/tag/v0.3.0)

[Compare
Source](https://github.com/proxy/redirect.github.com/floatpane/bubble-overlay/compare/v0.2.0...v0.3.0)

<!-- Release notes generated using configuration in .github/release.yml
at v0.3.0 -->

**Full Changelog**:
<floatpane/bubble-overlay@v0.2.0...v0.3.0>

***

**Install:**

```bash
go get github.com/floatpane/bubble-overlay@v0.3.0
```

See the [Go
reference](https://pkg.go.dev/github.com/floatpane/bubble-overlay) for
full API documentation.

</details>

## Why?

Automated dependency update via Renovate.

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://github.com/proxy/redirect.github.com/renovatebot/renovate).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNTUuMiIsInVwZGF0ZWRJblZlciI6IjQzLjI1NS4yIiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
## What?

This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [golang.org/x/term](https://pkg.go.dev/golang.org/x/term) | [`v0.44.0`
→
`v0.45.0`](https://cs.opensource.google/go/x/term/+/refs/tags/v0.44.0...refs/tags/v0.45.0)
|
![age](https://developer.mend.io/api/mc/badges/age/go/golang.org%2fx%2fterm/v0.45.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/go/golang.org%2fx%2fterm/v0.44.0/v0.45.0?slim=true)
|

## Why?

Automated dependency update via Renovate.

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://github.com/proxy/redirect.github.com/renovatebot/renovate).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNTYuMCIsInVwZGF0ZWRJblZlciI6IjQzLjI1Ny41IiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
## What?

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
|
[cachix/install-nix-action](https://github.com/proxy/redirect.github.com/cachix/install-nix-action)
([changelog](https://github.com/proxy/redirect.github.com/cachix/install-nix-action/compare/8aa03977d8d733052d78f4e008a241fd1dbf36b3..a49548c11d9846ad46ecc0115273879b045f001c))
| action | digest | `8aa0397` → `a49548c` |

## Why?

Automated dependency update via Renovate.

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://github.com/proxy/redirect.github.com/renovatebot/renovate).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNTYuMiIsInVwZGF0ZWRJblZlciI6IjQzLjI1Ni4yIiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
## What?

Adds a Reply-All function (`shift+r`)

## Why?

Closes floatpane#1667

---------

Signed-off-by: drew <me@andrinoff.com>
## What?

Updates `flake.lock` to the latest revisions of all flake inputs
(`nixpkgs`, `flake-utils`, etc.).

## Why?

Keeps Nix inputs current so contributors and CI build against fresh
`nixpkgs`. Picks up upstream security and toolchain fixes. Generated
automatically by the flake-lock update workflow on changes to `go.sum`.
## What?

Regenerates `gomod2nix.toml` to reflect the current `go.mod` / `go.sum`.

## Why?

Keeps the Nix build in sync with Go module changes. Without this, `nix
build` fails when new or upgraded Go deps are missing from
`gomod2nix.toml`. Generated automatically by the gomod2nix sync
workflow.
## What?

Replaces `public/assets/demo.gif` with a freshly recorded VHS run.

## Why?

Keeps the demo GIF aligned with the latest release so README and docs
reflect current behaviour. Generated automatically by the Update Demo
VHS workflow.

Co-authored-by: floatpanebot <278062430+floatpanebot@users.noreply.github.com>
## What?

Refreshes the feature screenshots in `docs/docs/assets/features/`.

### Screenshots included:
- `compose_email.png`
- `compose_empty.png`
- `drafts.png`
- `email_view.png`
- `inbox_view.png`
- `main_menu.png`
- `settings.png`
- `theme_settings.png`
- `threading_demo.png`

## Why?

Keeps documentation visuals aligned with the current TUI. Generated
automatically by the Generate Screenshots workflow on the latest
release.

Co-authored-by: floatpanebot <278062430+floatpanebot@users.noreply.github.com>
## What?

Wrap config file parse errors with the file path, and replace the
`panic()` in `defaultKeybinds()` with a logged warning.

## Why?

Closes floatpane#1520

When a config file is malformed, the error only showed a raw JSON parse
error with no indication of which file was broken. Users had no way to
know what to fix.

If the embedded `default_keybinds.json` was somehow corrupted, the
application crashed with a panic instead of degrading gracefully.

---------

Co-authored-by: kawacukennedy <kennedykawacu@gmail.com>
## What?

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [actions/labeler](https://github.com/proxy/redirect.github.com/actions/labeler) |
action | major | `v6` → `v7` |

---

### Release Notes

<details>
<summary>actions/labeler (actions/labeler)</summary>

###
[`v7.0.0`](https://github.com/proxy/redirect.github.com/actions/labeler/releases/tag/v7.0.0)

[Compare
Source](https://github.com/proxy/redirect.github.com/actions/labeler/compare/v7.0.0...v7.0.0)

##### What's Changed

##### Enhancements:

- Migrate to ESM and update dependencies by
[@&#8203;chiranjib-swain](https://github.com/proxy/redirect.github.com/chiranjib-swain)
in [#&#8203;949](https://github.com/proxy/redirect.github.com/actions/labeler/pull/949)

**Full Changelog**:
<actions/labeler@v6...v7.0.0>

###
[`v7`](https://github.com/proxy/redirect.github.com/actions/labeler/compare/v6.2.0...v7.0.0)

[Compare
Source](https://github.com/proxy/redirect.github.com/actions/labeler/compare/v6.2.0...v7.0.0)

</details>

## Why?

Automated dependency update via Renovate.

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://github.com/proxy/redirect.github.com/renovatebot/renovate).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNzIuNiIsInVwZGF0ZWRJblZlciI6IjQzLjI3Mi42IiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIiwibGFiZWxzIjpbImRlcGVuZGVuY2llcyJdfQ==-->
## What?

Fetches the actual IMAP folder name for attachment downloads

## Why?

Fixes floatpane#1689

---------

Signed-off-by: drew <me@andrinoff.com>
## What?

- Added try-catch block to make it easier to debug OAuth2 errors
encountered while authenticating IMAP.
- Revised Outlook URL generation code for updated Entra ID redirect

## Why?

I wasn't able to authenticate my Outlook emails previously. I'm not
fully sure if the documentation clearly states that you need your Entra
ID redirect to be configured as "Web" rather than "Mobile & Desktop
App," but that is also a needed fix.
## What?

Fixes several issues with Gmail

## Why?

Fixes floatpane#1674

Signed-off-by: drew <me@andrinoff.com>
Server-side encrypted mail (e.g. mailbox.org Encrypted Inbox) delivers the
application/octet-stream part as a bare ASCII-armored PGP message. That
payload was passed straight to pgpmail.Read, which expects a full MIME
entity and failed with 'malformed MIME header line'. Decode the armor and
decrypt directly when the payload starts with a PGP MESSAGE block; keep
the pgpmail path for complete PGP/MIME entities.

Fixes floatpane#1715

Signed-off-by: Vladimir Babin <vovababin@gmail.com>
@chiliec
chiliec requested a review from a team as a code owner September 11, 2026 22:21
@floatpanebot floatpanebot added bug Something isn't working area/fetcher IMAP fetch / IDLE / search size/M Diff: 51–200 lines labels Sep 11, 2026
@floatpanebot

Copy link
Copy Markdown
Member

Benchmark report — no significant change

Metrics worse: 0 · better: 0 (threshold: ±3%).

benchstat output
goos: linux
goarch: amd64
pkg: github.com/floatpane/matcha/backend
cpu: INTEL(R) XEON(R) PLATINUM 8573C
                           │    old.txt    │               new.txt                │
                           │    sec/op     │    sec/op      vs base               │
ParseSearchQuery_Simple-4    2.258µ ± 270%   2.221µ ± 379%        ~ (p=1.000 n=6)
ParseSearchQuery_Complex-4   5.980µ ±  52%   6.946µ ±  38%        ~ (p=0.699 n=6)
TokenizeSearchQuery-4        6.805µ ±  57%   3.756µ ±  26%  -44.81% (p=0.041 n=6)
geomean                      4.512µ          3.870µ         -14.24%

                           │  old.txt   │               new.txt               │
                           │    B/op    │    B/op      vs base                │
ParseSearchQuery_Simple-4    26.00 ± 0%   26.00 ± 23%       ~ (p=1.000 n=6)
ParseSearchQuery_Complex-4   762.0 ± 0%   762.0 ±  0%       ~ (p=1.000 n=6) ¹
TokenizeSearchQuery-4        176.0 ± 0%   176.0 ±  0%       ~ (p=1.000 n=6) ¹
geomean                      151.6        151.6        +0.00%
¹ all samples are equal

                           │  old.txt   │              new.txt               │
                           │ allocs/op  │ allocs/op   vs base                │
ParseSearchQuery_Simple-4    2.000 ± 0%   2.000 ± 0%       ~ (p=1.000 n=6) ¹
ParseSearchQuery_Complex-4   23.00 ± 0%   23.00 ± 0%       ~ (p=1.000 n=6) ¹
TokenizeSearchQuery-4        9.000 ± 0%   9.000 ± 0%       ~ (p=1.000 n=6) ¹
geomean                      7.453        7.453       +0.00%
¹ all samples are equal

pkg: github.com/floatpane/matcha/tui
                    │   old.txt    │              new.txt               │
                    │    sec/op    │    sec/op     vs base              │
LogPanelView-4        133.8µ ±  7%   145.5µ ± 13%       ~ (p=0.180 n=6)
SearchOverlayView-4   140.7µ ± 11%   145.2µ ± 10%       ~ (p=1.000 n=6)
InboxConstruction-4   779.2µ ± 10%   839.7µ ± 15%       ~ (p=0.180 n=6)
geomean               244.8µ         260.8µ        +6.54%

                    │    old.txt    │               new.txt               │
                    │     B/op      │     B/op       vs base              │
LogPanelView-4        44.67Ki ± 51%   44.67Ki ± 51%       ~ (p=1.000 n=6)
SearchOverlayView-4   56.14Ki ± 41%   56.14Ki ± 41%       ~ (p=0.939 n=6)
InboxConstruction-4   874.3Ki ±  0%   874.3Ki ±  0%       ~ (p=0.818 n=6)
geomean               129.9Ki         129.9Ki        -0.00%

                    │   old.txt   │              new.txt              │
                    │  allocs/op  │  allocs/op   vs base              │
LogPanelView-4         714.0 ± 0%    714.0 ± 0%       ~ (p=1.000 n=6)
SearchOverlayView-4    926.0 ± 0%    926.0 ± 0%       ~ (p=1.000 n=6)
InboxConstruction-4   3.478k ± 0%   3.478k ± 0%       ~ (p=1.000 n=6)
geomean               1.320k        1.320k       +0.00%

auto-generated by benchmarks.yml

@chiliec

chiliec commented Sep 11, 2026

Copy link
Copy Markdown
Author

Note on the red govulncheck check: it reports stdlib advisories in go1.26.5 (GO-2026-6218 net/url, GO-2026-6090 crypto/tls, GO-2026-5972 encoding/asn1, fixed in 1.26.6) via call paths in spellcheck, sender, main.go and the existing IMAP dial code — none in this diff. The same job has been failing on master for the last three scheduled runs (Sep 7, Aug 31, Aug 24), so it's a toolchain bump, not this PR. Everything else (build/test on all 3 OSes, lint, gosec, e2e, fuzz) is green.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/fetcher IMAP fetch / IDLE / search bug Something isn't working size/M Diff: 51–200 lines

Projects

None yet

Development

Successfully merging this pull request may close these issues.

PGP decryption always fails on server-side encrypted mail (raw armor passed to pgpmail.Read)

10 participants