Wednesday, September 9, 2026
10 changes · master
Code cleanup and technical improvements
This update simplifies how Odoo's messaging features react to data changes, making chat, live chat, and discussion views more reliable and easier to maintain. It also fixes cleanup and counter-loading issues that could affect guest chat sessions and messaging menu behavior.
Original PR description
Before this commit, a field reacts to its own updates through the onUpdate option of its declaration. There is no need for that option, as the record now offers record.onChange(dependencies,…
Before this commit, a field reacts to its own updates through the onUpdate option of its declaration. There is no need for that option, as the record now offers record.onChange(dependencies, callback) for the same thing. This commit declares those reactions in setup() and removes the option with its machinery: the callbacks the model keeps per field, the observer each record registers for them, and the queue that holds the calls until the end of the update cycle. They run synchronously, once the write that changed a dependency is applied, so a callback reads a complete record and the first run of a new record sees its inserted values. A callback that would act on the default of a field before its compute or its payload lands skips its initial run. The discuss sidebar now picks its tab in setAsDiscussThread(), where the tabs of the thread are settled, rather than in a reaction to the thread. This also fixes the guest token cleanup, which deleted the channel of the new token rather than the one it had added, and stops a tab that left the menu from fetching its counters. https://github.com/odoo/enterprise/pull/130797
This update simplifies how AI and VoIP components react to internal data changes. It supports cleaner, more consistent code with no expected impact on day-to-day user workflows.
Original PR description
Enterprise counterpart of "[REF] mail, *: drop the onUpdate option for onChange", which explains the why and the shape. https://github.com/odoo/odoo/pull/287153
This update simplifies how Odoo's web code accesses browser features, making the codebase more consistent and easier to maintain. It also improves test reliability when browser storage is unavailable, with no expected change for everyday users.
Original PR description
- enterprise: https://github.com/odoo/enterprise/pull/127791 See commit messages for details. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update simplifies how several Odoo apps access browser navigation information, replacing an older internal shortcut with a clearer approach. It should not change day-to-day user workflows, but it makes the codebase easier to maintain and test over time.
Original PR description
- community: https://github.com/odoo/odoo/pull/282230 See commit messages for details. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update modernizes internal Web Studio components to align with the latest interface framework standards. It helps keep Studio reliable and easier to maintain, with no expected change to everyday user workflows.
Original PR description
See commit messages for details. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The website editor's row-building component was updated to use the newer supported framework behavior, reducing future maintenance risk. A related automated test was added to help ensure the collapse animation continues to work as expected.
Original PR description
Replaced `useLayoutEffect` with native OWL3 `useEffect` because `useLayoutEffect` is deprecated in OWL3. When commenting out the useLayoutEffect there was no error, the code we refactored had NO TEST coverage (see: https://runbot.odoo.com/runbot/batch/2596770/build/114856026) A HOOT test covering the collapse height animation was added to existing test (which I felt was better then adding new hoot tests).
The Knowledge app’s chatter integration was updated to use the newer framework lifecycle approach required by OWL3. This is an internal maintenance change that helps preserve existing access-rights behavior and reduces future upgrade risk, with no intended functional change for users.
Original PR description
Replaced `useLayoutEffect` with `onMounted`/`onPatched` because `useLayoutEffect` is deprecated in OWL3. Access rights are mail-store record fields mutated in place (not signals), so we keep the threadId reset and rights resolve in a single onMounted/onPatched pass to track them and avoid a race. When commenting out the useLayoutEffect there was no error, the code we refactored had NO TEST coverage (see: https://runbot.odoo.com/runbot/batch/2603405/build/115293984) NOTE: - I tried writing a hoot for this untested feature but the setup is too complex and not worth it.
This update keeps WhatsApp conversation controls working correctly by replacing an outdated internal mechanism with the current framework approach. Users should see no change in day-to-day behavior, while blocked and revived WhatsApp conversation states remain properly handled.
Original PR description
Replaced `useLayoutEffect` with native OWL3 `useEffect` because `useLayoutEffect` is deprecated in OWL3. The useLayoutEffect refactored in this PR had test coverage — below are some tests that failed when the effect was commented out, and are now passing: - @whatsapp/composer_patch/Composer is disabled for blocked whatsapp conversations - @whatsapp/composer_patch/Disabled composer should be enabled after message from whatsapp user - @whatsapp/composer_patch/'Revive WhatsApp Conversation' button is hidden for active or blocked whatsapp channels see commented-out runbot build: https://runbot.odoo.com/runbot/batch/2748318/build/124302613
This update modernizes an internal payroll screen component to stay compatible with the next version of Odoo's web framework. Existing payroll interactions, including payrun chatter controls and payslip list actions, are preserved and covered by tests.
Original PR description
Replaced `useLayoutEffect` with `onMounted` + `useBus` because `useLayoutEffect` is deprecated in OWL3. The use layoutEffect refactored in this PR had test coverage — below are some tests that failed when the effect was commented out, and are now passing: - @hr_payroll/payrun_chatter/PayRunControlPanel - chatter toggle button - @hr_payroll/payslip_list_view_filtered_payrun/Test context of PayRunCard - @hr_payroll/payslip_list_view_filtered_payrun/Test header buttons of payslip list view filtered by payrun see commented-out runbot build: https://runbot.odoo.com/runbot/batch/2748319/build/124302621
The web tour functionality has been reorganized internally so it works through the newer plugin structure while keeping existing integrations compatible. This should make future maintenance and enhancements easier without changing the day-to-day user experience.
Original PR description
Converts TourService into an owl3 Plugin (TourPlugin), keeping the legacy tour_service registration as a compatibility bridge. Extracts the tour recorder overlay/command-provider logic into their own TourRecorderPlugin and the debug-menu OnboardingItem widget. Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr