# Campaign Bars 0.3.0 — release scope and qualification Prepared 10 October 2026. Free and the separate Pro add-on remain staging builds. No WordPress.org submission or approval, domain activation, Pro pricing, licensing or payment system is claimed. ## What changed Free now protects saved drafts, publications, restores and status changes with atomic revision checks. A stale editor receives a conflict and the latest permitted snapshot rather than overwriting newer work. Settings and emergency pause have separate revision checks. Twenty saved draft/publication revisions per campaign, recoverable trash, safe resume and a private real-page saved-draft preview provide basic recovery in Free. Resume uses the approved publication, preserving draft edits. History records explicit saves; it is not automatic draft saving. The editor adds starter templates, separate visual presets, a publish review, searchable page choices and clearer saved/unsaved feedback. The storefront preserves focus across unchanged resolution, supports bounded top/bottom offsets, and clarifies dismissal for a campaign, page visit or browser session. Public selection fetches approved publication columns in one query rather than loading drafts and histories. Pro improves Goal consistency, loads experiment reports on entry, uses stable revision recovery, and provides reviewed campaign/preset transfers with destination review. Audience rules include selected products/categories, roles and supported language matching. Reports add daily totals and equal preceding-period comparisons within retention; unverifiable or mixed-currency money is hidden rather than added. Native coupon combinations, Blocks order attribution and consent-withdrawal handling have targeted regression coverage. ## Upgrade and data migration Back up the database and export important campaigns before updating. Install/update Free 0.3.0 before Pro 0.3.0. Complete both updates before editing or publishing; a mixed-version pair is not a qualified operating state. Purge existing page/CDN caches so pages load the current scripts; later campaign publication, pause and resume use the fresh resolver. Existing pages without the loader cannot discover it on their own. Version 0.3.0 migrates legacy campaigns and their draft/live data into the private `cbars_campaigns` table. Complete draft, publication, status, recovery history and revision change together in one conditional database operation. Original legacy post metadata remains unchanged, but new writes are stored in the canonical table. A failed migration stays incomplete and retries on the next request; editing and public campaign selection remain unavailable until it finishes. Reinstalling 0.2.0 would read stale legacy state and ignore new campaigns: it is not a supported rollback. Use a verified pre-upgrade database backup or a forward-compatible repair for recovery. Data is retained by default. The explicit delete-on-uninstall choice survives removing Free and Pro in either order. No customer database was migrated by this development task. ## Current verification Completed on the 0.3.0 source using isolated fictional fixtures: | Qualification | Result | | --- | --- | | WordPress 7.1.3 / PHP 8.3.33 / WooCommerce 11.2.0, legacy order storage | 29 Free + 19 Pro + 19 commerce assertions; actual REST/AJAX authentication, no-store and cached-page resolution checks passed | | WordPress 6.5.5 / PHP 8.1.34, minimum supported WordPress/PHP | 29 Free + 19 Pro assertions and actual HTTP/cache checks passed | | WordPress 7.1.3 / PHP 8.3.33 / WooCommerce 11.2.0, HPOS | 29 Free + 19 Pro + 19 commerce assertions and HTTP/cache checks passed | | WordPress 7.1.3 / PHP 8.5.10 / WooCommerce 11.2.0 | 29 Free + 19 Pro + 19 commerce assertions and HTTP/cache checks passed | | Atomic storage, recovery and real-page preview | 49 workflow + 22 migration failure/retry assertions, eight actual preview HTTP assertions; zero PHP debug bytes | | Native consent | Nine assertions plus private test-page HTTP authentication/no-store checks passed | | Native reports | 29 assertions plus HTTP permission and authenticated JSON checks passed | | Native visibility diagnostics | 21 Free + 31 Pro assertions and HTTP permission checks; zero added debug bytes during the tests. An unrelated WooCommerce activation translation-timing notice is retained in the bootstrap receipt | | Native campaign metrics | 12 assertions passed | | Native translation loading, WordPress 7.1.3 and 6.5 | Each: 117 PHP/registration/catalog assertions + 12 actual WordPress i18n/editor assertions; zero PHP debug bytes | | Pro commerce, targeting, transfers and uninstall | 138 native assertions; both uninstall orders and a 105-campaign transfer included. The WooCommerce activation translation notice is retained | | Actual WordPress i18n with French JavaScript catalogs | 122 existing asset/extractor checks + 130 consent/diagnostics/reports module checks passed; includes escaping and RTL direction inheritance | | Shared editor and preview browser checks | 36 editor DOM assertions; 58 feature Chromium checks; original save browser cases passed for both editions. Eight actual Chromium preset checks preserve offer, action and placement across both editions. Separate merchant layout/storefront receipts are listed in the qualification manifest | | PHP/JavaScript parser checks | 36 PHP + 39 JavaScript files passed before packaging | | Official Plugin Check 2.1.0, 29 static checks per edition | Free: zero errors, 46 warnings. Pro: zero errors, one warning. Findings retained and explained below | The storage tests inject failed schema creation, failed legacy enumeration, failed metadata reads and an interrupted import. Failed metadata reads also clear any false empty object-cache entry before retry. An incomplete migration leaves its completion marker unset, blocks campaign writes with HTTP 503, suppresses partial public selection and shows a generic administrator notice. A new WordPress request retries safely and preserves both original metadata and already committed canonical revisions. The stale-write test interleaves a second database update between the first writer's read and conditional update, with exactly one winner; it is not a native MySQL concurrency/load test. Free's 46 Plugin Check warnings comprise 22 direct-query, 15 no-cache, three schema-change, three `exclude`-key heuristics, two standard `DONOTCACHEPAGE` constants and one explicit translation-loader warning. The private atomic table and aggregate queries require direct SQL; fresh revision checks intentionally avoid stale object-cache data. The schema warnings concern installation/deletion, and the `exclude` keys are campaign configuration rather than expensive query arguments. Both editions retain explicit native text-domain loading for bundled catalog compatibility on WordPress 6.5, verified by the native French fixtures. These are reviewed remaining warnings, not a claim of a warning-free directory review. Exact receipts are in `validation/0.3.0`; prior version evidence stays under its original version. JavaScript/browser and package verification are listed in the final qualification receipt. Historical download hashes are checked before and after the deterministic package build. The native harness runs real WordPress/WooCommerce code in official WordPress Playground, PHP WASM and SQLite. Browser tests use actual plugin scripts with fictional local transport/store fixtures. These are not tests on a customer production database, native MySQL, every third-party theme or every consent provider. ## Exact boundaries - Free remains useful without WooCommerce or an account. One eligible public bar is selected at a time; page/device/exclusion rules remain mandatory. An emergency pause is observed on the next fresh browser resolution; it does not promise instant remote removal from an already open offline page. - Real-page draft previews require the same authenticated publisher, a nonce and a revision-bound signed link expiring in 15 minutes. Campaign measurement, links and coupon actions are disabled. Audience selection is not simulated and shipping is explicitly illustrative; other plugins on the page remain outside this preview's control. - Shipping needs a supported native free-shipping rule, a known destination and one shipping package. Unknown eligibility hides the offer or shows the merchant's neutral fallback. Third-party shipping, split packages and currency conversion are not universally supported. - Measurement is local, optional and off by default, with consent required by default. Pro attribution requires an explicit analytics grant even when optional Free counters are allowed without it. Withdrawal retires the consent grant and clears source/attribution state so an older response cannot revive eligible attribution. Previously stored aggregates and order metadata are not automatically erased. - Optional Pro source retention is scoped to the current browser tab, starts only after a matching landing is rendered with consent, yields to a current URL source, and clears on withdrawal. No cross-device identity is created. - Reports retain 90 days of aggregates. Revenue excludes tax/shipping; itemized refunds adjust it, while non-itemized refunds are not allocated. Unverified historical currency, store currency changes and mixed order currency hide affected monetary totals. No currency conversion, causal sales lift, automatic winner or statistically proven optimization is claimed. - Product/category audience targets product pages (including category descendants); role conditions use the logged-in user; language matching uses supported current-language signals or an explicit prefix. It does not translate site content or claim universal multilingual-plugin compatibility. - Free retains 20 saved revisions and Pro 50. Pro transfer supports up to 1,000 campaigns and 30 shared presets, with preview and destination review. It creates drafts and has no remote publishing connection. - PHP/JavaScript translation templates and native loading ship, not completed catalogs for every language. ## Before directory submission Use the owner's actual WordPress.org contributor account and submit only the Free installer. Review its current official Plugin Check findings and owner-specific theme, mobile, cache/CDN, consent, cart and checkout behavior on staging. Native MySQL, multisite/network activation, arbitrary shipping/currency integrations and all production browsers are not certified by the fixture harness. The directory makes its own review decision. ## Scope heading into 2027 This qualification records the specific October 2026 versions above. It is not a promise of compatibility with unreleased WordPress, WooCommerce, PHP or browser versions. Native MySQL testing and an owner-operated staging pilot with the actual theme, cache/CDN, consent provider and store remain before a repository launch. Re-run the relevant checks when those dependencies or integrations change. There is no automatic draft saving, statistical winner selection, remote site publishing or automated destination-mapping interface in this release.