Tag
qa-2026-10-18· Created: 2026-10-18 · Last Updated: 2026-10-18
What shipped to QA in this release (changes since 2026-10-06), grouped by area. The Ref column is stable — cite it when reporting. Rows marked → How to test are expanded at the bottom.
An intermediate build was published to QA on 2026-10-13 without release notes. It already carried the portal changes merged up to 2026-10-12 — stock counts, the supplier record (lead time, payment terms, currency, custom fields, documents), the Sync Monitor and Terminal sync screens, the product editor's Cancel and in-place tabs, the trash icons on remove buttons, the 44 px touch targets, error fields that stay red, the Reports page's {count} fixes, a Manager's Dashboard cards and the Version History revert numbers — so those may already have been visible; they are listed here because this is the first changelog since 2026-10-06. In the area tables below, every row whose Ref is #2927 or lower comes from that build's range, so it may already have been visible too; the rows from #3041 on, including the five runnable reports, are new in this build.
| Type | What changed | Where to check | Ref |
|---|---|---|---|
| New | Each Active terminal in the Sync Monitor's Terminals table has a Request full reload button behind a "Request a full reload?" confirm · confirming shows "Full reload requested" and the terminal's Full reload column changes from "Not requested" to "Requested …" · on QA it stays "Requested", because it clears only after the terminal finishes a reload and no POS terminal syncs on QA · terminals that are not Active get no button. → How to test | Platform › Sync Monitor › choose a merchant › Terminals | #2903 |
| New | Clicking a terminal row in the Sync Monitor opens a Terminal enrollment drawer with the terminal's enrollment state and its request history · on QA expect "Not enrolled" and "This terminal has not asked to enroll a key.", since only the POS app can ask to enroll. | Platform › Sync Monitor › choose a merchant › Terminals › click a row | #2903 |
| New | A PartnerAdmin now has Sync Monitor in the partner sidebar under Support · it is the same page as the platform one, but its merchant picker lists only that partner's merchants. | Partner › Support › Sync Monitor | #2903 |
| New | A PartnerSupport user is not offered the Sync Monitor · the sidebar item is hidden, and opening /partner/sync-monitor directly sends them back to the partner overview. |
Partner sidebar › Support (signed in as PartnerSupport) · address bar /partner/sync-monitor |
#2903 |
| Improved | The Sync Monitor now opens on a Merchant picker and shows nothing else until you pick one · then it shows three counters (Active sessions · Failures (24 h) · Devices pending enrollment), a Terminals table and a Sync sessions table for that merchant · the old all-merchant sync log and the pending-commands panel are gone · on QA the Sync sessions table reads "No sync sessions", because no POS terminal syncs there. → How to test | Platform › Sync Monitor | #2903 |
| Improved | The ⋮ row menu on Notification Templates now works from the keyboard · opening it puts focus on its first item, Arrow Up/Down, Home and End move between Send test and Delete, and Escape or Tab closes it with focus back on the ⋮ button. | Configuration › Notification Templates › a row's ⋮ menu | #3249 |
| Improved | In a merchant group, the button that removes a member merchant shows a trash icon instead of an X · the X that cancels adding a merchant is unchanged. | Platform › Merchant Groups › a group › Member Merchants | #2802 |
| Fixed | The ⋮ row menu on Notification Templates shows in full on the last row and on a list with a single template, and opens upward when there is no room below the button · before, the table's bottom edge cut it off, so Send test and Delete could not be reached. → How to test | Configuration › Notification Templates › last row's ⋮ | #3249 |
| Fixed | Renaming a database server to a name another server already uses now shows "A server with this name already exists." under the Name field and keeps the drawer in edit mode · this replaces the "Someone updated this server" conflict dialog that the 2026-10-06 release notes said to expect for this case · a real concurrent edit still opens the conflict dialog. → How to test | Platform › Servers & DBs › open a server › Edit server | #3041 |
| Fixed | On Edit server, Connection Template is no longer required: it opens empty with the hint "Stored. Leave blank to keep the current template." · leaving it blank saves your other changes and keeps the stored template, and typing a new one (at least 5 characters) replaces it · the catch: the stored template is never displayed, so the field always opens empty and you cannot see on screen that it was kept. → How to test | Platform › Servers & DBs › open a server › Edit server | #3054 |
| Fixed | In a template's Version History, a revert's entry now reads "Revert to version N" with the same N the list shows as vN · before, N was an internal record number that usually matched no version in the list · reverts made before this release were renumbered the same way when the release was installed · the text stays in English in the Spanish UI, as before. | Configuration › Notification Templates › a template › Version History | #2823 |
| Type | What changed | Where to check | Ref |
|---|---|---|---|
| New | Settings has a Terminal sync page (the tile used to read "Sync settings · Coming soon") showing Active terminals, Terminals still to reload and the last request, with a Reload all terminals button behind a "Reload every terminal?" confirm · confirming shows "Full reload requested for N terminals" · the button is disabled when the merchant has no active terminal · on QA the "still to reload" count never goes down, because no POS terminal syncs there. → How to test | Settings › Operations › Terminal sync | #2903 |
| New | For any role other than Admin or SystemAdmin (for example Manager or Cashier), the Terminal sync tile is greyed out with an "Admins only" badge and does not open · opening /settings/terminal-sync directly returns you to Settings with the no-permission message. |
Settings › Operations › Terminal sync (signed in as Manager) · address bar /settings/terminal-sync |
#2903 |
| New | Run on a report card now opens the report itself instead of the "Coming in R3" placeholder · the page shows the report's icon, title, category badge and description, then a results table with translated column headers, 25 rows per page, and a Totals row under the last row on reports that have totals (for an Admin, Inventory Snapshot totals Retail value and Cost value) · date-time cells are shown in your local time. → How to test | Reports › any report card › Run | #3146 |
| New | The report page's filters depend on the report · Daily Sales Summary, Shift Close (Z-Report) and Cash Movement Log get a Date range that starts on the last 7 days including today, and all five get a Location picker that starts on "All locations" · every change re-runs the report, the filters are kept in the page address (a reload or a shared link keeps them), and the date range cannot be cleared. → How to test | Reports › Daily Sales Summary › Run · Reports › Inventory Snapshot › Run | #3146 |
| New | A report run whose filters match nothing shows "No results for these filters" with "Try a different date range or location." instead of an empty table. | Reports › Daily Sales Summary › Run › pick a date range with no sales | #3146 |
| New | Opening the address of a report that does not exist shows "Report not found" with a Back to Reports button inside the message, as well as the Back to Reports link above it. | portal.qa.qiiub.com/reports/not-a-report/run |
#3146 #3215 |
| New | The Reports page now lists the reports the server can actually run · five cards (Daily Sales Summary, Shift Close (Z-Report), Inventory Snapshot, Low Stock & Reorder, Cash Movement Log) instead of the ten earlier entries, none of which could be opened, with category chips only for categories that have a report (All, Sales, Inventory, Finance) · the old entries such as "Sales by day" and the Customers chip are gone. | Reports | #3093 #3094 |
| New | The Inventory hub's Stock counts card is now active for an Admin · a Manager sees it greyed out with an "Admins only" badge, and a Manager who types the stock-counts address is sent back to Inventory with "You don't have permission to do that." | Inventory › Stock counts (as Admin, then as Manager) | #2716 |
| New | The Stock counts list shows three cards (In progress, Completed, Last count with its date and location), a search by document number, Status and Location filters, and a sortable table (Document #, Location, Status, Count date, Items, Closed) · clicking a row opens the count. | Inventory › Stock counts | #2716 |
| New | Start count opens a drawer asking for a Location (required, cannot be changed later) and optional Notes (up to 500 characters) · submitting shows "Count … started" and opens the new, empty count on its Items tab. | Inventory › Stock counts › Start count | #2716 #2724 |
| New | A stock count's Items tab lets an Admin add a product with the counted quantity (0 is accepted), edit a line's counted quantity, and remove a line after a confirmation, with System qty, Counted qty and Variance on each line · adding a product already on the count is refused with "This product is already on the count. Edit its line instead.", and a Completed or Cancelled count's Items tab is read-only. → How to test | Inventory › Stock counts › an In progress count › Items | #2724 |
| New | A stock count's Close tab (shown only for an In progress count with at least one line) lists only the lines that vary, with a note inside the table counting the lines that match and a Net variance total row · confirming posts a completed inventory adjustment and links to it on General, or shows "No adjustment needed: every item matched" when nothing varies · the adjustment link appears only straight after closing and is gone after a reload. → How to test | Inventory › Stock counts › an In progress count › Review & close | #2724 #2789 |
| New | Cancel count on an In progress count asks "Cancel …?" first, then marks the count Cancelled with nothing posted to inventory · "Keep counting" closes the dialog and changes nothing. | Inventory › Stock counts › an In progress count › General › Cancel count | #2724 |
| New | On a narrow screen (under 768 px) the stock count's Close tab shows each varying line as a card, with the matching-lines note under the cards and the net variance as one summary card, instead of a table that scrolled the total off-screen. | Inventory › Stock counts › a count › Close · window at 375 px | #2789 |
| New | A supplier has a Lead time (days) field on its edit page (a whole number from 0 to 365, otherwise "Enter a whole number from 0 to 365"), shown read-only on its General tab · suppliers saved before this release show "—". | Suppliers › a supplier › Edit › General · Suppliers › a supplier › General | #2927 |
| New | A purchase order created without an Expected date now gets one from the supplier's lead time (order date plus that many days), so it can show as Overdue · a supplier with no lead time still leaves Expected empty, a date you type always wins, and editing an order never recalculates it. → How to test | Purchase orders › New purchase order (supplier with a lead time) › list Expected column | #2927 |
| New | A supplier has structured Payment terms (Not set, Due on receipt, Net days, End of month) with a Days field, next to the existing free-text Terms · Net days and End of month require Days ("Enter the number of days for these terms"), Due on receipt refuses one, and the choice shows on the supplier's General tab. | Suppliers › a supplier › Edit › General › Payment terms | #2927 |
| New | A supplier has a Remit-to address (six fields after the main address) on its edit page · the General tab shows it in its own section, or "Same as the main address" when none of the six is filled. | Suppliers › a supplier › Edit › General · Suppliers › a supplier › General | #2927 |
| New | A supplier has a Currency on its edit page ("Location's base currency" when none) · changing it asks "Change currency?" and warns that existing costs and the minimum order are not converted, the supplier's minimum order and product costs then show with the currency code (for example USD 500.00 instead of $500.00), and the Suppliers list gains a Currency column. → How to test |
Suppliers › a supplier › Edit › General › Currency · Suppliers list | #2927 |
| New | Changing a supplier's currency while it has a Draft, Submitted or Partially received purchase order is refused with "Could not save supplier" and the English server message "The supplier's currency cannot change while it has an open purchase order in another currency" · the message stays in English in the Spanish portal. → How to test | Suppliers › a supplier with an open purchase order › Edit › Currency | #2927 |
| New | Purchase orders show their Currency · a Currency column on the list, a Currency row on the order's page, and a read-only Currency field (for example "USD · Base currency") in the New purchase order drawer once a supplier and location are picked · orders created before this release took their location's currency, and show "—" where the location has none. | Purchase orders list · a purchase order · New purchase order | #2927 |
| New | Settings has a Custom fields page (Admin only) with Products, Customers and Suppliers tabs, where you add, edit and delete fields of type Text, Number, Yes / No, Date or List · the Key cannot be changed after creation, "Required" is shown but not enforced on save, and only supplier fields appear on a record so far (product and customer fields show nowhere yet). → How to test | Settings › Catalog & Inventory › Custom fields | #2927 |
| New | Suppliers have a Custom fields tab on their edit page that edits the values of the merchant's supplier fields (a number field refuses text with "Enter a number.", text is capped at 500 characters), and the values show in a Custom fields section on the General tab · with no supplier fields defined the tab says "No custom fields are defined for suppliers." and the General section is hidden. | Suppliers › a supplier › Edit › Custom fields · Suppliers › a supplier › General | #2927 |
| New | Suppliers have a Documents tab · an Admin can upload a PDF, PNG or JPEG with an optional label, download it and delete it after a confirmation · a file that is not really one of those types is refused even if renamed, a file over 8 MB is refused, a supplier holds at most 25 documents, and a Manager sees the list but no Upload, Download or Delete. → How to test | Suppliers › a supplier › Documents | #2927 |
| New | The product, supplier, customer, employee and customer tax profile edit pages have a Cancel button on the save bar that returns to the record's page · it works whether or not you changed anything, and with unsaved changes it asks first. | Products (or Suppliers, Customers, Employees, Taxes › Customer tax profiles) › a record › Edit › Cancel | #2698 |
| New | A purchase order's Activity log tab now records status changes · submitting or cancelling an order adds an "Updated" entry under your name with a "Status:" line (for example Draft → Submitted), where the tab used to always read "No activity yet" · changes made to an order before this release still show nothing. → How to test | Purchase orders › an order › Activity log | #3184 |
| New | Searching the Employees list for a whole number now also finds the employee whose login number is that number, and 007 finds login number 7 · the login number is not shown anywhere in the portal yet, so such a match can appear with no visible reason. → How to test |
Employees › search box | #3246 |
| Improved | Buttons that remove a row show a trash icon instead of an X: a tax group's selected rates, a tax holiday's Categories, Products and Stores rows, and a product's variant attribute cards · the X on variant value chips is unchanged. | Taxes › Tax groups › a tax group · Taxes › Tax holidays › a holiday › Categories · Products · Stores tabs · Products › a product › Variants tab › Variant attributes | #2802 |
| Improved | Each supplier group on the Reorder worksheet now says "Lead time: N days" or "No lead time on file", and "Currency: XXX" when a currency is known. | Inventory › Reorder worksheet | #2927 |
| Improved | The New supplier drawer groups its fields under Company information, Address, Region and Purchasing headings · it still creates the supplier with the same fields, and lead time, payment terms, remit-to, currency and custom fields are set afterwards on the edit page. | Suppliers › New supplier | #2927 |
| Improved | On the product edit page, the Variants, Pricing, Inventory, Suppliers, Alerts, Taxes, Bundle, Images and History tabs now show the product page's own tab right there, with its drawers, instead of an Edit button that sent you to the product page on General · these tabs save on their own as before, not through Save all, and the save bar says so. | Products › a product › Edit › any tab after General | #2698 |
| Fixed | Leaving the product edit page with unsaved changes (Cancel, a breadcrumb or the sidebar) now asks "Unsaved changes" with "Keep editing" or "Leave without saving" · before, the product editor dropped the edits without asking, unlike the other edit pages. → How to test | Products › a product › Edit › change a field › Cancel | #2698 |
| Fixed | The Product status panel on an Active product reads "All requirements met" on a single line instead of "Ready to activate" · "Ready to activate" now shows only on a product that is not active and has nothing missing. | Products › an Active product › Edit | #2698 |
| Fixed | The Status column of Shift Close (Z-Report) shows a translated value ("Cerrado", "Abierto" in Spanish; "Closed", "Open" in English) instead of the raw English name (Closed) · the same fix in Cash Movement Log cannot be seen on QA (see Technical). → How to test |
Reports › Shift Close (Z-Report) › Run (portal in ES) | #3218 |
| Fixed | The Reports page subtitle and each report card's run count show the real number ("5 standard reports", "1 run", "0 runs") instead of a literal {count}. |
Reports | #2711 |
| Fixed | Searching the Reports page for text that matches no report shows "No reports match" followed by your text instead of a literal {query}. |
Reports › Search reports… | #2711 |
| Fixed | A team pin's card says "Pinned by" followed by the person's name instead of a literal {name}. |
Reports › a report card › Pin for team › Pinned by your team | #2711 |
| Fixed | The star that unpins a report from "My pins" or "Pinned by your team" is now a 44 px touch target instead of 24 px, and sits slightly closer to the card's corner. | Reports › a pinned report card › star | #2841 |
| Fixed | The drag handle for reordering tax rates is now a 44 px touch target instead of 28 px · rows in the rates table may be a little taller. | Taxes › Tax groups › a tax group › rates table | #2841 |
| Fixed | The action buttons on each category row are now 44 px touch targets instead of 32 px · tree rows may be a little taller. | Categories › category tree › row actions | #2841 |
| Fixed | A Manager's Dashboard now fills the Sales, Transactions, Inventory value and Cash in drawers cards · for a Manager they used to show "—", with "An unexpected error occurred. Please try again." under Sales and the "You don't have permission to do that." message, because the reports behind them were Admin-only. | Dashboard (signed in as a Manager) | #2818 |
| Fixed | A Manager can open a report from the Reports page and run it · the report's page and its run used to be refused to anyone but an Admin · a Manager does not see costs: Inventory Snapshot has no Cost or Cost value column for a Manager, and its Totals row shows Retail value only. | Reports › a report › Run (signed in as a Manager) | #2818 |
| Fixed | A text box with an error, such as the empty Options box of a List custom field, stays red when you hover over it or click into it, with a red focus ring · it used to turn grey on hover and purple on focus. | Settings › Custom fields › New field › Type: List › leave Options empty › Save | #2792 |
| Type | What changed | Where to check | Ref |
|---|---|---|---|
| Fixed | A text field with an error stays red when you hover over it or click into it, with a red focus ring · it used to turn grey on hover and purple on focus, so right after a refused Save, which puts the cursor in the first invalid field, that field looked purple instead of red. → How to test | Merchant portal › Suppliers › New supplier › Postal code · Admin portal › Partner › Users › Invite › Email | #2876 |
| Type | What changed | Where to check | Ref |
|---|---|---|---|
| Fixed | A SystemAdmin can now sign in to the admin portal only with the BCPOS Microsoft account · an emailed sign-in link for a SystemAdmin opens "Link expired · This link has expired or has already been used.", and Google or a non-BCPOS Microsoft account ends on "Something went wrong. Please try again." · other roles sign in as before, and a SystemAdmin already signed in stays signed in until that session's absolute expiry. → How to test | Admin portal › sign-in page · emailed sign-in link | #3189 |
Only the items that need more than a glance. Click to expand.
abc (3 characters) in Connection Template. Click Save and expect a validation error on that field.$1,234.50.?from=…&to=….location=… and the results narrow to it.CashDrop, PayOut, Closed.Closed or Open.0. It is accepted.10 › Save all.$….USD 500.00. The Suppliers list Currency column shows USD.abc in the number field and Save all. Expect "Enter a number." and the save is blocked..txt file to .pdf and upload it. Expect "Only PDF, PNG or JPEG files can be uploaded."007 finds login number 7). Code and name matches still work as before.loginNumber (for example an employee with a non-numeric code), and note that number.007 for 7). Expect the same employee.00901-ñ in Postal code, and click Create supplier.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 |
|---|---|---|
| #2903 (device token part) | Terminals now prove their enrolled key to get a 15-minute sync token (POST /devices/token/challenge, POST /devices/token), and the download routes (/sync/handshake, /sync/pull, /sync/ack, new GET /sync/version) accept only that token · the old merchant-less GET /sync/log is removed |
Device/POS-only · the POS app is not deployed to QA, and no admin or portal screen calls these routes |
| #2903 (approve/reset and sessions part) | Sync Monitor Approve and Reset enrollment buttons, the "Pending approval" state, key fingerprints, the Sync sessions rows and their session drawer (status, phase, failure cause, records by data type) | Needs a terminal that has asked to enroll a key or has run a sync, and only the POS app (not on QA) does either · on QA every terminal reads "Not enrolled" and the sessions table is empty |
| #2906 | The template editor preview and the version view now take the email header and footer logo URLs from the server's email settings instead of a copy hardcoded in the admin app | With the default settings (appsettings.json) the server's URLs are the same two the preview used to hardcode, so the preview shows the same logos before and after · it differs only on a deployment configured with other logo URLs |
| #3250 | Error reports sent to Sentry from the API and both portals have invitation and sign-in link tokens replaced with [Filtered], and the admin portal no longer records session replays |
Nothing changes on screen · checking it needs access to the Sentry project to inspect the captured events |
| #3181 | The Notification Templates ⋮ button is announced as "Row actions" ("Acciones de la fila" in Spanish) instead of the untranslated "Actions" | Accessible name only · the button shows no text or tooltip, so it needs a screen reader or the browser's accessibility inspector |
| #3160 | The loading spinner shown while a portal first starts is announced as "Loading" for English users instead of always "Cargando" | Screen-reader only (the spinner's accessible name), and it shows only for the moment before translations load |
| #2927 (foreign-currency part) | Purchase orders from a supplier whose currency differs from the location's: an exchange rate (Admin-editable, prefilled with the rate on file), costs labelled with the ISO code, "Enter a cost" on lines with no supplier cost, read-only foreign groups and "No supplier cost" badges on the Reorder worksheet, receipts prefilled with the cost converted to the base currency, and the location-currency lock while it has an open order | Needs a second active currency plus an exchange rate between them · no portal or admin screen creates currencies or exchange rates (the Settings › Currencies card has no page), so a QA merchant cannot set up a foreign-currency supplier |
| #2711 (POS part) | A POS terminal no longer stops loading its employee roster when an employee code moves to a different employee (a leaver's code given to a new hire, or two employees swapping codes) | POS-only · the POS app is not deployed to QA, and the roster load runs only on a terminal |
| #2842 | The draft receipt's Save draft error toast is chosen from a code the server now sends instead of from the wording of the English message | Same toasts before and after ("Another user modified this draft. Please reload and try again." and "This receipt is no longer a Draft and can't be edited.") · it only protects against a future rewording of the server message, which QA cannot trigger |
| #2877 | The two loading spinners on product image upload cards announce "Loading" in the portal's language instead of always "Cargando" | Screen-reader text only · the spinner looks the same, and its name is heard only with a screen reader or seen in the browser's accessibility inspector during an upload |
| #3246 (API part) | Employees get a login number (1–999999, unique per merchant): this release's migration assigns one to every existing employee, a new employee gets the next free number when none is given, and the employee API returns and accepts it | No portal screen shows or edits the login number yet (#3221) · the number is for the POS identify-first sign-in, and the POS app is not deployed to QA |
| #3230 | Links between a product and its categories now carry their own sync identity and write change-history entries when a category is added, removed or reordered on a product · saving a product with an unchanged category list no longer rewrites its category links | No portal screen reads the product change-history trail · the product History tab still shows only the price-change and cost-change feeds |
| #3182 | Distributions, price changes and transfers now record which employee completed, created, approved, requested or closed them, and their detail responses return the employee's name | No portal screen displays these fields (the transfer and price change pages do not show them, and distributions have no portal screen) |
| #2832 | A transfer that closes itself when fully received, or a draft transfer that is cancelled, now records the employee who closed it | No portal screen shows who closed a transfer |
| #2897 | Acknowledging a distribution allocation now records the employee who acknowledged it | Distributions have no portal screen, and no screen shows the acknowledger |
| #3145 | Creating or editing an employee with an email another employee of the same merchant already uses still saves, and the response now carries a warning | The portal's employee form ignores the warning, so the save looks exactly as before |
| #3093 (API part) | GET /reports and GET /reports/{key} return lowercase categories (sales, finance), pinning a key that is not a registered report is refused with 400, and each pin carries isRegistered |
API-only · no portal screen calls GET /reports, and the portal pins only reports from its own catalog |
| #3252 | The generic settings endpoints return and accept the bag-fee product as its public id, and refuse a raw internal id or a product that is inactive or another merchant's | API-only · no portal or admin screen reads or writes the bag-fee setting |
| #3231 | The bag-fee settings endpoint takes and returns the product's public id instead of its internal number, and refuses an unknown, inactive or other-merchant product with 400 | API-only · no portal or admin screen calls the bag-fee endpoint |
| #3255 | When a database duplicate-key error reaches the logs or Sentry, the colliding values (for example a card number) are replaced by (<redacted>) |
Log and Sentry content only · needs an unhandled duplicate-key error plus access to the API logs or Sentry, and the portal shows the same error message before and after |
| #3037 | Messages of unexpected server errors no longer include internal record numbers, and the API's error log names the merchant by its public id | Log and Sentry content only · the portal shows its own generic message for these errors |
| #3036 | Twelve request lists (removing purchase order, transfer or adjustment lines, product categories, product suppliers, bulk tax apply and others) refuse a null entry with their own "… cannot contain null entries." message |
API-only · the portal never sends a null entry in a list, so this needs a hand-built request |
| #3143 | A brief database fault (failover, throttling, a serverless database waking up, a deadlock) is retried automatically instead of answering with a server error, and multi-step saves retry as one unit | The fault has to be induced on the database during a request · a tester cannot cause one from the portal |
| #2840 | Six sign-in and session error responses carry their machine code in a separate code field, and title is now a readable sentence |
API response text only · the sign-in and Sessions pages show their own translated messages, which did not change |
| #2933 | The Resend email webhook's limit (300 requests a minute per IP) is now enforced exactly under a burst, where it used to let extra requests through | Anonymous provider webhook with no UI · needs more than 300 concurrent scripted POSTs |
| #2750 | Two database servers can no longer end up with the same name when created at the same instant · the second now gets the usual "name already exists" refusal | Needs two creates with the same name at the same instant · a single duplicate was already refused before this change |
| #2797 | A return, a no-receipt return or a cash movement whose shift is merged while it is being saved is now refused instead of adding its money to the merged shift | Returns and cash movements come from the POS app (not deployed to QA), and the refusal only fires in a race with a concurrent shift merge |
| #3049 | The pending sync-command list tells a device whether each command is for that device or for every device | Sync-only · read by POS devices, and no portal or admin screen calls it |
| #2862 | Server side of POS sync download: device key enrollment and reset, signed device tokens, the download engine, sync session logging with 90-day retention, and the sync monitor and full-reload endpoints, plus two migrations (Central and Merchant) | Device and sync server work · the POS app is not deployed to QA, and the admin Sync monitor and portal Terminal sync screens that call these endpoints ship in #2903 |
| #2825 | The title of the "someone else changed this" conflict dialog is 20px instead of 19px | A 1px size change · visible only in the browser's element inspector |
| #2792 (dropdown part) | A dropdown with an error keeps its red border on hover and focus | No portal or admin form can put a dropdown into an error state: every dropdown that can show one has a valid value preselected |
| #3094 (old pins part) | A pin saved on one of the ten retired report entries is deleted the first time a Manager or Admin opens Reports, with one toast "N pins removed: report no longer available" · a removed team pin is gone for the whole team | QA holds no report pins (the pin table was empty when checked after this deploy), and new pins can only be made on the five current reports, so the clean-up has nothing to remove |
| #3218 (Cash Movement Log part) | The Type column of Cash Movement Log shows translated values ("Safe drop", "Payout"; "Depósito a caja fuerte", "Salida de efectivo" in Spanish) instead of CashDrop, PayOut |
QA has no cash movements (checked after this deploy) and only the POS app, which is not on QA, records them, so the report has no rows to show |
| #3185 | A price change keeps listing an item whose variant was archived afterwards (by removing its value from the product's variant attributes), where the item used to vanish from its Items tab and count · only the price change page is covered; other documents are later stages of the same work (#1917) | Needs a price change on a variant of a product with several variants, and that variant with no stock · none of QA's 6 price changes has one (checked after this deploy), and the portal cannot create price changes |
| #2845 | Spanish screens that show a count of 1,000,000 or more (for example the Reorder worksheet's "N ítems seleccionados" footer) show the translated text instead of a raw translation key | Needs a count of a million or more on a pluralized screen, which no QA merchant reaches |