Concerns: pushword/admin-block-editor, pushword/core, pushword/flat, pushword/newsletter, pushword/page-scanner, pushword/static-generator
List-UnsubscribeAn audience, a campaign and an automation each carry a Transactional flag, off by default, which sends their mail with no unsubscribe link in either part of the body and no List-Unsubscribe headers — for service messages only, see the newsletter doc. Nothing changes for existing mail; the three new columns need php bin/console doctrine:schema:update --force.
The generated Caddyfile probes the original-image candidates from a try_files directive instead of a sibling of the path_regexp matcher, which Caddy evaluates in non-deterministic order — the fallback could be silently inert for a whole process. Caddy-served static sites: regenerate the build, reload Caddy.
A straight single-quote pair stays fully straight (only letter'letter curls, as the editor rule always had it), a number and its unit or currency keep a no-break space again, and typography survives an inline <script>/<style>/<textarea> holding a glued <. Rendered output changes on unchanged content; nothing to do.
Source normalization (straightening quotes, ellipses, no-break spaces) no longer reaches fenced blocks and inline code on flat export or editor save. Nothing to do.
pw:page-scan probes derivatives where pw:image:cache writes them (pw.media_cache_dir, not public_dir/media) — constructing LinkedDocsScanner by hand needs the new $mediaCacheDir argument; DI sites have nothing to do. And the 300-second idle worker kill rc874 announced is now actually enforced.
Every act that moves a subscription — opt-in, confirmation, unsubscribe, undo, bounce — now appends a row nobody edits or deletes, with the provenance of that moment, readable from Consent history on the contact page. The dates on the contact keep meaning what they meant. Run php bin/console doctrine:schema:update --force for the new table; the ledger starts empty for subscriptions that predate it. See the newsletter doc.