=== TSO Options & Tables Cleaner — older changelog ===
Current releases are listed in readme.txt.

= 1.3.7 =
* Fix: cleanup crashes and data-safety issues (auto-drafts younger than one day are kept, revisions cleanup no longer crashes, wp_options viewer no longer instantiates objects) and the code-scan index no longer times out on slow hosts
* Fix: better owner detection for wp_options keys (Yoast SEO keys no longer listed under other plugins; plugins that only read a key no longer own it) and the Cron tab and automatic cleanup "Next run" now update correctly
* Improvement: the "no backup" notice asks for a full database backup (wp_options + extra tables) and reappears when it is over 7 days old; single-table backups no longer hide it
* Improvement: refreshed wp_options summary cards, and no more theme flash, sideways tab jumps or light strip in night mode when switching tabs

= 1.3.6 =
* Fix: the auto-drafts cleanup no longer deletes auto-drafts younger than one day, so a post editor left open no longer breaks when its draft is removed
* Improvement: the Cron tab now updates its list in place (no page reload) right after each scheduled event is due, instead of on a fixed timer
* Fix: automatic cleanup "Next run" could show a date far beyond the selected frequency (e.g. 20 days on weekly) because every save pushed it out; saving no longer moves an existing schedule and the next run is realigned to last run + interval
* Fix: cleaning post revisions / old revisions (and other post deletions) crashed with a critical error caused by an infinite recursion in the cleanup capability filter
* Security hardening: the wp_options value viewer no longer instantiates PHP objects when unserializing a stored option's raw value (allowed_classes disabled), reducing object-injection exposure from other plugins' data
* Fix: code-scan index build (option/table detection across installed plugins and themes) could hit "Maximum execution time exceeded" and fatal out on hosts with a low time limit or slow disk; it now stops within a safe time budget instead of running until the host kills it

= 1.3.5 =
* Admin: day / night / auto UI theme
* Language: first use now follows the WordPress language installed for that user (Catalan/Spanish/English) instead of always defaulting to Catalan; falls back to English when unsupported
* Performance: several admin_init/init hooks (options-tab signature, pre-theme-switch snapshot, code-scan cache warm-up, one-time storage/option-map migrations, comment-trash backfill, auto-clean cron migration) now only run on the relevant screen instead of on every wp-admin page or, in two cases, every front-end request
* Current status tab: new DB size and persistent object-cache indicators, total KB shown for top autoload options, one-click wp_options refresh, and a 7-day "hide this notice" link on non-urgent findings; fixed a duplicate history read on every load
* General cleanup tab: removed duplicate COUNT queries — refreshing action counts after a manual run or a retention-days change now reuses the already-computed stats instead of re-querying each action separately

= 1.3.4 =
* Extra tables: fix delete UI when «Allow table deletion» is enabled (instant unlock + sync on reload)
* Extra tables: correct detection for TSO plugin tables named pluginstso_* (legacy pluginspc_* aliases)
* Options tab: search matches plugin group names (e.g. «really» finds Really Simple Security); clear ✕ on search field
* Status tab: recent plugin/theme changes shown in a compact table with action badges
* Detection audit: path column stacks segments; table fits viewport without forced horizontal scroll
* Email report: inline CSS only (WordPress.org Plugin Check)
* Regression tests: auto-clean schedule includes cleanup helpers


= 1.3.3 =
* Admin: new **Current status** tab (default) with database overview and shortcuts to cleanup
* Admin: modal overlays (rename group, option viewer, assign) render in the footer so they no longer break page layout
* Admin: consolidated overlay CSS/JS; single asset enqueue; shipped Catalan and Spanish `.mo` catalogs
* Admin: screen query args centralized in storage helpers; assign modal placeholder translated
* Code: backup, cleanup, optimize, and status handlers split into dedicated include files (smaller core)
* Cron tab: live filter by hook, type, and search text without clicking Filter
* UI: nav width aligned to 1100px; historial title alignment; backup warning panel compacted
* Detection audit table: fixed column layout (horizontal scroll, readable paths and sample options)

= 1.3.2 =
* WordPress.org Plugin Check: admin UI uses enqueued JS/CSS only (no inline onclick, onchange, or style attributes)
* Security: escaped admin tab and language URLs; AJAX refresh nonce requires verified nonce and manage_options
* Uninstall: removes the plugin uploads folder (backups and options-tab cache); FAQ updated
* Requires at least WordPress 6.1

= 1.3.1 =
* Options tab cache: no longer rebuilds on every visit when the automatic key map grows; language-aware payloads; cheaper inventory fingerprint (count + max id)
* Auto-clean: owned daily/weekly/monthly schedules (weekly = 7 days); far-overdue runs catch up instead of only postponing
* Extra tables list: live search, sortable columns (default size), bulk actions only on visible filtered rows
* After plugin delete, leftover options keep ownership in the key map (same idea as leftover tables)
* Backup restore confirmation accepts RESTORE / RESTAURAR by UI language
* DROP TABLE reports success only after verifying the table is gone
* Cron “Run now” consumes one-shot events and reschedules recurring ones
* Admin JS strings follow the plugin UI language (CA / ES / EN)
* Widgets: CPOThemes/Enclosed identification; unidentified widgets sorted first

= 1.3.0 =
* Safety: WordPress core options are locked in the UI and every delete handler
* Detection V2 is the default (candidates, score, margin); evidence merges by owner to cut false Unconfirmed rows
* Widgets: manual assignment and plugin_disk/history detection move rows out of the shared Widgets bucket; theme groups resolve to wp-content/themes/
* Extra tables: activation snapshots, schema signatures (WPForms, Gravity Forms, Rank Math, WooCommerce, etc.), sibling propagation and candidate UI
* Options tab groups by owner token; audit panel shows evidence and uncertain-row filter; History records tables_mapped with source
* Hosting stacks (Freemius, Softaculous, WP Toolkit) show a warning but stay manually deletable

= 1.2.7 =
* Detection audit: theme vs plugin on-disk checks, synthetic hosting/SDK labels, group-flag mismatch detection, mixed-sample normalization
* Detection: theme_mods_* never remapped to plugins via codescan; theme path hints under wp-content/themes
* History: malformed rows filtered, safer upgrader slug resolution, Softaculous keys excluded from history index
* Extra tables: WordPress core / multisite protected tables excluded; quoted DROP identifiers
* General cleanup: expired transients savings fix, retention_days partial save, multisite OPTIMIZE scope
* Backup: reliable delete check, uploads protection files, unique filenames, cache flush after restore
* Softaculous / hosting options (softaculous_*, ai-install) stay in their own group — never merged into WP plugins
* Options tab: Active/Inactive group status reconciled from live plugin inventory after merge
* Options-tab cache: avoid duplicate delete_option calls after flush; fix inv_sig / cache-blob storage keys (schema 7)
* AJAX/admin: POST reads via storage helpers; retention_days isset preserved after helper migration
* Tested up to WordPress 7.1; Plugin Check PHPCS on DROP TABLE queries

= 1.2.5 =
* History Details: version, folder, bootstrap path, and automatic "replaces" hint when a recently deleted plugin shares the same option-prefix family
* History: show mapped_on_delete for theme keys_mapped events; enrich older rows on display
* Detection: shared prefixes (e.g. tsosk_) resolve to the currently installed plugin folder without manual aliases
* Backup tab: select and delete multiple backups in bulk
* Storage: validated admin POST helper for bulk backup filenames (Plugin Check / PHPCS)

= 1.2.0 =
* Extra tables: master switch "Allow table deletion" (default off); when on, any extra table can be deleted with confirm + backup
* Auto-clean: keep table_key_map while leftover tables still exist (better orphan attribution)
* Expired transients: fallback now deletes timeout and value pairs
* OPTIMIZE: only tables with estimated free space (DATA_FREE); clearer UI wording
* Cleanup: chunked post/comment deletes; comment trash backfill uses comment_date_gmt

= 1.1.5 =
* Unified uploads layout: wp-content/uploads/tso-options-tables-cleaner/backups/ and .../options-tab-cache/
* Auto-migrates legacy folders (tso-backups, tso-options-tables-cleaner-backups, tso-options-tab-cache, tso-options-tables-cleaner-options-tab-cache)
* Schema 6 migration with dual-read fallback for backups and options-tab cache
* Ensures index.php and .htaccess on unified subfolders after migration
* Migration fallback when WP_Filesystem move fails (rename/copy)
* Readme, privacy policy, and Backup tab UI updated to new paths

= 1.1.0 =
* Freemius fs_* options grouped as "Freemius (no borrar)" with delete protection
* Extra tables: history + inventory reconcile pass (fixes false orphans e.g. CleanTalk active)
* CleanTalk cleantalk_ slug hint -> cleantalk-spam-protect
* YARPP false orphan fix (stale table_key_map / prefix label)
* Delete: confirmed uninstalled residue allowed with recent_writes MySQL signal
* Detection regression fixtures (Freemius, CleanTalk, YARPP)

= 1.0.1 =
* Table detection: confidence scoring, prefix-map reconciliation, and regression fixtures (Yoast, ODB, Meow Gallery, YARPP)
* Extra tables: custom table map, Confirm/Assign actions, detection source badges
* Table inspector: layered created/updated dates (row data, TSO history, MySQL metadata) with reliability hints
* Orphan vs active: fixes for false positives on uninstalled plugins and false orphans on active plugins
* Delete safety: confirmed uninstalled residue may be deleted even when MySQL shows recent activity
* Readme: documented heuristic detection limits and review-only safeguards
* Release tooling: scripts/release-check.ps1 chains phpcs-check + detection regression + Plugin Check checklist

= 1.0.0 =
* First public release on WordPress.org
* General cleanup: expired transients, revisions, drafts, trash, spam, orphan metadata
* wp_options manager with plugin/theme detection (300+ known prefixes), grouping, and bulk delete
* Extra tables tab: detect leftover plugin tables, export SQL, drop with safeguards
* Plugin and theme history log with automatic key mapping on install/activate/switch
* Full database backup to wp-content/uploads/tso-backups/ (download, restore, delete)
* Table optimizer for fragmented InnoDB/MyISAM tables
* Scheduled cleanup via WP-Cron with optional email summary
* Admin UI in Catalan, Spanish, and English (per-user language preference)
* Compatible with LiteSpeed Cache and WordPress 7.0
