2026

Reader-visible change only, most recent first. Conventions are on Writing release notes.

Note

Entries before this page existed were reconstructed from merge history rather than written at the time, so they were never reviewed by whoever made the change. Treat anything surprising as worth confirming against the code.

August

Date Change
18 Aug Changed Search facets reduced to the four with data behind them — brand, category, colour, gender. Search
7 Aug Added Internal service staff can act across every customer instead of one. Access
4 Aug Fixed A duplicate "added to customer" email was sent daily to administrators provisioned by the ERP

July

Date Change
30 Jul Changed Order confirmation email now groups lines by colourway, matching order history
30 Jul Fixed 3DS challenge outcome re-verified server-side before capture, rather than trusting the client
28 Jul Fixed A non-authenticated 3DS status is treated as a decline, not captured
28 Jul Changed Basket accepts a bulk line add, consolidating with existing lines
28 Jul Fixed Buy-X-get-Y counts units rather than basket lines, so the same quantity split across lines qualifies identically
23 Jul Added Indent brands are unioned with allowed brands when deciding what a customer may see
22 Jul Added Purchase order numbers required, and rejected when they duplicate one already used by that customer
21 Jul Added Free road shipping in Australia above a configurable order value
21 Jul Fixed That threshold is inclusive — free at the value, not only above it
21 Jul Fixed Acknowledgement email showed the wrong pickup address and amount due; pickup codes now validated
21 Jul Fixed A rejected user sees an access-denied message before being signed out
20 Jul Fixed Clearance product images resolve per variant
17 Jul Changed Basket validation reorganised into phase-tagged rules — some at the moment of change, some against the composed basket. Rule set with phases
17 Jul Fixed Bonus reward lines carry a tax code, so a zero-price line maps correctly to the ERP
16 Jul Added Company profile — a customer's own administrator can manage that customer's users
16 Jul Added Bulk ordering by SKU, parsed server-side with a preview before anything is added
15 Jul Added Portal-managed users — an identity and access model owned by Commerce, with administrative APIs
14 Jul Fixed Reservations take on-hand stock only, all or nothing. Concurrent checkouts could previously reserve into back-order. Inventory lifecycle
14 Jul Fixed Order numbers made globally unique; blocked and charge products guarded at checkout
13 Jul Added Bonus product promotions — a qualifying basket offers a reward product
13 Jul Changed Charge lines computed on the basket rather than stored. Compute on read
9 Jul Changed Customer discounts hidden and promotions surfaced instead, resolved per customer
7 Jul Added Product card tags and curated product grids
6 Jul Added Stock cap validation by stratification
5 Jul Added PayWay as a card provider alongside Stripe, selected per site by a setting
5 Jul Fixed Brand code included in product search results
5 Jul Fixed Postcode routing and package upserts are additive and no longer delete rows absent from a push
3 Jul Fixed Purchase order numbers limited to 20 characters
2 Jul Fixed Search suggestions matched by SKU now show the product name
2 Jul Changed ERP order mapping tidied — tax codes, billing and reservations
1 Jul Fixed A delivery basket with no address yet no longer fails pricing outright

June

Date Change
30 Jun Added Payment options reflect account payment terms, with a payment type for cash on delivery
30 Jun Changed Customer's permitted brands shown, where blank means all
30 Jun Fixed Card surcharge computed on the fulfillable amount, and all basket money emitted at two decimal places
30 Jun Fixed Search index missed products when only an owned type or a category changed
26 Jun Added Order confirmation email, sent asynchronously from an editable template. Email
26 Jun Added Invoice and credit documents fetched from the ERP on demand
25 Jun Added Public Product API — batch lookup by EAN or SKU, API-key authentication, administrator-managed tokens. Public API
23 Jun Added Promotions gained line-level proration and cart-context qualifiers
22 Jun Added Canadian shipping
19 Jun Added New Zealand and Australian shipping options and pricing. Fulfilment
16 Jun Added Sub-brands and compliance icons, and search improvements
15 Jun Added Order posted to the ERP asynchronously after placement. Async work
15 Jun Added Surcharge membership and a line-level promotion type at checkout
12 Jun Added Item discount group as a pricing rule target
9 Jun Changed Product detail prices resolved through the pricing engine, so a product page and a basket cannot disagree
8 Jun Added Product EAN, sleeve length and fabric type
5 Jun Fixed Stripe payment intent aligned with the embedded payment element flow

Before June

Initial build. The domains, the four API surfaces, authentication, the database and the integration contracts were established between late April and the end of May.

Not itemised — almost every change created something for the first time rather than changing something. Architecture describes the result.