Patriot Platform Members 1.04
Shared administration header + event-change notifications

INSTALL
Back up the current plugin and database. Upload patriot-platform-1.04.zip through
WordPress > Plugins > Add New > Upload Plugin and replace the current plugin.
All previous features are included. No reactivation is needed. The event email
queue table is upgraded to store the event's published notification details.

ADMIN HEADER
Patriot Platform administration screens have a full-content-width dark-green
header with gold accents, logo, tagline, current version and a View website link.
Uses the current site logo, with the bundled lion logo as fallback. Includes the
plugin dashboard, admissions, member administration, coordination, tools/logs,
regions, member chat, regional dashboard, attendance, email queue, certificate
settings and the plugin's Activities list/editor. It does not brand other
plugins' pages, including CertWright's own separate certificate management page.
The styling is scoped to this header and adapts to smaller screens. Website
page headers and the WordPress administration menu remain unchanged.

EVENT CHANGE EMAILS
Changing a published event's title, start time, timezone or venue schedules an
update for registered attendees. Updates are reviewed after a 30-second debounce
and then go through the existing five-minute email worker, with its retry rules.
Changes made through standard WordPress post/metadata APIs are tracked. Direct
SQL changes bypass this mechanism. Description-only changes do not send email.
The first publication of a new activity does not send a change announcement.

CANCELLING AN EVENT
Open the published event as its authorised organiser, or open its Event
attendance details as national administrator. In Organiser attendance tools use
'Cancel event and notify attendees'. This moves the activity to Draft and queues
cancellation notices. Manually moving a published activity to Draft, Private or
Trash also counts as withdrawal and queues cancellation notices.
Cancellation messages use the last published event details, not private draft
edits. Keep the activity record until notifications have been processed;
permanent deletion removes the event/RSVP data needed for delivery.
Republishing a withdrawn event is treated as another event change for remaining
confirmed attendees. Cancellation does not itself delete RSVP records; members
can still cancel their own registration through My membership.

QUEUE AND ELIGIBILITY
Event email queue shows event_changed and event_cancelled alongside confirmations
and reminders. Processing is batched (three change jobs, 100 recipients per job
per worker tick; normal sends remain 10 messages per tick). For large events,
notify well ahead of the start. WP-Cron must run regularly; no server cron is
installed by this update.
Only confirmed RSVP records from the event are considered. Cancel/re-register
uses a distinct RSVP generation. Cancelled registrations are skipped. Superseded
change notices are skipped before sending. Change messages require current event
eligibility; withdrawal notices can reach the existing registered account even
if its membership later became inactive, so it is warned not to attend.
Sent still means accepted by the mailer, not inbox delivery. No real messages
were sent during development.

CHECKS
54 isolated combined RSVP, email and event-change behavioural checks passed with
WordPress/database boundary stubs. Included duplicate review, rescheduling,
changed venue with quotes, recipients, stale notices, private draft details and
cancellation. All 21 PHP files passed PHP runtime lint and PHP 8.0 syntax parsing.
ZIP CRC integrity checked. Live WordPress schema upgrades, SMTP, cron timing,
real concurrent database clients and browser layout still require site testing.

TEST ON YOUR SITE
1. Open several Patriot Platform admin pages and Activities; check desktop/mobile
   header, site logo and Version 1.04 badge.
2. Create a future published regional event and RSVP using your own member.
3. Change its venue or time. Wait for WP-Cron or run the due worker after the
   30-second review; check Event email queue and your test inbox.
4. Use Cancel event and notify attendees. Verify Draft status and the queued
   cancellation message. Ensure no later reminder is sent for the withdrawn event.
5. Test as another region's coordinator and an ordinary member: organiser
   cancellation controls must not be available.
