@bobfrankston/rmfmail 1.0.552 → 1.0.554

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/TODO.md +4 -0
  2. package/package.json +3 -3
package/TODO.md CHANGED
@@ -12,6 +12,9 @@ These items don't need user input — source-only changes, compile-verified befo
12
12
 
13
13
  | Order | Item | Scope | Status |
14
14
  |---|---|---|---|
15
+ | **1** | **C118 — STATUS-before-SELECT in syncFolder** | S | Issue `STATUS folder (UIDNEXT)` before SELECT. If `UIDNEXT - 1 <= local highestUid` skip SELECT and FETCH entirely — folder is up to date. Cuts SELECT calls by ~99% on idle folders. Avoids the bobma/Sent SELECT-wedge case Bob hit (server is fine, but SELECT on idle huge folder + dead-socket-not-detected = 300s timeout). `mailx-imap/index.ts:909`. |
16
+ | **2** | **C119 — Lazy folder sync** | M | Don't sync all 96 bobma folders on every periodic pass. Only sync (a) folders the user has expanded in the tree, (b) special-use folders (INBOX/Sent/Drafts/Trash), (c) folders touched by recent local actions. Other folders sync on-demand when user clicks them. Closes most of the Thunderbird-vs-mailx speed gap. Touches `mailx-imap/index.ts` syncAll loop. |
17
+ | **3** | **C120 — Read TCP transport diagnostics in syncFolder error path** | S | `node-tcp-transport@1.0.21` exposes `transport.diagnostics` (connId, bytesRead/Written, sinceLastRead). iflow-direct@0.1.31 includes them in the timeout error message. Surface in mailx-imap's caught-error log so `[sync] folder error` lines have full forensic context (was it dead silently? did it write? how long since last byte?). Already half-wired — extend the catch in `syncFolder` to log the full string. |
15
18
  | 11 | **[P116](#ext116) — Signature edit in Settings menu** | M | Deferred v1.0.401 — turns out to be M (multi-account modal + save path + JSONC round-trip), not S. Real work when Settings UI gets its proper pass. |
16
19
  | 13 | **S56 full AbortController plumbing** | L | Thread `AbortSignal` through `getMessage → fetchMessageBody → provider.fetchOne`. Touches IMAP + Gmail + Outlook providers. |
17
20
  | **18** | **[P115](#ext115) — register mailx as Windows default `mailto:` handler** | M | User-priority. Click any `mailto:` link in browser/Word/Outlook → opens mailx compose. Registry-only (no MSIX). Owed: (a) HKCU\\SOFTWARE\\Classes registry write at install/setup, (b) `--mailto <url>` CLI in `bin/mailx.ts` that parses the URL and forwards to the running daemon's compose IPC, (c) `bin/mailx.ts -register-mailto` / `-unregister-mailto` admin commands, (d) "Default mail" toggle in Settings UI that calls the same. Split out of [C46](#ext46) — only the mailto half; Share-target + MSIX stay blocked. |
@@ -225,6 +228,7 @@ Previously shown as showstoppers; moved here because they haven't recurred on re
225
228
 
226
229
  Small, self-contained items. Pick them up between higher-priority blocks without asking. Bump version per fix.
227
230
 
231
+ - **Q117 — Spring-loaded folders (drag-hover-expand).** When the user is dragging messages and hovers over a collapsed folder in the folder tree, expand it after a short hover delay so the user can see / target child folders. Auto-collapse back to its prior state when the drag leaves the folder OR the drop completes. Standard pattern in Outlook / Thunderbird / Finder. Implementation: `dragenter` on a folder row starts a timer (named constant `DRAG_HOVER_EXPAND_MS`, ~600ms target); `dragleave` cancels; on timer fire, set an `expanded-during-drag` flag and toggle the disclosure triangle. `dragend` / `drop` walks back up clearing flags and restoring prior state. No persistence — purely transient. (Per `feedback_no_magic_numbers.md`: timing values go in named constants, not inline.)
228
232
  - **Verify rail-view / rail-settings dropdowns in narrow mode (paused 2026-04-30).** Added `rail-view` icon (👁) and `openMenuFromRail()` in `client/app.ts` that reparents the toolbar dropdown to `<body>` and switches to `position:fixed` anchored to the rail icon — so the toolbar's `display:none` in narrow mode no longer hides the menu. Compile not yet re-verified after the edits because Bash kept wedging; user paused to start the monorepo reorg (mailx → mailxapp). When resuming: run `tsc` in `client/`, sanity-check that opening View / Settings from the rail in narrow mode shows the dropdown anchored next to the icon, and that toolbar buttons in wide mode still work (they just toggle `hidden` on the same dropdown DOM, which is now a body child but still works).
229
233
 
230
234
  ---
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bobfrankston/rmfmail",
3
- "version": "1.0.552",
3
+ "version": "1.0.554",
4
4
  "description": "Local-first email client with IMAP sync and standalone native app",
5
5
  "type": "module",
6
6
  "main": "bin/mailx.js",
@@ -31,7 +31,7 @@
31
31
  "postinstall": "node bin/postinstall.js"
32
32
  },
33
33
  "dependencies": {
34
- "@bobfrankston/iflow-direct": "^0.1.30",
34
+ "@bobfrankston/iflow-direct": "^0.1.31",
35
35
  "@bobfrankston/miscinfo": "^1.0.10",
36
36
  "@bobfrankston/oauthsupport": "^1.0.26",
37
37
  "@bobfrankston/msger": "^0.1.378",
@@ -99,7 +99,7 @@
99
99
  },
100
100
  ".transformedSnapshot": {
101
101
  "dependencies": {
102
- "@bobfrankston/iflow-direct": "^0.1.30",
102
+ "@bobfrankston/iflow-direct": "^0.1.31",
103
103
  "@bobfrankston/miscinfo": "^1.0.10",
104
104
  "@bobfrankston/oauthsupport": "^1.0.26",
105
105
  "@bobfrankston/msger": "^0.1.378",