From 25c130cc0ab121d2d2dc5f2d76f08a64fb92f329 Mon Sep 17 00:00:00 2001 From: Extra Chill Bot Date: Fri, 1 May 2026 19:24:27 +0000 Subject: [PATCH] fix(abilities): flatten category slugs for WP 7.0 compatibility MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit WordPress 7.0 RC2 tightened the Abilities API category slug validation regex to /^[a-z0-9]+(?:-[a-z0-9]+)*$/, rejecting any slug containing a forward slash. The 'datamachine-events/events', 'datamachine-events/venues', etc. category slugs that worked silently on 6.9 now fail registration on 7.0+, and every ability assigned to those categories logs "category is not registered" notices on every init (~13,000 lines per few minutes on a busy site). Flatten the four category slugs to match Data Machine core's pattern of '-' (e.g. 'datamachine-content', 'datamachine-media'): datamachine-events/events -> datamachine-events-events datamachine-events/venues -> datamachine-events-venues datamachine-events/testing -> datamachine-events-testing datamachine-events/settings -> datamachine-events-settings Ability *names* (e.g. 'data-machine-events/get-venue-events') continue to use the slash-separated namespace/name format — that is still valid and required by the Abilities API registration regex. Refs: data-machine-events#216 --- inc/Abilities/AbilityCategories.php | 8 ++++---- inc/Abilities/BatchTimeFixAbilities.php | 2 +- inc/Abilities/CalendarAbilities.php | 2 +- inc/Abilities/DiceFmTest.php | 2 +- inc/Abilities/DuplicateDetectionAbilities.php | 4 ++-- inc/Abilities/EncodingFixAbilities.php | 2 +- inc/Abilities/EventDateQueryAbilities.php | 2 +- inc/Abilities/EventHealthAbilities.php | 2 +- inc/Abilities/EventQualityAuditAbilities.php | 2 +- inc/Abilities/EventQueryAbilities.php | 2 +- inc/Abilities/EventScraperTest.php | 2 +- inc/Abilities/EventUpdateAbilities.php | 2 +- inc/Abilities/FilterAbilities.php | 2 +- inc/Abilities/GeocodingAbilities.php | 8 ++++---- inc/Abilities/MetaSyncAbilities.php | 4 ++-- inc/Abilities/SettingsAbilities.php | 4 ++-- inc/Abilities/TicketUrlResyncAbilities.php | 2 +- inc/Abilities/TicketmasterTest.php | 2 +- inc/Abilities/TimezoneAbilities.php | 4 ++-- inc/Abilities/UpcomingCountAbilities.php | 2 +- inc/Abilities/VenueAbilities.php | 8 ++++---- inc/Abilities/VenueMapAbilities.php | 2 +- 22 files changed, 35 insertions(+), 35 deletions(-) diff --git a/inc/Abilities/AbilityCategories.php b/inc/Abilities/AbilityCategories.php index b2febf2..4f2cc3e 100644 --- a/inc/Abilities/AbilityCategories.php +++ b/inc/Abilities/AbilityCategories.php @@ -18,10 +18,10 @@ class AbilityCategories { /** * Category slug constants for use in ability registrations. */ - public const EVENTS = 'datamachine-events/events'; - public const VENUES = 'datamachine-events/venues'; - public const TESTING = 'datamachine-events/testing'; - public const SETTINGS = 'datamachine-events/settings'; + public const EVENTS = 'datamachine-events-events'; + public const VENUES = 'datamachine-events-venues'; + public const TESTING = 'datamachine-events-testing'; + public const SETTINGS = 'datamachine-events-settings'; private static bool $registered = false; diff --git a/inc/Abilities/BatchTimeFixAbilities.php b/inc/Abilities/BatchTimeFixAbilities.php index 20e8766..6cfb564 100644 --- a/inc/Abilities/BatchTimeFixAbilities.php +++ b/inc/Abilities/BatchTimeFixAbilities.php @@ -45,7 +45,7 @@ private function registerAbility(): void { array( 'label' => __( 'Batch Time Fix', 'data-machine-events' ), 'description' => __( 'Batch fix event times with offset correction or explicit replacement', 'data-machine-events' ), - 'category' => 'datamachine-events/events', + 'category' => 'datamachine-events-events', 'input_schema' => array( 'type' => 'object', 'required' => array( 'venue' ), diff --git a/inc/Abilities/CalendarAbilities.php b/inc/Abilities/CalendarAbilities.php index 2f7de49..3037a48 100644 --- a/inc/Abilities/CalendarAbilities.php +++ b/inc/Abilities/CalendarAbilities.php @@ -44,7 +44,7 @@ private function registerAbility(): void { array( 'label' => __( 'Get Calendar Page', 'data-machine-events' ), 'description' => __( 'Query paginated calendar events with optional filtering and HTML rendering', 'data-machine-events' ), - 'category' => 'datamachine-events/events', + 'category' => 'datamachine-events-events', 'input_schema' => array( 'type' => 'object', 'properties' => array( diff --git a/inc/Abilities/DiceFmTest.php b/inc/Abilities/DiceFmTest.php index 9d06d7e..0751620 100644 --- a/inc/Abilities/DiceFmTest.php +++ b/inc/Abilities/DiceFmTest.php @@ -29,7 +29,7 @@ public function __construct() { array( 'label' => __( 'Test Dice FM', 'data-machine-events' ), 'description' => __( 'Test Dice FM API handler with raw response data', 'data-machine-events' ), - 'category' => 'datamachine-events/testing', + 'category' => 'datamachine-events-testing', 'input_schema' => array( 'type' => 'object', 'required' => array( 'city' ), diff --git a/inc/Abilities/DuplicateDetectionAbilities.php b/inc/Abilities/DuplicateDetectionAbilities.php index 677cad0..c40e6e4 100644 --- a/inc/Abilities/DuplicateDetectionAbilities.php +++ b/inc/Abilities/DuplicateDetectionAbilities.php @@ -145,7 +145,7 @@ private function registerVenuesMatchAbility(): void { array( 'label' => __( 'Venues Match', 'data-machine-events' ), 'description' => __( 'Compare two venue names for semantic equivalence. Handles HTML entities, parenthetical stage names, dash-separated qualifiers, and article removal.', 'data-machine-events' ), - 'category' => 'datamachine-events/venues', + 'category' => 'datamachine-events-venues', 'input_schema' => array( 'type' => 'object', 'required' => array( 'venue1', 'venue2' ), @@ -198,7 +198,7 @@ private function registerFindDuplicateEventAbility(): void { array( 'label' => __( 'Find Duplicate Event', 'data-machine-events' ), 'description' => __( 'Search for an existing event that matches the given title, venue, and date using fuzzy matching. Returns the matching post ID or null.', 'data-machine-events' ), - 'category' => 'datamachine-events/venues', + 'category' => 'datamachine-events-venues', 'input_schema' => array( 'type' => 'object', 'required' => array( 'title', 'startDate' ), diff --git a/inc/Abilities/EncodingFixAbilities.php b/inc/Abilities/EncodingFixAbilities.php index 476c18d..4b72889 100644 --- a/inc/Abilities/EncodingFixAbilities.php +++ b/inc/Abilities/EncodingFixAbilities.php @@ -44,7 +44,7 @@ private function registerAbility(): void { array( 'label' => __( 'Fix Encoding', 'data-machine-events' ), 'description' => __( 'Fix Unicode encoding issues in event block attributes', 'data-machine-events' ), - 'category' => 'datamachine-events/events', + 'category' => 'datamachine-events-events', 'input_schema' => array( 'type' => 'object', 'properties' => array( diff --git a/inc/Abilities/EventDateQueryAbilities.php b/inc/Abilities/EventDateQueryAbilities.php index 369987c..5aeedba 100644 --- a/inc/Abilities/EventDateQueryAbilities.php +++ b/inc/Abilities/EventDateQueryAbilities.php @@ -42,7 +42,7 @@ private function registerAbilities(): void { array( 'label' => __( 'Query Events', 'data-machine-events' ), 'description' => __( 'Query events filtered by date scope, taxonomy, geo, and search. The single primitive for all event date queries.', 'data-machine-events' ), - 'category' => 'datamachine-events/events', + 'category' => 'datamachine-events-events', 'input_schema' => array( 'type' => 'object', 'properties' => array( diff --git a/inc/Abilities/EventHealthAbilities.php b/inc/Abilities/EventHealthAbilities.php index e877631..8d5de19 100644 --- a/inc/Abilities/EventHealthAbilities.php +++ b/inc/Abilities/EventHealthAbilities.php @@ -41,7 +41,7 @@ private function registerAbility(): void { array( 'label' => __( 'Event Health Check', 'data-machine-events' ), 'description' => __( 'Scan events for data quality issues', 'data-machine-events' ), - 'category' => 'datamachine-events/events', + 'category' => 'datamachine-events-events', 'input_schema' => array( 'type' => 'object', 'properties' => array( diff --git a/inc/Abilities/EventQualityAuditAbilities.php b/inc/Abilities/EventQualityAuditAbilities.php index e8929ae..8a59149 100644 --- a/inc/Abilities/EventQualityAuditAbilities.php +++ b/inc/Abilities/EventQualityAuditAbilities.php @@ -39,7 +39,7 @@ private function registerAbility(): void { array( 'label' => __( 'Event Quality Audit', 'data-machine-events' ), 'description' => __( 'Unified event quality audit with flow-aware diagnostics.', 'data-machine-events' ), - 'category' => 'datamachine-events/events', + 'category' => 'datamachine-events-events', 'input_schema' => array( 'type' => 'object', 'properties' => array( diff --git a/inc/Abilities/EventQueryAbilities.php b/inc/Abilities/EventQueryAbilities.php index fba9812..4703b28 100644 --- a/inc/Abilities/EventQueryAbilities.php +++ b/inc/Abilities/EventQueryAbilities.php @@ -39,7 +39,7 @@ private function registerAbility(): void { array( 'label' => __( 'Get Venue Events', 'data-machine-events' ), 'description' => __( 'Query events for a specific venue', 'data-machine-events' ), - 'category' => 'datamachine-events/events', + 'category' => 'datamachine-events-events', 'input_schema' => array( 'type' => 'object', 'required' => array( 'venue' ), diff --git a/inc/Abilities/EventScraperTest.php b/inc/Abilities/EventScraperTest.php index 9db8439..70266ee 100644 --- a/inc/Abilities/EventScraperTest.php +++ b/inc/Abilities/EventScraperTest.php @@ -28,7 +28,7 @@ public function __construct() { array( 'label' => __( 'Test Event Scraper', 'data-machine-events' ), 'description' => __( 'Test universal web scraper compatibility with a target URL', 'data-machine-events' ), - 'category' => 'datamachine-events/testing', + 'category' => 'datamachine-events-testing', 'input_schema' => array( 'type' => 'object', 'required' => array( 'target_url' ), diff --git a/inc/Abilities/EventUpdateAbilities.php b/inc/Abilities/EventUpdateAbilities.php index 2d4ec83..d454c44 100644 --- a/inc/Abilities/EventUpdateAbilities.php +++ b/inc/Abilities/EventUpdateAbilities.php @@ -62,7 +62,7 @@ private function registerAbility(): void { array( 'label' => __( 'Update Event', 'data-machine-events' ), 'description' => __( 'Update event details including dates, times, venue, and metadata', 'data-machine-events' ), - 'category' => 'datamachine-events/events', + 'category' => 'datamachine-events-events', 'input_schema' => array( 'type' => 'object', 'properties' => array( diff --git a/inc/Abilities/FilterAbilities.php b/inc/Abilities/FilterAbilities.php index 90f190a..875bc5f 100644 --- a/inc/Abilities/FilterAbilities.php +++ b/inc/Abilities/FilterAbilities.php @@ -40,7 +40,7 @@ private function registerAbilities(): void { array( 'label' => __( 'Get Filter Options', 'data-machine-events' ), 'description' => __( 'Get available taxonomy filter options with event counts, supporting geo-filtering, cross-filtering, and archive context', 'data-machine-events' ), - 'category' => 'datamachine-events/events', + 'category' => 'datamachine-events-events', 'input_schema' => array( 'type' => 'object', 'properties' => array( diff --git a/inc/Abilities/GeocodingAbilities.php b/inc/Abilities/GeocodingAbilities.php index 4671523..f25cb3a 100644 --- a/inc/Abilities/GeocodingAbilities.php +++ b/inc/Abilities/GeocodingAbilities.php @@ -72,7 +72,7 @@ private function registerGeocodeAddressAbility(): void { array( 'label' => __( 'Geocode Address', 'data-machine-events' ), 'description' => __( 'Geocode an address string to lat/lng coordinates via OpenStreetMap Nominatim. Results are cached for 30 days.', 'data-machine-events' ), - 'category' => 'datamachine-events/venues', + 'category' => 'datamachine-events-venues', 'input_schema' => array( 'type' => 'object', 'required' => array( 'query' ), @@ -160,7 +160,7 @@ private function registerGeocodeSearchAbility(): void { array( 'label' => __( 'Geocode Search', 'data-machine-events' ), 'description' => __( 'Search for addresses via Nominatim and return multiple results with full address details. Used for autocomplete UIs.', 'data-machine-events' ), - 'category' => 'datamachine-events/venues', + 'category' => 'datamachine-events-venues', 'input_schema' => array( 'type' => 'object', 'required' => array( 'query' ), @@ -271,7 +271,7 @@ private function registerGeocodeVenuesAbility(): void { array( 'label' => __( 'Geocode Venues', 'data-machine-events' ), 'description' => __( 'Batch geocode venues that have an address but are missing coordinates. Respects Nominatim rate limits.', 'data-machine-events' ), - 'category' => 'datamachine-events/venues', + 'category' => 'datamachine-events-venues', 'input_schema' => array( 'type' => 'object', 'properties' => array( @@ -453,7 +453,7 @@ private function registerAuditVenuesAbility(): void { array( 'label' => __( 'Audit Venues', 'data-machine-events' ), 'description' => __( 'Audit venue data quality: geocoding coverage, missing addresses, missing timezones. Returns a comprehensive data quality report.', 'data-machine-events' ), - 'category' => 'datamachine-events/venues', + 'category' => 'datamachine-events-venues', 'input_schema' => array( 'type' => 'object', 'properties' => array( diff --git a/inc/Abilities/MetaSyncAbilities.php b/inc/Abilities/MetaSyncAbilities.php index 28db64c..f73ae49 100644 --- a/inc/Abilities/MetaSyncAbilities.php +++ b/inc/Abilities/MetaSyncAbilities.php @@ -40,7 +40,7 @@ private function registerAbilities(): void { array( 'label' => __( 'Find Missing Meta Sync', 'data-machine-events' ), 'description' => __( 'Detect events where block has data but meta sync failed', 'data-machine-events' ), - 'category' => 'datamachine-events/events', + 'category' => 'datamachine-events-events', 'input_schema' => array( 'type' => 'object', 'properties' => array( @@ -82,7 +82,7 @@ private function registerAbilities(): void { array( 'label' => __( 'Resync Event Meta', 'data-machine-events' ), 'description' => __( 'Re-trigger meta sync for specified events', 'data-machine-events' ), - 'category' => 'datamachine-events/events', + 'category' => 'datamachine-events-events', 'input_schema' => array( 'type' => 'object', 'properties' => array( diff --git a/inc/Abilities/SettingsAbilities.php b/inc/Abilities/SettingsAbilities.php index ce803b2..d4c2895 100644 --- a/inc/Abilities/SettingsAbilities.php +++ b/inc/Abilities/SettingsAbilities.php @@ -73,7 +73,7 @@ private function registerGetSettingsAbility(): void { array( 'label' => __( 'Get Settings', 'data-machine-events' ), 'description' => __( 'Read plugin settings. Returns all settings or a specific key.', 'data-machine-events' ), - 'category' => 'datamachine-events/settings', + 'category' => 'datamachine-events-settings', 'input_schema' => array( 'type' => 'object', 'properties' => array( @@ -139,7 +139,7 @@ private function registerUpdateSettingAbility(): void { array( 'label' => __( 'Update Setting', 'data-machine-events' ), 'description' => __( 'Update a single plugin setting. Validates and sanitizes the value.', 'data-machine-events' ), - 'category' => 'datamachine-events/settings', + 'category' => 'datamachine-events-settings', 'input_schema' => array( 'type' => 'object', 'required' => array( 'key', 'value' ), diff --git a/inc/Abilities/TicketUrlResyncAbilities.php b/inc/Abilities/TicketUrlResyncAbilities.php index 2ab35f0..7c11143 100644 --- a/inc/Abilities/TicketUrlResyncAbilities.php +++ b/inc/Abilities/TicketUrlResyncAbilities.php @@ -45,7 +45,7 @@ private function registerAbility(): void { array( 'label' => __( 'Resync Ticket URLs', 'data-machine-events' ), 'description' => __( 'Re-normalize ticket URL meta from block content', 'data-machine-events' ), - 'category' => 'datamachine-events/events', + 'category' => 'datamachine-events-events', 'input_schema' => array( 'type' => 'object', 'properties' => array( diff --git a/inc/Abilities/TicketmasterTest.php b/inc/Abilities/TicketmasterTest.php index 45dd1a5..fdb742a 100644 --- a/inc/Abilities/TicketmasterTest.php +++ b/inc/Abilities/TicketmasterTest.php @@ -30,7 +30,7 @@ public function __construct() { array( 'label' => __( 'Test Ticketmaster', 'data-machine-events' ), 'description' => __( 'Test Ticketmaster API handler with raw response data', 'data-machine-events' ), - 'category' => 'datamachine-events/testing', + 'category' => 'datamachine-events-testing', 'input_schema' => array( 'type' => 'object', 'required' => array( 'classification_type' ), diff --git a/inc/Abilities/TimezoneAbilities.php b/inc/Abilities/TimezoneAbilities.php index f10f78e..5167d98 100644 --- a/inc/Abilities/TimezoneAbilities.php +++ b/inc/Abilities/TimezoneAbilities.php @@ -39,7 +39,7 @@ private function registerAbility(): void { array( 'label' => __( 'Find Events with Missing Timezone', 'data-machine-events' ), 'description' => __( 'Find events where venue has no timezone or coordinates', 'data-machine-events' ), - 'category' => 'datamachine-events/events', + 'category' => 'datamachine-events-events', 'input_schema' => array( 'type' => 'object', 'required' => array(), @@ -112,7 +112,7 @@ private function registerAbility(): void { array( 'label' => __( 'Fix Event Timezone', 'data-machine-events' ), 'description' => __( 'Update venue timezone with geocoding support. Supports batch updates with inline errors.', 'data-machine-events' ), - 'category' => 'datamachine-events/events', + 'category' => 'datamachine-events-events', 'input_schema' => array( 'type' => 'object', 'required' => array(), diff --git a/inc/Abilities/UpcomingCountAbilities.php b/inc/Abilities/UpcomingCountAbilities.php index 3b74b50..795c414 100644 --- a/inc/Abilities/UpcomingCountAbilities.php +++ b/inc/Abilities/UpcomingCountAbilities.php @@ -36,7 +36,7 @@ private function registerAbilities(): void { array( 'label' => __( 'Get Upcoming Event Counts', 'data-machine-events' ), 'description' => __( 'Count upcoming events grouped by taxonomy term. Returns terms sorted by event count descending.', 'data-machine-events' ), - 'category' => 'datamachine-events/events', + 'category' => 'datamachine-events-events', 'input_schema' => array( 'type' => 'object', 'required' => array( 'taxonomy' ), diff --git a/inc/Abilities/VenueAbilities.php b/inc/Abilities/VenueAbilities.php index 91e743f..d9f0fb5 100644 --- a/inc/Abilities/VenueAbilities.php +++ b/inc/Abilities/VenueAbilities.php @@ -81,7 +81,7 @@ private function registerHealthCheckAbility(): void { array( 'label' => __( 'Venue Health Check', 'data-machine-events' ), 'description' => __( 'Scan venues for data quality issues: missing address, coordinates, timezone, or website. Also detects suspicious websites where a ticket URL was mistakenly stored as venue website.', 'data-machine-events' ), - 'category' => 'datamachine-events/venues', + 'category' => 'datamachine-events-venues', 'input_schema' => array( 'type' => 'object', 'properties' => array( @@ -148,7 +148,7 @@ private function registerUpdateVenueAbility(): void { array( 'label' => __( 'Update Venue', 'data-machine-events' ), 'description' => __( 'Update a venue name and/or meta fields. Address changes trigger automatic geocoding.', 'data-machine-events' ), - 'category' => 'datamachine-events/venues', + 'category' => 'datamachine-events-venues', 'input_schema' => array( 'type' => 'object', 'required' => array( 'venue' ), @@ -233,7 +233,7 @@ private function registerGetVenueAbility(): void { array( 'label' => __( 'Get Venue', 'data-machine-events' ), 'description' => __( 'Get venue details by term ID', 'data-machine-events' ), - 'category' => 'datamachine-events/venues', + 'category' => 'datamachine-events-venues', 'input_schema' => array( 'type' => 'object', 'required' => array( 'id' ), @@ -279,7 +279,7 @@ private function registerCheckDuplicateAbility(): void { array( 'label' => __( 'Check Duplicate Venue', 'data-machine-events' ), 'description' => __( 'Check if a venue with the given name already exists', 'data-machine-events' ), - 'category' => 'datamachine-events/venues', + 'category' => 'datamachine-events-venues', 'input_schema' => array( 'type' => 'object', 'required' => array( 'name' ), diff --git a/inc/Abilities/VenueMapAbilities.php b/inc/Abilities/VenueMapAbilities.php index 833cf05..bd3d994 100644 --- a/inc/Abilities/VenueMapAbilities.php +++ b/inc/Abilities/VenueMapAbilities.php @@ -58,7 +58,7 @@ private function registerListVenuesAbility(): void { array( 'label' => __( 'List Venues', 'data-machine-events' ), 'description' => __( 'List venues with coordinates for map rendering. Supports geo proximity and viewport bounds filtering.', 'data-machine-events' ), - 'category' => 'datamachine-events/venues', + 'category' => 'datamachine-events-venues', 'input_schema' => array( 'type' => 'object', 'properties' => array(