Sessions Cannabis - internal ledger

Cart Breakages Ledger

Every incident that blocked or degraded a customer cart since June, with an honest verdict on whose problem it was: Dutchie's, ours, or working-as-designed. Companion to the Dutchie Ticket Register. Updated August 15, 2026.

6
Dutchie-side incidents
8
Our-side incidents
By design (not breakage)
Legal 30g cap blocks (~6-9/day) and availability re-check notices (~125/day) are protections working correctly.

Measured sale impact - rolling 30 days

Pulled from our production order-error monitoring (same source as the Cart Health board). Window: Jul 16 - Aug 15, 2026.

MeasureCountWhat it means
Blocked checkouts32Carts where the customer tried to buy and could not complete. 31 of 32 are the Dutchie add-to-cart race (tickets 686841 / 687078); 1 was a resolution failure. Roughly one lost sale attempt per day, almost entirely Dutchie-side.
Rejected add attempts (incl. retries)286 / 3 wkEvery rejected add-to-cart attempt counted, including retries that later succeeded. Blocked checkouts (32) is the stricter, truer lost-sale number - many customers retry and get through.
Items flagged out-of-stock in cart610Caught before checkout because the item genuinely sold out. Inventory reality and the protection working - not breakage.
Legal-limit blocks8Cannabis Act 30g cap. By design.
Price re-confirms4Price changed between menu and checkout; customer asked to re-confirm. Friction, not a lost sale.
Dollar impact: cart value is not captured on failed checkouts, so the ceiling is 32 x average order value per month - an upper bound, since some of those customers retried successfully. The number to watch is the blocked-checkout rate staying near 1/day until Dutchie fixes the inventory race.

Dutchie-side

Failures originating in Dutchie's systems. Tracked with them via the ticket register.

WhenWhat brokeScaleTagsStatus
Jul 23 - ongoingAdd-to-cart rejections on in-stock items. Dutchie's API rejects adds with "Validation errors" (survives retry) or "Not Found" for products its own menu is serving. Strongest evidence: an identical request that failed twice succeeded hours later - non-deterministic on their side. Worst on last-unit items (inventory race).286 rejections, 37 stores, 3 weeks; ~3-8/day ongoing. Since the Aug 14 CEO escalation: 8 more blocked add-to-carts in the first 48h - unchanged.dutchieopenTicket 686841 - evidence pack in Dutchie's hands
Jul 23 - ongoingCheckout price disagrees with menu price for the same product at the same moment (their two systems disagreeing). We absorb it by re-confirming with the customer.139 cases / 3 weeksdutchieopenPart of ticket 686841
Aug (reported Aug 14)"No inventory available" in COVA at the register when ringing up a web order - the POS-side symptom of the same inventory-sync race. Register staff cannot complete the sale.Reported at Etobicoke (Albion); likely widerdutchiecova-syncopenTicket 687078 (CEO-escalated by Darryl); linked to 686841
Jul 18-20Store menu briefly showed wrong / missing products (transient Dutchie data window). Self-healed.1 store, ~2 daysdutchieresolvedTicket 678128 - closed
Jul 16 -Timmins delivery orders bounced as "pickup only" despite delivery enabled - store config in Dutchie's back-end.1 storedutchieconfigHelpdesk #11052 - status being reconfirmed
Jun 4 - Aug 14Server allowlist never applied (their side) - worked around architecturally on ours, so customers never saw it; the request itself sat unresolved for 10 weeks.No customer impact (mitigated)dutchieresolvedTicket 663272 - verified working Aug 14

Our-side

Failures we caused and fixed ourselves. Listed with the same honesty we expect from Dutchie.

WhenWhat brokeScaleTagsStatus
Aug 10-15Store-finder crashed for long-named products. Our database layer rejects search patterns over 50 characters; products with long names (e.g. a BOXHOT vape) made the "which stores carry this" lookup fail on every attempt, and the page retried endlessly.1 product's store-finder dead 5 days; 111k error eventsoursfixed Aug 15Fixed + verified; long names now degrade gracefully
Aug 12-13Sorting by price blanked the shop at every store (a code error in a shared helper shipped with an unrelated update).Fleet-wide, 23 hours, 598 recorded crashesoursfixed Aug 13Fixed; price-sort added to post-deploy checks
Jul 2814-minute checkout outage: a transport change stripped authentication on checkout calls.70 real checkouts blocked, 5 stores, 14 minoursfixed same dayFixed; mandatory post-deploy checkout canary created from this incident
Jul (River Bend launch)River Bend checkout dead from day one - our store-ID mapping passed the wrong identifier to Dutchie, which read as "products unavailable". Dashboards showed healthy because they used a different ID.1 store, from launch until foundoursfixedFixed + ID map audited fleet-wide (helpdesk #11062 closed)
Jul (Orillia)Discounted items blocked at checkout - our price check compared against pre-discount totals.1 store pattern, several cartsoursfixedFixed; net-of-discount comparison
Jul (specials)Price-drop items wrongly interrupted checkout - we treated any price change as suspicious; drops now proceed (customer pays less), only increases re-confirm.False blocks on specialsoursfixedFixed
Aug (SESH BITES)In-stock item flagged "no longer available" - a false positive in our availability re-check, plus a legal-equivalency display error (7.5g shown vs 0.27g actual).1 product classoursfixedFixed
Jul (Timmins)Checkout blocked at the 5th item - our stale-cache handling reported in-stock products as unavailable instead of re-checking.1 store patternoursfixedFixed; "a cache miss must never block a sale" is now a design rule
The honest overall picture: our own breakages have been found and fixed within hours to days, each with a permanent guard added (post-deploy canary, price-sort checks, ID-map audits, pattern-length guards). The Dutchie-side inventory race is the one that stays open - it is structural on their side, it produces both the website rejections AND the register errors, and it is now escalated at CEO level with the full evidence pack in their hands (tickets 686841 + 687078). The protections that fire daily (30g legal cap, availability re-checks) are not breakages - they are the system refusing to sell what it should not.