*** Queryra – AI Semantic Search Changelog ***

2026-07-22 - version 1.5.2
* New: scope filters via URL — a search request may carry
  filter_<dimension>=<value> parameters (e.g. /?s=shoes&filter_product_cat=boots),
  which are forwarded to the AI search API and applied BEFORE ranking, so the
  returned set is already narrowed. Dimension is a taxonomy slug (or "type"),
  value is a term/slug; several filters can be combined. A site adds these to
  its own search form. Nothing changes for searches without filter_ parameters.
* New: `queryra_result_ids` filter, applied to the ranked post IDs returned by
  the AI search API before they reach WordPress. Lets a site narrow the result
  set by its own rules — membership access, B2B groups, facets — which is
  logic only the site can know. Receives the ID array and the raw search term.
  If a callback removes every result the search returns nothing, rather than
  falling back to showing the whole site. (This trims AFTER retrieval; the
  filter_ URL parameters above narrow BEFORE retrieval and give exact counts.)
  Filter name suggested by @jonnwalker (https://profiles.wordpress.org/jonnwalker/)
  on the WordPress.org support forum.

2026-07-21 - version 1.5.1
* New: optional setup survey shown when the setup wizard opens — "What kind
  of site is this for?" and "What do you want better search to do for your
  site?". Both are optional, answering is a single click, and a visible
  Skip is always available. Asked before setup rather than after, so it
  still reaches people who run into trouble during installation.
* Privacy: the survey answer is not stored on your site at all. It is sent
  once to Queryra and that is the end of it; only a small flag stays
  locally so the question is not asked twice. You can answer or update it
  at any time in Settings → Site Profile.
* New: deactivation and survey events now record the interaction state —
  whether the form was submitted, skipped, or never shown at all (for
  example a WP-CLI or bulk deactivation). Declining is recorded as a
  decline; no answer content is ever sent for a skip.
* Improved: deactivation feedback — new reason "The trial limits were too
  small for my store", follow-up prompts tailored to the selected reason,
  an optional reply-to email address, and a clear disclosure of what is
  included with the feedback.
* Fixed: the deactivation feedback form now uses a single comment box
  whose prompt changes with the selected reason. Previously each reason
  had its own box, so text typed under one reason was silently dropped
  after picking another — and two reasons ("temporary deactivation",
  "I don't need it anymore") had no box at all.
* Improved: deactivation feedback is recorded as an analytics event
  (the source of truth) in addition to the email notification, so replies
  no longer get lost to bouncing mailboxes.
* Fixed (important): the search cache was silently switched to "Disabled"
  whenever any other settings tab was saved. All tabs share one settings
  group and the cache duration only existed on the Cache tab, so saving
  elsewhere wrote an empty value over it — meaning many sites were sending
  an API call for every single search without knowing. The setting now
  survives saves from every tab.
* Maintenance: because of the bug above, updating to this version restores
  the 1 day cache default on sites where the duration had been left at
  "Disabled". If you deliberately turned caching off, set it back on the
  Cache tab — the change is one click and applies immediately.
* Fixed: the plugin activation event was missing on some hosts, and when
  it did arrive it reported zero posts, pages and products. It is now sent
  on the first request after activation, after WordPress has registered
  all post types, so the content counts are correct.
* New: usage analytics now report which content types are enabled for
  indexing and how many published items that adds up to. Previously only
  per-type counts were sent, so a site without WooCommerce looked empty
  even when it had hundreds of posts — one figure now describes any site,
  store or not.
* New: usage analytics now include whether AI search is switched on. The
  feature ships disabled, and without this flag a site with plenty of
  indexed content but no searches was ambiguous — never enabled, or simply
  no visitors?

2026-07-11 - version 1.5.0
* Fixed (critical): the WordPress 7.0 Connectors status notice no longer
  runs on every wp-admin page. It now renders ONLY on the Connectors screen
  and reads the API-key status server-side from the stored validation
  result. The previous build injected a script on every admin page
  (including the post editor) that repeatedly polled a REST endpoint — on
  rate-limited / managed hosts (nginx limits, Cloudflare, mod_security)
  this could trigger an HTTP 429 cascade and break admin assets (jQuery,
  the block editor), causing a blank admin screen.
* Removed: the /wp-json/queryra/v1/key-status REST endpoint and ALL
  client-side polling (the setInterval loop and per-click refetch). Key
  status is now a single server-side read — zero background requests from
  the admin.
* Improved: admin JavaScript debug logging is silent unless WP_DEBUG is
  enabled (now matches the PHP logger).

2026-06-15 - version 1.4.4
* New: Custom Post Type support — AI search now indexes any public custom
  post type (recipes, vehicles, portfolios, listings, courses, etc.), not
  just posts, pages, and WooCommerce products. Enable each type in
  Settings → Content or during the setup wizard, then run Import All.
* New: ACF / Meta Box custom fields and custom taxonomies on those custom
  post types are indexed automatically — the extraction engine is
  post-type agnostic, so no extra configuration is needed.
* Improved: Records tab "Active in WordPress" now counts and lists enabled
  custom post types alongside posts, pages, and products.
* Improved: trashing or unpublishing a custom post type entry removes it
  from the index, same as for posts/pages/products.
* Improved: anonymous usage analytics now report a breakdown of public
  custom post types and their published-post counts, to help prioritise
  compatibility work. No personal data; honours QUERYRA_DISABLE_ANALYTICS.

2026-06-10 - version 1.4.3
* New: "Recent issues" panel on the Settings tab — import, search, API
  key, and integration problems are now visible in wp-admin (last 10,
  stored locally, repeated errors collapsed with a counter) instead of
  hidden in debug.log.
* New: error reporting (telemetry) for previously silent failure paths —
  auto-sync on post save/delete, frontend search fallback, B2BKing
  integration, API key validation, and client-side import errors
  (timeout, HTTP 413/5xx). Anonymous, bounded payloads, honours the
  QUERYRA_DISABLE_ANALYTICS opt-out; the local issue log works even
  with analytics disabled.
* Security: fixed an XSS in the setup wizard test-search results —
  record names returned from the API are now escaped before rendering
  in admin. All server/API error messages shown in admin JS are
  escaped as well.
* Fixed: trashed or unpublished posts are now removed from the AI
  search index. Previously only permanent deletion was synced, so a
  trashed product stayed in the index (consuming record quota) until
  the trash was emptied.
* Fixed: setup wizard now validates the API key BEFORE saving it — a
  mistyped key no longer overwrites a working one.
* Fixed: "Clear All Search Cache" now works on hosts with Redis or
  Memcached object caching (cache-version invalidation instead of
  SQL-only transient cleanup).
* Fixed: bulk import pagination is now stable on sites with many posts
  sharing the same publish date (ID tiebreaker) — no more skipped
  records during large imports.
* Improved: AI search API calls on the visitor-facing search path now
  use a 5-second timeout (was 30s) with a 60-second back-off after a
  failure — a slow or unreachable API can no longer pile up hung
  requests on the site.
* Improved: searches with no matches are briefly cached, so repeated
  misspelled queries and bot traffic no longer burn an API call per
  page view.
* Improved: admin no longer wipes cached plan/status data on a
  transient API error; failed key validation is automatically retried
  after 15 minutes (previously a network blip marked a good key
  invalid until it was re-saved).
* Maintenance: PHP 8 undefined-array-key warnings fixed in the admin
  sidebar, multibyte-safe truncation of error messages, cached options
  no longer autoloaded.

2026-06-02 - version 1.4.2
* Improved: AI search documentation accuracy — refined Partner Program
  copy, broadened audience wording (sites, blogs, catalogues — not
  stores-only), and corrected technical phrasing (semantic AI search
  is indexed on your content, not "trained" on it).
* New: AI search admin links now carry tracking parameters (UTM) so
  support can attribute referral traffic per install. Sentinel value
  `pre-init` flags fresh installs in logs for easier diagnostics.
* Improved: replaced `rel="noreferrer"` with `rel="noopener"` on admin
  links so AI search referrer attribution works server-side while
  keeping security best practices intact.
* Fixed: Plugin Check warnings cleared — plugin name now matches
  between header and readme; inline JS values encoded via
  `wp_json_encode()` for safe output escaping.
* Maintenance: minor AI search copy refinements throughout — softened
  absolute marketing claims to align with WordPress.org plugin
  directory guidelines.

2026-05-25 - version 1.4.1
* New: B2BKing (B2B for WooCommerce) integration — replaces the bulk
  order form keyword search with Queryra semantic AI search. Loads only
  when B2BKing is active; core untouched.
* Security: visibility-intersect ensures products hidden by B2B group,
  category, or per-product restriction never surface through semantic
  search. Fail-closed default if the visibility set cannot be verified.
* Performance: O(1) intersect lookups scale to 100k+ products.
* UX: bulk order form rebrand when AI Search is enabled —
  search placeholder "AI search — try anything…", sort option "AI Pick"
  (replaces "Automatic"), loader text "AI is thinking — not just
  searching…", and search icon swapped to Google Material Design
  `auto_awesome` (same icon library B2BKing already uses).
* Toggle: shares the master "Enable Queryra AI Search" option — single
  instant kill-switch. When off, B2BKing native search runs as before.
* Known limitations: pagination counts may show small discrepancies
  vs Queryra ranking; sort dropdown options other than "AI Pick" are
  overridden by AI relevance during search.

2026-05-25 - version 1.4.0
* Added - Search ability registered for site automation tools and AI assistants. Other plugins and agents can discover and invoke Queryra semantic search programmatically.
* Added - Developer filter queryra_validate_api_key for external API key validation. Returns true on success, WP_Error on failure. Reuses the same test_connection() round-trip Queryra uses internally.
* Added - Defensive guard against destructive overwrites of saved configuration by external code.
* Improved - API key field uses partial masking with click-to-edit (last 4 characters visible).
* Improved - Tested up to the latest WordPress version.

2026-05-20 - version 1.3.2
* Added - AI search compatibility with Oxygen Builder 6.0 — automatic content extraction from the new _oxygen_data postmeta format (double-encoded JSON tree, OxygenElements\Text nodes). AI search now indexes pages built with Oxygen 6.0 stable alongside Classic Oxygen 4.x
* Improved - AI search page builder coverage — Oxygen Builder 6.0 joins Elementor, Breakdance, Beaver Builder, and Classic Oxygen for full AI search indexing across the most popular WordPress page builders
* Improved - AI search reliability for migrated pages — sites that upgraded from Classic Oxygen 4.x to Oxygen 6.0 are correctly indexed (both legacy and new postmeta keys are read)

2026-05-18 - version 1.3.1
* Fixed - Critical: bulk sync returned HTTP 422 on sites without custom taxonomies. The empty taxonomies field was serialized as a JSON array ([]) instead of an object ({}), failing API validation. Affected most sites (blogs and stores using only standard categories/tags). Initial import now works on all sites.

2026-05-07 - version 1.3.0
* Added - Automatic content extraction from page builders: Elementor, Breakdance, Beaver Builder, Oxygen (legacy shortcodes + modern JSON v2)
* Added - Automatic content extraction from ACF (Free + Pro) — text, textarea, wysiwyg, repeaters, groups
* Added - Automatic content extraction from Meta Box — text fields and group fields via rwmb_meta_boxes registry
* Added - Custom taxonomies — all public custom taxonomies (book_genre, material, location, etc.) now sent in new "taxonomies" API field, keyed by slug
* Added - Developer filter queryra_indexable_meta_content — extend postmeta extraction with custom field plugins (Pods, JetEngine, custom)
* Added - Developer filter queryra_indexable_taxonomies — control which custom taxonomies are indexed
* Added - Smart text filter for postmeta extraction — automatically excludes CSS values, hex colors, URLs, dates, and other technical strings
* Fixed - Search query now properly displayed in page title ("Search results for: ...") and stays in the search input on results pages — previously both were empty after AI resolved the query
* Fixed - Description duplication — auto-generated excerpts were repeating the first 30 words of content; only manual excerpts are now included (and skipped if a substring of content)
* Fixed - WooCommerce short_description duplication when it overlaps the long description
* Improved - Bulk sync prefetches all postmeta in one query per batch — dramatically faster for large sites with many custom fields

2026-05-07 - version 1.2.0
* Added - AI Discoverability: dynamic /llms.txt and /llms-full.txt for ChatGPT, Perplexity, Claude, Google AI Overviews
* Added - Static file detection — if you already have llms.txt, the admin shows a copy-paste snippet to add the Queryra AI Search section
* Added - JSON-LD structured data: SearchResultsPage schema on search pages, Service schema site-wide, both attributing search to Queryra
* Added - X-Search-Engine HTTP header on search responses
* Added - Plugin row meta links on Plugins page: Live Demo, Docs, Support, conditional "Get API Key" when no key is set
* Added - Settings tab: "Try a test search" shortcut to wizard step 4
* Added - Dismissible tip card on Settings & wizard step 4 — quick wins for telling visitors that AI search is available
* Added - Support tab: Clubs section (Sandbox + partner program) and "Need more records or searches?" link to dashboard
* Improved - Support tab: "Documentation" renamed to "Resources" for broader scope (compatibility matrix, plugin tests)
* Improved - All external admin links carry rel="noopener noreferrer" for security
* Removed - Obsolete 1.1.4 upgrade notice and AJAX handler

2026-04-20 - version 1.1.11
* Added - AI search plugin fingerprint (meta generator tag + minimal stylesheet) for WordPress ecosystem discoverability (themesinfo, WPHive, Wappalyzer, BuiltWith)
* Added - Wizard content type selection — pick which post types to send to AI search (posts, pages, WooCommerce products)
* Improved - Removed legacy non-batched import paths — AI search content import is now always batched
* Improved - Admin notice dismissal: nonce output now escaped with esc_attr() for defense-in-depth security

2026-04-09 - version 1.1.10
* Fixed - Null safety check for WooCommerce product sync operations (PHP 8.0+ compatibility)
* Fixed - Added nonce verification to admin notice dismissal for improved security
* Improved - Semantic search index stability during product deletion edge cases
* Improved - WooCommerce product search reliability for high-traffic stores

2026-04-09 - version 1.1.9
* Improved - AI search ranking optimized for WooCommerce product search relevance
* Improved - Semantic search accuracy for natural language queries and intent detection
* Updated - LLM query parser now handles multilingual semantic search queries with better accuracy
* Updated - AI search index synchronization performance for large WooCommerce catalogs
* Updated - Documentation and FAQ for WooCommerce AI search setup

2026-03-30 - version 1.1.8
* Updated - Multilingual search now supports 50+ languages out of the box — no configuration needed
* Updated - Documentation to reflect multilingual support launch

2026-03-19 - version 1.1.7
* Updated - Plugin title and short description for better WordPress.org discoverability
* Added - "Beyond semantic search" example with intent-aware price filter and brand exclusion
* Improved - Removed hardcoded pricing from all docs — single source at queryra.com/pricing

2026-03-15 - version 1.1.6
* Removed - API URL field from settings (hardcoded to default)
* Added - Instance ID display in Support tab for troubleshooting
* Improved - Status endpoint sends instance_id and plugin_type
* Improved - Partner referral tracking via site_url for partner API keys

2026-03-03 - version 1.1.5
* Added - Batched bulk import with progress bar for large sites (50K+ records)
* Added - Plan limit check before import starts
* Improved - Import reliability with automatic retry support
* Improved - Setup Wizard import now uses batched sync

2026-02-25 - version 1.1.4
* Added - Configurable cache duration (1 minute to forever)
* Added - Record type (post/page/product) and platform metadata
* Added - Search filtering by content type
* Improved - Search Analytics with top queries and zero-result queries
* Update - Cache settings UI in admin panel

2026-02-13 - version 1.1.3
* Added - Live WooCommerce demo store at woo.queryra.com
* Update - Plugin description with real product examples
* Added - New FAQ entries with demo store links

2026-02-10 - version 1.1.2
* Fixed - Search results display and pagination
* Update - AJAX live search performance improvements
* Fixed - Minor bug fixes and stability improvements

2026-02-05 - version 1.1.1
* Added - WooCommerce variations support
* Fixed - Product sync reliability improvements
* Update - Search relevance scoring

2026-02-01 - version 1.1.0
* Added - Setup Wizard for guided onboarding
* Added - Auto-sync for new products
* Added - Search analytics dashboard
* Update - Compatibility with popular themes

2026-01-29 - version 1.0.0
* Added - Initial release
* Added - AI semantic search for WooCommerce products
* Added - AJAX live search with instant results
* Added - One-click product import
* Added - Support for posts, pages, and WooCommerce products
