Every upgrade_code script now runs in the test suite, so the scripts that rewrite custom code for new versions keep working. Use the '# test: false' and '# test: skip' markers for scripts that can't be tested this way.
On databases with glibc collations such as en_US.UTF-8, moving a node could leave its descendants with a stale parent_path. The range now uses COLLATE "C", and the parent_path index is rebuilt to match.
If the work email matches an internal user who is not yet an employee of the company, the form links that user instead of failing on a duplicate invite.
When the prefetch set held records the user can't read, non-stored computes fell back to one query per record. They now stay batched, which matters for portal and public pages.
Several POS store methods, such as openCashbox and resetCashier, are now overridable hooks so the v2 blackbox module can extend them. Custom POS patches of these flows should be checked.