Skip to content

feat(hotkeys): reader reply/forward/yank/headers + trimmed g-leader#1

Merged
antono merged 3 commits into
mainfrom
hotkeys-improvement
Jun 18, 2026
Merged

feat(hotkeys): reader reply/forward/yank/headers + trimmed g-leader#1
antono merged 3 commits into
mainfrom
hotkeys-improvement

Conversation

@antono

@antono antono commented Jun 18, 2026

Copy link
Copy Markdown
Owner

Implements the hotkeys-improvement OpenSpec change.

Reader actions

  • r reply, R reply-all, F forward, y yank body, Y yank headers+body, g h toggle headers menu.
  • g f / g a open the folder / account picker from the reader (mirrors the list g-leader).

List g-leader cleanup (BREAKING for muscle memory)

  • Removed g i / g s / g d / g A; account picker rebound g Ag a; kept g f / g g / G.

Backend

  • mailbrus-core: split_address_list + Headers.cc (with unit tests).
  • mailbrus-server: message-detail response now emits structured to/cc for reply-all.

Frontend

  • Pure reply.ts (Re:/Fwd: dedup, > quoting, reply-all dedup + own-address exclusion), unit-tested.
  • Compose prefill via ui.composePrefill; scope-aware g-leader indicator.

Validation

  • cargo: 61 tests, 0 warnings · deno unit: 53 · e2e: 156 passed, 5 skipped (pre-existing fixme).

antono added 3 commits June 19, 2026 00:34
…ilities

Gmail does not advertise CONDSTORE in its CAPABILITY response but
does return HIGHESTMODSEQ in SELECT replies and honours CHANGEDSINCE.
The previous code used only the capability check, so it always fell
back to a full UID SEARCH ALL on every sync. This meant messages
that arrived between the CHANGEDSINCE check and the SEARCH ALL could
be silently missed on that run.

Fix: treat a present highest_modseq in the SELECT response as evidence
of CONDSTORE support, enabling incremental delta sync for Gmail.
- proposal: three-state morphing UI (dot → button → spinner → popup)
- design: state machine architecture, event log with localStorage persistence
- specs: 18 requirements for compact UI and event log (40+ scenarios)
- tasks: 42 implementation checkpoints across 9 phases
- event log: 15 latest events displayed, 2000-line localStorage history
Implements the hotkeys-improvement OpenSpec change:

- Reader actions: r (reply), R (reply-all), F (forward), y (yank body),
  Y (yank headers+body), g h (toggle headers menu).
- Reader navigation leaders g f / g a (folder/account picker) so they
  work from the reader, not just the list.
- List g-leader trimmed: remove g i/g s/g d/g A, rebind account picker
  to g a, keep g f/g g/G.
- Backend: mailbrus-core gains split_address_list + Headers.cc; the
  message-detail response now emits structured to/cc for reply-all.
- Pure reply.ts (Re:/Fwd: dedup, "> " quoting, reply-all dedup +
  own-address exclusion) + compose prefill via ui.composePrefill.
- Scope-aware g-leader indicator (reader vs list).

Validated: cargo (61) + deno unit (53) + e2e (156) all green.
@antono antono merged commit fdac71a into main Jun 18, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant