← All releases

QA Release — 2026-07-20

Tag qa-2026-07-20 · Created: 2026-07-20 · Last Updated: 2026-07-24

What shipped to QA in this release (changes since 2026-07-07), grouped by area. The Ref column is stable — cite it when reporting. Rows marked → How to test are expanded at the bottom.

✨ Highlights

Device registration in Admin
activate, view, and deactivate POS terminals; find it in Admin portal.
Initialize a location from a template
a new location copies a template store's settings; find it in Merchant portal.
Active sessions page
see every device signed into your account and sign them out; find it in Merchant portal.
Bulk actions on grids
select several rows and act on them at once; find it in Across both portals.
Purchase Order reorder proposal
suggests reorder quantities while building a PO; find it in Merchant portal.

🖥️ Admin portal 11

Type What changed Where to check Ref
New Register a POS terminal from the Devices tab — the button used to be a stub that only showed a toast. → How to test Admin › Merchants › detail › Devices #844
New Filter invitations by pending / accepted / expired. Admin › Users › Invitations #819
New Edit a merchant's country, which also sets how phone numbers typed elsewhere are interpreted. Admin › Merchants › detail › edit #759
Fixed The Devices tab shows each terminal's real status — every device used to read "No connection", including live ones — and a failed register now shows the reason instead of closing silently. → How to test Admin › Merchants › detail › Devices #868
Fixed Deactivating a device in the global registry works — it used to show a success message and leave the device active. Admin › Platform › Devices › Deactivate #878
Fixed A merchant's Modules tab lists its module toggles — the grid used to come up empty for every merchant. Admin › Merchants › detail › Modules #897
Fixed Inviting a partner user from a partner's page works — it used to fail with a generic error. Admin › Partners › detail › invite user #895
Fixed The AI logs and AI prompts detail pages open — the links were broken and led nowhere. Admin › Platform › AI logs / AI prompts #848
Fixed Notification template pages open — the links were broken and led nowhere. Admin › Platform › Notification templates #877
Fixed Revoking an invitation works — the button used to fail silently and leave the invitation active. Admin › Users › Invitations › Revoke #831
Fixed User filters reset when you switch tabs, so a role picked on one tab no longer sticks on another and returns 0 results. → How to test Admin › Users › Platform / Partner / Merchant tabs #719

🏪 Merchant portal 14

Type What changed Where to check Ref
New Initialize a new location from a template store — it copies the template's price, cost, and tax-group overrides. → How to test Portal › Locations › New › Initialize #839
New An Active sessions page lists every device signed into your account and lets you sign them out. → How to test Portal › Settings › Sessions #748
New While building a purchase order you can pull in the products that are below their reorder point. → How to test Portal › Purchase Orders #884
New Set a product's reorder point and restock level per location — these are what the reorder proposal and the low-stock lists read. → How to test Portal › Products › detail › Inventory #777
New Filter the Purchase Orders and Receipts lists by location and supplier; the receipt search also matches the linked PO number now. Portal › Purchase Orders / Receipts › filters #749
New Record a supplier's minimum order quantity per product — leave it empty for no minimum. Portal › Products › detail › Suppliers #776
Improved A customer certificate's issued date can no longer be set in the future — the expiry date is still unrestricted. Portal › Customers › Certificate #862
Improved A product's Pricing, Inventory, and Taxes tabs list every active location — a store selling at the base price used to be missing from them entirely. Portal › Products › detail › Pricing / Inventory / Taxes #849
Improved Completing a receipt links any product received off-supplier to that supplier and records the cost you paid. → How to test Portal › Purchase Receipts › Complete #906
Improved The Movement log lost its "Reset to last 7 days" button — the date picker's own preset and Clear filters already do it. Portal › Inventory › Movement log › filters #860
Fixed Applying a price change now actually updates the prices, instead of reporting "Applied" while changing nothing. → How to test Portal › Pricing › apply a price change #886 #866 #864 #873
Fixed Clearing a variant's barcode sticks — blanking the field and saving used to be silently ignored (setting or changing one always worked). → How to test Portal › Products › Variants #816
Fixed Your unsaved edits in a create drawer survive a background session refresh. → How to test Portal › any create drawer #755
Fixed Opening a location or supplier with a Puerto Rico phone number no longer flips its Country to Puerto Rico and marks the form changed. → How to test Portal › Locations / Suppliers › edit #750

🧩 Across both portals 7

Type What changed Where to check Ref
New Click anywhere on a table row to open its detail — the whole row is the link. Any list page #720 #769
New Select several rows on a document grid and act on them in one go. → How to test Document grids with checkboxes #829
Improved Summary cards show the total across the whole filtered list, not just the page you are on. → How to test Dashboard & list pages › summary cards #756
Improved Date fields are full width with a clearer calendar affordance. Any date picker #859 #814
Improved Notifications use a distinct on-brand icon per type. Any pop-up notification #802 #725
Improved Table typography and spacing match the design system across every grid. Any data grid #815 #757 #746 #735
Fixed Filter chips clear reliably when removed. Any filtered list #718

🔑 Sign-in & behind the scenes 2

Type What changed Where to check Ref
New Support access asks for a reason before entering a merchant, and the access is time-capped. → How to test Support access › pick a merchant #736
Fixed If support access fails while the reason dialog is open, the dialog now shows the error — it used to just sit there with no feedback. Support access › reason dialog #782

🧪 How to test 15

Only the items that need more than a glance. Click to expand.

#844 — Register a POS terminal from the Devices tab
#868 — Device status and register errors
#719 — User filters reset per tab
#839 — Initialize a location from a template store
#748 — Active sessions page
#884 — Pull below-reorder-point products into a purchase order
#777 — Reorder point and restock level per location
#906 — Receiving links off-supplier products and records the cost
#886 #866 #864 #873 — Applying a price change really applies it
#816 — Clearing a variant barcode sticks
#755 — Unsaved drawer edits survive a background refresh
#750 — A Puerto Rico phone no longer rewrites the Country
#829 — Bulk actions on document grids
#756 — Summary cards total the whole filtered list
#736 — Support access asks for a reason

🔧 Technical — not QA-testable 6

Referenced in development but with nothing to verify through the normal portal flow — listed so a referenced number never dead-ends.

Ref What Why not testable
#792 Client-IP handling behind the proxy, so rate limiting and audit key off the real caller. Backend hardening. The real IP already resolved correctly on the current hosting — this closes a header-spoofing gap, reachable only by forging request headers, not through the portal.
#789 #737 Merchant business attributes (country, currency, timezone) moved to a dedicated endpoint. No visible change — the same values arrive by a different route. Verified by API/integration tests.
#824 The device registration service and its platform endpoints. Backend half of the Devices tab work above (#844); on its own there is no screen to open.
#833 Internal AI-log identifiers promoted to public ids. Data-layer change behind the AI logs pages (#848); nothing in the UI shows it.
#785 Device activation returns the merchant id. API-only, and its consumer is the POS terminal at first boot — nothing in either portal shows it.
#801 A purchase order can only have one open draft receipt. The portal already blocked this in the normal flow; the gap was on direct API calls, so it needs a non-UI path to reproduce.