Summary
Two fixes reported from a live site, plus the follow-through from the
WordPress.org review. Replying opens with the original message quoted again and
the subject sits above the attachments. Settings pages use the wide layout
again. The Free mailbox is reconfigured in place instead of hitting a
remove-first dead end. Uninstall removes only PressedMail's own data. The
phishing report icon renders again. And enabling an AI feature no longer waits
on a data-use acceptance that could never be recorded.
Fixed
- Replies open with the original text quoted under the new message. The quote was
built correctly and handed to the composer, then thrown away before anyone
could see it: the composer reads the editor's current HTML when it starts a
session, and the editor's HTML still answered with the content from before the
reply was loaded, because the DOM trails a programmatic load by a render. The
composer took that older, empty answer as the truth, wrote it back over the
quote, and saved that as the body. Reading after a load now returns what was
loaded.
- The editor-ready catch-up runs. It exists to push a composed body into an
editor that mounted after the body was ready, and it read the editor off a ref
that was assigned after the ready signal had already fired. It now flushes
through the editor it is handed, and it no longer spends its one attempt when
there is nothing to flush.
- The subject sits above the attachments instead of beside them. In the reading
pane the subject and the attachment chips were two flexible children of one
wrapping row, so a wide pane put them side by side and both were squeezed: the
subject wrapped onto extra lines and the filenames truncated against the chips.
In the composer the importance and attach buttons shared the subject field's
row and held it down at its minimum width. Both surfaces stack now.
- Settings pages use the wide layout again. The shell capped the content at a narrow centre column whatever the screen width, and two tabs carried their own slightly wider caps that no longer matched anything. All three now share one wide well, and the page title lines up with the content's left edge.
- The phishing report icon renders again. The phishing cache is keyed by a mailbox-qualified identity, and both the message row and the reading pane were looking results up by the bare message UID. Every lookup missed, so no icon appeared and the report dialog behind it could not be opened either. Both surfaces look up by the identity key now.
- The Free mailbox is reconfigured in place. Free holds exactly one mailbox by construction, and replacing it used to fail with a remove-first error unless an administrator cleared the slot first. The mailbox's owner, or an administrator, now swaps it in place: one slot, the new address, the recorded owner preserved. There is no seat count anywhere; the slot is singular, never capped.
- Uninstall removes only PressedMail's own data. It used to also delete four short
_pm_post-meta keys and any post of a template type that no shipped code registers, on the strength of a prefix guess. Both belonged to other code, and uninstall leaves them to whoever owns them. - Enabling an AI feature no longer waits on a data-use acceptance, because the gate could never be satisfied. Acceptance was recorded against a provider fingerprint that the settings card invalidated on the next keystroke, the automation check hard-coded one provider type, and the disclosure version literal drifted between PHP and the dialog until every accept returned 400. A single notice at the foot of the provider card says where the data goes. Changing the provider endpoint still turns every AI feature off. The stored acceptance record is purged on upgrade.
Upgrade Notes
Nothing to do. Replies written in an older version are unaffected: this changes
how the composer loads the quoted original, not what is stored. Sites that
recorded an AI data-use acceptance have that record removed automatically.




