Upgrade to 1.0.0-rc877

Concerns: pushword/admin-block-editor, pushword/core, pushword/flat, pushword/newsletter, pushword/page-scanner, pushword/static-generator

An 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 Caddy webp fallback no longer depends on matcher evaluation order

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.

Render typography: quote pairs, units, inline scripts

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.

Code samples survive export byte-identical

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.

Derivative checks and worker kills do what they said

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.