=== CataLord - changelog for earlier versions ===

The most recent versions are listed in readme.txt.

= 15.7.15 =
* Maintenance: internal housekeeping and minor improvements.

= 15.7.14 =
* New: an "Enhance quality" quick action in the AI image editor re-creates a small or blurry photo at high resolution without changing anything in it.
* Improvement: Fill with AI and product-page import show the AI example values for each attribute and ask for the same format, so a number-only attribute comes back as a number.
* Improvement: Fill with AI remembers which fields you ticked last time.
* Fix: the attribute delete warning lists only products whose variations are built on that attribute; a variable product carrying it as a plain spec no longer triggers it.

= 15.7.13 =
* Fix: images brought in by Fill with AI, by a product-page import, and by the CSV importer's "process images" option now follow the crop and resize settings even when an unprocessed copy of the same image already exists in the media library.

= 15.7.12 =
* Fix: the default product category can no longer be deleted from the Taxonomies screen.
* Fix: creating a category, tag, brand or attribute value that already exists reports the duplicate and keeps what was typed.
* Fix: subcategories show their updated path as soon as their parent category is deleted.
* Fix: deleting an attribute also removes its value rows from every variation.
* Fix: Bulk Edit price changes leave products without a price untouched, and sale-price changes start from the regular price, as in WooCommerce.
* Fix: Bulk Edit "In Stock" and "Out of Stock" leave products and variations that manage stock unchanged, as in WooCommerce.
* Fix: Quick Edit keeps the product's creation date. It changes only when a scheduled product is published.
* Fix: duplicating a variable product keeps each variation's description, enabled state, display order and low-stock threshold, and the linked upsell and cross-sell products.
* Fix: abandoned pasted images, rejected AI image variations and detached imported images are removed from the Media Library again.
* Fix: pasting an image from a private or internal address shows the reason, and no request is made to that address.
* Fix: only a real AI service outage pauses AI for the site. An invalid API key, an exhausted quota or a content-filter block affects that request only.
* Improvement: replies blocked by the AI's content filters or cut off for length say so.
* Fix: sorting the product list by price, sale price or weight respects decimals and places products without a value last.
* Improvement: the product list loads with far fewer database queries on pages with many variable products.
* Fix: the "Open in WP Sheet Editor" hand-off carries the active filters.
* Fix: product search in Linked Products keeps working in a tab left open for a long time.
* Improvement: the cleanup after deleting an attribute value completes on large catalogs.

= 15.7.11 =
* Housekeeping: a WordPress.org readiness pass. No new features; the free version now carries only what it can use, and the code was tightened to the WordPress coding standards throughout.
* Fix: the plugin's private uploads folder is recreated if it goes missing between requests.

= 15.7.10 =
* Fix: Sheet Mode no longer shows attribute values for variations whose attribute is not marked as used for variations; it names variations exactly as the product editor does.
* Fix: value suggestions in Variant Setup now also work on stores with thousands of attribute values (they are fetched on demand).

= 15.7.9 =
* Fix: variations are no longer deleted on save when a WooCommerce "Any" variation has no attribute key, or when two variations share the same attributes.
* Fix: local (non-global) attribute values keep their original text in the variant builder and in CSV import, so the storefront can match them.
* Fix: CSV import now identifies existing products by the ID column (and cross-site lineage) before the SKU, like WooCommerce.
* Fix: CSV import matches attributes by label as well as slug, so Hebrew labels with English slugs no longer create phantom attributes.
* Fix: CSV import of a variation with an attribute the parent lacks skips that attribute with a warning instead of writing an orphan key; a value the parent does not offer is added to the parent.
* Fix: CSV import no longer re-downloads a product's own images on a same-site round trip.
* Fix: CSV import keeps upsells, cross-sells and grouped children that reference products without a SKU.
* Fix: a partial variation row without a SKU that fits several variations is skipped instead of updating the first one found.
* Fix: an images cell that lists fewer images replaces the gallery, as in WooCommerce; empty cells still leave images untouched.
* Fix: blank "visible" and "catalog visibility" cells no longer hide attributes or fail rows.
* Fix: Hebrew global attributes keep their "used for variations" flag after a parent-only CSV update.

= 15.7.8 =
* Translation notes added to the new strings so translators know what each placeholder stands for. No functional change.

= 15.7.7 =
* **Large catalog exports work again.** Confirming the "You are about to export N products" prompt no longer fails with "Too many requests", and exports that need more than one pass no longer come back missing products.
* **Choose whether attribute and download columns are exported.** They are now options in the export column list, as in WooCommerce's own exporter.
* **Sheet Mode is fast on stores with many attributes.** Scrolling redraws only the rows entering the screen, attribute columns start hidden so you turn on just the ones you need, and the Columns menu keeps its place while you work.
* **The Attributes block copes with big stores.** Above 12 global attributes, the editor shows what is set on the product, suggests what products in the same category use, and finds any other attribute by name or value. Smaller stores keep the full open list.
* **Create categories, brands and tags on the spot** from Quick Edit and Bulk Edit, exactly as in the product editor. Bulk Edit's brand search now filters the list.
* **Uncategorized steps aside.** Ticking a real category unticks WooCommerce's Uncategorized fallback, wherever categories are picked.
* **Manual crop refinements.** The crop starts square, Ctrl while dragging resizes from both sides, and "Cancel" becomes "Done" once a crop is saved.

= 15.7.6 =
* Now runs on WordPress 6.5 and later.
* Various code improvements.

= 15.7.5 =
* **Long product names no longer stretch the list sideways.** They wrap inside their own column, so the table stays readable without scrolling across.
* **The Last Update column fits a narrow screen.** It stacks onto separate lines when the table runs out of room, the way the stock column already did.
* **The text colour button is easier to find, and shows the colour it will apply.** It is now a paint brush rather than an underlined A, and it takes on whatever colour you pick. In all three designs.
* **A clearer Replace icon on the main product image.** Exchange arrows instead of a pencil, so it reads as swapping the image rather than editing it.
* **Hebrew labels are no longer over spaced.** Word spacing in field labels and column headings is back to normal.
* **Even frames on product thumbnails.** A small visual fix in the Nerdy design.

= 15.7.4 =
* Design and user experience improvements across the plugin.

= 15.7.3 =
* **Product status is easier to see.** In the Nerdy design the status now sits in a lightly tinted chip instead of a word with a small dot beside it.
* **Status menus show their colours.** The coloured dot now appears beside every option in the status menus, so a status is quicker to read.
* **Categories stand apart from the product name.** In the products table they are now grey with a dotted underline, so the row reads in order and it is clear they can be clicked.
* **The description editor's icons were redrawn** to match the Nerdy design.
* **Settings moved.** Settings now sits below Taxonomies in the CataLord menu.
* **Fixed:** icons load faster on every Nerdy screen.

= 15.7.2 =
* **Try Pro before you buy.** The upgrade window now leads with a 14 day free trial and keeps the purchase option beside it. No card is needed to start, and the trial button only appears while a trial is actually available to you.
* **The upgrade window now matches the Nerdy design.** Flat white, ruled rows and one green button, instead of the rounded, gradient panel it carried over from the old look. The PRO badges on locked buttons were redrawn to match as well.
* **Clearer wording.** "Attribute CRUD" is now "Attribute Management" wherever it appeared.
* **Fixed:** the product name of a locked feature no longer replaces the CataLord Pro label in the upgrade window - both are shown.
* **Fixed:** five icons in the upgrade window kept their old rounded drawings under the Nerdy design and now match the rest of the set.

= 15.7.1 =
* **Fixed:** picking a design on the Settings page confirmed the change but did not show it until you reloaded. The page now reloads for you as soon as the choice is saved.
* **Changed:** the Hebrew translation covers the design names and the Appearance help text.

= 15.7.0 =
* **A new look, and it is now the default.** CataLord has a third design called Nerdy: a flat, ruled catalog sheet. Square corners, hairline rules instead of shadows, and a monospaced face for the data, so SKUs, prices and stock line up down a column the way they do on a real sheet. It covers every screen, Sheet Mode included.
* **Every icon redrawn to match.** The whole set was rebuilt in the same angular language, and each icon is drawn twice, once for large sizes and once for small, so it stays sharp in the product table rather than being shrunk until it blurs.
* **Your choice is kept.** The design is saved per user, so it does not affect anyone else on the store. Classic and Modern are both still available, and if you had already chosen one it stays chosen. The setting now sits at the top of the Settings page.

= 15.6.7 =
* **Fixed:** the upgrade dialog still listed multi-attribute variants as a Pro feature. They became free in 15.6.6, along with the "Any" pattern and variant inheritance. The feature list now reflects what is actually in Pro.

= 15.6.6 =
* **Now free:** the full Variant Builder. Multi-attribute generation (Color x Size x Material), the "Any" variant pattern and auto-inheritance from the closest existing variant are no longer part of Pro. If you were on the free plugin, they simply start working.
* **Housekeeping:** the Total Sales column moved into a self-contained Pro module. No change for anyone using it.

= 15.6.5 =
* **Changed:** the plugin now appears as "CataLord" on your Plugins screen, with CataLord Team as the author.
* **Housekeeping:** a WordPress.org readiness pass. The plugin identifier was aligned to `catalord`, the licence of every bundled third-party library is now documented in the readme, and the code was annotated to WordPress coding standards throughout. Nothing about how the plugin works has changed.

= 15.6.4 =
* **New:** a dedicated Settings page (CataLord -> Settings) that gathers everything in one place - your Google Gemini key, the default AI output language, a custom system prompt, image-processing defaults, privacy options, and the Modern/Classic editor look.
* **New:** image-processing defaults (resize to 1000x1000 and crop to a 1:1 square) now also apply to images you drag from your computer onto a product, converting them to WebP on save - matching the URL, clipboard and CSV import behaviour. Turn either off to import images untouched.
* **Improved:** every setting stays in sync no matter where you change it - the Settings page and the in-editor controls now act as two switches on the same option.
* **Improved:** when an AI feature needs a Gemini key, CataLord now says so clearly (with a link to add one) instead of quietly producing empty content.

= 15.6.3 =
* **Fixed:** the in-plugin upgrade screen showed outdated Pro prices; it now matches the current pricing ($99 / $199 / $299 per year for 1 / 5 / unlimited sites).

= 15.6.2 =

= 15.6.1 =
* **Maintenance:** updated the licensing SDK and tidied the plugin's uninstall routine. No feature changes.

= 15.6.0 =
* **New name:** the plugin is now called CataLord (formerly SnapWoo). This is a name change only, all of your settings, products and saved data carry over automatically on the first load after updating, including your saved API key.

= 15.5.53 =
* **Data integrity:** deleting a global attribute now also clears the default-attribute entries that referenced it, so re-creating an attribute with the same name cannot resurrect a preselection pointing at a term that no longer exists.
* **Data integrity:** products in "Pending review" survive a CSV export and re-import. They were coming back as drafts and silently dropping out of the review queue.
* **Data integrity:** a failed import row can no longer hand a deleted image to a later row that used the same image URL.
* **Data integrity:** custom-field writes no longer run when the product itself failed to save.
* **Media:** the three places that delete a pasted or AI-generated image now ask whether anything on the site still uses it, not just whether a product does. An image you had placed in a page, a category description or a custom field could previously be destroyed by a stale Cancel request.
* **Permissions:** the CSV enrichment step no longer imports images for a user whose role cannot upload files. Enriching text still works for those users.
* **CSV import:** blank separator lines in a hand-edited file are ignored instead of being reported as failed products; a semicolon- or tab-separated file is refused with an explanation instead of creating garbage products; and a deferred-variation queue that a host's object cache refuses to store is reported instead of silently losing those rows.
* **Grouped products:** they open as grouped and are read-only in CataLord, which does not edit the list of products in a group. Previously they opened labelled "Simple", and correcting that label converted the product and orphaned the group.
* **Dates:** every date CataLord shows now follows the site's own date format instead of a fixed day/month/year, so it agrees with WooCommerce's own screens.
* **Translations:** plural forms and string contexts now reach translators, so counted messages can be translated properly rather than falling back to English. Several remaining English-only messages were wrapped, and the Hebrew translation was extended.
* **Performance:** saving a product with attributes issues one term query instead of one per registered attribute.
* **Site Health:** the "AI usage today" row reports real usage instead of a fixed cap that nothing enforced.
* **Housekeeping:** removed an unused file-deleting AJAX endpoint and an unreachable helper; the User-Agent documentation now matches what the plugin actually sends.

= 15.5.52 =
* **Security:** the shared lock is a real mutex (compare-and-swap reclaim, token-checked release); image de-duplication no longer bypasses per-attachment permissions; only the bundled DOMPurify at its pinned version is used; translated strings reaching admin HTML are escaped.
* **Data loss:** a failed CSV row could permanently delete images it had only reused, including media imported by WooCommerce itself. Rollback is now limited to what the row created.
* **Data integrity:** variation rows carrying type modifiers import correctly; download identifiers survive a re-import; importing values for one attribute no longer resets its other settings; blocked variation deletions are reported instead of counted as successes; duplication is idempotent; CSV retry protection outlives what it protects.
* **UX:** unsaved-changes protection covers every field in the editor; an expired session during save is identified and retried once; search boxes cancel in-flight requests.
* **Privacy + build:** builds refuse to run with WordPress.org placeholders in place and are byte-identical for identical source.

= 15.5.51 =
* **Security:** filtered CSV export no longer falls back to exporting the whole catalog across authors; bundled DOMPurify upgraded past CVE-2024-45801 and CVE-2024-47875.
* **Privacy:** the admin font is self-hosted, and logged URLs are stripped of their query strings.
* **Compatibility:** minimum WooCommerce raised to 9.9 (filtered export calls an API that does not exist before it).
* **Data integrity:** cross-type SKU matches are refused; updating one attribute no longer deletes the others; WooCommerce's native export format (type modifiers, download columns, GTIN) round-trips; deferred variations are retried to the end of the import; deletions and restores verify they took effect.
* **Media:** orphan cleanup checks whether an image is used anywhere on the site, not just on products; a failed row cleans up what it downloaded.
* **Uninstall:** deleting the plugin removes its whole footprint, including stored keys and staged CSV files.
