*** Status Desk Changelog ***

2026-10-11 - version 1.6.3
* Tweak - readme: first FAQ entry "Where do I find Status Desk after installing it?" (WooCommerce → Status Desk, or "Settings" on the Plugins screen). The readme changelog and upgrade notice name 1.6.3 as the first WordPress.org release. No code change.

2026-10-09 - version 1.6.2
* Tweak - Security contact in the readme is office@wedoingood.com (company domain). The readme changelog and upgrade notice name 1.6.2 as the first WordPress.org release. No code change.

2026-10-09 - version 1.6.1
* Tweak - Every echo escapes at the point of output: help tips through wp_kses() (new Admin::print_help_tip(); Admin::help_tip() still returns the markup), status badges, form attributes and field errors printed with escaping, links of the Emails column (filter status_desk_status_email_links) through wp_kses(). No phpcs:ignore for output escaping is left. Same HTML as before.
* Tweak - Removed the Pro tab, the Pro hint and grayed Pro fields in the status form, and the Pro tip with its usage counter (class Upgrade; the filters status_desk_pro_url and status_desk_pro_active are no longer read). The status_desk_usage option stays; uninstall with "Delete all data" removes it. Old links to the Pro tab show the statuses list.
* Tweak - The status form card is called "Customer communication", or "Customer and team communication" when an add-on adds fields to it (status_desk_status_form_after_fields).
* Tweak - The "WooCommerce is required" notice shows only on the Plugins screen (WordPress already refuses to activate Status Desk without WooCommerce through Requires Plugins).

2026-10-08 - version 1.6.0
* Tweak - Pro tab: a card and a comparison row for automatic moves after a set time (Status Desk Pro 1.6.0). No change to how Status Desk itself works.
* Dev - Independent version numbers: Status Desk and Status Desk Pro each get a new version only when they change. bin/set-version.sh takes the plugin (free|pro); bin/check-versions.sh checks each plugin against its own version and that Pro's minimum Status Desk version (Compat::MIN_FREE) is met; differing environment headers are only reported.

2026-10-08 - version 1.5.0
* New - Customer status emails go out once per order and status (setting "Send each status email only once per order", Settings → Notifications, on by default, also for existing shops). A skipped email leaves an order note. Order action "Email the customer: <status>" sends it anyway and leaves a note; it is refused with a note when the status was changed in the same save (the action was chosen for the old status). The status form says "Sent once per order". Sent times are kept in the order meta _status_desk_emailed (saved without a full order save).
* Fix - Orders moved from pending/failed to a status that waits for payment (e.g. bank transfer, check or cash on delivery placed into "Awaiting transfer") sent no email since 1.0: now WooCommerce's New order (shop) and Customer On hold (customer, with the payment instructions when an add-on maps them) are sent, as WooCommerce does for On hold. A status with its own customer email sends that one instead of On hold.
* Fix - The hint about the hidden Actions column no longer shows on the order edit screen (High-Performance Order Storage shares the list's screen id).
* Tweak - More than 5 customer status emails in one request (bulk actions) are sent in the background through Action Scheduler (status_desk_send_status_email_later, group status-desk), only while the order still has that status.
* Tweak - Settings tab in cards with headings: Notifications, add-on cards, Plugin data. New hooks status_desk_notification_fields, status_desk_notification_fields_end, status_desk_settings_cards, status_desk_settings_data_fields; status_desk_settings_fields (1.4 and older) still works in a card of its own. The "Settings saved." message is set before status_desk_settings_saved so an add-on can replace it with a warning.
* Dev - Help: emails once per order and the order action. bin/check-free-zip.sh: Free may now use Action Scheduler async actions; rejects the Pro notification data and ids. Uninstall with "delete data" removes _status_desk_emailed and queued emails.

2026-10-08 - version 1.4.0
* Tweak - Pro tab: a fact from the shop ("N orders in <status> have not been updated for more than 7 days", with a link to the orders in that status, oldest first; one read-only count, cached for an hour) and the Pro alerts for orders that wait too long in the feature list and the comparison.
* Tweak - Status form hint: "a message for customers in My Account and in the status email" (was "in their order emails").
* Dev - bin/check-free-zip.sh also rejects the data, hooks and background jobs of the Pro alerts.

2026-10-07 - version 1.3.4
* Tweak - Released together with Status Desk Pro 1.3.4 (clearer payment method settings in Pro); no changes in Status Desk.

2026-10-07 - version 1.3.3
* Tweak - The WooCommerce menu item and the screen title are now "Status Desk", the same name as on the Plugins screen (were "Order Statuses"). The screen address stays the same.
* Fix - Adding a status with the slug of a built-in WooCommerce status (for example "completed") now says that the slug belongs to WooCommerce, instead of pointing to the Import tab, which does not offer built-in statuses.

2026-10-06 - version 1.3.2
* Tweak - License written the same way in the plugin header and the readme (GPLv2 or later).
* Tweak - The "WooCommerce is required" notice says how to fix it.

2026-10-06 - version 1.3.1
* Tweak - Prepared for WordPress.org: contributor and author wedoingood, security contact (wedoingoodplugins@gmail.com) and support scope in the readme, readme changelog starts with the first public release (full history stays in this file).

2026-10-06 - version 1.3.0
* Tweak - Until Status Desk Pro is on sale, the Pro hints say "coming soon": no external link or buy button, no grayed Pro fields in the status form (one line instead) and no tip after 50 orders. The status_desk_pro_url filter (empty by default) switches the product link and the tip on.
* Tweak - Readme: Status Desk Pro is described as coming soon.
* Dev - Upgrade::pro_available(); Upgrade::pro_url() returns an escaped URL or ''.

2026-10-06 - version 1.2.1
* Fix - Status email: the {order_date} placeholder no longer fails for an order without a creation date.
* Fix - PHP 7.4: slug sanitizing no longer returns false when a label is reduced to an empty string (substr()).
* Fix - Orders list: an array-valued "status" parameter in a row action URL is ignored instead of passed to sanitize_key().
* Dev - Clean under the store tools: PHPCS (WordPress Coding Standards 3: WordPress-Extra, WordPress-Docs, Security, DB, I18n; PHPCompatibilityWP 7.4-), PHPStan level 5 with WordPress and WooCommerce stubs, Plugin Check 2.1.0 (all categories, no errors).

2026-10-06 - version 1.2.0
* Tweak - Status Desk and Status Desk Pro share one version number and are released together (bin/set-version.sh, bin/check-versions.sh).
* Dev - Extension API generation 2: add-on fields are posted as status_desk_ext[<add-on>][<field>]; status_desk_status_form_values and status_desk_settings_saved receive them unslashed and sanitized (Admin::extension_fields()). Form handlers read named fields only.
* Dev - New API: Admin::extension_fields(), Admin::email_link_text(), Settings::order_counts(), Settings::revision(); Admin::PAGE and Settings::MAX_NEXT are part of the API.
* Tweak - Status list, Import tab and Pro features tab: one cached order-count query (OrderUtil::get_count_for_type) instead of two queries per status.
* Tweak - The wc_order_statuses list and the core email map are built once per settings revision and request.
* Tweak - Delete form uses a fixed nonce checked before any input is read; the orders-list hint dismissal checks edit_shop_orders.
* Fix - Return URL of "Show the Actions column" was decoded twice.
* Fix - Slugs created from accented labels keep their letters (remove_accents()).
* Fix - Keys added by the status_desk_sanitize_status filter are no longer stored in the status row.
* Tweak - US English spelling; full sentences for translators ("Hi there,", "%s (off)", lists via wp_sprintf_l()).
* Tweak - Uninstall loops over the sites of a network; Pro styles moved to Pro.
* Dev - bin/precheck.php (offline pre-submission checks) and bin/make-pot.php.

2026-10-06 - version 1.1.1
* Fix - A "%" in a status label crashed the legacy orders list (label_count sprintf).
* Tweak - Status labels limited to 100 characters (autoloaded option stays small).
* Tweak - Bulk action labels escaped; array-valued query/form parameters ignored safely.
* Dev - New public helper Admin::query(); Settings::sanitize_color() is part of the extension API list.

2026-10-05 - version 1.1.0
* Dev - Split into Status Desk (free) and the Status Desk Pro add-on. Pro features removed from this plugin: payment method defaults, built-in status buttons, status history, team emails, customer messages, staff notes.
* Dev - One-time migration keeps the settings of those features for Pro (option status_desk_pro_settings).
* Add - "Pro features" tab, grayed-out Pro fields in the status form and one dismissible tip (only on the Order Statuses screen, only without Pro).
* Dev - Extension API: STATUS_DESK_API constant, new hooks status_desk_next_statuses, status_desk_email_status_message, status_desk_status_table_after_badge, status_desk_status_email_links, status_desk_settings_fields, status_desk_settings_saved, status_desk_before_statuses_list, status_desk_example_created, status_desk_help_sections, status_desk_pro_active; raw values passed to status_desk_status_saved.

2026-10-05 - version 1.0.1
* Fix - Import keeps slugs with underscores unchanged.
* Fix - Payment from a custom awaiting-payment status completes the order.
* Fix - Payment method defaults: stock, sales, coupon usage, New order and customer emails, bank details.
* Tweak - Online payment methods only map to paid statuses.
* Tweak - Reworked admin screens with help tips.

2026-10-02 - version 1.0.0
* First public release.
