Upgrade to 1.0.84

Concerns: pushword/admin, pushword/admin-block-editor, pushword/core, pushword/newsletter, pushword/repurpose

Audio uploads

Since 1.0.83 the admin, the block editor and the media API accept MP3, WAV, M4A, OGG and FLAC uploads on every site; the bytes must match the extension. Sites that do not want audio files: map a constraint on Pushword\Core\Entity\Media rejecting a getMediaFile() MIME type that starts with audio/ or is application/ogg; every interactive upload runs it (Media rules).

Reference help is opted into per field

Admin help moves into the label’s help button only for fields setting the context_help form option: true, or the translation key of a short line kept under the field (Reference help). Sites with custom admin fields or forms: add ->setFormTypeOption('context_help', true) where help should open on demand. Sites overriding @pwAdmin/components/weight_inline_field.html.twig: copy the new one; it reads its label, help and entity type from the field.

Block editor widget template

“Report a problem” stays available below the editor before any failure; the mode buttons' container names its editor. Sites overriding @PushwordAdminBlockEditor/editorjs_widget.html.twig with a full copy: add data-pw-editor-modes-for="{{ editor_id }}" to the .pw-editor-modes div, add closeOutline: "{{ 'editorOutlineClose'|trans|e('js') }}" to outline.labels, and move the .pw-editor-diagnostics panel, hidden attribute included, after the editor’s wrapper, as in the default template. Older copies keep working until then.

Automation step links drop utm_term, which analytics tools report as the paid-search keyword; utm_id and utm_content are unchanged. Reports reading steps from utm_term: use utm_content.

Campaigns open the list until another source joins the catalogue

Newsletter → Campaigns opens the campaign list, and the catalogue only when the application listens to CollectCampaignIndex. The catalogue shows other sources' statuses as given (paused, archived are no longer translated): pass the label editors should read. Sites overriding _navigation.html.twig: link the campaign entry to newsletter_campaigns_route().

Newsletter statistics totals

StatisticsRepository::totals() and the per-campaign clickRate, bounceRate and unsubscribeRate keys are gone: use StatisticsDashboard::totals() and Report::rate().

Motion audio errors name their track

pw:repurpose:motion reports an unusable audio file on audio.voice.media or audio.music.media rather than audio, and no longer reports other errors as audio problems. Update scripts that match the path audio. Slideshow .mp4 exports with audio now also run on FFmpeg 4.4 (Ubuntu 22.04) and always come out stereo.

Run doctrine:schema:update --force to add CTA metadata and the send-time placement snapshot. Existing messages and clicks retain their original body-only scope; missing CTA identities stay unknown.

Enable newsletter.bot_click_qualification: true for conservative known-agent classification. Add navigation/footer to newsletter.click_tracking_scopes only when intended; custom templates use the documented data-newsletter-* anchor attributes. Existing consent checks and system-link exclusions remain required.

Source providers and CSV

Providers may reuse the source-independent observation aggregator and link table. Existing providers remain compatible; new CSV fields are appended after the 1.0.81 columns. See newsletter statistics for coverage and rate definitions.

Native delivery coverage

Delivery counts without a verified collector snapshot are now marked as observed lower bounds, including <metric>Complete CSV fields. Delivery rates and delivered-click rates stay unavailable until a listener to QualifyDeliveryCoverage proves the full selected cohort/window and sets its durable observation boundary. Existing factual counts are retained; see delivery coverage.

Newsletter admin compatibility

Sites with pushword/admin installed: update it to at least 1.0.84 together with pushword/newsletter; the newsletter forms use the context_help option introduced in that admin release. The admin remains optional; Composer rejects older installed admin versions.