Smart Cycle Discounts

Changelog

All notable changes, improvements, and fixes for Smart Cycle Discounts.

Version 2.1.10

July 2026 Update
Added
  • Reply to Cycle AI with a short follow-up — like picking one of its numbered suggestions (“5”) — and it now understands your choice in context instead of starting a brand-new campaign.
Improved
  • The campaign overview panel stays fast on stores with large catalogs (it previews a sample of the products and adds a “View All Products” shortcut to the full list), and its status badge is now color-coded by state (active, scheduled, paused, draft, expired).
Fixed
  • The product-page price preview for add-on products now works with more campaign types — tiered, BOGO, and spend-threshold — and with complex variable products, so the shown price reflects the active discount as options are selected.
  • Timezone accuracy — scheduled-start countdowns, “next run” times, recurrence end dates, and the dashboard’s day labels now show the correct day and time for your store’s timezone.
  • Cycle AI shows your remaining draft count the moment you open it, and its low-stock awareness now reflects your real inventory.
  • Analytics “Top Campaigns” now includes finished (expired) and paused campaigns, so past performance is no longer hidden.
  • Customer retention and repeat-purchase analytics now count guest checkouts, not just logged-in customers — accurate for stores that allow guest checkout.
  • Campaigns created by Cycle AI now show their sale badge on the storefront — and the matching offer panel for BOGO, tiered, and spend-threshold deals — just like campaigns built in the wizard.
Cleanup
  • Refactored the wizard review step so its calculations run in the controller instead of the template, and removed unused code.

Version 2.1.9

July 2026 Fix
Fixed
  • Discounts now display correctly on the product page for products with paid add-ons — the add-on plugin’s configured “grand total” reflects the discount as options are selected, now including variable products. Works with add-on/custom-field plugins such as Advanced Product Fields and WooCommerce Custom Product Add-ons.
  • The campaign wizard no longer offers Pro-only add-on discount options to free-plan users, which previously caused a save error.
  • Resolved a PHP error that could break admin pages when another plugin cleared the admin footer text.

Version 2.1.8

July 2026 Fix
Fixed
  • Product add-on plugins (WooCommerce Custom Product Add-ons, WAPF, Product Add-Ons) now work correctly with discounts — the product page shows the discounted price, and the cart never double-discounts or drops your paid add-on charges, so a configured product with add-ons is always priced right.
  • Storefront promotional panels and progress bars now reflect each campaign’s real setup — BOGO and Buy X Get Y panels show your actual buy/get quantities instead of a placeholder “Buy 1 Get 1”, spend-threshold bars fill toward the real goal amount, and bundle panels list the real products.
  • Free-shipping thresholds now count item quantities correctly when deciding whether an order qualifies.
  • Setup wizard — the Continue button stays visible and clickable across themes, so first-time setup no longer gets stuck.
  • Resolved a PHP warning on the license screen when a plan lookup returned no match.
Cleanup
  • Removed a non-functional “amount-based tier” option from tiered campaigns — order-value thresholds are handled by the Spend Threshold discount type. Existing quantity tiers are unaffected.
  • Internal code formatting and class-naming consistency; updated the bundled Freemius SDK.

Version 2.1.7

July 2026 Fix
Fixed
  • Saving changes to an existing campaign no longer fails with a “Campaign Update Failed” version-conflict or “Duplicate request detected” error — edits now save reliably and recover on their own, so you no longer have to delete and recreate a campaign just to change it.
  • Retrying a save after a slow or interrupted connection no longer creates a duplicate campaign.
  • Wizard reliability — the final Update/Publish step could occasionally submit twice, and cancelling a confirmation prompt could leave the navigation buttons stuck; both are resolved.
  • More accurate scheduling checks for overlapping weekly windows, time zones, and zero-value discounts while building a campaign.
  • Hardened the admin so a database or migration hiccup during startup degrades gracefully instead of showing a critical error or blank screen in wp-admin.
  • Hardened WooCommerce price display and checkout — a failed internal price match or a “hide price” plugin can no longer blank out product prices — plus a PHP 8.2 compatibility cleanup.
Cleanup
  • Removed obsolete code paths in the campaign wizard and WooCommerce integration.

Version 2.1.6

July 2026 Fix
Fixed
  • Campaign name checks work again — in the wizard, checking whether a campaign name is already taken (and the suggested alternatives) had stopped working; names are now validated correctly as you type.
  • Correct display for fixed-amount volume tiers — the tier table on your product pages showed fixed-amount tiers (for example “$5 off each”) as though the amount were a percentage — wrong discount label, savings, and final price. The label and figures now display correctly. Percentage tiers, and the price charged at checkout, were never affected.
  • Codes CSV export works again — the Export button on a campaign’s codes page (Pro) returned an error instead of downloading the file; it now exports correctly.
  • Shop Managers can search campaigns again — the search box on the Campaigns list rejected Shop Manager accounts with a permission error; it now works for anyone who can manage campaigns.
  • Imported settings are now validated — importing a settings file (Tools) sanitizes and range-checks every value before saving, so a malformed or hand-edited file can’t corrupt your plugin settings.
  • Hardened per-customer single-use codes so a guest checking out in a fresh browser session can’t have the same code counted twice.
  • Recurring campaigns now stop on their end date in a rare case where a repeating campaign could keep applying its discount after a missed scheduled task.
  • Trashed campaigns past your retention period are now permanently deleted again — the automatic trash cleanup had stopped running.
  • Wizard stock hints restored — the live stock-aware tips in the wizard’s discount step had stopped appearing while you set up a campaign.
  • Stopped a code-required campaign’s discount badge from appearing to shoppers who hadn’t entered the code, on stores running a persistent object cache (such as Redis or Memcached).
  • Hardened catalog pricing so an unexpected error on one product can no longer hide discounts on the rest of a shop or category page.
  • Fixed product date conditions (Created / Modified) being off by a day on stores in time zones ahead of UTC.
Cleanup
  • Removed obsolete internal code paths left over from earlier versions.

Version 2.1.5

June 2026 Fix
Fixed
  • Fixed a bug where catalog discounts were compounded/applied twice on products in the cart, showing incorrect prices during checkout.

Version 2.1.4

June 2026 Fix
Fixed
  • Fixed a crash when previewing an AI-generated campaign — the preview now renders correctly instead of erroring before you save.

Version 2.1.3

June 2026 Fix
Fixed
  • Activation no longer fails with a fatal error on some sites — a missing class (“WSSCD_Visual_Renderer_Registry not found”) could stop the plugin from activating. Activation now loads the plugin’s class autoloader up front, so the Promotional Visuals defaults install reliably on a fresh install.

Version 2.1.2

June 2026 New Feature
Added
  • Promotional Visuals — a complete building system for your storefront sale graphics. Design your own sale badges, savings rows, and offer panels in a live visual designer, then attach them to any campaign so shoppers see the deal right on your shop and product pages.
  • Visuals Library — one workspace to create, preview, duplicate, and manage every visual, grouped by type. Start from a polished, ready-made design and make it your own in a click.
  • Live designer with brand colors, templates, and presets — adjust colors, layout, text, and shape and watch a real storefront preview update as you go. Save a brand palette once and bind any visual to it so everything stays on-brand.
  • Discount-aware visual picker — when you add a visual to a campaign, it surfaces the designs that fit your discount type: a tier ladder for volume pricing, a progress bar for spend thresholds, a BOGO panel for buy-one-get-one, and more.
  • Free and Pro visuals — image badges, savings-row summaries, and BOGO panels are included free; tier ladders, bundle panels, and spend-threshold progress bars are available in Pro.
Improved
  • Fast by design — storefront visuals render through WooCommerce’s own price filters, with no extra frontend JavaScript and no bulk price rewrites, so shop, category, and product pages stay fast.
  • Clearer Review step — the wizard’s final step is now a “what happens when you publish” timeline, so you can see exactly when your campaign goes live, repeats, and ends before you launch.
Cleanup
  • Retired the legacy badge designer — all storefront sale graphics now flow through the new Visuals system.

Version 2.1.1

May 2026 Improvements & Fixes
Added
  • Per-campaign codes admin page — reachable via “View codes” on any code-required campaign. See every code, its usage count, redemption status, and (Pro) one-click CSV export.
  • Copy share link — one-click button next to each code copies ?wsscd_code=YOURCODE URL straight into emails, social posts, or transactional templates.
  • Optional cart and mini-cart hint — “Got a discount code? Enter it at checkout to save.” Shows only when a code-required campaign is active and no code is applied yet. Toggled in Settings → Display → Cart Nudges.
Improved
  • Tag badge on the campaigns list for code-required campaigns — tell auto-apply and code-gated promotions apart at a glance.
  • Wizard discount step is clearer — delivery (auto-apply vs. requires code) is now a card inside the discount step instead of a separate step. A visibility note explains that requires-code campaigns stay invisible on product pages by design.
  • Codes lock immediately after checkout — redemption recording now fires on payment_complete and order_status_processing too, not only on order_status_completed. COD/bank-transfer flows are correct. Refunds reverse redemptions automatically.
  • Bulk-code lookups switched to indexed direct queries — campaigns with thousands of bulk codes no longer slow down cart calculations.
  • Atomic single-use enforcement — two simultaneous checkouts can’t both consume a single-use code; the second is cleanly rejected.
Fixed
  • Saving a “Requires code” campaign with a code value no longer fails with a generic “An unexpected error occurred” — the field validator was pointing at undefined methods.
  • Bulk code generation correctly stores usage_limit = NULL (unlimited) instead of empty string, which previously coerced to 0.
Cleanup
  • Plugin uninstall now fully removes all plugin tables, options, transients, order meta (HPOS-aware), and cron events. Multisite-aware.

Version 2.1.0

May 2026 Major Release
Added
  • Promo code campaigns — any campaign can now require a coupon code instead of auto-applying. Works for every discount type (percentage, fixed, tiered, BOGO, bundle, spend threshold), not just percentage/fixed like other coupon plugins.
  • Native coupon field integration — customers enter the code in WooCommerce’s standard cart/checkout coupon field. Discount appears as a familiar “Coupon CODE: -$X.XX” line in totals.
  • URL auto-apply — share a link with ?wsscd_code=YOURCODE and the code is applied automatically when the customer lands on the cart.
  • Bulk unique-code generation (Pro) — generate up to 50,000 single-use codes per campaign, exportable as CSV for email blasts.
  • Single-use codes (Pro) — lock a code to one redemption globally (per code) or one redemption per customer (per customer).
  • Coupon-aware intelligence verdicts — pre-launch warnings flag conflict with auto-applied campaigns, stacking with WooCommerce sale prices, schedule overlap with another code-gated campaign, and projected redemption velocity exceeding the usage cap.
Improved
  • The existing “Allow third-party coupons” toggle (formerly “Allow Coupons”) clarifies that it targets other plugins’ coupons; Smart Cycle Discounts’ own promo codes are never blocked by it.

Version 2.0.6

April 2026 Improvements & Fixes
Improved
  • Wizard hides settings that don’t apply — “Apply to” controls only appear when meaningful, addon-specific options stay hidden unless the matching addon is active, and incompatible discount-type / product-selection combinations are gated up-front instead of failing later.
  • Bundle and Buy X Get Y react to product changes — When you change the Products step, buy-side and get-side selections stay valid as your product pool changes, instead of going stale.
  • Cleaner campaign health visuals — Dashboard verdict gauge now uses a status icon column, and health status is a clear three-tier signal (Healthy / Caution / At Risk) instead of an opaque numeric score.
  • Consistent discount validation — Wizard form and server rules now share the same validation logic across all discount types (bundle, BOGO, BxGY, fixed, percentage, spend threshold, tiered). Several gaps where invalid configurations could slip through have been closed.
Fixed
  • Wizard intelligence sidebar no longer mislabels priority overlaps as launch blockers when they’re warnings — the same finding now renders consistently across all five intelligence surfaces (wizard, dashboard, list, overview, card grid)
  • Dashboard verdict supporting bullets now actually support the stated primary reason — previously a low-stock verdict could be followed by bullets about discount load and promotion limits, making the verdict read incoherently. The “promotion limits constraining” caveat is also no longer appended for non-economics verdicts (stock, conflicts, schedule, configuration)
  • Removed an internal severity tag (“informational”) that occasionally leaked into the wizard sidebar as a stray label under recommendations
  • Recommended-action sentences are no longer cluttered with a hedging caveat appended to the directive — the action stays a clean instruction
  • Removed several legacy/duplicate fields from the discount form (max discount amount, total usage limit, minimum quantity, minimum order amount) that were no longer used

Version 2.0.2

April 2026 Improvements & Fixes
Improved
  • New plugin header — Unified two-row header across admin pages with a command-palette search. Press Cmd/Ctrl+K to jump straight to any feature, filter, settings tab, or tool without clicking through menus.
  • Live search on the campaigns list — Typing filters campaigns in real time in both list and grid views. The URL updates as you type so results are shareable.
  • Unified list & grid toolbars — Grid view now shares the same panel and toolbar (search, view toggle, pagination) as list view, so switching between views keeps everything in the same place.
  • Per-device view preference — Each browser remembers its own list/grid choice, and the active state is announced correctly to screen readers.
  • Active-filter chips sync with search — Status and Search chips update live as you type or toggle views, and clear themselves instead of lingering from the previous page load.
  • Dashboard verdict consistency — “Try instead” alternatives now each route to their own wizard step and sit under a shared label, so alternatives are visibly distinct from the primary fix. The verdict gauge also can’t contradict the badge anymore — a “Good” score gets clamped down when the decision is Caution/Risk/Blocked.
Fixed
  • Campaigns search no longer throws a strict-mode JavaScript error on older browsers
  • Error responses from the campaigns search endpoint now surface a clearer message so a transient backend issue is no longer masked as a silent “An error occurred”

Version 2.0.1

April 2026 Improvements & Fixes
Improved
  • Cycle AI targeting — Describe campaigns with user roles (wholesale, VIP, logged-in only), country (with billing or shipping source), and product tags. The AI now configures these directly from natural language instead of leaving them for the wizard.
  • Cycle AI scheduling — Time-of-day windows (“6pm to midnight”), recurring patterns (daily / weekly / monthly with day-of-week and end conditions), product rotation, and timezone overrides all generate from plain English.
  • More wizard fields covered — Free shipping toggle, badge customization (color, position, custom text), smart product selection (best-sellers, featured, low-stock, new-arrivals), and draft-vs-launch choice.
  • Refinements preserve targeting — Saying “extend by a week” no longer resets your role, location, or recurring configuration.
  • Pro upsells with concrete next steps — When you ask for a Pro-only setting (usage limits, stacking, advanced filters), Cycle AI declines with a direct upgrade link and offers to build a simpler version, instead of silently dropping the request.
  • Review page surfaces every constraint — Location, user-role, and tag selections now appear in both the Configuration Summary card and the detailed sections so nothing is hidden before launch.
Fixed
  • Complex Cycle AI prompts no longer time out — HTTP timeouts now match the server-side processing budget
  • Clicking “Review & Launch” after AI generation now correctly opens the prefilled wizard at the review step instead of an empty Basic step
  • Launch-blocker buttons in the review step now show actionable labels like “Change Priority” or “Adjust Discounts” instead of the generic “Go to Basic Step”

Version 2.0.0

April 2026 Major Release
Added
  • Cycle AI — Describe a sale in plain English, AI drafts a complete campaign using your real catalog. Free: 10 drafts/month. Pro: 50 drafts/day.
  • Conversational refinement — Keep chatting to adjust products, discount type, schedule, and limits
  • Consent-first privacy — AI only activates after explicit opt-in; sends only lightweight catalog metadata
  • Store-aware intelligence — AI reads your real products, categories, and pricing to build accurate campaigns

Version 2.0.0

April 2026 Major Release
Cycle AI
  • Describe the sale you want in plain English and get a complete, store-aware campaign draft in seconds — works for percentage discounts, BOGO, tiered pricing, fixed amounts, spend thresholds, and bundles
  • Conversational refinement — keep the chat going to tweak anything (“make it 25% instead,” “add a 2-week deadline,” “cap at 200 uses”) and the AI updates the draft in place
  • Store-aware drafts — Cycle AI reads your real catalog so “all winter jackets” finds your actual products and categories
  • Dashboard chat panel — a persistent Cycle AI conversation on every admin page, pick up where you left off
  • One-click “Review & Launch” — every AI draft drops into the campaign wizard pre-filled, you review every setting before launch
  • Hosted AI service — works out of the box after a one-click consent, no API keys to configure
  • Free plan includes 10 AI drafts per month; Pro plan gets 50 per day
  • First-use consent flow — a modal explains exactly what data is sent and links to the privacy policy before anything is transmitted
  • Plan-aware recommendations — Cycle AI knows which discount types are on your plan and focuses suggestions accordingly
  • Real-time streaming — AI reasoning text appears word-by-word as it thinks, with automatic fallback for older browsers

Version 1.8.28

April 2026 Bug Fixes
Fixed
  • Campaign name uniqueness check now correctly excludes the current campaign in edit mode
  • Store opportunity category prefill used invalid selection type and non-numeric priority
  • BOGO “Apply To” dropdown offered unsupported option that failed server validation
  • Percentage discount JS validation now matches PHP minimum (1%)
  • Schedule recurrence validator used non-existent field — weekly/monthly interval warnings now fire correctly
  • AJAX handler test_provider_connection was unreachable due to missing security configuration
Improved
  • Added missing capability check for save_view_preference AJAX action
  • Stopped loading 3 unused JS modules on wizard pages (~46KB saved)
  • Removed dead code across all wizard steps — unused methods, empty overrides, ghost security entries

Version 1.8.27

April 2026 New Feature
Added
  • Card grid view for the campaigns page — toggle between list table and visual card grid with a single click, preference persists per user
  • Cards display status accent bar, campaign name, priority, discount type, scope chips, schedule, and stats footer with smart CTA button that adapts per status
  • Tags now shown in campaign overview panel targeting section and scope_text summary across all surfaces
Fixed
  • TomSelect dropdown arrow artifact from CSS skeleton loader and native select styling
  • TomSelect preload/openOnFocus race condition resolved with shouldLoad guards
  • Tag TomSelect no longer freezes after category change
  • False error notifications on concurrent AJAX requests
  • Product dropdown no longer re-fetches on every open
Improved
  • TomSelect optimized with manual onDropdownOpen loading instead of preload
  • Removed dead code from products step (orphaned comments, empty loops, unused methods)

Version 1.8.26

April 2026 Bug Fixes
Fixed
  • Tag filter now applied to product pool queries — selecting tags actually filters the product dropdown
  • Tags filtered by selected categories — only shows tags with products in the chosen categories, preventing empty pool combinations
  • Conditions validator crash — PHP array() syntax in JavaScript caused errors on certain condition checks
  • Product reload on tag change properly clears stale items and handles empty responses
Improved
  • Tag-category query optimized — replaced N+1 database queries with single bulk query
  • Removed dead code: empty loops, unused methods, orphaned comments, empty else blocks

Version 1.8.25

April 2026 New Feature
Added
  • Tag filtering in the wizard Products step — merchants can now narrow the product pool by tags alongside categories, with AND logic between them
  • Empty states for tags and products — helpful guidance with links to WooCommerce admin when the store has no product tags or no products
Fixed
  • Product Selector now uses AND logic when both categories and tags are selected, ensuring products must match both filters
  • Health normalizer consistently filters the ‘all’ sentinel from tag IDs, matching category behavior
  • Undefined variable in wizard intent handler that caused a TypeError on redirect
Improved
  • Removed unused filter_by_tags() and filter_by_categories() dead code from Product Selector
  • DRY category and tag option rendering in wizard template — eliminated duplicate get_term() calls
  • Renamed filter_valid_category_ids to filter_valid_term_ids for clarity (shared by categories and tags)

Version 1.8.18

March 2026 New Feature
Added
  • Store-Aware Opportunity Intelligence — Upcoming Opportunities now generates suggestions based on your store’s actual campaign history and product data, not just calendar events
  • Campaign Drought detection — alerts when your store hasn’t had an active promotion in 21+ days
  • Best-Selling Category detection — identifies your top-selling categories by order count that don’t have an active campaign, suggesting you accelerate what’s already working
  • Category Gap detection — surfaces product categories that haven’t been promoted in 30+ days
  • Discount Coverage Gap detection — flags when less than 10% of your catalog has any active discount
  • Repeat Winner detection — recognizes weekly campaign patterns you’ve used 3+ times and suggests running them again
  • Category-based wizard pre-fill — clicking a category-based store opportunity opens the wizard with the category pre-selected, discount configured, and all steps completed for quick review
  • Opportunity Chains — when multiple detectors fire for the same category, they merge into one stronger recommendation with combined reasoning and boosted score
  • Intelligence-aware suppression — store opportunities are automatically hidden when discount load is high or 5+ campaigns are already active
Improved
  • Store opportunities compete for the same 3 display slots as calendar events and weekly suggestions through the existing scoring system (max 1 store insight per page load)
  • Removed orphaned WC Analytics integration class, dead discount API frontend methods, and stale discounts-api.js module code

Version 1.8.17

March 2026 Improvement
Added
  • Campaign Overview Panel now includes operational action buttons (Activate/Pause, Duplicate, Delete) in the footer
  • Panel reopens automatically after an action completes via return_url parameter
Fixed
  • Zero-activity dashboard no longer shows false stock warnings or “Ready to Launch” prompts
  • Catalog Snapshot categories stat correctly shows all categories for full-catalog campaigns
  • Health-driven “Needs Attention” verdict shows health-specific reason instead of contradictory “launch ready” messaging
  • Page header border radius, border, and shadow now use shared card design tokens

Version 1.8.16

March 2026 Improvement
Fixed
  • Dashboard intelligence verdict now agrees with operational signals — eliminating contradictions between status and warning reasons
  • Campaign Health “Fair” (70-89) now correctly triggers “Needs Attention” verdict instead of “On Track”
  • “Ready to Launch” verdict now requires health score >= 90 (Healthy), not >= 80
  • Dashboard and Overview campaign counts now match, including expired campaigns
  • Stock risk signals no longer appear when focus campaign is paused or expired
  • Zero-activity dashboard now caps verdict at “On Track” with idle messaging

Version 1.8.15

March 2026 Redesign
Improved
  • Comprehensive admin UI/UX overhaul across all plugin pages — Dashboard, Campaigns, Analytics, Settings, Notifications, Tools, and Help
  • Dashboard — redesigned Upcoming Opportunities (hero + weekly split), 3-column workspace grid, and Campaign Intelligence deduplication
  • Campaigns page — compact KPI strip, inline status filters with Trash support, search in bulk actions toolbar
  • Campaign Overview Panel — hero identity card with gradient metric strip, stacked section cards, pro-gated performance section
  • Analytics page — Hero Metric + Supporting Grid, Bento Grid layout, sequential AJAX loading
  • Settings and Notifications pages — card-grid layout with server-side FOUC prevention
Fixed
  • Color flash on page load — removed JS setProperty overrides that replaced CSS custom property references with flat values
  • 502 errors on Analytics — sequential AJAX loading replaces parallel requests that overwhelmed PHP-FPM
  • Settings/Notifications field flash (FOUC) — server-side hidden flag prevents 1-second visibility before JS hides them
  • Removed orphaned CSS, dead PHP methods, and dead JS across all pages

Version 1.8.14

March 2026 Intelligence Update
Improved
  • Re-architected Campaign Intelligence around one canonical deterministic flow: engine, strict payload, decision contract, support context, and surface rendering
  • Replaced the old decision shape with one canonical merchant contract: state, reason, action, confidence, and internal trace
  • Centralized merchant-facing Intelligence wording in a shared vocabulary system so status, reason, next action, and confidence copy stay consistent across all surfaces
  • Added decision trace metadata for explainability and QA
  • Reworked Intelligence UI so merchant surfaces now consistently lead with current state, why it is happening, what to do next, and how confident the recommendation is
  • Enhanced SendGrid and Amazon SES delivery with text/plain fallbacks plus Reply-To, CC, and BCC support
Fixed
  • Corrected cross-surface interpretation drift so wizard, dashboard, overview, campaigns list, and planner render the same campaign meaning
  • Margin risk now influences the decision state – campaigns with high discount rate correctly reach “Risk” instead of being capped at “Caution”
  • Eliminated fabricated uplift predictions for campaigns with no suggested discount or seasonal context
  • Added minimum sample size gate for economics rate metrics – efficiency, discount rate, and break-even return null below threshold instead of statistically meaningless values
  • Removed on-hold orders from economics attribution queries – only completed and processing orders count as confirmed revenue
  • Stale intelligence data now shows visual staleness indicators on all metric cards
  • Brand-new campaigns with zero evidence now show “Caution” instead of “Good” to honestly reflect the lack of data
  • Corrected timing quality and uplift weight sums in the score calculator
  • Conflict actions now name the specific competing campaign instead of showing generic copy

Version 1.8.13

March 2026 Improvement
Improved
  • Consolidated email provider creation, validation, and connection testing behind one canonical Email Manager path
  • Refactored Tools and maintenance operations behind one shared Tools service
Fixed
  • Corrected free/pro notification gating so premium providers and PRO notification types are enforced consistently
  • Repaired email queue persistence so new emails append correctly and sent/failed history is retained
  • Corrected service-container loading for newly registered services
  • Replaced the old global redirect-notice queue with page-scoped admin flash notices

Version 1.8.12

March 2026 Improvement
Improved
  • Unified Products step advanced filters under one canonical conditions contract shared by UI, validation, and runtime
  • Refactored Campaign Health and dashboard health aggregation into dedicated diagnostics services
  • Added one shared campaign applicability validator so save, review, health, and Intelligence all use the same discount validity rules
Fixed
  • Corrected advanced-filter operator handling, condition execution, and price/shipping semantics
  • Corrected scope-aware validation, discounted-product counts, blocker messaging, and category fallback resolution

Version 1.8.11

March 2026 Improvement
Improved
  • Replaced the old additive confidence heuristic with an evidence-weighted model based on signal completeness, data freshness, and cross-signal consistency
  • Added confidence reasons to the Intelligence reliability payload so confidence bands are explainable
  • Added evidence-backed action explanations wired through the shared Intelligence payload and view model
  • Consolidated plugin debugging onto a single logging backend with one canonical log file
  • Consolidated persistent plugin caching under one cache-manager source of truth with normalized key namespaces
  • Integrated WooCommerce badge caching into the shared cache manager
Fixed
  • Tightened low-reliability confidence behavior for stale, estimated, sparse, or contradictory campaign contexts
  • Repaired browser-to-server debug logging by aligning AJAX action names, nonce handling, and logger routing
  • Corrected grouped object-cache invalidation and eliminated stale mixed cache paths

Version 1.8.1

March 2026 Bug Fix
Fixed
  • Tightened free/pro packaging so free builds exclude Pro implementation files while keeping upgrade/promo UI surfaces
  • Updated WordPress.org readme short-description structure to avoid importer warning

Version 1.8.0

March 2026 Major Feature
Added
  • Campaign Intelligence engine – a full operational decision layer for WooCommerce promotions that answers “What should I do right now?” with risk signals, next-step recommendations, and reliability context
  • Dashboard-first Intelligence UX with 3 default blocks: Risk Now, Next Step, and Performance, plus expandable details for evidence and diagnostics
  • First-class Intelligence metrics for override intensity, campaign revenue contribution, and promotion stability score
  • Adaptive Promotion Guardrails with optional custom boundaries for max discount load, max override intensity, max concurrent campaigns, and minimum stability score
  • Soft-enforcement confirmation gates when actions exceed guardrail boundaries across wizard launch, schedule-driven activation, and bulk activation
  • Override telemetry with temporary stability penalties after confirmed overrides, including dashboard visibility of active penalty state
  • Daily Intelligence snapshots with trust diffs (“Since yesterday…”) for trend-aware risk/performance context
  • Compact Discipline status and 30-day Discipline Report with overrides in window, most breached boundary, average stability, and days within bounds
Improved
  • Updated terminology clarity (Decision Strength, Evidence Strength) and reduced default exposure of governance/internal wording in user-facing views
  • Added recommendation lifecycle visibility in Next Step states (still open, in progress, resolved)
  • Added block-level detail expanders to keep default UI focused and actionable

Version 1.7.65

February 2026 Feature Update
Added
  • Pro: Campaign-level add-on discount application mode for add-on priced products
  • Base-only discounting option for stores that need stricter add-on price control
Fixed
  • Single-product add-on live preview stabilized so configured totals no longer flicker during option changes
  • Final total-row refresh flow hardened to prevent stale/duplicated rows when shoppers repeatedly edit add-on selections
  • Live recalculation now aligns with post-recalculation hooks for cleaner add-on total rendering

Versions 1.7.60 – 1.7.64

February 2026 Compatibility
Fixed
  • WCPA/Custom Product Add-Ons live preview compatibility refined across single-product recalculation cycles
  • Atomic final-total guard added to eliminate transient base-total flashes while options recalculate
  • Archive badge positioning improved for Blocksy-like theme layouts

Version 1.6.2

February 2026 Bug Fix
Fixed
  • Corrected Freemius Pro code stripping for subscription sign-up fee hook registration
  • Use official __premium_only method suffix pattern for WordPress.org compliance

Version 1.6.0

February 2026 Major Feature
Added
  • WooCommerce Subscriptions support – discount campaigns now work on subscription products automatically
  • Recurring subscription prices show strikethrough discounts on product pages, shop pages, and cart
  • Subscription and variable-subscription product types recognized in campaign product conditions
  • Pro: Subscription discount target selector – choose to discount recurring price, sign-up fee, or both
  • Pro: Renewal limit control – limit discounts to the first X renewal payments, then revert to full price
  • Pro: Automatic renewal tracking per subscription with campaign linkage at checkout
  • Pro: Subscription Discount Settings card in wizard discounts step with contextual help
Improved
  • Graceful degradation when WooCommerce Subscriptions is deactivated – no errors, no UI clutter

Version 1.5.70

January 2026 Major Feature
Added
  • WooCommerce block-based cart and checkout support – strikethrough pricing now displays correctly in block cart/checkout pages alongside classic templates
  • Store API extension to expose discount metadata for block-based cart and checkout rendering
  • Client-side currency formatting with full locale support, dark mode, and high contrast accessibility
  • Declared cart_checkout_blocks compatibility for WooCommerce 8.3+ feature detection

Versions 1.5.66 – 1.5.69

January 2026 Maintenance
Changed
  • Visual improvements and UI refinements
  • Small bug fixes and stability improvements

Version 1.5.65

December 2025 Improvement
Added
  • In-plugin Help & Support page with card-based layout linking directly to documentation, support center, and campaign ideas
  • Floating help button on all admin screens (excluding wizard) for one-click access to Help & Support hub
  • Contextual help links in dashboard empty state, Tools page, and wizard sidebar with deep-links to topic-specific documentation
Improved
  • Wizard sidebar footer restyled to match card-based admin design
Fixed
  • Admin notification documentation updated to use correct WSSCD.Shared.NotificationService namespace

Versions 1.5.61 – 1.5.64

December 2025 Bug Fixes
Fixed
  • 1.5.63: Free shipping and recurring schedule no longer incorrectly show as enabled in campaign overview
  • 1.5.62: PHP 8 TypeError in recurring campaigns – DateTime constructor type handling corrected
  • 1.5.61: AJAX handler method signatures aligned with abstract base class to prevent fatal errors
  • 1.5.64: General bug fixes

Version 1.5.6

November 2025 Bug Fixes
Fixed
  • Campaign overview no longer fails with “Failed to load campaign data” after creating a campaign
  • Schedule section now handles empty or invalid timezone and non-DateTime values safely
  • Tools page displays actual server error messages instead of generic “Please try again”
  • Admin nonce registered for users with manage_options OR manage_woocommerce capability

Version 1.5.5

November 2025 Bug Fix
Fixed
  • Free version no longer returns 403 “Campaign stacking policy requires a PRO license” when creating campaigns
  • Campaign data normalized to free-tier defaults before validation

Versions 1.5.3 – 1.5.4

November 2025 Database
Fixed
  • Database migrations now throw on failure so they’re not marked as complete when schema changes fail
  • Schema drift repair – clears failed migration records so they run again on next load
  • Pending migrations run on every plugin load to keep schema up to date
  • Campaign save only persists columns that exist in the table (defensive when migrations pending)
Improved
  • Deploy script supports “local” mode for WordPress.org deployments

Version 1.5.2

October 2025 New Feature
Added
  • Discount badges now display on all product gallery images (main image + thumbnails)
  • Compact badge text for thumbnails (e.g., “-20%”, “BOGO”, “DEAL”) for better visual balance
  • Pro: Dynamic spend threshold progress bar shows real-time progress toward next discount tier
  • Pro: AJAX-powered cart updates – progress bar refreshes automatically when items are added/removed
  • Filter hook wsscd_show_gallery_thumbnail_badges to disable thumbnail badges if needed
Improved
  • Gallery thumbnail badges use smaller positioning offsets for cleaner appearance
  • Progress bar animates smoothly when cart total changes
  • Formatted price display in progress messages uses WooCommerce currency settings

Version 1.5.1

October 2025 UI Redesign
Added
  • Redesigned Campaign Period section with modern horizontal date range layout
  • Inline toggle buttons for “Immediately” vs “Scheduled” start type selection
  • Visual date boxes with accent colors – green for start, primary for end
  • “Indefinite” state styling with dashed border when no end date is set
  • Compact duration bar showing campaign length with contextual hints
Improved
  • Timeline preview shows infinity symbol (∞) for “forever” recurring campaigns
  • Timeline styling updated to match plugin design system with CSS variables
  • Timeline tooltips show full date ranges on hover (e.g., “Feb 1-3, 2026”)
  • Recurrence end date picker disables invalid dates directly in calendar
  • Validation errors persist until user fixes the issue
Fixed
  • Timeline tooltip z-index corrected to display above other elements
  • Removed horizontal scrolling from timeline – uses centered flex layout
  • Time field validation properly checks context (required only when applicable)

Version 1.5.0

September 2025 Major Feature
Added
  • Smart recurrence validation system – prevents invalid recurring schedule configurations
  • Constrained day selection for weekly recurring campaigns – days that would cause overlap are automatically disabled
  • Recurrence end date validation – warns when end date is in the past or before first recurrence would start
  • Monthly pattern edge case detection – informs users about date shifting for campaigns ending on days 29-31
  • Timeline preview shows date ranges for all occurrences (e.g., “15-18 Feb” instead of just “15 Feb”)
  • Dynamic preview count – shows all occurrences for small counts, summarizes larger ones
  • Initial validation on page load for editing existing campaigns with invalid settings
Improved
  • Weekly day selection shows informative message explaining spacing requirements
  • Disabled day chips visually indicate unavailable options with grayed-out appearance
  • All frontend validations mirrored in backend PHP for security
  • Smarter UX – impossible configurations prevented rather than error messages after the fact
Fixed
  • Recurrence mode now properly loads when editing existing recurring campaigns
  • Corrected recurrence logic – interval is gap between instances (end-to-start), any positive interval is valid

Version 1.4.0

August 2025 Major Feature
Added
  • Pro: Continuous Recurring Mode – campaigns toggle active/inactive based on time schedule without creating database instances
  • Two operational modes for recurring campaigns: “Continuous” (time-window based) and “Instances” (materialized copies)
  • Continuous mode ideal for daily happy hours, weekend specials, and weekly promotions
  • Instances mode preserves per-occurrence analytics and individual campaign tracking
  • Recurrence mode displayed in wizard review step configuration summary
Improved
  • Database migration adds recurrence_mode column with backwards compatibility
  • Campaign manager filters continuous recurring campaigns by active time window
  • Edit mode properly loads recurrence_mode from recurring settings table

Version 1.3.0

July 2025 Major Feature
Added
  • User role targeting – restrict discounts to specific WordPress user roles
  • Include/exclude mode for role-based targeting (e.g., “wholesalers only” or “exclude subscribers”)
  • Chip-style role selector UI in discounts step matching existing schedule day picker pattern
  • User roles displayed in campaign overview panel and review step summary
  • Contextual sidebar help for user role targeting with use cases and setup tips
  • Contextual sidebar help for free shipping configuration
  • Shipping truck icon added to icon library
  • Optional badge added to Free Shipping card for clarity
Improved
  • Modern chip/pill design with animated checkmark, gradient background, and smooth hover effects
  • Free shipping UI now uses chip-style pattern matching user roles (mode selector and method checkboxes)
  • Role eligibility filtering runs per-request (post-cache) to support user-specific targeting

Versions 1.2.0 – 1.2.2

June 2025 Improvements
Added
  • Free shipping badge visible in campaigns list table
  • Free shipping status displayed in campaign overview panel with shipping method details
  • Configuration summary card in wizard review step shows free shipping status
Improved
  • Dashboard layout reordered – “Your Campaigns” now appears above “Campaign Planner”
  • Campaign Health widget shows status breakdown (e.g., “2 campaigns analyzed • 1 active, 1 scheduled”)
  • Badge helper includes reusable free_shipping_badge() method for consistent UI
  • Extended Freemius opt-in reminder delay from 7 to 14 days
Fixed
  • Plugin name updated for WordPress.org trademark compliance
  • Removed non-functional “View Results” button from past campaign insights
Security
  • Added input sanitization to admin notice display logic
  • Added context-aware output escaping to email template variable replacement

Versions 1.1.0 – 1.1.9

May 2025 Feature Updates
Added
  • 1.1.0: Calculator Import – Import discount presets from external Profit Calculator
  • 1.1.0: Support for percentage, fixed, tiered, BOGO, and spend threshold preset codes
  • 1.1.0: One-click campaign creation from calculator presets on Campaign List page
  • 1.1.5: Auto-update notice with one-click enable button
Improved
  • 1.1.8: Rewritten plugin description for maximum WordPress.org search discoverability
  • 1.1.8: Expanded FAQ from 17 to 24 keyword-rich entries
  • 1.1.9: Removed non-functional cache warming system (5 dead methods)
  • 1.1.9: Reduced plugin footprint – removed 11 unused classes, 16 unused AJAX endpoints, and 21 unused functions
  • 1.1.6: Added centralized price helper for consistent product pricing
  • 1.1.5: Added user meta cleanup on plugin uninstall
Fixed
  • 1.1.9: Dashboard pause/resume buttons now functional with dedicated AJAX handler
  • 1.1.9: Dashboard campaign list updates after changes (cache invalidation)
  • 1.1.9: Spend threshold discount type displays correctly in dashboard
  • 1.1.9: Connected 6 missing event triggers for settings updates and license events
  • 1.1.7: Critical bug in discount calculation – results now use object methods instead of array access
  • 1.1.7: Discount preview in admin wizard correctly extracts product price
  • 1.1.6: Variable product price handling uses minimum variation price
  • 1.1.4: Translation file (.pot) properly configured for WordPress.org translation system
  • 1.1.3: Badge display setting now properly hides badges when disabled
  • 1.1.2: Calculator import correctly displays prefilled campaign name and discount settings
  • 1.1.1: Calculator import properly clears cached data to prevent stale campaign names

Versions 1.0.1 – 1.0.10

April 2025 Polish
Improved
  • Updated plugin description for WP Admin consistency and better clarity
  • New WordPress.org banners for better visual presentation
  • SEO-optimized short description with high-value keywords
  • Optimized plugin tags for better discoverability
  • Completely rewritten plugin description with Free vs Pro comparison table
  • Added real-world scenario examples to documentation
  • Updated plugin name for better discoverability on WordPress.org
  • Corrected plugin website URL
Fixed
  • Fixed WordPress.org readme compliance issues
  • Simplified plugin name display in WP Admin

Version 1.0.0

March 2025 Initial Release
Added
  • 5-step campaign wizard for creating discount campaigns
  • Product selection: All Products, Specific Products, Random Products
  • Discount types: Percentage and Fixed Amount (Free), Tiered, BOGO, Spend Threshold (Pro)
  • Scheduling with date, time, and timezone support
  • Priority system for overlapping campaigns
  • Campaign health monitoring
  • Bulk campaign management
  • Analytics dashboard (Pro)
  • Email notifications
  • WooCommerce HPOS compatibility
  • WordPress 6.4+ and WooCommerce 8.0+ support