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 to data-machine/v1 in the Calendar JS API client and taxonomy filter template
  • Renamed CSS classes, block names, and post type from datamachine-events to data-machine-events across 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-duration CLI 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-changed custom 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() and datamachine_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 to inc/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/TypeScript frontend.tsx
  • PostTrackingTrait usage in EventUpsert — tracking now automatic in base handler
  • Dead code: unused state.ts module, NominatimResult type

[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-scraper and test-scraper-url CLI commands into single test-event-scraper command

[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() and extractTimeFromText()

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_cutoff setting 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 settings WP-CLI command for managing plugin settings.

[0.9.6] – 2026-01-15

  • Add late_night_time and suspicious_end_time health check categories to event_health_check tool.

[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 returning null to 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

Added

  • Changed save() function from returning null to 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 returning null to 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 VenueHealthCheck AI 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 via ExecutionContext (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 use ExecutionContext for logging, processed item tracking, flow/pipeline ids, and engine data storage.
  • Engine Data Storage: Replaced direct datamachine_merge_engine_data() calls with ExecutionContext::storeEngineData() in the Ticketmaster handler and structured scraper pipeline.
  • WP-CLI Scraper Flow Id: Updated CliUniversalWebScraperTestCommand to use 'direct' flow id when calling get_fetch_data().

[0.8.38] – 2026-01-06

Changed

  • WP-CLI Scraper Test Command Simplification: Updated Cli\UniversalWebScraperTestCommand to run without job creation or upsert options, generating a cli_test_* flow step id internally and focusing output on a single packet’s extraction metadata, event payload shape (structured vs raw_html), venue/address coverage warnings, and captured datamachine_log warnings.

[0.8.37] – 2026-01-06

Added

  • Craftpeak/Arryved Extractor: Added Steps\EventImport\Handlers\WebScraper\Extractors\CraftpeakExtractor to 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 UniversalWebScraper extractor priority to include the Craftpeak/Arryved extractor in the structured extraction pipeline.
  • WP-CLI Scraper Diagnostics: Enhanced Cli\UniversalWebScraperTestCommand output 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\TicketUrlMigration and its instantiation from DATAMACHINE_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\EventSchemaProvider title to emphasize using original_title when 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.sh to output the packaged plugin into build/ instead of dist/.

[0.8.35] – 2026-01-06

Added

  • Ticket URL Indexing Migration: Added DataMachineEventsAdminTicketUrlMigration, a one-time admin-triggered migration that backfills _datamachine_ticket_url post meta from data-machine-events/event-details block ticketUrl attributes 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 MusicItemExtractor to use a strict class token match for music__item elements (prevents false positives where music__item is a substring of another class).

[0.8.32] – 2026-01-05

Added

  • Music Item Extractor: Added MusicItemExtractor to the Universal Web Scraper to extract events from .music__item / .music__artist HTML patterns.

Changed

  • Update Event Description Storage: Updated the UpdateEvent AI chat tool to write description updates into core/paragraph InnerBlocks inside the data-machine-events/event-details block (instead of treating description as a block attribute).
  • Event Health Check Description Detection: Updated the EventHealthCheck AI chat tool to derive the event description from the Event Details block InnerBlocks (paragraph content) rather than a non-existent description attribute.
  • Venue Address Parsing: Enhanced PageVenueExtractor::extractStreetAddress() to better detect real street addresses (supports 610-A / 123B patterns and tighter fallback matching) while reducing false positives.
  • Universal Web Scraper Pipeline: Added MusicItemExtractor to 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 returns events_per_date and counts events per Y-m-d date while building the unique date list.
    • Calendar_Query::get_date_boundaries_for_page() now accepts events_per_date and constructs variable-length pages that include at least DAYS_PER_PAGE (5) dates and at least MIN_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 pass events_per_date into get_date_boundaries_for_page().

Changed

  • Calendar_Query::get_unique_event_dates() now returns events_per_date and counts events per Y-m-d date while building the unique date list.
  • Calendar_Query::get_date_boundaries_for_page() now accepts events_per_date and constructs variable-length pages that include at least DAYS_PER_PAGE (5) dates and at least MIN_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 pass events_per_date into get_date_boundaries_for_page().

Fixed

  • Calendar_Query::get_unique_event_dates() now returns events_per_date and counts events per Y-m-d date while building the unique date list.
  • Calendar_Query::get_date_boundaries_for_page() now accepts events_per_date and constructs variable-length pages that include at least DAYS_PER_PAGE (5) dates and at least MIN_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 pass events_per_date into get_date_boundaries_for_page().

[0.8.30] – 2026-01-05

Added

  • Skip Tool Item Context: Added EventEngineData::storeItemContext() and invoked it from EventImportHandler::markItemProcessed() so Data Machine’s skip_item tool can mark AI-skipped items as processed and prevent refetching on subsequent runs.

Fixed

  • ICS Calendar Sorting: Updated IcsCalendar handler to explicitly sort events chronologically using sortEventsWithOrder with SORT_ASC to ensure consistent data processing order.
  • WordPress Extractor Refinement: Enhanced WordPressExtractor to 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_DOMAINS blacklist 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_DOMAINS blacklist 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_DOMAINS blacklist 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 EventHealthCheck and UpdateEvent tools 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 article elements containing time tags, improving event detection for sites using Bricks builder and other modern CSS-in-JS frameworks.

Changed

  • WordPress Extractor Optimization: Refined WordPressExtractor to 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 venueTimezone into EventEngineData to ensure timezone data flows through the Data Machine pipeline to EventUpsert.
  • Venue Description Support: Added description field to UpdateVenue AI 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_Taxonomy to 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_term correctly 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-test invokable
    • Supports --upsert flag to validate end-to-end venue/event creation
  • 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-test invokable
  • Supports --upsert flag 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-test invokable
  • Supports --upsert flag 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 past query 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

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. Optional limit parameter 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 ToolRegistrationTrait for 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. Optional limit parameter 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. Optional limit parameter 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 UniversalWebScraper when browser-mode requests encounter 403 errors or captcha challenges (SiteGround/Cloudflare).
  • Advanced Browser Spoofing: Updated HttpClient with 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 SquarespaceExtractor to search for events in "Summary Blocks" and hidden template data when main collections are empty.
  • Improved Venue Extraction: Enhanced PageVenueExtractor to handle non-standard US address strings and Squarespace map widgets more effectively.
  • Sahara Lounge Support: Added brownbearsw.com as 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/embed without requiring calendar. subdomain, improving flexibility for various Google Calendar embed implementations.
  • HTTP Client Configuration: Added browser_mode => true to Google Calendar ICS fetch requests to improve compatibility with sites requiring browser-like behavior.

[0.7.1] – 2025-12-22

Added

  • EventUpsert Settings: Excluded category and post_tag taxonomies 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 extractFromSquarespaceMapBlock into PageVenueExtractor for high-reliability venue data parsing from map widgets.

Technical Details

  • UniversalWebScraper Fetch Configuration: Switched fetch_html to use browser_mode => true by default to improve compatibility with JavaScript-rendered sites.
  • Improved Address Parsing: Enhanced extractCityStateZip regex to handle comma-separated city/state/zip formats and added stricter US state/zip validation.
  • CLI Command Enhancement: Updated UniversalWebScraperTestCommand to output the full raw HTML content when extraction fails, aiding in scraper debugging.

[0.7.0] – 2025-12-21

Added

  • Scraper Title Detection: Added EventLink class pattern to title extraction logic for improved link identification.

Technical Details

  • Enhanced Page Venue Extraction: Added multi-layered JSON-LD support to PageVenueExtractor for high-fidelity venue metadata parsing from site headers and footers.
  • Venue Entity Discovery: Improved identification of MusicVenue, EntertainmentBusiness, and NightClub schema types in structured data.
  • RhpEvents Enhancement: Integrated page-level venue data merging into the RhpEventsExtractor to fill missing address fields in event listings.

[0.6.5] – 2025-12-20

Fixed

  • Extraction Priority: Refined PageVenueExtractor to 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 attemptWordPressApiDiscovery to UniversalWebScraper to automatically find event API endpoints when the main URL fetch fails.
  • Direct Structured Data Support: Added direct support for .ics and 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 UniversalWebScraper HTTP 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.md documenting 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 GoogleCalendar and WordPressEventsAPI handlers. Their logic is now consolidated into the UniversalWebScraper via specialized extractors (EmbeddedCalendarExtractor and WordPressExtractor).
  • Web Scraper Optimization: Reorganized extractor priority for better detection accuracy and reduced external HTTP requests.
  • CLI Improvements: Enhanced UniversalWebScraperTestCommand with improved venue ZIP code handling and display formatting.

[0.6.3] – 2025-12-17

Added

  • GoDaddy Extractor Enhancement: Added REST API detection to the GoDaddyExtractor in 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 GoDaddyExtractor to 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, and BandzoogleExtractor to the Universal Web Scraper.
  • WP-CLI Commands: Added test-scraper and test-scraper-url commands for debugging web scrapers.
  • Settings: Added geonames_username field 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 GeoNamesService for timezone lookups.
  • Added Venues::batch_update_timezones() REST endpoint.
  • Added assets/js/settings-backfill.js for admin timezone processing.

[0.5.20] – 2025-12-16

Changed

  • Prekindle Integration: Refactored the Prekindle handler into a specialized extractor within the UniversalWebScraper.
    • Added PrekindleExtractor with support for hybrid API/HTML data extraction.
    • Improved data accuracy by scraping pk-times HTML blocks for door and show times.
    • Removed legacy standalone Prekindle handler and settings classes.
  • Universal Web Scraper: Integrated PrekindleExtractor into the extraction pipeline.
  • Documentation: Updated universal-web-scraper-handler.md with technical details for Prekindle extraction support.

[0.5.19] – 2025-12-15

Changed

  • Added PrekindleExtractor with support for hybrid API/HTML data extraction.
  • Improved data accuracy by scraping pk-times HTML blocks for door and show times.
  • Removed legacy standalone Prekindle handler and settings classes.

Documentation

  • Added PrekindleExtractor with support for hybrid API/HTML data extraction.
  • Improved data accuracy by scraping pk-times HTML blocks for door and show times.
  • Removed legacy standalone Prekindle handler and settings classes.

[0.5.18] – 2025-12-15

Added

  • Timezone Support: Introduced centralized timezone handling for events and venues
    • Added DateTimeParser utility for robust UTC, local, and ISO 8601 parsing
    • Added venueTimezone metadata to VenueParameterProvider and Venue_Taxonomy
    • Updated Calendar_Query to respect venue-specific timezones for date grouping and display
  • Squarespace Extractor: New extractor for the Universal Web Scraper
    • Extracts events from Static.SQUARESPACE_CONTEXT JavaScript objects
    • High-fidelity extraction of title, description, images, and ticket URLs
  • 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 DateTimeParser utility for robust UTC, local, and ISO 8601 parsing
  • Added venueTimezone metadata to VenueParameterProvider and Venue_Taxonomy
  • Updated Calendar_Query to respect venue-specific timezones for date grouping and display

Fixed

  • Extracts events from Static.SQUARESPACE_CONTEXT JavaScript 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 DateTimeParser utility for robust UTC, local, and ISO 8601 parsing
  • Added venueTimezone metadata to VenueParameterProvider and Venue_Taxonomy
  • Updated Calendar_Query to respect venue-specific timezones for date grouping and display

Changed

  • Extracts events from Static.SQUARESPACE_CONTEXT JavaScript 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, and Ticketmaster to standardized FetchHandler patterns.
  • Universal Web Scraper: Refactored to use structured data extractors instead of monolithic extraction logic. Consolidated legacy standalone GoogleCalendar and WordPressEventsAPI handlers into EmbeddedCalendarExtractor and WordPressExtractor.
  • 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 scope parameter with public value 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_url to redirect_uri to 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.json with 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_taxonomy and archive_term_id parameters for proper filtering on taxonomy archive pages

Technical Details

  • Enhanced Date Range Filtering: Added user_date_range flag 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_url with 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 via search and exclude_keywords settings
  • Handler Title Validation: Centralized title exclusion logic in EventImportHandler::shouldSkipEventTitle() called by all handlers (DiceFm, DoStuffMediaApi, EventFlyer, Eventbrite, Universal Web Scraper, Ticketmaster)
  • EventbriteSettings: Added search and exclude_keywords fields for improved event filtering

Changed

  • Handler Base Class: Added getGlobalExcludedTitleKeywords() and shouldSkipEventTitle() methods to support centralized title filtering
  • Documentation: Created docs/godaddy-calendar-handler.md with full setup, configuration, and data mapping documentation

[0.5.5] – 2025-12-05

Changed

  • Plugin Dependency Slug: Corrected Requires Plugins header from datamachine to data-machine for 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 price field 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_taxonomy and archive_term_id parameters 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_items format 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])

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 description field

    • 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
  • Filter State Regex: Enhanced filter parameter parsing to support both indexed and non-indexed array syntax

    • Regex pattern now matches tax_filter[taxonomy][0] and tax_filter[taxonomy][] formats
    • Better compatibility with different WordPress filter parameter conventions
    • Fixes filter restoration on pagination with indexed array parameters
  • 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, .schedule classes
    • 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] and tax_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, .schedule classes
  • 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] and tax_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, .schedule classes
  • 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_PAGES constant (20) prevents infinite loops
    • Visited URL tracking prevents re-scraping same pages
    • Supports relative URLs, protocol-relative URLs, and same-domain validation
  • Ticketmaster API Pagination: Automatic traversal through API result pages
    • MAX_PAGE constant (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_PAGES constant (20) prevents infinite loops
  • Visited URL tracking prevents re-scraping same pages
  • Supports relative URLs, protocol-relative URLs, and same-domain validation

Changed

  • MAX_PAGE constant (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_PAGES constant (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_PAGE constant (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 FilterStateManager class
    • New inc/Blocks/Calendar/src/modules/filter-state.js module 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
  • Frontend JavaScript Architecture: Refactored calendar modules for better maintainability
    • Updated frontend.js to use new FilterStateManager instance pattern
    • Simplified filter-modal.js with cleaner state integration
    • Streamlined state.js by removing duplicated functionality
  • Documentation Expansion: Added comprehensive documentation for core components
    • docs/dynamic-tool-parameters-trait.md – Dynamic AI tool parameter filtering
    • docs/event-post-type.md – Event post type architecture
    • docs/event-upsert-system.md – Event upsert handler documentation
    • docs/meta-storage.md – Meta field storage system
    • docs/promoter-taxonomy.md – Promoter taxonomy implementation
    • docs/venue-service.md – Venue service architecture

Changed

  • New inc/Blocks/Calendar/src/modules/filter-state.js module 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.js to use new FilterStateManager instance pattern
  • Simplified filter-modal.js with cleaner state integration
  • Streamlined state.js by removing duplicated functionality

Fixed

  • docs/dynamic-tool-parameters-trait.md – Dynamic AI tool parameter filtering
  • docs/event-post-type.md – Event post type architecture
  • docs/event-upsert-system.md – Event upsert handler documentation
  • docs/meta-storage.md – Meta field storage system
  • docs/promoter-taxonomy.md – Promoter taxonomy implementation
  • docs/venue-service.md – Venue service architecture

Added

  • New inc/Blocks/Calendar/src/modules/filter-state.js module 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.js to use new FilterStateManager instance pattern
  • Simplified filter-modal.js with cleaner state integration
  • Streamlined state.js by removing duplicated functionality

Fixed

  • docs/dynamic-tool-parameters-trait.md – Dynamic AI tool parameter filtering
  • docs/event-post-type.md – Event post type architecture
  • docs/event-upsert-system.md – Event upsert handler documentation
  • docs/meta-storage.md – Meta field storage system
  • docs/promoter-taxonomy.md – Promoter taxonomy implementation
  • docs/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_selection is set to AI or a specific term; existing pipelines default to skip so 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_datetime meta so Google Search Console no longer flags missing endDate.
  • 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/filters for 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_selection is set to AI or a specific term; existing pipelines default to skip so no unintended promoter terms are attached.
  • Documentation: docs/event-schema-provider.md and docs/event-details-block.md now 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_Query now exposes a DAYS_PER_PAGE constant 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_Taxonomy registers 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 paged to 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 DynamicToolParametersTrait
    • getCoreToolParameters(), getSchemaToolParameters(), getAllToolParameters() now accept optional $engine_data parameter
    • 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
  • EventUpsert: Simplified parameter handling
    • Replaced engineOrTool() routing with simple buildEventData() merge
    • Engine parameters take precedence, AI fills in remaining fields
  • EventUpsertFilters: Updated getDynamicEventTool() to pass $engine_data to all parameter methods

Carousel Dot Styling – Refined visual feedback for carousel navigation

  • getCoreToolParameters(), getSchemaToolParameters(), getAllToolParameters() now accept optional $engine_data parameter
  • 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 simple buildEventData() merge
  • Engine parameters take precedence, AI fills in remaining fields

Architectural Benefits

  • getCoreToolParameters(), getSchemaToolParameters(), getAllToolParameters() now accept optional $engine_data parameter
  • 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 simple buildEventData() 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() with DataMachineCoreHttpClient::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.3] – 2025-11-23

Fixed

  • Replaced wp_remote_get() with DataMachineCoreHttpClient::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() with DataMachineCoreHttpClient::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