Thursday, August 27, 2026
6 changes · 18.0
Enhancements to existing features
The mail test suite now re-checks certain pending conditions more frequently instead of waiting up to 10 seconds. This reduces unnecessary waiting in automated testing, helping developers get feedback faster without changing user-facing behavior.
Original PR description
Before this commit, a contains that does not match right away runs again only when its MutationObserver fires, and once more at the 10 seconds timeout. The problem is that the observer reports neither a text node updated in place nor an input value or checked property, so a check waiting for one of those sleeps 10 seconds and then passes: "Delete starred message decrements starred counter once" spends 10.2s of the 183s @mail suite waiting for a counter to go from "Starred3" to "Starred2". This commit turns that single timeout into a 500ms tick up to the same deadline, so that such a check costs 500ms. The tick uses the unmocked timer to stay out of the timer graph a test drives with runAllTimers, and only 32 of the suite's 4239 contains calls stay pending long enough to tick once.
The web test runner now avoids unnecessary memory cleanup pauses unless memory use is actually high. This reduces wasted time during automated testing while keeping the existing safety behavior for browsers that cannot report memory usage.
Original PR description
Before this commit, the unit test runner pauses for a major garbage collection after every test file, since __gcAndLogMemory collects whenever window.gc exists and browser_js always passes --js-flags=--expose-gc. The problem is that the heap it protects stays at 183MB of a 4192MB limit, so those collections reclaim nothing: the 84 of an @mail run cost 8.8s of its 183s, and the whole suite has 1268 test files. This commit turns the unconditional collection into one that runs only past half the limit, so that a run pays for it when the heap really grows. A browser without performance.memory keeps collecting after every file.
Lead assignment now checks whether records still exist in batches instead of repeating the same database check on every loop. This reduces unnecessary database work and helps CRM lead allocation run more reliably under heavier volumes.
Original PR description
Every call to `.exists` inside `_allocate_leads` runs a select query for every iteration of the `while population:` loop. We can reduce the query count by using the already built block to check occasionally. https://github.com/odoo/odoo/blob/d6c01a69b4314b869510be8e48ccaa004e1c918a/addons/crm/models/crm_team.py#L496-L500 This is the major contributing factor to why the tests `test_assign_perf_duplicates` `test_assign_perf_no_duplicates`, and `test_assign_perf_populated` are failing https://github.com/odoo/odoo/blob/d6c01a69b4314b869510be8e48ccaa004e1c918a/addons/crm/tests/test_performances.py#L180-L182 https://github.com/odoo/odoo/blob/d6c01a69b4314b869510be8e48ccaa004e1c918a/addons/crm/tests/test_performances.py#L97-L99 https://github.com/odoo/odoo/blob/d6c01a69b4314b869510be8e48ccaa004e1c918a/addons/crm/tests/test_performances.py#L51-L54 runbot-238398
Odoo now applies the same permission checks to related record changes passed through the context as it does to normal field updates. This prevents unauthorized changes from being silently ignored and makes access behavior more consistent and predictable.
Original PR description
Some commands may perform a change on related records by using Commands. When passed through the context, unallowed actions are ignored instead of rising access errors. This check aligns the behaviour with normal writes of fields. A test in `project` module shows this behaviour. Backport of odoo/odoo#258845 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The live chat settings now explain that automatic chat popups only open on larger screens. This helps teams understand why mobile visitors see the chat button instead of an automatically opened chat window during testing or rollout.
Original PR description
The 'Open automatically' action only triggers the auto popup on larger screens (`ui.isSmall` is checked in `AutopopupService. allowAutoPopup`). On mobile/small viewports, only the chat button is shown and the visitor must tap it manually. The existing help text does not mention this, which could lead to confusion when the auto popup does not trigger during testing on mobile. Update the field's help text to explicitly state that automatic opening is limited to larger screens. opw-6459279 Forward-Port-Of: odoo/odoo#284785
Italian electronic invoices can now be imported without relying on a specific file name format. This reduces rejected or incomplete imports when files are renamed, making invoice processing smoother for users.
Original PR description
With this commit: - We remove the regex check on the imported file name. - The behavior before was checking the filename to fill data into the invoice. - This should not be constrained so that we can ignore the filename Task [link](https://www.odoo.com/odoo/project.task/6152773) task-6152773