Tag
qa-2026-08-06· Created: 2026-08-06 · Last Updated: 2026-08-06
What shipped to QA in this release (changes since 2026-07-20), grouped by area. The Ref column is stable — cite it when reporting. Rows marked → How to test are expanded at the bottom.
| Type | What changed | Where to check | Ref |
|---|---|---|---|
| Fixed | The module catalog lists modules again. It was rendering completely empty with every stat card at 0 even though the server was returning 26 modules. → How to test | Platform › Modules | #957 |
| Fixed | A merchant's module grid shows real category names instead of lowercase keys, and a core module can no longer be switched off — the toggle is locked and a forced attempt is refused. → How to test | Platform › Merchants › detail › Modules | #943 |
| Fixed | Devices on a partner's merchant detail show their real status. Every row used to read "Sin conexión" regardless of the device's actual state. → How to test | Partner › Merchants › detail › Devices | #1008 #995 |
| Fixed | "Open in merchant portal" opens the QA merchant portal. It was opening https://localhost:7710, an address that only resolves on a developer machine, so the new tab failed to load after you picked a reason. → How to test |
Platform › Merchants › detail › Open in merchant portal | — |
| Type | What changed | Where to check | Ref |
|---|---|---|---|
| New | Completing a sale, return or void now moves stock — quantity on hand changes and a movement row is written in the same transaction, and a void nets out whatever was already returned against it instead of crediting the full amount. Selling more than you have is still allowed on purpose. → How to test | Inventory › Stock · Inventory › Movements | #961 #968 |
| New | A purchase order can be recreated as a draft copy of an earlier one, carrying its supplier and lines. → How to test | Purchase orders › Reorder from a previous PO | #972 #1001 |
| New | The purchase order list flags orders running late, and ones due today, without opening each one. → How to test | Purchase orders | #1025 |
| New | A supplier can require a money minimum for a whole order, and submitting below it is refused. → How to test | Suppliers › open a supplier · Purchase orders › Submit | #1053 |
| New | A reason code can require a note, and an adjustment cannot be created, saved or completed in a note-requiring state without one. → How to test | Settings › Reason codes · Inventory › Adjustments | #1112 |
| Improved | Inventory documents now credit the operator who actually changed their status — "Updated by" used to keep showing whoever created the document. → How to test | Inventory › Adjustments › open one › Updated by | #1087 |
| Improved | Low Stock's suggested quantity now matches the reorder worksheet and the report for the same item. All three used to disagree because Low Stock ignored on-order quantities, the supplier minimum and the need-greater-than-zero gate. → How to test | Inventory › Low stock · Inventory › Reorder worksheet · Reports | #954 #1010 |
| Improved | Location pickers search the whole list. They were plain dropdowns holding only the first 100 locations, so a merchant with more than that could not pick the rest. → How to test | Purchase orders › create · Purchase receipts › New · Inventory › Adjustments · Transfers | #948 |
| Improved | The reorder worksheet says when its list was cut short, showing how many items it is displaying out of how many are below their reorder point. You can still generate the order from a shortened list. → How to test | Inventory › Reorder worksheet | #949 |
| Improved | The reorder worksheet appears on the Inventory hub. | Inventory › hub cards | #985 |
| Fixed | Opening the reorder worksheet by direct link while "all locations" is selected now shows the location switcher instead of a dead end that said "Pick a location" with nothing to pick it with. → How to test | Inventory › Reorder worksheet | #956 |
| Fixed | Dashboard report figures follow the selected location. The location filter was being dropped, so every figure aggregated across all locations. → How to test | Dashboard | #992 |
| Fixed | Clearing the weight or barcode on a product variant now saves as empty. It reported success and silently kept the old value. → How to test | Products › open a product › variants | #1079 |
| Fixed | Documents that used a payment method or reason code still open after that code is deleted, and show the code they were saved with. They used to come back empty or as a 404. → How to test | Inventory › Adjustments › open one | #983 |
| Fixed | An inactive tax group is refused for a new or changed assignment. Assignments made before it was deactivated are kept and can still be edited, and deactivating a group is not blocked. → How to test | Taxes › Tax groups · Customer tax profiles · Products | #970 |
| Fixed | Adding the same variant twice to a price change is refused with a message naming it, instead of failing with an unexpected error. → How to test | Inventory › Price changes | #1040 |
| Fixed | The purchase order "Add product" drawer repopulates after you add a line. The list went blank and stayed blank until you toggled the stock filter. → How to test | Purchase orders › open a PO › Add product | #993 |
| Fixed | A Manager sees the full sidebar again and can work adjustments end to end. The role lost every module-gated menu item and hit "not authorized" on the screens behind them. → How to test | Sidebar · Inventory › Adjustments | #1076 #1060 #1085 |
| Fixed | Pre-existing duplicate open draft receipts were cancelled by this release — the oldest one per purchase order survives, and each cancelled one carries a note saying why. | Purchase receipts | #1094 |
| Type | What changed | Where to check | Ref |
|---|---|---|---|
| New | Saving a record that someone else changed while you had it open now opens a dialog comparing both versions field by field, and lets you apply a merge, discard your edit, or keep editing. It used to overwrite them silently. → How to test | Any edit drawer on either portal | #1033 |
| Improved | Buttons and rows show a pressed state on touch, so a tap on a tablet no longer feels unresponsive. | Any button on a touch device | #958 |
| Fixed | The delete button meets the AA contrast requirement in its resting state, not only on hover. | Any delete confirmation | #1119 |
| Type | What changed | Where to check | Ref |
|---|---|---|---|
| Improved | Invitation and magic-link email goes out through a queue, so a provider hiccup retries instead of dropping the message. → How to test | Platform › Users › invite a user | #982 #1128 |
| Improved | Sync commands are addressed by their global identifier instead of an internal number. A tool or saved link using the old numeric form will stop working. | Platform › Sync monitor | #1116 |
| Fixed | Signing in returns you to the portal that started it. The merchant portal used to land on a 404 and the admin portal could report an invalid state. Sign-in links issued before this release no longer work — request a new one. → How to test | Merchant portal › Sign in · Admin portal › Sign in | #1091 |
Only the items that need more than a glance. Click to expand.
https://localhost:7710, which does not resolve outside a developer machine, so the new tab failed to load. It behaved this way on QA since 2026-07-13.https://portal.qa.qiiub.com.portal.qa.qiiub.com, already signed in to that merchant. Check the address bar — if it reads localhost, this has regressed.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 |
|---|---|---|
| #1037 | Duplicate lines on a stock count are refused. Before this, finalizing multiplied the variance by the number of duplicate lines and silently moved stock by the wrong amount. | Stock counts have no portal screen yet — API-only. |
| #1094 (race) | Two people starting a receipt for the same purchase order at the same instant can no longer both succeed; the guarantee is now a database index. | Needs two creates in the same instant. The sequential case was already blocked last release. |
| #1039 | Two simultaneous registrations of the same device code both get a clean conflict instead of one unexpected error. | Needs concurrent requests; a sequential duplicate already reported a clear error. |
| #978 | Saving quantity on hand reloads and re-applies the change instead of failing when another writer commits first. | Needs simultaneous writes; a successful retry is indistinguishable from an ordinary save. |
| #1054 #1014 | Return-quantity guard serialized, and a helper renamed ahead of the shift-total work. | Concurrency-only, and the rename carries no behaviour change at all. |
| #953 #959 #966 | Module activation hardened against two simultaneous toggles. | Needs two requests in the same millisecond; no screen can produce it. |
| #947 | Module payloads no longer carry an internal numeric id. | Identity plumbing — the visible screens are unchanged. |
| #1007 | API read caching moved onto HybridCache. | No trigger of its own; behaviour is identical and only timing changes. |
| #1128 (retry) | Email retry behaviour when the provider fails. | Needs the provider to fail; cannot be forced from the portal. Normal delivery is in the table. |
| #1075 | POS device bootstrap and key storage. | Needs a POS terminal build; not reachable from either portal. |
| #1016 #945 #971 | Shared UI package released as 0.9.0 with more public exports (including AppShell and UserMenu). | Library surface — the portals already rendered these; nothing visible changed. |
| #1043 | SQL data-plane auditing on the QA server. | Verified in Azure storage, not in the product. |
| #974 | Fonts allowed from the asset origin under the production security policy. | POS-only and only observable in browser devtools. |