Website v21.0.9 to v21.0.13 - 23 July 2026
On this page
This accumulative release adds configurable card networks for CyberSource, customer-selectable quantities for bundles nested inside other bundles, and stronger password reset security. They also deliver faster, more resilient Salesforce sync and a POS start-up recovery screen, alongside a broad set of payment, tax, cart, bundle, subscription, and POS fixes — including corrected committed-stock attribution on POS delivery orders and a fix for live payments being routed to a provider’s test environment.
Breaking changes and cautions
:::warning POS delivery orders now draw committed stock from the shipping warehouse
When a POS delivery order shipped from a warehouse, the committed-stock decrement was previously recorded against the outlet’s retail store location instead of the warehouse the order actually shipped from. This left the shipment and the stock decrement pointing at different locations. POS delivery orders now record the decrement against the warehouse their fulfillment ships from.
If you have reports or integrations that assumed delivery stock was always drawn from the outlet’s retail location, review them. Committed-stock decrements now follow the shipping warehouse. :::
:::warning Custom POS receipt templates may show unrounded prices
As part of the POS tax fix in this series, the unit price passed to POS print templates is no longer rounded before it reaches the template. StoreConnect’s bundled receipt and label templates all format prices with the | money filter and are unaffected.
If you have customized a POS receipt or label template that prints a price value without the | money filter, it may now display extra decimal places. Add the | money filter to those values to restore correct formatting.
:::
:::warning Password reset link expiry is now configurable
Password reset links expire after 6 hours by default, and this window is now configurable per store with the passwords.reset.within_minutes store variable (in minutes; the default is 360). A customer who follows an expired or already-used reset link is told it is no longer valid and is prompted to request a new one. If you email reset links well in advance, review this window and adjust it if needed.
:::
Enhancements
CyberSource: configurable card networks
CyberSource direct card entry previously accepted only Visa, Mastercard, and Amex. You can now choose which card networks are accepted — for example, adding Discover or JCB — using the allowed_card_networks option in the CyberSource payment provider configuration. The default remains Visa, Mastercard, and Amex, so existing configurations are unchanged.
Choose a quantity for a bundle within a bundle
When a bundle contains another bundle (a sub-bundle), customers can now choose how many of the sub-bundle they want, and that quantity carries through to the sub-bundle’s components in the cart. A configured sub-bundle priced at $0 — for example, one whose contents are already covered by the parent bundle price — is now added to the cart correctly instead of being silently dropped.
Configurable password reset link expiry
The password reset link expiry window is now set per store with the passwords.reset.within_minutes store variable, defaulting to 360 minutes (6 hours). Links continue to expire once used or replaced by a newer request.
Self-service recovery from an expired or used reset link
A customer who clicks an expired, already-used, or superseded password reset link is now taken straight back to the “Forgot your password” form with a clear message, so they can request a fresh link without contacting support. This is delivered through a new theme translation and applies to existing themes automatically.
Contact Last Login Date and Invitation Accepted At recorded when a password is set
When a customer sets their password — by accepting an invitation or by resetting it — their Salesforce Contact now records the Last Login Date. An invited customer who uses “Forgot your password” instead of the invitation link now also has Invitation Accepted At mirrored to the Contact. Previously these fields could remain blank, making it hard to tell that a customer had activated their account.
POS recovery screen for a slow start-up
When a POS device is slow to start, the loading screen now names the step in progress — loading schema, opening database, indexing records, starting the sync worker, or loading initial records — instead of a generic “Initializing…”. If a step takes longer than expected, a recovery panel appears so staff can act rather than wait on a screen that appears frozen.
Smoother POS Clear & resync
The Initializing screen now stays visible for the whole of Settings → Clear & resync all data. Staff no longer briefly see a partially cleared interface while records are wiped and re-synced.
Faster, more resilient Salesforce sync
Sync now retries transient Salesforce errors — such as temporary limit or unknown-exception faults — instead of treating them as permanent failures and discarding the change, so data that would previously have been lost now reaches Salesforce. Routine archiving of processed changes has also been moved to its own faster job for smoother ongoing sync.
Deprecated fields
No fields have been deprecated in this release.
Fixed bugs
Double-counted tax on POS receipts and order history
On tax-exclusive stores, tax could be added twice on POS receipts and in order history — for example, a $63.14 order printing a total of $66.42 and then showing a phantom balance owing. POS now uses the tax that was actually charged at the time of sale for the receipt and order-history breakdown, so totals stay consistent even if tax settings, zones, or product tax assignments change after the sale.
Fully-paid tax-inclusive orders showing a balance owing
On tax-inclusive stores, POS order history could re-add tax that was already included in the price, making fully-paid orders appear unsettled. Payment-due and settlement calculations now respect each item’s tax-inclusive setting, so paid orders correctly read as settled.
Live payments routed to the test environment for some providers
If a payment provider’s API Mode was set with different capitalization — for example, “Production” with a capital P — StoreConnect treated it as not production and routed live payments to the provider’s sandbox, so every card payment failed. API Mode is now matched regardless of capitalization, across eWay, Linkly, Square, Quest, and Avalara.
Live shipments routed to the test environment for some providers
The same capitalization issue affected shipping providers’ API Environment, which could send live shipment requests to a carrier’s test endpoint (for example, Australia Post). API Environment is now matched regardless of capitalization.
Shipping charge missing when taking an additional payment on a POS order
When taking a further payment against an existing POS order — for example, paying the balance after a deposit — the shipping charge was left out of the amount owed, so the order could never be fully settled. Shipping is now included in the balance for order payments.
Shipping missing from POS checkout totals
The delivery total on the POS cart and checkout depended on an internal fulfillment link, so a missing or broken link could silently drop the shipping charge from the displayed total even though the customer still owed it. The delivery total is now calculated directly from the cart items, so shipping is included whenever a shipping item is present.
Cart pricing error on bundles
Bundle products could show a Liquid “internal” error in place of pricing on the cart page and in the cart drawer, blocking the customer. Bundle pricing now renders correctly; where a member’s price is genuinely unknown it shows blank rather than erroring, and cart and checkout totals are unchanged.
Changing a bundle quantity left nested quantities stale
Changing the quantity of a bundle that contained a sub-bundle only re-scaled the top-level items, so the sub-bundle’s component quantities — and the amounts shown per bundle — were wrong. Quantity changes now scale the whole bundle, including nested bundles, and removing a bundle reliably removes every part of it rather than leaving hidden items behind.
CPQ bundle configuration corruption and sub-bundle pricing
Stores using Salesforce CPQ product bundles could encounter corrupted bundle configurations and incorrect sub-bundle pricing during bundle setup and when updating product options in bulk. A corrupted bundle configuration now self-heals and re-initializes instead of failing, bulk product-option updates correctly resolve and preserve the selected options and variants, and the customer’s cart contents are preserved through the process.
Afterpay checkout failing silently
If a customer changed their cart in another browser tab after starting an Afterpay payment, the payment was correctly stopped to prevent charging a stale amount — but the customer was left on a dead payment page with no explanation. The reason (“Your cart was changed during payment. The amount charged does not match your order — please contact us to resolve.”) now appears on the checkout page, so the customer knows what happened and how to get it sorted.
Duplicate items on pre-populated subscription renewal orders
When a subscription renewal order had already been populated with products — manually or by Salesforce automation — the subscription product was added again at charge time, leaving the order with duplicate items and a balance owing. StoreConnect now skips re-adding items to a renewal order that was already populated externally, while still adding the correct item to renewal orders that start empty.
Under-refunded tax on partial POS refunds
On stores using local, tax-exclusive rates, refunding a percentage of a line refunded too little tax. Partial refunds now scale the tax in line with the refunded amount.
POS sync stalled by an order-less shipment
A shipment with a missing or orphaned order reference could cause a POS sync error that stalled every shipment queued behind it. Such shipments are now skipped — and reported for investigation — so the rest of the sync continues.
Storefront error for customers with an out-of-stock item in their cart
A tracked-inventory product with no stock at the store’s locations could raise an error on every storefront page for any customer who had that product in their cart, effectively locking them out until their cart session was cleared. Such items are now removed from the cart with the normal out-of-stock message.
POS Manage Data stuck on a loading spinner
Opening the More actions menu in POS Manage Data during a sync could leave the page stuck on a loading spinner. The underlying cause has been fixed so the page loads reliably.
Add-to-cart stock check comparing the wrong value
A recent change compared the wrong database column in the add-to-cart stock guard, which could cause incorrect stock checks when adding items to the cart. The comparison now uses the correct key.
NMI card fields not editable when the payment form is hidden
When an NMI card form was not the default payment tab, or sat behind an “update payment details” link, its card fields could load with zero height and remain uneditable. The form now sets itself up only once it becomes visible.
Geolocation redirect producing a double slash for stores with no path prefix
On stores set up without a path prefix, a geolocation redirect could be built with a double slash in the URL. The URL is now constructed correctly.
Was this article helpful?
Thanks for your feedback! It helps us improve our docs.