Changelog
All notable changes to Data Machine Events will be documented in this file.
[0.14.1] – 2026-03-03
Fixed
- Fix user location blue dot not appearing on Near Me page initial geolocation (race condition)
[0.14.0] – 2026-03-03
Changed
- Bump to 0.14.0 — batch fan-out handler migration is a breaking change, not a patch
[0.13.4] – 2026-03-03
Added
- batch multi-return + dedup_key migration for all event handlers
- migrate event handlers from storeEventContext to _engine_data metadata
Changed
- migrate event handlers to dedup_key metadata convention
- convert all event handlers to raw array returns for batch fan-out
Fixed
- remove stale nonce from public venue/geocode API requests
- mobile map scroll trap and border-radius
- ability output validation errors for calendar and venues
- Convert all event handlers to raw array returns for batch fan-out
- Migrate event handlers to dedup_key metadata and _engine_data for batch fan-out
- Listen for external content-updated event to re-init lazy render and carousel
- Fix ability output validation errors for calendar and venues
- Fix mobile map scroll trap and border-radius
- Fix stale nonce from public venue/geocode API requests
[0.13.3] – 2026-03-01
- feat: re-init lazy render and carousel on external content-updated event for client-side scope switching
[0.13.2] – 2026-03-01
Fixed
- REST API namespace restored to
datamachine/v1— the rename incorrectly changed it todata-machine/v1in the Calendar JS API client and taxonomy filter template - Renamed CSS classes, block names, and post type from
datamachine-eventstodata-machine-eventsacross all source files
[0.13.1] – 2026-02-28
Fixed
- Multi-day event continuation display: shows "Feb 27 – Mar 1" date range instead of misleading "All Day through Mar 1"
- Removed confusing ↳ arrow pseudo-element on continuation event items
- WP_Error crash in health-check command when timezone or meta-sync abilities return errors
Added
check-durationCLI command for detecting events with abnormal date spans
[0.13.0] – 2026-02-28
Added
- Public venue REST endpoint (
GET /datamachine/v1/events/venues) for map rendering with geo proximity and bounds filtering - Events-map block rewritten as headless React/TypeScript component with Leaflet bundled via webpack
- Two map loading modes: static (server-rendered venues, zero REST calls) and dynamic (fetches on pan/zoom)
- Events-map block emits
datamachine-map-bounds-changedcustom events for inter-block communication - Unicode dash normalization in dedup — en dash, em dash, and other variants now match ASCII hyphen
- Affiliate ticket URL unwrapping for dedup comparison (affiliate links preserved in storage)
datamachine_extract_ticket_identity()anddatamachine_unwrap_affiliate_url()utility functions- Venue-agnostic fuzzy title+date matching as 4th dedup strategy
- Fuzzy venue name comparison and slug-based venue term lookup fallback in dedup
Fixed
- Multi-day events showing past days on calendar (e.g. Feb 27 entry for ongoing Feb 27-Mar 1 festival)
- Multi-day events excluded from paginated calendar pages when start date precedes page boundary
- PSR-4 autoload fatal:
inc/blocks/renamed toinc/Blocks/to match namespace casing on Linux - Cross-source duplicate detection failing on venue name mismatches and missing venue-agnostic fallback
- Duplicate events from unicode dash variants in titles (e.g.
-vs–) - Duplicate events from affiliate vs direct ticket URLs for same Ticketmaster event
Changed
- Calendar block frontend migrated from JavaScript to TypeScript
- Events-map block: vanilla JS IIFE replaced with React/TypeScript, Leaflet bundled instead of CDN
- Leaflet CDN assets only enqueued for event-details block (events-map bundles its own)
Removed
assets/js/events-map.js— replaced by React/TypeScriptfrontend.tsxPostTrackingTraitusage in EventUpsert — tracking now automatic in base handler- Dead code: unused
state.tsmodule,NominatimResulttype
[0.12.8] – 2026-02-13
Fixed
- Fix CACHE_PREFIX not available in Cache_Invalidator due to PSR-4 autoloading not loading namespace constants across files — promote to class constant on Calendar_Query
[0.12.7] – 2026-02-12
Changed
- Rewrite README for accessibility, move technical details to AGENTS.md
Fixed
- Fix CACHE_PREFIX double-definition warning in Calendar namespace
[0.12.6] – 2026-02-03
Fixed
- instruct AI to parse times from event title/description
[0.12.5] – 2026-02-03
Fixed
- Fix DuskFmExtractor timezone handling – treat times as local, not UTC
[0.12.4] – 2026-02-03
Added
- Add DuskFmExtractor for Dusk.fm/BeatGig venue calendars with embedded script detection
Changed
- Internal improvements
Fixed
- Fix timezone field not displaying in scraper test output
[0.12.3] – 2026-02-03
Fixed
- Fix 11:59 PM sentinel end time leaking into calendar display
[0.12.2] – 2026-01-31
Changed
- Sync block versions to 0.12.1
[0.12.1] – 2026-01-31
Fixed
- Fix carousel viewport class using CSS media query instead of timing-sensitive measurements
[0.12.0] – 2026-01-30
Added
- Add VisionExtractor as final fallback for Universal Web Scraper
- Add ImageCandidateFinder for scoring potential event flyer images
- Add VisionExtractionProcessor for AI vision API integration
- Support multi-event flyers in vision extraction
- Add SquareOnlineExtractor for Square Online sites (*.square.site) – parses BOOTSTRAP_STATE JSON to find embedded images for vision extraction
Changed
- Refactor VisionExtractionProcessor to align with Data Machine architecture – removes direct AI API calls, stores image to persistent storage, delegates AI processing to pipeline AI step
[0.11.5] – 2026-01-29
Changed
- Replace error_log calls with centralized Monolog integration
Fixed
- Fix RHP Events extractor time parsing for The Grey Eagle
[0.11.4] – 2026-01-28
Added
- Add CLI test commands for Ticketmaster and Dice FM handlers
Changed
- Remove dead show* attributes, always fire price hook
[0.11.3] – 2026-01-28
Changed
- Add meta sync detection and repair via Abilities API
[0.11.2] – 2026-01-28
Changed
- Refactor UniversalWebScraper pagination into dedicated classes
Fixed
- Fix undefined CACHE_PREFIX constant in Cache_Invalidator
[0.11.1] – 2026-01-27
Changed
- Add JSON API pagination for WordPress REST event endpoints
Fixed
- Fix lazy-loaded button classes not respecting filter hook
[0.11.0] – 2026-01-27
Added
- Calendar block transient caching for event queries with automatic invalidation on event/taxonomy changes
- Lazy rendering for horizontal scroll carousels – renders first 5 events, hydrates rest via IntersectionObserver
- Skeleton shimmer animation for placeholder event cards during lazy load
[0.10.19] – 2026-01-27
Changed
- Revert date filter to text input (reverts de37727)
[0.10.18] – 2026-01-27
Changed
- Replace date range text input with calendar icon button
[0.10.17] – 2026-01-27
Changed
- Consolidate
test-scraperandtest-scraper-urlCLI commands into singletest-event-scrapercommand
[0.10.16] – 2026-01-27
- Add ticketUrl field to scraper test ability and CLI output
[0.10.15] – 2026-01-27
- Fix JSON-LD extractor missing ticket URL from Eventbrite and other sources that store URL at event level
[0.10.14] – 2026-01-27
Fixed
- Fix double-cleaning bug in Universal Web Scraper
[0.10.13] – 2026-01-27
Changed
- Migrate chat tools to BaseTool architecture
[0.10.12] – 2026-01-27
Fixed
- fix scraper test CLI to show errors before exit
[0.10.11] – 2026-01-26
Fixed
- Fix ticket URL normalization to preserve affiliate identity params
[0.10.10] – 2026-01-26
Changed
- Integrate with unified system health check ability
- Add UTF-8 encoding fix and health check detection
- Update required WordPress version to 6.9 for Abilities API support
[0.10.9] – 2026-01-26
Changed
- Add centralized PriceFormatter utility and improve AI price guidance
- Display occurrence dates in Event Details block
Fixed
- Fix lint alignment and Yoda conditions
[0.10.8] – 2026-01-26
Fixed
- Recurring event occurrence filtering now excludes past dates when show_past is false
[0.10.7] – 2026-01-25
- Style tweak in event details block frontend CSS
[0.10.6] – 2026-01-25
- Fixed hook placement for data_machine_events_after_price_display to render inside .event-price div
[0.10.5] – 2026-01-25
Changed
- Add defensive registration pattern to all Abilities for late-loading compatibility
[0.10.4] – 2026-01-25
Added
- Action hook after price display for extensibility (data_machine_events_after_price_display)
[0.10.3] – 2026-01-24
Fixed
- Fix ICS date-only events to leave time fields empty for agent parsing
[0.10.2] – 2026-01-24
Added
- Test coverage for EventIdentifierGenerator with title matching scenarios
Fixed
- Duplicate event detection now uses rightmost delimiter for title extraction, fixing false negatives when titles contain multiple delimiters
[0.10.1] – 2026-01-21
- Refactor calendar system to Abilities API: consolidate duplicated logic from render.php and REST controller into CalendarAbilities, migrate frontend from AJAX to URL navigation
[0.10.0] – 2026-01-21
- Add occurrenceDates attribute for recurring events with specific display dates
- Add occurrenceDates support in AI tools (EventSchemaProvider, EventUpsert, EventUpdateAbilities)
- Add occurrenceDates to UpdateEvent CLI command
- Fix calendar pagination to filter occurrence dates to page boundaries
[0.9.18] – 2026-01-21
- Calendar query improvements and Craftpeak extractor updates
[0.9.17] – 2026-01-19
Added
- Squarespace User Items List support in SquarespaceExtractor for sites using custom list blocks instead of native Events collection
- Centralized time parsing methods in BaseExtractor:
parseTimeString()andextractTimeFromText()
Changed
- Consolidated duplicate time parsing logic from BandzoogleExtractor, CraftpeakExtractor, TimelyExtractor, and SquarespaceExtractor into shared BaseExtractor methods
[0.9.16] – 2026-01-19
- Fixed: ICS feed timezone parsing – events now display in correct local time instead of being offset by timezone difference
- Added: BatchTimeFixAbilities for batch correction of events with systematic timezone issues
[0.9.15] – 2026-01-19
Changed
- Refactor EventHealthCheck and UpdateEvent to Abilities pattern – CLI and chat tools now share business logic via EventHealthAbilities and EventUpdateAbilities
[0.9.14] – 2026-01-19
Added
- GetVenueEvents WP-CLI command wrapping EventQueryAbilities
- EventQueryAbilities for venue event queries with filtering
Fixed
- Code style and escape-i18n fixes across 91 files
[0.9.13] – 2026-01-19
- Fixed ICS parser dependency missing from production builds
[0.9.12] – 2026-01-18
Removed
- Removed deprecated ICS Calendar, Eventbrite, and DoStuff Media API handlers
- Removed migrate-handlers CLI command after completing all handler migrations
[0.9.11] – 2026-01-18
Fixed
- Fixed migrate-handlers command to use FlowAbilities API and correct database structure
[0.9.9] – 2026-01-18
- Added: next_day_cutoff setting for multi-day event detection
- Added: TimezoneAbilities system with find/fix event timezone tools
- Merged: ICS Calendar handler into Universal Web Scraper
- Merged: DoStuff Media API into Universal Web Scraper
- Deprecated: Eventbrite handler (migrates to Universal Web Scraper via JsonLdExtractor)
- Fixed: migrateDoStuffMediaApi method call in MigrateHandlersCommand
[0.9.8] – 2026-01-17
Added
- ICS Calendar Migration to Universal Web Scraper
- WP-CLI Migration Tool for Handler Deprecation
- DoStuff Media API Extractor
Created DoStuffExtractor to parse DoStuff Media JSON feeds (Waterloo Records, Do512, etc.). Extracts complete event data including venue coordinates, pricing, artist information, and image URLs. Handles event_groups structure and normalizes all fields to standard event format.
Created MigrateHandlersCommand WP-CLI tool to migrate flows from deprecated handlers to their replacements. Supports ICS Calendar to Universal Web Scraper migration with dry-run mode for safe testing and automatic configuration field mapping.
Created IcsExtractor to parse raw ICS feed content, supporting Tockify, Google Calendar, Apple Calendar, and any standard ICS/iCal feed. Extractor handles timezone detection and venue data extraction from ICS location fields.
Changed
- Universal Web Scraper Documentation Updates
- Repository Documentation Alignment
- MigrateHandlersCommand Expansion
- MigrateHandlersCommand Eventbrite Support
Expanded migration command to support Eventbrite handler migrations. Added migrateEventbrite() method with 1:1 configuration field mapping from organizer_url to source_url.
Expanded migration command to support DoStuff Media API handler migrations. Added migrateDoStuffMediaApi() method with 1:1 configuration field mapping from feed_url to source_url.
Updated universal-web-scraper-test-command.md with ICS feed support documentation. Added ICS Calendar Feed Support section with examples for Tockify, Google Calendar exports, and migration command usage.
Deprecated
- ICS Calendar Handler Deprecation
- DoStuff Media API Handler Deprecation
- Eventbrite Handler Deprecation
- Add TimezoneAbilities system with find_broken_timezone_events and fix_event_timezone abilities. EventsHealthCheck now uses abilities as primitives for timezone checking.
Added deprecation notices to Eventbrite handler and settings classes. Existing flows using Eventbrite continue to work but should migrate to Universal Web Scraper using MigrateHandlersCommand. Note: Eventbrite is already handled by JsonLdExtractor in Universal Web Scraper – no new extractor code needed.
Added deprecation notices to DoStuffMediaApi handler and settings classes. Existing flows using DoStuff Media API continue to work but should migrate to Universal Web Scraper using MigrateHandlersCommand.
Added deprecation notices to IcsCalendar handler and settings classes. Existing flows using ICS Calendar continue to work but should migrate to Universal Web Scraper using MigrateHandlersCommand.
[0.9.7] – 2026-01-16
- Add
next_day_cutoffsetting for multi-day event detection – events ending before this time (default 5:00 AM) on the following day are treated as single-day events. - Add Calendar Display Settings section to admin settings page.
- Add
data-machine-events settingsWP-CLI command for managing plugin settings.
[0.9.6] – 2026-01-15
- Add
late_night_timeandsuspicious_end_timehealth check categories toevent_health_checktool.
[0.9.5] – 2026-01-15
- Calendar groups multi-day events across their full date range.
- Calendar UI adds multi-day labels and continuation styling.
- Event import stores core fields in engine data to prevent AI overrides.
- Venue address formatting reuses preloaded venue data.
- Remove Status_Detection admin file.
- Rename AGENTS.md to CLAUDE.md.
[0.9.4] – 2026-01-15
- Add published_before/published_after filters to GetVenueEvents tool.
- Improve venue health checks with website detection.
Fixed
- Event Details Block Description – Fixed InnerBlocks content being stripped when saving
- Changed
save()function from returningnullto returning<InnerBlocks.Content />wrapped in block props - Description content with formatting (line breaks, headings, lists, etc.) now persists correctly through save/edit cycles
- Expanded allowed blocks to include: paragraph, heading, image, list, quote, gallery, video, audio, embed, separator, spacer, columns, column, group, freeform, and html blocks
- Changed
Added
- Changed
save()function from returningnullto returning<InnerBlocks.Content />wrapped in block props - Description content with formatting (line breaks, headings, lists, etc.) now persists correctly through save/edit cycles
- Expanded allowed blocks to include: paragraph, heading, image, list, quote, gallery, video, audio, embed, separator, spacer, columns, column, group, freeform, and html blocks
[0.9.3] – 2026-01-08
Added
- Changed
save()function from returningnullto returning<InnerBlocks.Content />wrapped in block props - Description content with formatting (line breaks, headings, lists, etc.) now persists correctly through save/edit cycles
- Expanded allowed blocks to include: paragraph, heading, image, list, quote, gallery, video, audio, embed, separator, spacer, columns, column, group, freeform, and html blocks
[0.9.2] – 2026-01-08
Fixed
- Documentation Alignment – Comprehensive documentation updates for v0.3.5
- Added Google Calendar integration documentation with calendar ID/URL utilities
- Added ColorManager system documentation with CSS custom properties integration
- Added EventIdentifierGenerator utility documentation with normalization examples
- Updated file structure documentation to reflect current architecture
[0.9.1] – 2026-01-08
Fixed
- Added Google Calendar integration documentation with calendar ID/URL utilities
- Added ColorManager system documentation with CSS custom properties integration
- Added EventIdentifierGenerator utility documentation with normalization examples
- Updated file structure documentation to reflect current architecture
[0.9.0] – 2026-01-08
Changed
- Added Google Calendar integration documentation with calendar ID/URL utilities
- Added ColorManager system documentation with CSS custom properties integration
- Added EventIdentifierGenerator utility documentation with normalization examples
- Updated file structure documentation to reflect current architecture
[0.8.42] – 2026-01-07
Changed
- Venue Health Check Website Detection: Enhanced
VenueHealthCheckAI tool to detect data quality issues related to venue websites.- Added detection for missing venue websites.
- Implemented suspicious website detection that flags ticket platform URLs (Eventbrite, Ticketmaster, Dice, etc.) or event-specific paths (
/event/,/tickets/) mistakenly stored in the venue website field. - Added sorting for missing and suspicious website categories by event count.
- Updated tool metadata and response messages to surface these new health indicators to the AI.
[0.8.41] – 2026-01-07
Added
- Added detection for missing venue websites.
- Implemented suspicious website detection that flags ticket platform URLs (Eventbrite, Ticketmaster, Dice, etc.) or event-specific paths (
/event/,/tickets/) mistakenly stored in the venue website field. - Added sorting for missing and suspicious website categories by event count.
- Updated tool metadata and response messages to surface these new health indicators to the AI.
Changed
- Added detection for missing venue websites.
- Implemented suspicious website detection that flags ticket platform URLs (Eventbrite, Ticketmaster, Dice, etc.) or event-specific paths (
/event/,/tickets/) mistakenly stored in the venue website field. - Added sorting for missing and suspicious website categories by event count.
- Updated tool metadata and response messages to surface these new health indicators to the AI.
[0.8.40] – 2026-01-07
Changed
- Universal Web Scraper HTML Fallback Logging: Updated
DataMachineEventsStepsEventImportHandlersWebScraperUniversalWebScraper::extract_raw_html_section()to log viaExecutionContext(and updated the call site), keeping scraper diagnostics consistent during AI HTML fallback extraction.
[0.8.39] – 2026-01-07
Added
- Nullable Job Id Handling: Updated
DataMachineEventsStepsEventImportEventEngineData::storeVenueContext()to accept a nullable$job_id(?string) so handler callers can pass null without triggering a PHP type error; value is still cast to int and ignored when invalid.
Changed
- ExecutionContext Handler Refactor: Updated Event Import handlers (
DiceFm,DoStuffMediaApi,Eventbrite,EventFlyer,IcsCalendar,SingleRecurring,Ticketmaster) and the Universal Web Scraper (UniversalWebScraper,StructuredDataProcessor,EventSectionFinder) to useExecutionContextfor logging, processed item tracking, flow/pipeline ids, and engine data storage. - Engine Data Storage: Replaced direct
datamachine_merge_engine_data()calls withExecutionContext::storeEngineData()in the Ticketmaster handler and structured scraper pipeline. - WP-CLI Scraper Flow Id: Updated
CliUniversalWebScraperTestCommandto use'direct'flow id when callingget_fetch_data().
[0.8.38] – 2026-01-06
Changed
- WP-CLI Scraper Test Command Simplification: Updated
Cli\UniversalWebScraperTestCommandto run without job creation or upsert options, generating acli_test_*flow step id internally and focusing output on a single packet’s extraction metadata, event payload shape (structured vsraw_html), venue/address coverage warnings, and captureddatamachine_logwarnings.
[0.8.37] – 2026-01-06
Added
- Craftpeak/Arryved Extractor: Added
Steps\EventImport\Handlers\WebScraper\Extractors\CraftpeakExtractorto extract events from Craftpeak/Arryved "Label" theme sites by parsing/event/{slug}-{YYYY-MM-DD}/style listings and normalizing title/date/time/image + page-level venue fields.
Changed
- Universal Web Scraper Priority: Updated
UniversalWebScraperextractor priority to include the Craftpeak/Arryved extractor in the structured extraction pipeline. - WP-CLI Scraper Diagnostics: Enhanced
Cli\UniversalWebScraperTestCommandoutput to report venue/address field coverage (structured vs HTML fallback) and surface warnings when venue metadata is incomplete.
[0.8.36] – 2026-01-06
Changed
- Remove Ticket URL Migration Notice: Removed
DataMachineEvents\Admin\TicketUrlMigrationand its instantiation fromDATAMACHINE_Events::init()now that the one-time backfill flow is no longer needed. - Schema Tool Guidance for Titles: Updated the AI schema tool parameter description for
Core\EventSchemaProvidertitleto emphasize usingoriginal_titlewhen it is clear, and to rewrite when the scraped title is low quality (ALL CAPS, emojis, dates, formatting). - Free Show Price Detection: Expanded Event Details price CTA logic to treat "no cover" as a non-ticket price alongside "free" and "tbd".
- Build Output Directory: Updated
build.shto output the packaged plugin intobuild/instead ofdist/.
[0.8.35] – 2026-01-06
Added
- Ticket URL Indexing Migration: Added
DataMachineEventsAdminTicketUrlMigration, a one-time admin-triggered migration that backfills_datamachine_ticket_urlpost meta fromdata-machine-events/event-detailsblockticketUrlattributes for existing events.
[0.8.34] – 2026-01-05
Changed
- Ticket URL Meta Sync: Event Details block saves now sync a normalized ticket URL into
_datamachine_ticket_url(query params stripped; trailing slash trimmed) for consistent lookups. - Duplicate Detection via Ticket URLs:
StepsUpsertEventsEventUpsert::findExistingEvent()now checks for existing events by normalized ticket URL + date before falling back to fuzzy/exact title matching.
[0.8.33] – 2026-01-05
Added
- Music Item Extractor Targeting: Updated
MusicItemExtractorto use a strict class token match formusic__itemelements (prevents false positives wheremusic__itemis a substring of another class).
[0.8.32] – 2026-01-05
Added
- Music Item Extractor: Added
MusicItemExtractorto the Universal Web Scraper to extract events from.music__item/.music__artistHTML patterns.
Changed
- Update Event Description Storage: Updated the
UpdateEventAI chat tool to writedescriptionupdates intocore/paragraphInnerBlocks inside thedata-machine-events/event-detailsblock (instead of treating description as a block attribute). - Event Health Check Description Detection: Updated the
EventHealthCheckAI chat tool to derive the event description from the Event Details block InnerBlocks (paragraph content) rather than a non-existentdescriptionattribute. - Venue Address Parsing: Enhanced
PageVenueExtractor::extractStreetAddress()to better detect real street addresses (supports610-A/123Bpatterns and tighter fallback matching) while reducing false positives. - Universal Web Scraper Pipeline: Added
MusicItemExtractorto the extraction priority list.
[0.8.31] – 2026-01-05
Added
- Calendar Pagination Boundaries: Updated calendar pagination so page boundaries respect both minimum day count and minimum event count.
Calendar_Query::get_unique_event_dates()now returnsevents_per_dateand counts events perY-m-ddate while building the unique date list.Calendar_Query::get_date_boundaries_for_page()now acceptsevents_per_dateand constructs variable-length pages that include at leastDAYS_PER_PAGE(5) dates and at leastMIN_EVENTS_FOR_PAGINATION(20) events, without splitting a date across pages.- The REST calendar controller (
inc/Api/Controllers/Calendar.php) and calendar block renderer (inc/blocks/calendar/render.php) now passevents_per_dateintoget_date_boundaries_for_page().
Changed
Calendar_Query::get_unique_event_dates()now returnsevents_per_dateand counts events perY-m-ddate while building the unique date list.Calendar_Query::get_date_boundaries_for_page()now acceptsevents_per_dateand constructs variable-length pages that include at leastDAYS_PER_PAGE(5) dates and at leastMIN_EVENTS_FOR_PAGINATION(20) events, without splitting a date across pages.- The REST calendar controller (
inc/Api/Controllers/Calendar.php) and calendar block renderer (inc/blocks/calendar/render.php) now passevents_per_dateintoget_date_boundaries_for_page().
Fixed
Calendar_Query::get_unique_event_dates()now returnsevents_per_dateand counts events perY-m-ddate while building the unique date list.Calendar_Query::get_date_boundaries_for_page()now acceptsevents_per_dateand constructs variable-length pages that include at leastDAYS_PER_PAGE(5) dates and at leastMIN_EVENTS_FOR_PAGINATION(20) events, without splitting a date across pages.- The REST calendar controller (
inc/Api/Controllers/Calendar.php) and calendar block renderer (inc/blocks/calendar/render.php) now passevents_per_dateintoget_date_boundaries_for_page().
[0.8.30] – 2026-01-05
Added
- Skip Tool Item Context: Added
EventEngineData::storeItemContext()and invoked it fromEventImportHandler::markItemProcessed()so Data Machine’sskip_itemtool can mark AI-skipped items as processed and prevent refetching on subsequent runs.
Fixed
- ICS Calendar Sorting: Updated
IcsCalendarhandler to explicitly sort events chronologically usingsortEventsWithOrderwithSORT_ASCto ensure consistent data processing order. - WordPress Extractor Refinement: Enhanced
WordPressExtractorto more accurately detect Tribe Events content.- Implemented stricter regex matching for Tribe-specific container classes and IDs on content elements (div, section, article, main).
- Added a
SKIP_DOMAINSblacklist to prevent extraction from domains with non-functional or broken Tribe installations (e.g.,resoundpresents.com). - Refined fallback endpoint construction to only trigger when actual Tribe container elements are present.
[0.8.29] – 2026-01-05
Added
- Implemented stricter regex matching for Tribe-specific container classes and IDs on content elements (div, section, article, main).
- Added a
SKIP_DOMAINSblacklist to prevent extraction from domains with non-functional or broken Tribe installations (e.g.,resoundpresents.com). - Refined fallback endpoint construction to only trigger when actual Tribe container elements are present.
[0.8.28] – 2026-01-05
Added
- Implemented stricter regex matching for Tribe-specific container classes and IDs on content elements (div, section, article, main).
- Added a
SKIP_DOMAINSblacklist to prevent extraction from domains with non-functional or broken Tribe installations (e.g.,resoundpresents.com). - Refined fallback endpoint construction to only trigger when actual Tribe container elements are present.
Fixed
- AI Chat Tools for Events: Added
EventHealthCheckandUpdateEventtools to the AI framework.EventHealthCheck: Scans events for data quality issues like missing times, suspicious midnight starts, late night start (midnight-4am), suspicious 11:59pm end time, missing venues, or missing descriptions.UpdateEvent: Allows AI-driven updates to event block attributes (dates, times, descriptions, ticket URLs) and venue assignments with flexible date parsing.
[0.8.27] – 2026-01-05
Added
EventHealthCheck: Scans events for data quality issues like missing times, suspicious midnight starts, late night start (midnight-4am), suspicious 11:59pm end time, missing venues, or missing descriptions.UpdateEvent: Allows AI-driven updates to event block attributes (dates, times, descriptions, ticket URLs) and venue assignments with flexible date parsing.
Changed
EventHealthCheck: Scans events for data quality issues like missing times, suspicious midnight starts, late night start (midnight-4am), suspicious 11:59pm end time, missing venues, or missing descriptions.UpdateEvent: Allows AI-driven updates to event block attributes (dates, times, descriptions, ticket URLs) and venue assignments with flexible date parsing.
[0.8.26] – 2026-01-04
Added
- Gigwell Extractor: New specialized extractor for venues using the Gigwell booking platform (
<gigwell-gigstream>). Fetches high-fidelity event data including artist details, local timezones, and ticket links via Gigwell’s public API. - Improved HTML Fallback: Added XPath support for
articleelements containingtimetags, improving event detection for sites using Bricks builder and other modern CSS-in-JS frameworks.
Changed
- WordPress Extractor Optimization: Refined
WordPressExtractorto target Tribe Events specific indicators (tribe-events) only, preventing false positives on generic WordPress sites. - Universal Web Scraper Expansion: Reordered extractor priority to include Gigwell and updated documentation to reflect 20 distinct extraction layers.
[0.8.25] – 2026-01-05
Added
- Time Range Display: Enhanced Calendar block and event items to display full time ranges (e.g., "7:00 PM – 10:00 PM") instead of just start times. Includes smart formatting to omit redundant AM/PM markers when periods match.
- Dynamic Ticket Button: Event Details block now automatically changes CTA text from "Get Tickets" to "Event Link" for free or TBD priced events.
- Venue Timezone Propagation: Integrated
venueTimezoneintoEventEngineDatato ensure timezone data flows through the Data Machine pipeline to EventUpsert. - Venue Description Support: Added
descriptionfield toUpdateVenueAI tool, allowing AI to update venue descriptions via REST API.
Changed
- Venue Management Cleanup: Removed legacy Timezone Backfill UI and REST endpoints. Timezone detection is now fully automated via GeoNames during venue creation/update or provided by import handlers.
- Improved Venue Logic: Enhanced
Venue_Taxonomyto automatically trigger timezone derivation when coordinates are added to an existing venue without them. - Sanitization Enhancements: Added comprehensive query parameter sanitization to Calendar block navigation.
[0.8.24] – 2026-01-04
Added
- Venue Update AI Tool: Standardized term update logic to use
wp_update_termcorrectly for both name and description. - Coordinate Stale Data: Explicitly clearing coordinates when address fields change to ensure re-geocoding uses fresh data.
[0.8.23] – 2026-01-04
Fixed
- Get Venue Events AI Tool: New tool to retrieve events for a specific venue, aiding in term investigation and data management.
Changed
- Venue Update AI Tool: Added check for empty strings in meta field updates to prevent accidental clearing of data when non-null but empty values are passed.
[0.8.22] – 2026-01-04
Added
- Venue Health Check AI Tool: Implemented automatic sorting of problematic venues by event count descending, prioritizing venues with the most events for data quality fixes.
Changed
- Venue Geocoding Optimization: Added automatic coordinate clearing when address fields change, ensuring stale coordinates are removed before re-geocoding.
Fixed
- Venue Update AI Tool: Refined meta data update logic to preserve empty strings when intentionally passed, while still filtering null values.
- Address Change Detection: Improved venue update logic to explicitly detect changes in any address component (address, city, state, zip, country) before triggering geocoding.
[0.8.21] – 2026-01-04
Added
- BaseExtractor: New abstract class to standardize Web Scraper Extractors
- Centralizes date/time parsing, timezone handling, and HTML cleaning
- Provides consistent sanitization and image resolution helpers
- Implemented by all specialized extractors (18+ handlers)
- Universal Web Scraper Test Command: WP-CLI command to test extraction against a target URL
- Registers
data-machine-events scrape-testinvokable - Supports
--upsertflag to validate end-to-end venue/event creation
- Registers
- Venue Admin Enhancements:
- Added address autocomplete to venue term creation/edit screens
- Integrated geocoding trigger on address updates in admin UI
- Added event count column to Venue Health Check AI tool
Changed
- Centralizes date/time parsing, timezone handling, and HTML cleaning
- Provides consistent sanitization and image resolution helpers
- Implemented by all specialized extractors (18+ handlers)
[0.8.20] – 2026-01-04
Added
- Registers
data-machine-events scrape-testinvokable - Supports
--upsertflag to validate end-to-end venue/event creation
Changed
- Added address autocomplete to venue term creation/edit screens
- Integrated geocoding trigger on address updates in admin UI
- Added event count column to Venue Health Check AI tool
[0.8.19] – 2026-01-04
Added
- Centralizes date/time parsing, timezone handling, and HTML cleaning
- Provides consistent sanitization and image resolution helpers
- Implemented by all specialized extractors (18+ handlers)
Changed
- Registers
data-machine-events scrape-testinvokable - Supports
--upsertflag to validate end-to-end venue/event creation
[0.8.18] – 2026-01-04
Added
- Added address autocomplete to venue term creation/edit screens
- Integrated geocoding trigger on address updates in admin UI
- Added event count column to Venue Health Check AI tool
Changed
- Calendar Pagination: Added
MIN_EVENTS_FOR_PAGINATION(20) threshold- Bypasses multi-page navigation when event count is low
- Simplifies view for users with small event sets
- Past Events Navigation: Fixed "Upcoming Events" button URL to correctly remove
pastquery parameter - Past Events Logic: Improved date range handling for past events queries (swaps start/end boundaries for correct WP_Query range)
- Squarespace Extractor: Enhanced collection discovery and location object parsing
- Results Counter: Updated to show relative progress (e.g., "Viewing 1-5 of 120 Events")
[0.8.17] – 2026-01-04
Changed
- Bypasses multi-page navigation when event count is low
- Simplifies view for users with small event sets
[0.8.16] – 2026-01-04
Added
- Bypasses multi-page navigation when event count is low
- Simplifies view for users with small event sets
Changed
- Elfsight Events Extractor: New specialized extractor for Universal Web Scraper
- Detects Elfsight Events Calendar widgets via
elfsight-sapp-{uuid}class pattern - Fetches structured event data from Elfsight API (shy.elfsight.com)
- Handles JSONP response parsing and widget settings extraction
- Normalizes events with complete venue, date/time, image, and ticket URL data
- Supports Shopify domain extraction for widget context
- Resolves location data from event metadata with timezone handling
- Extracted 233 lines to
ElfsightEventsExtractor.php
- Detects Elfsight Events Calendar widgets via
Technical Details
- Detects Elfsight Events Calendar widgets via
elfsight-sapp-{uuid}class pattern - Fetches structured event data from Elfsight API (shy.elfsight.com)
- Handles JSONP response parsing and widget settings extraction
- Normalizes events with complete venue, date/time, image, and ticket URL data
- Supports Shopify domain extraction for widget context
- Resolves location data from event metadata with timezone handling
- Extracted 233 lines to
ElfsightEventsExtractor.php
[0.8.15] – 2026-01-04
Changed
- Detects Elfsight Events Calendar widgets via
elfsight-sapp-{uuid}class pattern - Fetches structured event data from Elfsight API (shy.elfsight.com)
- Handles JSONP response parsing and widget settings extraction
- Normalizes events with complete venue, date/time, image, and ticket URL data
- Supports Shopify domain extraction for widget context
- Resolves location data from event metadata with timezone handling
- Extracted 233 lines to
ElfsightEventsExtractor.php
[0.8.14] – 2026-01-04
Added
- UniversalWebScraper: Added ElfsightEventsExtractor to extraction pipeline at priority 11 (before JSON-LD extractors)
- Extraction Documentation: Updated priority list to include Elfsight Events Calendar API support
Changed
- AI Chat Tools: New venue management tools for Data Machine’s AI framework (
inc/Api/Chat/Tools/):VenueHealthCheck: Scans all venues for data quality issues (missing address, coordinates, timezone) and returns detailed counts and lists. Optionallimitparameter controls results per category (default: 25).UpdateVenue: Updates venue name and/or meta fields (address, city, state, zip, country, phone, website, capacity, coordinates, timezone). Accepts venue identifier (term ID, name, or slug) and any combination of fields. Address changes trigger automatic geocoding.
- Tool Self-Registration: Both tools use
ToolRegistrationTraitfor automatic registration with the Data Machine AI chat system.
Technical Details
VenueHealthCheck: Scans all venues for data quality issues (missing address, coordinates, timezone) and returns detailed counts and lists. Optionallimitparameter controls results per category (default: 25).UpdateVenue: Updates venue name and/or meta fields (address, city, state, zip, country, phone, website, capacity, coordinates, timezone). Accepts venue identifier (term ID, name, or slug) and any combination of fields. Address changes trigger automatic geocoding.
[0.7.4] – 2025-12-24
Fixed
VenueHealthCheck: Scans all venues for data quality issues (missing address, coordinates, timezone) and returns detailed counts and lists. Optionallimitparameter controls results per category (default: 25).UpdateVenue: Updates venue name and/or meta fields (address, city, state, zip, country, phone, website, capacity, coordinates, timezone). Accepts venue identifier (term ID, name, or slug) and any combination of fields. Address changes trigger automatic geocoding.
[0.7.3] – 2025-12-24
Fixed
- Plugin Bootstrap:
load_data_machine_components()now instantiates Chat tools for AI-driven venue management capabilities.
[0.7.2] – 2025-12-23
Added
- Smart Fallback Mechanism: Implemented automatic retry with standard headers in
UniversalWebScraperwhen browser-mode requests encounter 403 errors or captcha challenges (SiteGround/Cloudflare). - Advanced Browser Spoofing: Updated
HttpClientwith comprehensive browser headers (Sec-Fetch, Accept-Language, etc.) and support for HTTP 202 (Accepted) success codes. - Embedded Calendar Enhancements: Added detection and decoding of Base64-encoded Google Calendar IDs in
EmbeddedCalendarExtractor. - Squarespace Scraper Improvements: Enhanced
SquarespaceExtractorto search for events in "Summary Blocks" and hidden template data when main collections are empty. - Improved Venue Extraction: Enhanced
PageVenueExtractorto handle non-standard US address strings and Squarespace map widgets more effectively. - Sahara Lounge Support: Added
brownbearsw.comas a reliable source for Sahara Lounge events when the main domain is blocked.
Technical Details
- Google Calendar Detection: Expanded embedded calendar detection pattern to match
google.com/calendar/embedwithout requiringcalendar.subdomain, improving flexibility for various Google Calendar embed implementations. - HTTP Client Configuration: Added
browser_mode => trueto Google Calendar ICS fetch requests to improve compatibility with sites requiring browser-like behavior.
[0.7.1] – 2025-12-22
Added
- EventUpsert Settings: Excluded
categoryandpost_tagtaxonomies from EventUpsert configuration to prevent invalid taxonomy assignments during event import and upsert operations.
Changed
- New Scraper Selectors: Added XPath patterns for Brown Bear (Sahara Lounge) and Drupal Views/Node event listings in
EventSectionSelectors. - Squarespace Map Block Extraction: Integrated
extractFromSquarespaceMapBlockintoPageVenueExtractorfor high-reliability venue data parsing from map widgets.
Technical Details
- UniversalWebScraper Fetch Configuration: Switched
fetch_htmlto usebrowser_mode => trueby default to improve compatibility with JavaScript-rendered sites. - Improved Address Parsing: Enhanced
extractCityStateZipregex to handle comma-separated city/state/zip formats and added stricter US state/zip validation. - CLI Command Enhancement: Updated
UniversalWebScraperTestCommandto output the full raw HTML content when extraction fails, aiding in scraper debugging.
[0.7.0] – 2025-12-21
Added
- Scraper Title Detection: Added
EventLinkclass pattern to title extraction logic for improved link identification.
Technical Details
- Enhanced Page Venue Extraction: Added multi-layered JSON-LD support to
PageVenueExtractorfor high-fidelity venue metadata parsing from site headers and footers. - Venue Entity Discovery: Improved identification of
MusicVenue,EntertainmentBusiness, andNightClubschema types in structured data. - RhpEvents Enhancement: Integrated page-level venue data merging into the
RhpEventsExtractorto fill missing address fields in event listings.
[0.6.5] – 2025-12-20
Fixed
- Extraction Priority: Refined
PageVenueExtractorto prioritize JSON-LD structured data over page title parsing and footer scanning. - Address Detection: Improved robust address detection with expanded support for Squarespace announcement bars and site-wide footers.
Added
- WordPress API Discovery: Added
attemptWordPressApiDiscoverytoUniversalWebScraperto automatically find event API endpoints when the main URL fetch fails. - Direct Structured Data Support: Added direct support for
.icsand WordPress Tribe Events API URLs in the Universal Web Scraper, bypassing HTML parsing when a direct data feed is provided.
Changed
- Scraper User Agent: Standardized the scraper’s User-Agent string to include the Data Machine version and site URL for better transparency.
- Scraper HTTP Configuration: Optimized
UniversalWebScraperHTTP requests to use non-browser mode for faster direct data fetching while maintaining compatibility.
[0.6.4] – 2025-12-19
Added
- Squarespace Extractor Enhancement: Added JSON API support and HTML list view fallback parsing for better reliability on Squarespace sites.
- Page Venue Extractor Improvements: Enhanced with specific Squarespace site title extraction and robust address detection.
- Universal Web Scraper Documentation: Added
docs/universal-web-scraper-test-command.mddocumenting WP-CLI test commands.
Changed
- Venue Detection: Refined venue name extraction from page titles with expanded filter keywords and better separator support.
- Address Extraction: Improved extraction logic to handle Squarespace announcement bars and specific footer sections.
[0.6.3] – 2025-12-17
Changed
- Embedded Calendar Extractor: New extractor for Universal Web Scraper to detect and parse events from embedded calendar widgets (Tockify, etc.).
- Timely Extractor: Specialized extractor for Time.ly All-in-One Event Calendar platform.
- Page Venue Extractor: Enhanced venue metadata extraction for Universal Web Scraper that parses parent page context for venue details when event listings are sparse.
Technical Details
- Handler Consolidation: Removed standalone
GoogleCalendarandWordPressEventsAPIhandlers. Their logic is now consolidated into theUniversalWebScrapervia specialized extractors (EmbeddedCalendarExtractorandWordPressExtractor). - Web Scraper Optimization: Reorganized extractor priority for better detection accuracy and reduced external HTTP requests.
- CLI Improvements: Enhanced
UniversalWebScraperTestCommandwith improved venue ZIP code handling and display formatting.
[0.6.3] – 2025-12-17
Added
- GoDaddy Extractor Enhancement: Added REST API detection to the
GoDaddyExtractorin the Universal Web Scraper. This prevents the extractor from incorrectly identifying standard WordPress REST API endpoints (like those from The Events Calendar) as GoDaddy-specific JSON feeds. - Improved JSON Validation: Added stricter array checks for JSON responses in the
GoDaddyExtractorto handle malformed or unexpected data gracefully.
[0.6.2] – 2025-12-17
Changed
- GeoNames Integration: Added automatic venue timezone detection based on coordinates using the GeoNames API.
- Timezone Backfill System: Added a batch-processing REST API and admin UI for updating timezones for existing venues.
- Scraper Extractors: Added
WordPressExtractor,GoDaddyExtractor, andBandzoogleExtractorto the Universal Web Scraper. - WP-CLI Commands: Added
test-scraperandtest-scraper-urlcommands for debugging web scrapers. - Settings: Added
geonames_usernamefield to plugin settings for timezone detection.
[0.6.0] – 2025-12-16
Added
- Firebase Extractor: Enhanced script sniffing to automatically detect Firebase database URLs from external scripts.
- Handler Consolidation: Removed legacy standalone Bandzoogle, GoDaddy, and SpotHopper handlers in favor of Universal Web Scraper extractors.
Changed
- Added
GeoNamesServicefor timezone lookups. - Added
Venues::batch_update_timezones()REST endpoint. - Added
assets/js/settings-backfill.jsfor admin timezone processing.
[0.5.20] – 2025-12-16
Changed
- Prekindle Integration: Refactored the Prekindle handler into a specialized extractor within the
UniversalWebScraper.- Added
PrekindleExtractorwith support for hybrid API/HTML data extraction. - Improved data accuracy by scraping
pk-timesHTML blocks for door and show times. - Removed legacy standalone
Prekindlehandler and settings classes.
- Added
- Universal Web Scraper: Integrated
PrekindleExtractorinto the extraction pipeline. - Documentation: Updated
universal-web-scraper-handler.mdwith technical details for Prekindle extraction support.
[0.5.19] – 2025-12-15
Changed
- Added
PrekindleExtractorwith support for hybrid API/HTML data extraction. - Improved data accuracy by scraping
pk-timesHTML blocks for door and show times. - Removed legacy standalone
Prekindlehandler and settings classes.
Documentation
- Added
PrekindleExtractorwith support for hybrid API/HTML data extraction. - Improved data accuracy by scraping
pk-timesHTML blocks for door and show times. - Removed legacy standalone
Prekindlehandler and settings classes.
[0.5.18] – 2025-12-15
Added
- Timezone Support: Introduced centralized timezone handling for events and venues
- Added
DateTimeParserutility for robust UTC, local, and ISO 8601 parsing - Added
venueTimezonemetadata toVenueParameterProviderandVenue_Taxonomy - Updated
Calendar_Queryto respect venue-specific timezones for date grouping and display
- Added
- Squarespace Extractor: New extractor for the Universal Web Scraper
- Extracts events from
Static.SQUARESPACE_CONTEXTJavaScript objects - High-fidelity extraction of title, description, images, and ticket URLs
- Extracts events from
- SpotHopper Support: Converted SpotHopper into a Universal Web Scraper extractor
- Improved auto-detection of SpotHopper platform and spot_id extraction
- Fetches structured event data directly from SpotHopper public API
[0.5.17] – 2025-12-15
Changed
- Added
DateTimeParserutility for robust UTC, local, and ISO 8601 parsing - Added
venueTimezonemetadata toVenueParameterProviderandVenue_Taxonomy - Updated
Calendar_Queryto respect venue-specific timezones for date grouping and display
Fixed
- Extracts events from
Static.SQUARESPACE_CONTEXTJavaScript objects - High-fidelity extraction of title, description, images, and ticket URLs
[0.5.16] – 2025-12-14
Changed
- Improved auto-detection of SpotHopper platform and spot_id extraction
- Fetches structured event data directly from SpotHopper public API
[0.5.15] – 2025-12-14
Added
- Added
DateTimeParserutility for robust UTC, local, and ISO 8601 parsing - Added
venueTimezonemetadata toVenueParameterProviderandVenue_Taxonomy - Updated
Calendar_Queryto respect venue-specific timezones for date grouping and display
Changed
- Extracts events from
Static.SQUARESPACE_CONTEXTJavaScript objects - High-fidelity extraction of title, description, images, and ticket URLs
Fixed
- Improved auto-detection of SpotHopper platform and spot_id extraction
- Fetches structured event data directly from SpotHopper public API
[0.5.14] – 2025-12-12
Changed
- Handler Consolidation: Migrated
DiceFm,Eventbrite,IcsCalendar, andTicketmasterto standardized FetchHandler patterns. - Universal Web Scraper: Refactored to use structured data extractors instead of monolithic extraction logic. Consolidated legacy standalone
GoogleCalendarandWordPressEventsAPIhandlers intoEmbeddedCalendarExtractorandWordPressExtractor. - EventImportHandler: Changed several methods from protected to public (shouldSkipEventTitle, extractVenueMetadata, stripVenueMetadataFromEvent, isPastEvent) for better extensibility.
- Documentation: Completely rewrote universal-web-scraper-handler.md to document new extraction architecture
[0.5.13] – 2025-12-09
Changed
- Extraction Priority: The handler now tries extractors in priority order, using first successful extraction method
- Engine Data Integration: Structured data stores venue and event fields in engine data before AI processing
- Event Filtering: Structured data processors apply keyword filtering, past event detection, and duplicate prevention uniformly
[0.5.12] – 2025-12-09
Fixed
- Ticketbud OAuth Scope: Added
scopeparameter withpublicvalue to authorization URL for proper OAuth 2.0 scope specification
[0.5.11] – 2025-12-XX
Fixed
- Ticketbud OAuth Parameter: Corrected OAuth authorization URL parameter from
redirect_urltoredirect_urito comply with OAuth 2.0 specification
[0.5.10] – 2025-12-XX
Fixed
- Ticketbud Event Import Handler: New OAuth 2.0 authenticated handler for Ticketbud API
- Full event data extraction: title, description, dates, times, venue, pricing
- Venue metadata: name, address, city, state, zip, country, phone, website, coordinates
- Keyword filtering: include/exclude keywords for selective event imports
- Past/over event filtering: configurable option to include events marked as over
- Single-item processing with EventIdentifierGenerator for duplicate prevention
- OAuth 2.0 authentication with client ID/secret configuration
- User profile integration: email, name, default subdomain
[0.5.9] – 2025-12-09
Changed
- Full event data extraction: title, description, dates, times, venue, pricing
- Venue metadata: name, address, city, state, zip, country, phone, website, coordinates
- Keyword filtering: include/exclude keywords for selective event imports
- Past/over event filtering: configurable option to include events marked as over
- Single-item processing with EventIdentifierGenerator for duplicate prevention
- OAuth 2.0 authentication with client ID/secret configuration
- User profile integration: email, name, default subdomain
Technical Details
- Full event data extraction: title, description, dates, times, venue, pricing
- Venue metadata: name, address, city, state, zip, country, phone, website, coordinates
- Keyword filtering: include/exclude keywords for selective event imports
- Past/over event filtering: configurable option to include events marked as over
- Single-item processing with EventIdentifierGenerator for duplicate prevention
- OAuth 2.0 authentication with client ID/secret configuration
- User profile integration: email, name, default subdomain
[0.5.8] – 2025-12-05
Fixed
- Ticketbud API Integration: Fetches from
https://api.ticketbud.com/events.jsonwith access token - Venue Metadata Extraction: Complete location data mapping from Ticketbud event structure
- Handler Registration: Added to
load_event_import_handlers()array in main plugin file
Changed
- Archive Taxonomy Context Support: Calendar and filters REST endpoints now accept
archive_taxonomyandarchive_term_idparameters for proper filtering on taxonomy archive pages
Technical Details
- Enhanced Date Range Filtering: Added
user_date_rangeflag to detect when users specify custom date ranges, improving query logic for date boundary calculations and calendar rendering - API Route Extensions: Extended calendar and filters endpoints with new parameters for archive-aware taxonomy filtering
Changed
- Calendar_Query Logic: Modified date boundary handling to respect user-specified ranges while maintaining default pagination behavior
- REST Parameter Sanitization: Added proper sanitization for new archive context parameters in API controllers
[0.5.6] – 2025-12-05
Added
- GoDaddy Calendar Handler: New JSON-based import handler for GoDaddy Website Builder calendars using
events_urlwith configurable venue fields and keyword filtering - Global Title Exclusion: All import handlers now skip events whose title contains
closed(case-insensitive) for universal event filtering - Enhanced Keyword Filtering: Eventbrite and Google Calendar (via
EmbeddedCalendarExtractor) handlers now support include/exclude keyword filtering viasearchandexclude_keywordssettings - Handler Title Validation: Centralized title exclusion logic in
EventImportHandler::shouldSkipEventTitle()called by all handlers (DiceFm, DoStuffMediaApi, EventFlyer, Eventbrite, Universal Web Scraper, Ticketmaster) - EventbriteSettings: Added
searchandexclude_keywordsfields for improved event filtering
Changed
- Handler Base Class: Added
getGlobalExcludedTitleKeywords()andshouldSkipEventTitle()methods to support centralized title filtering - Documentation: Created
docs/godaddy-calendar-handler.mdwith full setup, configuration, and data mapping documentation
[0.5.5] – 2025-12-05
Changed
- Plugin Dependency Slug: Corrected
Requires Pluginsheader fromdatamachinetodata-machinefor proper WordPress plugin dependency detection
[0.5.4] – 2025-12-04
Changed
- Ticketmaster Price Data Merging: Price information from Ticketmaster imports now merges into engine data via
datamachine_merge_engine_data()for improved AI processing context
[0.5.3] – 2025-12-04
Changed
- EventUpsert Field Support: Added
pricefield to resolved fields array in EventUpsert handler for complete price field handling during event updates - Build Dependencies: Updated @wordpress/scripts and npm package configurations with build warning suppressions for cleaner development experience
[0.5.2] – 2025-12-04
Added
- Event Excerpt Generation: Automatic excerpt creation from Event Details block content when no manual excerpt is set
- Archive Filter UX: Hide taxonomy filter button on archive pages when no additional filter options are available
Changed
- Calendar Filter State: Enhanced filter button visibility logic for archive contexts
- Event Details Rendering: Simplified block content output structure
- Taxonomy Helper: Added archive taxonomy query override support for accurate filtering
- Filters API: Updated to handle archive context for proper term count calculations
[0.5.1] – 2025-12-03
Changed
- Universal Web Scraper Keyword Filtering: Added include/exclude keyword filtering to improve event selection accuracy
- Datetime Meta Synchronization: Post meta now always overrides block attributes for datetime values, ensuring data consistency
- Time Format Standardization: Automatic seconds padding for time fields in meta storage
- Documentation Field References: Updated handler documentation to reflect ‘search’ field naming
[0.5.0] – 2025-12-03
Added
- Calendar Query Hydration: Modified
hydrate_datetime_fields()to prioritize meta values over block attributes - Web Scraper Processing: Enhanced to process multiple sections per page with keyword-based filtering
- Meta Storage: Improved time format handling with automatic HH:MM:SS conversion
Changed
- SingleRecurring Event Handler: New handler for creating weekly recurring events like open mics, trivia nights, and regular gatherings
- Configurable day of week, start/end times, and expiration dates
- Full venue metadata support with address, city, state, zip, country fields
- Single-item processing with EventIdentifierGenerator for deduplication
- Keyword filtering (include/exclude) for selective event imports
- Automatic next-occurrence calculation based on configured day of week
- Uses existing venue taxonomy and metadata extraction patterns
[0.4.18] – 2025-12-02
Added
- Configurable day of week, start/end times, and expiration dates
- Full venue metadata support with address, city, state, zip, country fields
- Single-item processing with EventIdentifierGenerator for deduplication
- Keyword filtering (include/exclude) for selective event imports
- Automatic next-occurrence calculation based on configured day of week
- Uses existing venue taxonomy and metadata extraction patterns
Changed
- Configurable day of week, start/end times, and expiration dates
- Full venue metadata support with address, city, state, zip, country fields
- Single-item processing with EventIdentifierGenerator for deduplication
- Keyword filtering (include/exclude) for selective event imports
- Automatic next-occurrence calculation based on configured day of week
- Uses existing venue taxonomy and metadata extraction patterns
Technical Details
- Carousel Single Card Mode: Enhanced carousel indicators to activate viewport dots only when displaying single cards on narrow screens, improving mobile responsiveness
- Carousel Code Optimization: Removed duplicate firstEventWidth calculation in chevron navigation logic
[0.4.17] – 2025-12-01
Changed
- Archive Context Support: Calendar block automatically filters to current taxonomy term when viewing venue or promoter archive pages
- Fuzzy Title Matching: EventIdentifierGenerator now supports fuzzy title comparison for improved duplicate detection across import sources with varying title formats
- Enhanced Event Finding: EventUpsert uses fuzzy title matching when venue and date context are available for better cross-source duplicate detection
[0.4.16] – 2025-12-01
Added
- Calendar REST API: Added
archive_taxonomyandarchive_term_idparameters for archive page context - Calendar Query Builder: Enhanced with archive context support and additional taxonomy imports
- Frontend JavaScript: Integrated archive context in filter state management system
- API Client: Updated to accept and forward archive context to REST endpoints
Enhanced
- Import Handler Response Standardization: Refactored all 12 import handlers to return DataPacket arrays directly instead of using wrapper methods (
emptyResponse()/successResponse()) - EventImportStep Compatibility: Updated to handle both legacy
processed_itemsformat and new direct DataPacket array format from FetchHandlers - Version Synchronization: Updated composer.json version to match current release
Changed
- Universal Web Scraper Enhancement: Added XPath selector for "recspec-events–event" class pattern to improve website compatibility
[0.4.15] – 2025-11-30
Enhanced
- Universal Web Scraper Handler: Updated documentation to clarify Schema.org JSON-LD and microdata priority over AI processing
- BandzoogleCalendar Handler: Added comprehensive documentation for the Bandzoogle calendar import handler
- Prekindle Handler: Added complete documentation for the Prekindle widget import handler
- CLAUDE.md: Updated to include BandzoogleCalendar and Prekindle handlers
- README.md: Updated import pipeline section to reflect all 12 handlers
[0.4.14] – 2025-11-30
Fixed
- BandzoogleCalendar Import Handler: New event import handler for Bandzoogle-powered venue calendar pages, supporting forward month pagination, popup HTML extraction, keyword filtering, and venue metadata configuration.
Changed
- Prekindle Handler Refactoring: Improved time extraction reliability by switching from URL-based to title-based matching for event times, ensuring more consistent data extraction from Prekindle widget pages.
[0.4.13] – 2025-11-30
Changed
- Prekindle Handler: Added missing
normalizeTitleKey()method to complete the title-based extraction refactoring.
[0.4.12] – 2025-11-30
Added
- Prekindle Handler Refactoring: Updated to use org_id configuration instead of organizer_url for more reliable widget integration, breaking change for existing Prekindle handler configurations
Changed
- Prekindle Handler: New event import handler for Prekindle organizer pages, combining JSON-LD data with HTML-extracted start times
[0.4.11] – 2025-11-30
Added
- Build Process: Enhanced production build script with colored output, error handling, and build information generation
- Block Builds: Updated to use @wordpress/scripts 30.19.0 and removed custom webpack configurations
Changed
- Mobile Pagination: Improved responsive CSS with 480px breakpoint and better flex wrapping for small screens
- Web Scraper: Continued refinements to EventSectionFinder and EventSectionSelectors classes
[0.4.10] – 2025-11-30
Added
- Universal Web Scraper Refactoring: Improved code organization by extracting EventSectionFinder and EventSectionSelectors classes for better maintainability and separation of concerns
Changed
- Carousel Navigation Improvements: Enhanced mobile dot indicators with viewport-based overflow handling for better navigation with many events
- CSS Optimization: Simplified carousel indicators styling by removing class-based collapsed states
- Documentation: Renamed AGENTS.md to CLAUDE.md for consistency
Fixed
- Carousel Indicators CSS: Added width constraint and flex-start justification for improved collapsed mobile navigation display
[0.4.9] – 2025-11-29
Added
- Carousel Dot Indicators: Enhanced sliding window functionality for collapsed mobile navigation states
Changed
- Carousel Dot Indicators: Improved collapsed state handling for better mobile navigation with sliding window functionality
- Chevron Navigation: Enhanced positioning and styling for carousel navigation arrows
- Filter Bar Styling: Refined CSS for search inputs, date filters, and responsive design consistency
[0.4.8] – 2025-11-29
Added
- Documentation Updates: Comprehensive alignment of CLAUDE.md, calendar-block.md, event-details-block.md, ticketmaster-handler.md, and universal-web-scraper-handler.md for improved clarity and current architecture reflection
- Carousel Enhancements: Added collapsed dots functionality for mobile navigation with small/medium/active dot states and improved touch interaction
- Filter Bar Styling: Modernized search input and filter bar styles with improved focus states, transitions, and responsive design
- Version Synchronization: Corrected composer.json version from 0.5.7 to match current version
Changed
- Mobile UX: Enhanced carousel dot navigation with MAX_MOBILE_DOTS limit and sliding window for better mobile experience
- CSS Modernization: Updated filter bar styles with CSS custom properties and improved accessibility
[0.4.7] – 2025-11-29
Added
- Query Parameter Sanitization: Improved nested array sanitization to properly handle multi-dimensional query parameters
- New
data_machine_events_sanitize_query_params()global function for recursive sanitization - Updated
Pagination::sanitize_query_params()to use same recursive logic - Preserves array structure while sanitizing all scalar values
- Fixes taxonomy filter parameters with indexed arrays (e.g.,
tax_filter[genre][0])
- New
Changed
- New
data_machine_events_sanitize_query_params()global function for recursive sanitization - Updated
Pagination::sanitize_query_params()to use same recursive logic - Preserves array structure while sanitizing all scalar values
- Fixes taxonomy filter parameters with indexed arrays (e.g.,
tax_filter[genre][0])
[0.4.6] – 2025-11-29
Added
- New
data_machine_events_sanitize_query_params()global function for recursive sanitization - Updated
Pagination::sanitize_query_params()to use same recursive logic - Preserves array structure while sanitizing all scalar values
- Fixes taxonomy filter parameters with indexed arrays (e.g.,
tax_filter[genre][0])
Changed
Event Details Block Description: Now extracts plain text from block content for Schema.org
descriptionfield- Uses
wp_strip_all_tags()to preserve description data in schema without HTML markup - Improves structured data quality for search engines
- Description flows from InnerBlocks content through to JSON-LD schema
- Uses
Filter State Regex: Enhanced filter parameter parsing to support both indexed and non-indexed array syntax
- Regex pattern now matches
tax_filter[taxonomy][0]andtax_filter[taxonomy][]formats - Better compatibility with different WordPress filter parameter conventions
- Fixes filter restoration on pagination with indexed array parameters
- Regex pattern now matches
Universal Web Scraper Table Support: Improved table-based event pattern detection
- Moved table XPath selectors to higher priority (before generic list patterns)
- Added patterns for common table structures:
.calendar,.events,.scheduleclasses - Prevents false matches from navigation lists when tables are present
- Better support for venue websites using tabular event calendars
Fixed
- Uses
wp_strip_all_tags()to preserve description data in schema without HTML markup - Improves structured data quality for search engines
- Description flows from InnerBlocks content through to JSON-LD schema
[0.4.5] – 2025-11-28
Added
- Regex pattern now matches
tax_filter[taxonomy][0]andtax_filter[taxonomy][]formats - Better compatibility with different WordPress filter parameter conventions
- Fixes filter restoration on pagination with indexed array parameters
Changed
- Moved table XPath selectors to higher priority (before generic list patterns)
- Added patterns for common table structures:
.calendar,.events,.scheduleclasses - Prevents false matches from navigation lists when tables are present
- Better support for venue websites using tabular event calendars
Removed
- Uses
wp_strip_all_tags()to preserve description data in schema without HTML markup - Improves structured data quality for search engines
- Description flows from InnerBlocks content through to JSON-LD schema
Technical Improvements
- Regex pattern now matches
tax_filter[taxonomy][0]andtax_filter[taxonomy][]formats - Better compatibility with different WordPress filter parameter conventions
- Fixes filter restoration on pagination with indexed array parameters
[0.4.4] – 2025-11-28
Added
- Moved table XPath selectors to higher priority (before generic list patterns)
- Added patterns for common table structures:
.calendar,.events,.scheduleclasses - Prevents false matches from navigation lists when tables are present
- Better support for venue websites using tabular event calendars
Changed
- Pagination Refactoring: Removed scalar value iteration from
Pagination.php, using recursive function instead - Navigation Template: Updated to use global
data_machine_events_sanitize_query_params()function - Code Quality: Minor whitespace cleanup for consistency
Removed
- Universal Web Scraper Enhancement: Added support for table-based event patterns
- New XPath selectors for HTML table layouts commonly used in venue calendars
- Added header row detection to skip table headers during event extraction
- Improves event scraping accuracy for venue websites using tabular event listings
[0.4.3] – 2025-11-28
Added
- New XPath selectors for HTML table layouts commonly used in venue calendars
- Added header row detection to skip table headers during event extraction
- Improves event scraping accuracy for venue websites using tabular event listings
Changed
- New XPath selectors for HTML table layouts commonly used in venue calendars
- Added header row detection to skip table headers during event extraction
- Improves event scraping accuracy for venue websites using tabular event listings
Removed
- Universal Web Scraper Pagination: Automatic traversal of paginated event listings
- Follows "next page" links using standard HTML5
rel="next", SEO link elements, and common pagination patterns MAX_PAGESconstant (20) prevents infinite loops- Visited URL tracking prevents re-scraping same pages
- Supports relative URLs, protocol-relative URLs, and same-domain validation
- Follows "next page" links using standard HTML5
- Ticketmaster API Pagination: Automatic traversal through API result pages
MAX_PAGEconstant (19) respects Ticketmaster API limits- Enhanced logging with page number context
- Fetches next pages when all events on current page are already processed
[0.4.2] – 2025-11-26
Added
- Follows "next page" links using standard HTML5
rel="next", SEO link elements, and common pagination patterns MAX_PAGESconstant (20) prevents infinite loops- Visited URL tracking prevents re-scraping same pages
- Supports relative URLs, protocol-relative URLs, and same-domain validation
Changed
MAX_PAGEconstant (19) respects Ticketmaster API limits- Enhanced logging with page number context
- Fetches next pages when all events on current page are already processed
[0.4.1] – 2025-11-26
Added
- Follows "next page" links using standard HTML5
rel="next", SEO link elements, and common pagination patterns MAX_PAGESconstant (20) prevents infinite loops- Visited URL tracking prevents re-scraping same pages
- Supports relative URLs, protocol-relative URLs, and same-domain validation
[0.4.0] – 2025-11-26
BREAKING CHANGES
Event Details Block Description: Now extracts plain text from block content for Schema.org description field
MAX_PAGEconstant (19) respects Ticketmaster API limits- Enhanced logging with page number context
- Fetches next pages when all events on current page are already processed
Filter State Regex: Enhanced filter parameter parsing to support both indexed and non-indexed array syntax
- UniversalWebScraper Handler: Refactored
get_fetch_data()to loop through pages until finding an unprocessed event or reaching max pages - Ticketmaster Handler: Refactored
fetch_events()to return page metadata;get_fetch_data()now uses do-while pagination loop
Removed
- Filter State Management Refactoring: Centralized calendar filter state logic into dedicated
FilterStateManagerclass- New
inc/Blocks/Calendar/src/modules/filter-state.jsmodule for unified state management - Improved separation of concerns between URL handling, localStorage persistence, and UI updates
- Enhanced filter count badge accuracy and state restoration reliability
- New
- Frontend JavaScript Architecture: Refactored calendar modules for better maintainability
- Updated
frontend.jsto use new FilterStateManager instance pattern - Simplified
filter-modal.jswith cleaner state integration - Streamlined
state.jsby removing duplicated functionality
- Updated
- Documentation Expansion: Added comprehensive documentation for core components
docs/dynamic-tool-parameters-trait.md– Dynamic AI tool parameter filteringdocs/event-post-type.md– Event post type architecturedocs/event-upsert-system.md– Event upsert handler documentationdocs/meta-storage.md– Meta field storage systemdocs/promoter-taxonomy.md– Promoter taxonomy implementationdocs/venue-service.md– Venue service architecture
Changed
- New
inc/Blocks/Calendar/src/modules/filter-state.jsmodule for unified state management - Improved separation of concerns between URL handling, localStorage persistence, and UI updates
- Enhanced filter count badge accuracy and state restoration reliability
Architectural Benefits
- Updated
frontend.jsto use new FilterStateManager instance pattern - Simplified
filter-modal.jswith cleaner state integration - Streamlined
state.jsby removing duplicated functionality
Fixed
docs/dynamic-tool-parameters-trait.md– Dynamic AI tool parameter filteringdocs/event-post-type.md– Event post type architecturedocs/event-upsert-system.md– Event upsert handler documentationdocs/meta-storage.md– Meta field storage systemdocs/promoter-taxonomy.md– Promoter taxonomy implementationdocs/venue-service.md– Venue service architecture
Added
- New
inc/Blocks/Calendar/src/modules/filter-state.jsmodule for unified state management - Improved separation of concerns between URL handling, localStorage persistence, and UI updates
- Enhanced filter count badge accuracy and state restoration reliability
[0.3.5] – 2025-11-25
Removed
- Updated
frontend.jsto use new FilterStateManager instance pattern - Simplified
filter-modal.jswith cleaner state integration - Streamlined
state.jsby removing duplicated functionality
Fixed
docs/dynamic-tool-parameters-trait.md– Dynamic AI tool parameter filteringdocs/event-post-type.md– Event post type architecturedocs/event-upsert-system.md– Event upsert handler documentationdocs/meta-storage.md– Meta field storage systemdocs/promoter-taxonomy.md– Promoter taxonomy implementationdocs/venue-service.md– Venue service architecture
Changed
- Filter Modal Enhancement: Updated filter count logic to count URL parameters instead of checked checkboxes for more accurate badge display
- Promoter Taxonomy UI: Added promoter taxonomy to admin menu for better taxonomy management visibility
- Web Scraper Enhancement: Added XPath selectors for SeeTickets widget patterns to improve event scraping from additional venue websites
[0.3.4] – 2025-11-25
Changed
- Event Upsert Promoter Handling: Promoter taxonomy now respects handler configuration, only creating or assigning terms when
taxonomy_promoter_selectionis set to AI or a specific term; existing pipelines default toskipso no unintended promoter terms are attached. - Handler Documentation: Streamlined Dice FM, DoStuff Media API, and Ticketmaster handler documentation for improved clarity and conciseness.
[0.3.3] – 2025-11-25
Changed
- Schema Meta Fallbacks: EventSchemaProvider now always injects start/end timestamps using
_datamachine_event_datetimemeta so Google Search Console no longer flags missingendDate. - Event Upsert Hardening:
buildEventData()hydrates start/end dates and times from meta before generating block content, ensuring schema data stays consistent across imports and manual edits. - Filters API Controller: New REST endpoint
/datamachine/v1/events/filtersfor dynamic taxonomy filter options with active filter support, date context, and archive context support.
[0.3.2] – 2025-11-24
Fixed
- Event Details Block: Server-side render always emits Schema.org JSON-LD and relies on EventSchemaProvider’s meta fallbacks for complete structured data.
- Calendar Controller: Enhanced pagination logic and parameter handling for better performance.
- Results Counter: Improved date formatting and event count display for better user experience.
- Taxonomy Helper: Enhanced taxonomy processing with filter support and date context filtering for more accurate taxonomy counts.
- API Client: Enhanced calendar API client with filter support and improved error handling.
- Filter Modal: Updated close button handling to support multiple close buttons and improved accessibility.
- State Management: Improved URL state management and query parameter building for better browser history support.
- Calendar Styles: Modern filter bar styling with improved search input and focus states.
- Filter Bar Template: Instance-specific IDs and enhanced UI for multi-calendar support.
- Event Upsert Promoter Handling: Promoter taxonomy now respects handler configuration, only creating or assigning terms when
taxonomy_promoter_selectionis set to AI or a specific term; existing pipelines default toskipso no unintended promoter terms are attached. - Documentation:
docs/event-schema-provider.mdanddocs/event-details-block.mdnow describe how datetime meta feeds schema fallbacks.
Requirements
- Documentation Updates: Comprehensive documentation alignment across CLAUDE.md, README.md, and all docs/ files to reflect current architecture
- Calendar Controller: Enhanced pagination logic and parameter handling
- Results Counter: Improved date formatting and event count display for better user experience
[0.3.1] – 2025-11-23
Fixed
- Day-Based Pagination:
Calendar_Querynow exposes aDAYS_PER_PAGEconstant and returns ordered date boundaries so the calendar API, pagination helpers, and templates always render whole days (5 per page) instead of arbitrary event counts. - Promoter Taxonomy & Schema Coverage: New
Promoter_Taxonomyregisters promoter data, and the Event Details block plus EventSchemaProvider/renderer now surface promoter metadata as Schema.org organizer values.
Changed
- Calendar API & Templates: The calendar controller now builds queries from date boundaries, clamps
pagedto the available pages, and renders pagination/counter output via the new date-aware helpers; documentation (docs/pagination-system.md,docs/calendar-block.md) was updated to describe the day-based workflow. - Event Upsert & Schema Integration: EventUpsert registers the promoter taxonomy handler, merges organizer fields via engine data, and the schema generator now accepts organizer data before generating JSON-LD to keep event details, taxonomy, and schema outputs aligned.
Requirements
- DynamicToolParametersTrait: Centralized trait for engine-aware AI tool parameter filtering
- Filters tool parameters at definition time based on engine data presence
- If a parameter value exists in engine data, it’s excluded from tool definition
- AI only sees parameters it needs to provide, preventing conflicts
[0.3.0] – 2024-11-23
BREAKING CHANGES
Universal Web Scraper Table Support: Improved table-based event pattern detection
- Filters tool parameters at definition time based on engine data presence
- If a parameter value exists in engine data, it’s excluded from tool definition
- AI only sees parameters it needs to provide, preventing conflicts
Event Details Block Description: Now extracts plain text from block content for Schema.org description field
- Filters tool parameters at definition time based on engine data presence
- If a parameter value exists in engine data, it’s excluded from tool definition
- AI only sees parameters it needs to provide, preventing conflicts
Filter State Regex: Enhanced filter parameter parsing to support both indexed and non-indexed array syntax
- EventSchemaProvider: Refactored to use
DynamicToolParametersTraitgetCoreToolParameters(),getSchemaToolParameters(),getAllToolParameters()now accept optional$engine_dataparameter- Removed
engineOrTool()method – filtering now happens at definition time, not execution time
- VenueParameterProvider: Refactored to use
DynamicToolParametersTrait- Removed duplicate
filterByEngineData()implementation - Maintains
hasVenueData()early-exit optimization
- Removed duplicate
- EventUpsert: Simplified parameter handling
- Replaced
engineOrTool()routing with simplebuildEventData()merge - Engine parameters take precedence, AI fills in remaining fields
- Replaced
- EventUpsertFilters: Updated
getDynamicEventTool()to pass$engine_datato all parameter methods
Carousel Dot Styling – Refined visual feedback for carousel navigation
getCoreToolParameters(),getSchemaToolParameters(),getAllToolParameters()now accept optional$engine_dataparameter- Removed
engineOrTool()method – filtering now happens at definition time, not execution time
Changed
- Removed duplicate
filterByEngineData()implementation - Maintains
hasVenueData()early-exit optimization
Removed
- Replaced
engineOrTool()routing with simplebuildEventData()merge - Engine parameters take precedence, AI fills in remaining fields
Architectural Benefits
getCoreToolParameters(),getSchemaToolParameters(),getAllToolParameters()now accept optional$engine_dataparameter- Removed
engineOrTool()method – filtering now happens at definition time, not execution time
Added
- Removed duplicate
filterByEngineData()implementation - Maintains
hasVenueData()early-exit optimization
Changed
- Replaced
engineOrTool()routing with simplebuildEventData()merge - Engine parameters take precedence, AI fills in remaining fields
Removed
- Definition-Time Filtering: Parameters are filtered when tool definition is built, not during execution
- Single Responsibility: Trait handles parameter filtering, providers define their parameters
- Cleaner Execution: No routing needed at execution time since AI only provided necessary parameters
[0.2.4] – 2025-11-23
Fixed
- HTTP Client Modernization: Comprehensive refactoring to use DataMachine HttpClient across all import handlers and core components
- Replaced
wp_remote_get()withDataMachineCoreHttpClient::get()for consistent HTTP handling - Updated error handling patterns from WordPress remote API functions to HttpClient response format
- Added context parameters for improved logging and debugging capabilities
- Affected components: Geocoding API, Venue Taxonomy, and all 8 import handlers (DiceFm, DoStuffMediaApi, Eventbrite, GoogleCalendar, SpotHopper, UniversalWebScraper, WordPressEventsAPI, Ticketmaster)
- Improved code consistency and maintainability across the entire HTTP request layer
- Replaced
[0.2.3] – 2025-11-23
Fixed
- Replaced
wp_remote_get()withDataMachineCoreHttpClient::get()for consistent HTTP handling - Updated error handling patterns from WordPress remote API functions to HttpClient response format
- Added context parameters for improved logging and debugging capabilities
- Affected components: Geocoding API, Venue Taxonomy, and all 8 import handlers (DiceFm, DoStuffMediaApi, Eventbrite, GoogleCalendar, SpotHopper, UniversalWebScraper, WordPressEventsAPI, Ticketmaster)
- Improved code consistency and maintainability across the entire HTTP request layer
[0.2.2] – 2025-11-23
Fixed
- Replaced
wp_remote_get()withDataMachineCoreHttpClient::get()for consistent HTTP handling - Updated error handling patterns from WordPress remote API functions to HttpClient response format
- Added context parameters for improved logging and debugging capabilities
- Affected components: Geocoding API, Venue Taxonomy, and all 8 import handlers (DiceFm, DoStuffMediaApi, Eventbrite, GoogleCalendar, SpotHopper, UniversalWebScraper, WordPressEventsAPI, Ticketmaster)
- Improved code consistency and maintainability across the entire HTTP request layer
[0.2.1] – 2025-11-23
Added
- DoStuffMediaApi Import Handler: New handler for DoStuff Media JSON feeds with comprehensive venue metadata extraction
- Supports venues like Waterloo Records using DoStuff Media platform
- Extracts complete event data including venue coordinates, pricing, and artist information
- Single-item processing with EventIdentifierGenerator for duplicate prevention
- Keyword filtering (include/exclude) for selective event imports
- Address-Based Venue Matching: Enhanced Venue_Taxonomy with smart address normalization and duplicate prevention
- Normalizes addresses for consistent matching (street abbreviations, case insensitivity)
- Finds existing venues by address + city combination before name matching
- Smart metadata merging when venues are matched by address
- DiceFm Keyword Filtering: Include/exclude keyword options for better event selection control
- Filter events by keywords in title and description
- Comma-separated keyword lists for flexible filtering
Changed
- Supports venues like Waterloo Records using DoStuff Media platform
- Extracts complete event data including venue coordinates, pricing, and artist information
- Single-item processing with EventIdentifierGenerator for duplicate prevention
- Keyword filtering (include/exclude) for selective event imports
Fixed
- Normalizes addresses for consistent matching (street abbreviations, case insensitivity)
- Finds existing venues by address + city combination before name matching
- Smart metadata merging when venues are matched by address
[0.2.0] – 2025-11-22
Added
- Filter events by keywords in title and description
- Comma-separated keyword lists for flexible filtering
Changed
- Supports venues like Waterloo Records using DoStuff Media platform
- Extracts complete event data including venue coordinates, pricing, and artist information
- Single-item processing with EventIdentifierGenerator for duplicate prevention
- Keyword filtering (include/exclude) for selective event imports
Removed
- Normalizes addresses for consistent matching (street abbreviations, case insensitivity)
- Finds existing venues by address + city combination before name matching
- Smart metadata merging when venues are matched by address
Fixed
- Filter events by keywords in title and description
- Comma-separated keyword lists for flexible filtering
[0.1.1] – 2025-11-20
Added
- Calendar Filter Reset: Complete state clearing with localStorage and URL parameter reset
- Clears localStorage calendar state and URL parameters
- Resets filter count badge to zero for accurate visual feedback
- Improved reliability of filter reset functionality
- Venue Taxonomy: Smart merging of venue metadata when matching by address
- Handler Documentation: Comprehensive docs for DoStuffMediaApi and updated DiceFm/Ticketmaster guides
[0.1.0] – 2025-11-XX
Added
- Clears localStorage calendar state and URL parameters
- Resets filter count badge to zero for accurate visual feedback
- Improved reliability of filter reset functionality