Search: folder-tree highlight follows the focused result's folder

An all-folders search started from Sent left "Sent" highlighted in the folder
tree while the list showed mail from every folder, so an inbound INBOX message
read as being in Sent (Bob 2026-09-27).

While search results are showing, the tree highlight now follows the focused
result's own folder. A folder hidden under a collapsed parent clears the
highlight rather than leaving another folder claiming the message. A
"This folder" search puts the highlight back on the folder being searched.
Highlight only: the current folder (what "This folder" searches, where an
empty search returns on close) is unchanged.

- client/components/folder-tree.ts: highlightMessageFolder()
- client/components/message-list.ts: getCurrentView() reports `search`
- client/app.ts: mailx-focus-changed listener; doSearch re-asserts on "current"

Edit in Word: paragraphs no longer come back with styles nobody chose

html-to-docx hardcodes the generated document's default paragraph formatting
(6pt after, line height 12pt). Word's HTML export repeats it inline on every
paragraph, so a reply came back as
<p style="margin-bottom: 6.0pt; line-height: 12.0pt;"> (Bob 2026-09-27). The
fixed line height also cramps any reader using a larger font.

The return path now removes inline declarations that only restate those
defaults. Spacing or anything else the user set in Word has a different value
and is kept.

- packages/mailx-service/word-html.ts: DOCX_BASELINE_PARAGRAPH_STYLE,
  dropBaselineStyles()
- packages/mailx-service 0.1.44 -> 0.1.45
- tests/word-html.test.ts (6 pass), tests/word-docx-probe.mjs (diagnostic)

Compose: Insert > "HTML…" inserts markup as a live block

Picks up rmf-tiny 0.1.57. Beside "Code block…" (which escapes the text into a
<pre>), "HTML…" inserts the markup itself as a <div>, with checkboxes for a
border and for making the block a <blockquote> (Bob 2026-09-28).

- client/lib/rmf-tiny.js, client/compose/compose.bundle.js rebuilt

Outbox: sends no longer wait 90 s behind a lost IMAP command

Picks up iflow-direct 0.1.79, where APPEND is serialized with every other
command on the connection. Before, moving a queued message into the IMAP
Outbox (APPEND) overlapped the outbox worker's SELECT / UID SEARCH on the same
connection, that command lost its answer, and the send waited for the 90 s lane
timeout (Bob 2026-09-28, three times).

A failure to move queued mail into the IMAP Outbox is now logged. That catch
was empty.

- packages/mailx-imap/index.ts: processLocalQueue logs the failure
- packages/mailx-imap 0.1.191 -> 0.1.192

Compose: right-click an image for layout and border

Right-clicking an image in the TinyMCE editor now offers "In line with text",
"Image left — text wraps around the right", "Image right — text wraps around
the left" (the current one ticked), add/remove border, "Image properties…",
then Cut / Copy / Paste and "View HTML source…". These were only on the small
toolbar that appears when the image is clicked (Bob 2026-09-29).

The right-click selects the image. A right-click anywhere else in compose is
unchanged and still shows the native menu.

- client/compose/image-menu.ts (new), wired in client/compose/compose.ts
- uses rmf-tiny commands rmfImageWrap / rmfImageBorder (rmf-tiny 0.1.57)

Startup: no longer dies on an install where the packages are real folders

The IPC dispatcher read the app's package.json at module load by walking two
folders up from itself. That is the app's package.json only when the package's
real path is rmfmail/packages/mailx-service (dev tree, or a registry install
whose postinstall junctions exist). Where rmfmail/node_modules/@bobfrankston/
mailx-service is a real folder, the read hit rmfmail/node_modules/package.json,
threw ENOENT, and rmfmail exited at startup (Bob's new machine, 2026-09-29).

The host now hands the version to the dispatcher (setAppVersion). Reproduced
with a scratch registry install of 1.2.348; with the fix it boots to a window.

- packages/mailx-service/jsonrpc.ts: setAppVersion(); no file read
- bin/mailx.ts: calls it with the app's own version

Launch: a bare `rmfmail` says what it did, and first run stays in the terminal

`rmfmail` detached a background copy with its output discarded and exited 0
having printed nothing, so the crash above was invisible ("it just returned").
The detach also ran before the first-run check, so the terminal setup could
only ever be reached with -setup.

- first run from a terminal (no configuration yet) runs setup in that terminal
- the launch prints the background PID and the log folder
- the background copy's early output is kept in ~/.rmfmail/logs/boot.log
