Added
- Pattern B contacts —
escalated_contactstable dedupes guest submitters by email;Contactmodel +find_or_create_by_email(#27). - Public-ticket guest policy — admin settings page lets host pick
unassigned/guest_user/prompt_signup;TicketService::create_guesthonors the mode (#34, #36). - Workflow stack —
WorkflowExecutorServicedispatches 8 action types (#28),WorkflowRunnerServicefires them on event triggers (#39),WorkflowListenerbridges WP hooks → runner (#41),delayaction with deferred-job queue (#40). - RFC 5322 email threading —
Message_Id_Utilfor stableMessage-ID+ signedReply-Toheaders, wired intoEmail_Threading(#31, #38). Activator::maybe_upgrade()— runs idempotent steps on version bump fromplugins_loaded; skipscreate_roles()to preserve admin role customizations (#37).- Brand chevron icon in wp-admin sidebar (replaces generic
dashicons-tickets-alt) (#42). - Demo Docker environment — one-command setup for local development (#25).
Fixed
- Ticket list rendered twice on the wp-admin Escalated page (duplicate
add_submenu_pagewith parent slug fired the callback on the page-load hook twice) (#43). - Public-ticket submissions now honor
guest_policy_modeinstead of unconditionally writing guest fields (#36). - Admin capability names aligned with the activator permission scheme (#24).
Schema migration
This release adds tables that existing installs need to pick up:
escalated_contactsescalated_workflows,escalated_workflow_logsescalated_settings
Activator::maybe_upgrade() runs the additive migrations on plugins_loaded once the version constant changes, so no manual reactivation is required.
Full Changelog: v1.1.0...v1.2.0