Patriot Platform Members 1.02 — Regional Events and RSVPs

INSTALL
Back up the plugin and database. Upload patriot-platform-1.02.zip through
WordPress > Plugins > Add New > Upload Plugin, then replace the existing plugin.
This is a complete plugin ZIP and includes the 1.01 coordinator dashboard.
No deactivate/reactivate cycle is required. The first init creates a dedicated
WordPress-prefix event RSVP table through dbDelta. Existing events are preserved.
The internal header, version constant and readme stable tag are now 1.02.

MEMBERS
Open Activities across Australia, choose a published future activity, and use
Event registration below its description. An active accepted membership in the
activity's region is required. National activities accept active members from
all regions. One registration is stored per member per event.
Tick permission to share your name, email and event choices with authorised
organisers; optionally tick 'I can help run this event'. This does not alter
general contact permission or the 1.01 task-volunteer preference.
Registered members may update their event volunteer choice while registrations
are open, or cancel through the event page or My membership > My event
registrations. Cancellation also works after membership suspension, region
change, registration closure, or event unpublication. It releases the place.
My event registrations shows up to 50 records, including past registrations.
No confirmation or reminder emails are sent in this release.

COORDINATORS
Use My membership > Regional Coordinator Dashboard > Event attendance overview.
Open a published regional event. Organiser attendance tools let you set the
maximum number of attendees (0 means unlimited), close registrations and view
private attendee names/emails and event volunteer choices. Capacity may not be
reduced below current confirmed registrations. Existing events default to
unlimited/open, so configure capacity before inviting members if needed.
Only approved coordinators of the event's region have organiser access.
National events are managed by national administrators.
Attendance lists are paged at 50 rows. Members who later become ineligible have
names/emails hidden from the list but their registrations still count until
cancelled. This preserves capacity instead of silently releasing occupied seats.
Creation and administrator publication of activities use the existing workflow.
Pending, draft, private and past events do not accept new registrations.

NATIONAL ADMINISTRATOR
WordPress > Patriot Platform > Event attendance shows the latest 50 activities
across regions, attendance counts, volunteer counts and remaining places. Click
an event for settings and its private attendance list. The regional dashboard
also shows this overview for the selected region.

PRIVACY AND STORAGE
RSVPs are not exposed through a public REST endpoint. Individual event pages
send no-cache headers. EXCLUDE activity pages (/patriot-activity/*), membership
pages and any custom dashboard shortcode pages from CDN/server full-page caching.
Authorised organisers access details under explicit event-specific consent.
RSVP records participate in WordPress personal-data export and erasure. Deleting
a WordPress user removes their RSVP records; permanently deleting an activity
removes its RSVP records. Erasure/cancellation releases occupied places.
Existing audit infrastructure records requested/saved changes and settings.
Capacity checks and registration/settings writes share a MySQL advisory lock;
if the server cannot obtain it, registration fails safely with a retry message.

VALIDATION
- All PHP files checked using PHP runtime syntax lint (WebAssembly runtime).
- PHP 8.0 syntax parsing also passed for all 18 PHP files.
- 24 isolated behavioural checks passed with WordPress/database boundaries
  stubbed: registration, consent, volunteer updates, duplicates, last-seat
  protection, region/national eligibility, suspended member cancellation,
  closed/past/unapproved events, organiser authorization, capacity changes,
  audit/database failures and lock release/failure.
- ZIP CRC integrity checked.
Not yet tested against a running WordPress database or concurrent MySQL clients.
No full live-site or browser layout test has been performed.

TEST BEFORE LIVE ROLLOUT
1. Publish a future regional activity with valid region, start date and timezone.
2. Open it as its coordinator; set capacity to 1.
3. Register an active member of that region and opt into event volunteering.
4. Try a second member: full message expected. Re-saving the first member's
   volunteer choice should update, not create another registration.
5. Cancel the first registration, then register the second member.
6. Attempt cross-region registration: reject. Test a national event: accept.
7. Confirm ordinary members cannot see organiser names/emails or settings.
8. Attempt settings POSTs from another region/revoked coordinator: reject.
9. Close registration; verify registration/update blocked but cancellation works.
10. Test draft/past/unpublished events and member suspension/region change.
11. Verify My membership, coordinator overview and national Event attendance.
12. Verify privacy export/erasure, email-free operation, caching exclusions and
    existing activity creation, agreement and certificate workflows.
13. Check logs for database/schema errors and test simultaneous last-seat
    registrations against the actual database before a public launch.
