Wednesday, September 2, 2026
27 changes · saas-19.3
Enhancements to existing features
The timesheet grid now points users to Odoo's newer Timesheets Assistant browser extension instead of the older Activity Watch extension. This helps users find the recommended tool for tracking and supporting timesheet entry more easily.
Original PR description
Before this commit, the links pointing to the browser extension of Activity Watch. However, a new extension called Timesheets Assistant has been published by Odoo to improve the Activity watch extension. This commit replaces the links pointed to the browser extension to set the links for Timesheets Assistant browser extension. task-6470304
The Mail module now formats publisher warranty messages in standard JSON before sending them to the warranty server. This makes the data easier for the receiving service to read reliably and reduces the chance of formatting-related transmission issues.
Original PR description
Format the publisher warranty message using json.dumps() instead of Python's native str() representation. This ensures serializeid JSON serialization for the payload sent to the warranty server. Forward-Port-Of: odoo/odoo#285632 Forward-Port-Of: odoo/odoo#283139
Resolved issues and error corrections
The Helpdesk team card layout was adjusted so the email alias lines up neatly with the team name. This small visual fix improves readability and gives the Helpdesk configuration screen a more polished appearance.
Original PR description
In this commit, we remove the margin before the mail alias, ensuring aligment within the helpdesk team card. task-6416578 Forward-Port-Of: odoo/enterprise#129865
Invoices created from POS sales linked to a sales order now keep the customer's original reference. This helps businesses match invoices to customer purchase orders while still keeping POS traceability for combined batches.
Original PR description
The pos_sale override of _prepare_invoice_vals left ref and invoice_origin untouched, so the SO's client_order_ref was lost on the invoice. The fix is to mirror sale.order._prepare_invoice and set both fields from the linked SO, while preserving pos_reference traceability for mixed consolidated batches. task-id: 6295629 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#278035
Long delivery method names now wrap correctly during eCommerce checkout instead of pushing the page layout out of alignment. This keeps the checkout experience readable and usable for customers when shipping options include long location or zone lists.
Original PR description
Issue ----------- Long delivery method names containing lists of locations/zones do not wrap properly on the eCommerce checkout page, causing the layout to overflow. Cause of the issue -----------…
Issue ----------- Long delivery method names containing lists of locations/zones do not wrap properly on the eCommerce checkout page, causing the layout to overflow. Cause of the issue ----------- The first column of `[.o_delivery_method_row](https://github.com/odoo/odoo/blob/saas-19.3/addons/website_sale/static/src/scss/website_sale_delivery.scss#L2)` uses `minmax(max-content, 1fr)`. `max-content` prevents the column from shrinking when the delivery method name is too long. Steps to reproduce ----------- 1. Create a Delivery Method with a long list of locations/zones in its name. 2. Go to the eCommerce checkout at the address page. 3. Observe that the delivery method name does not wrap and breaks the layout. Before Fix ----------- The `max-content` minimum prevents the delivery method name from wrapping, causing the layout to overflow. <img width="1781" height="852" alt="image" src="https://github.com/user-attachments/assets/1150a8ef-e2d8-49ab-9553-fe9728258060" /> After Fix ----------- Change `max-content` to `min-content` so the column can shrink and the delivery method name wraps. <img width="1882" height="890" alt="image" src="https://github.com/user-attachments/assets/84cfd5a4-796d-4b9f-bfdb-c18434f8b67f" /> [OPW- 6486780 ](https://www.odoo.com/odoo/project/70/tasks/6486780) [UPG- 4609267 ](https://upgrade.odoo.com/odoo/upgrade.request/4609267) 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
This fix adjusts an automated website tour so it no longer fails unpredictably during testing. It helps keep release validation stable and reduces noise from false test failures, without changing the customer-facing website experience.
Original PR description
This is just a backport of the step from 19.3 where the tour is never failing randomly. https://github.com/odoo/odoo/commit/c5d7a6a90be4730e18070826a9394ab10dfc6be8#diff-c7720501ec33f5f92c907d8bb41de50edd832a4564317073e801a6915796a6bdR260-R261 runbot-237566 Forward-Port-Of: odoo/odoo#284689
This update fixes typos and inconsistent wording in the Point of Sale LNA checklist. It makes the checklist clearer for teams using or reviewing the document, without changing product behavior.
Original PR description
Fixed some typos and inconsistencies on the LNA checklist document Task-[6330795](https://www.odoo.com/odoo/project/1737/tasks/6330795) 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 Forward-Port-Of: odoo/odoo#281950
Swiss payroll employee records will no longer show repeated system-generated updates for LPP mutation changes. This reduces noise in the activity history, making important employee updates easier to find, especially when automated payroll jobs run frequently.
Original PR description
Calling `_create_or_update_snapshot` after writing on an employee recomputes `lpp_mutations`, deleting and recreating the linked records. Because `lpp_mutations` was tracked, every `write` on an employee generated unhelpful chatter entries, cluttering important history. This was especially noisy during frequent writes in hourly crons. Disable field tracking on `lpp_mutations` to improve chatter clarity and overall user experience. opw-6285407 --- Forward-Port-Of: odoo/enterprise#129628 Forward-Port-Of: odoo/enterprise#128033
This update stops users from creating self-order boxes from the printer setup screen. It helps ensure each self-order box is linked to a real physical device, reducing setup mistakes and unreliable point-of-sale configurations.
Original PR description
We prevent users from creating oboxes from pos.printer model, as oboxes should be paired with an actual device. Forward-Port-Of: odoo/enterprise#129960
This fix makes the creation order of accounting lines consistent when subcontracting inventory movements are completed. It helps avoid intermittent test failures and unpredictable accounting line ordering without changing business workflows.
Original PR description
The search order on account move line depends on date, move name and id. This search result order can be non deterministic because, when creating account move line from stock valuation, it depends on…
The search order on account move line depends on date, move name and id. This search result order can be non deterministic because, when creating account move line from stock valuation, it depends on the order from a set, but sets are unordered. **Step to reproduce** Run [test_subcontracting_purchase_bill](https://github.com/odoo/odoo/blob/13b2781978b0edad0df0800404276919b767e32b/addons/mrp_subcontracting_purchase/tests/test_mrp_subcontracting_purchase.py#L268) in: Single app, community, with demo data. **Observation** * The search: When doing the search since we didn't specify any order, the search from account.move.line will ordered by: https://github.com/odoo/odoo/blob/3dd41395e2e4205fa477eb474d4a4dba0a976154/addons/account/models/account_move_line.py#L23 https://github.com/odoo/odoo/blob/3dd41395e2e4205fa477eb474d4a4dba0a976154/addons/account/models/account_move_line.py#L1664 Since, for the components the date and move name are the same it will only depend on the aml ids: * `Account.move.line` creation: When it validate the receipt (`button_validate`) https://github.com/odoo/odoo/blob/869c750f978b1b00a4a04bd61226f0e20d2e7729/addons/mrp_subcontracting_purchase/tests/test_mrp_subcontracting_purchase.py#L296 It will mark as done the picking (`_action_done`) and the productions (`button_mark_done`) linked to this picking. https://github.com/odoo/odoo/blob/869c750f978b1b00a4a04bd61226f0e20d2e7729/addons/stock/models/stock_picking.py#L1429 https://github.com/odoo/odoo/blob/869c750f978b1b00a4a04bd61226f0e20d2e7729/addons/mrp_subcontracting/models/stock_picking.py#L49 Modify the inventory accordingly (`_post_inventory`) https://github.com/odoo/odoo/blob/869c750f978b1b00a4a04bd61226f0e20d2e7729/addons/mrp/models/mrp_production.py#L2231 while inside of `_post_inventory`, it will process all the production moves, for this it will divided them in set to process them by batch: https://github.com/odoo/odoo/blob/f0e58b9324af18d0cf0264aec2886d098e997f03/addons/mrp/models/mrp_production.py#L1904-L1911 From this set, it will create the `account.move.line`: It retrieve the actual stock move with the browse, and call `_action_done`, from where the stock valuation layer will create the `account.move.line`. https://github.com/odoo/odoo/blob/f0e58b9324af18d0cf0264aec2886d098e997f03/addons/mrp/models/mrp_production.py#L1913 https://github.com/odoo/odoo/blob/f0e58b9324af18d0cf0264aec2886d098e997f03/addons/stock_account/models/stock_move.py#L187 The issue arise because a set read order is non deterministic. runbot-939794 Forward-Port-Of: odoo/odoo#279396
Custom website snippets with very large responsive text now display at the right size in the snippets dialog. This prevents misleading previews for editors while keeping the actual page content unchanged.
Original PR description
Steps to reproduce: - Go to the website editor. - Add a snippet with editable text to the page. - Select the text and set its font size to 144. - Save the edited block as a custom snippet. - Open the…
Steps to reproduce: - Go to the website editor. - Add a snippet with editable text to the page. - Select the text and set its font size to 144. - Save the edited block as a custom snippet. - Open the snippets dialog. - Go to the Custom category. => The custom snippet preview shows the text too large. Before this commit, responsive font sizes using `clamp()` with a `vw` term were rendered too large in the block dialog. The `vw` value was based on the full preview iframe width, while snippets were displayed inside columns. After this commit, the block dialog adjusts `vw` values on cloned `.o_rfs` preview content only, so the preview matches its column width without changing the snippet dropped on the page. task-6303725 | BEFORE (font size -> 144) | AFTER (font size -> 144) | | ------------- | ------------- | | <img width="416" height="409" alt="image" src="https://github.com/user-attachments/assets/e0eb0a4e-eb7b-4ee6-b080-536ea2a75c68" /> | <img width="421" height="272" alt="image" src="https://github.com/user-attachments/assets/6468a234-0966-45c9-9435-e97d9752b794" /> |
The editor no longer shows a non-working title replacement icon when users open the link popup for an image. This removes a confusing control and makes image link editing clearer.
Original PR description
**Current behavior before PR:** Steps to reproduce the issue: - Add an image - Add a link to the image - Put cursor just right after the image link so that link popover is opened - Notice that there is a wand icon in link popover to replace title, clicking on it does nothing **Desired behavior after PR:** There should be no replace title icon in popover for image-link. task-6420902 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#279076
When users replace a selected link by pasting a new web address, the visible text now updates to match the new address. This prevents confusing mismatches where a link looks like one URL but actually points to another.
Original PR description
**Current behavior before PR:** Steps to reproduce the issue: - Create a link via typing a valid URL + space. - Copy/Paste a different URL from the browser. - Select the entire link you just created. - Paste the copied URL on top of it. Notice that the label is still the old URL even though the URL actually changed. This happens because after commit [1] When pasting a URL over an active text selection, selected content is converted into a link pointing to the pasted URL. This should not be the case if selected content is a link with same label and URL. **Desired behavior after PR is merged:** If a link is entirely selected and its label is the same as URL then it should replace the existing link label with new URL. [1]: https://github.com/odoo/odoo/commit/d356043a67e1d7291bd1302b1e90a2d9a07718da task-6456004 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#281700
This fix registers the Greek electronic invoicing module with the translation system. It ensures the module can be translated through the standard process, improving localization support for Greek users.
Original PR description
Commit https://github.com/odoo/odoo/commit/45bd522dde7a67194e14a40d66944a2e34d1f79d introudced a new module without it's related `weblate.json` entry. This commit fixes this omission. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#285570
The Point of Sale quotation list now hides quotations that have already been settled. This prevents staff from accidentally selecting and settling the same quotation twice, reducing duplicate payment or order handling mistakes.
Original PR description
Once a quotation is settled, opening the quotation list should not allow selecting it again. This commits updates the domain to prevent it. task-6479356 Forward-Port-Of: odoo/odoo#284768
This fix prevents users from deleting an image inside a website card cover while leaving behind an empty wrapper that the editor still treats as a valid cover. It avoids confusing editor behavior and prevents an error that could occur when using the Cover Image options.
Original PR description
It was possible to remove the image inside a card cover while keeping the figure wrapper. The card option would then still consider that there was a cover image even though the image was gone, which could also lead to a traceback. Steps to reproduce: - Insert the `s_three_columns` snippet - Click on the image of one card - Either press "Enter", "Delete", "Backspace" - Hover the "Cover Image" options => The image is removed but the `<figure>` is still there, so the option is still considered active (leading to a traceback) task-6081728 Forward-Port-Of: odoo/odoo#283106 Forward-Port-Of: odoo/odoo#280086
Users can now open WhatsApp Business account settings after switching Odoo to another language, such as French. The fix prevents a translation-related error that blocked access to the account configuration page.
Original PR description
Currently, an error occurs when a user tries to view the WhatsApp Business account. **Steps to Reproduce:** - Install the `whatsapp_oauth` module. - Go to `Settings` > `Languages` and add `French…
Currently, an error occurs when a user tries to view the WhatsApp Business account. **Steps to Reproduce:** - Install the `whatsapp_oauth` module. - Go to `Settings` > `Languages` and add `French (BE)`, then `switch to it`. - Go to `WhatsApp` > `Configuration` > `WhatsApp Business Accounts (Comptes Whatsapp Business)`. `ValueError: L'élément '<xpath expr="//div[contains(normalize-space(.), 'Receiving Messages')]">' ne peut être localisé dans la vue parente` When the user changes the language, the text in the view is translated [1]. Since the WhatsApp account view tries to locate the div using the plain text Receiving Messages [2]. Since the text has been translated in the parent view, the XPath can no longer locate the element and raise the error. This commit ensures that the XPath uses the name attribute to identify the element, which is language-independent. We cannot use the class attribute because the same class is used by other div elements. [1]- https://github.com/odoo/enterprise/blob/a3db72899cb97612505aebbd5450aeb65205db73/whatsapp/views/whatsapp_account_views.xml#L81-L84 [2]- https://github.com/odoo/enterprise/blob/a3db72899cb97612505aebbd5450aeb65205db73/whatsapp_oauth/views/whatsapp_account_views.xml#L61-L63 7534862409 Forward-Port-Of: odoo/enterprise#130003
This fix prevents an error when users navigate from an email alias to its related Helpdesk Team and then open the Tickets list. The system now uses the correct Helpdesk Team information, so the ticket view loads normally instead of showing a missing record error.
Original PR description
### Steps to Reproduce: 1. In Debug mode, go to Aliases 2. Click on any active Alias, ex. customer-care 3. Click on "Open Parent Document" smart button 4. Click on "Tickets" smart button and observe…
### Steps to Reproduce: 1. In Debug mode, go to Aliases 2. Click on any active Alias, ex. customer-care 3. Click on "Open Parent Document" smart button 4. Click on "Tickets" smart button and observe error ### Description of the issue/feature this PR addresses: **Issue:** When navigating from an email alias to its parent document (e.g., a Helpdesk Team), the web client incorrectly retains the `active_id` and `active_model` of the alias in the context. **Solution:** We updated the `action_view_ticket` method in `helpdesk.team` to explicitly inject the correct `active_model` and `active_id` into the context before calling `_for_xml_id`. This overwrites the polluted Alias data before the window action is evaluated. ### Current behavior before PR: Clicking the "Tickets" smart button passes the old alias context into the action. This bad data flows into the ticket view, which attempts to look up a Helpdesk Team using the Alias's ID to generate the empty list help message, resulting in a `MissingError`. ### Desired behavior after PR: The Python action sanitizes the context at the source, ensuring that the XML action and subsequent view evaluations receive the correct Helpdesk Team ID. Ultimately, the view will load normally without crashing. opw-6395638 Forward-Port-Of: odoo/enterprise#129939 Forward-Port-Of: odoo/enterprise#125232
The web tour system now handles cases where a saved tour can no longer be found, instead of crashing when users try to resume it. This improves stability for guided experiences, including free trial onboarding.
Original PR description
get_tour_json_by_name returned an empty array instead of False when no tour matched. TourService.getTour then skipped its `!tour` guard and crashed reading `tour.steps.length` on that string. Issue spotted on free trials 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
This fixes an automated Point of Sale test that could fail on slower or heavily loaded machines. The change makes receipt feedback checks more reliable, helping ensure future updates are validated consistently without affecting day-to-day users.
Original PR description
The tour relies on the receipt rendering completing very quickly, as it removes the feedback screen after 500ms. On a slow/loaded machine (e.g. set `cpu_throttling=3` in the tour), the tour consistently fails as it waits for the feedback screen which has already disappeared. The fix is to check the feedback screen first, then confirm the receipt printing dialog. This lets the tour pass both normally and under load. runbot-946294 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#285900
This update adjusts a manufacturing test so it checks the expected quantities without depending on the order in which lines appear. It helps prevent intermittent test failures, supporting more stable quality checks without changing user-facing behavior.
Original PR description
Issue: Test product_produce_6 fail from time to time due to lines being misordered. The test aim to check the amount within the line, not their order. runbot-946209 Forward-Port-Of: odoo/odoo#284406
This fixes an issue in the HTML editor where changing text color could also affect nearby bold or inline text that was only partly selected. Users can now apply colors more accurately, reducing unexpected formatting in edited content.
Original PR description
Problem: When applying color on a selection that spans across partially selected inline elements (e.g. `<p><b>a[b</b>c]d</p>`), container elements whose contents are not fully selected (such as…
Problem: When applying color on a selection that spans across partially selected inline elements (e.g. `<p><b>a[b</b>c]d</p>`), container elements whose contents are not fully selected (such as `<b>`) were included in `targetedNodes`. This caused improper color formatting/nesting on partially selected elements. Cause: In `ColorPlugin._applyColor()`, `targetedNodes` were filtered by checking `isNodeEditable(node)` and `nodeName !== "T"`, but did not check whether the contents of `node` were fully selected (`areNodeContentsFullySelected(node)`). As a result, partially selected ancestor elements were included in `targetedNodes`. Solution: Filter `targetedNodes` in `_applyColor()` using `this.dependencies.selection.areNodeContentsFullySelected(node)` to ensure only fully selected nodes are targeted when applying colors. Steps to reproduce: 1. Open html_editor. 2. Insert content: `<p><b>ab</b>cd</p>`. 3. Select `b` inside `<b>` and `c` inside `<p>` (`<p><b>a[b</b>c]d</p>`). 4. Apply text color (e.g. red). 5. Observe "ab" and "c" was colored instead of just "b" and "c". task-6456443 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#285658 Forward-Port-Of: odoo/odoo#281462
This update makes an automated test for reference field autocomplete behave consistently, even when small network delays occur. It helps reduce false failures in the validation pipeline without changing product behavior for users.
Original PR description
The test is non-deterministic and fails with the runbot error:
found 0 elements instead of 1:
0 matching ".ui-autocomplete .ui-menu-item:nth-child(2)"
if there is even a 100ms network delay. clear() dispatches input events, but without flushing the timers, the dropdown state at the time of click(".o_field_reference input") can be out of sync causing no menu items to render and failing the test.
This change makes the sequence deterministic without changing the assertions:
1. runAllTimers() clears the timers and allows the clear of the input to fully go through.
2. click(".o_form_view") unfocus the input so the next click of the input refocuses and triggers the menu opening.
3. checking contains on the dropdown children ensures the menu items can render before click.
runbot error: 940222
Forward-Port-Of: odoo/odoo#286055Instagram interaction calculations now handle missing responses from Meta safely. This prevents reporting errors when the external API fails and lets the interaction count default to zero instead of interrupting the process.
Original PR description
Currently, an error occurs while calculating Instagram interactions when
processing the Meta API response.
Error: `TypeError: int() argument must be a string, a bytes-like object
or a real number, not 'NoneType'
This happens because the `response` can be `None` when the Meta API
request get an error. Attempting to access the `response` as a dictionary
then results in an error.
This commit fixes the issue by using `response or {} as` a fallback. When the
`response` is `None`, an empty dictionary is used instead, causing the
interaction count to safely default to `0`.
sentry-7522266892This update ensures the Indian stock localization loads the accounting-related stock component it relies on. It prevents broken forms and failed single-app tests, helping keep stock and e-waybill workflows stable for Indian localization users.
Original PR description
The view 'l10n_in_ewaybill_stock.view_picking_form_inherit_ewaybill' is broken in single-app tests because it depends on stock.picking:country_code. That field is provided by module 'stock_account' through auto_install relationship. 'stock_account' auto_installs with 'stock' and 'account' installed. This condition exists on stable so it's safe to add this dependency. The dependency is added to l10n_in_stock because it seemed like the logical place where 'account' and 'stock' functionality comes together. [l10n_in_ewaybill_stock] ──[depends]──> [l10n_in_stock] [l10n_in_stock] ──[depends]──> [stock] [l10n_in_stock] ──[depends]──> [l10n_in] ──[depends]──> [account_tax_python] ──[depends]──> [account] REF Runbot: https://runbot.odoo.com/odoo/error/945482 Forward-Port-Of: odoo/odoo#284990
This fix prevents an error when users load sample data in the Shop Floor after a specific work center schedule has been deleted. The system now automatically uses the standard working schedule as a fallback, keeping setup and demos running smoothly.
Original PR description
Currently, an error occurs when loading the sample data in the Shop Floor. **Steps to Reproduce:** - Install the `mrp_workorder` module. - Go to `Employees` > `Configuration` > `Working Schedules`. -…
Currently, an error occurs when loading the sample data in the Shop Floor. **Steps to Reproduce:** - Install the `mrp_workorder` module. - Go to `Employees` > `Configuration` > `Working Schedules`. - Delete the `Work Center 40 hours/week` record. - Go to `Settings` > `Users & Companies` > `Groups`. - Open the `Manage Work Order Operation` group and add the `Administrator` to the `users` list. - Open the `Shop Floor`. If the `Activate your Work Center` dialog appears, click it and then click `Configure Later`. - Click `Load Samples`. `ValueError: External ID not found in the system: mrp.mrp_workcenter_calendar` After the [recent commit], the sample work center uses the `Work Center 40 hours/week` working schedule instead of `Standard 40 hours/week`. As a result, if the `Work Center 40 hours/week` record is deleted, loading the sample data raises the error [1]. This commit ensures that when the Work Center 40 hours/week calendar is not available, it falls back to `Standard 40 hours/week`, restoring the previous behavior [2]. This fallback is required because `resource_calendar_id` is mandatory from the view perspective, even though it is not required at the model level. If it is left empty, the form displays a missing required field. The `Standard 40 hours/week` calendar is always available because it is linked to the main company [3] and its `resource_calendar_id` field uses `ondelete='restrict'` [4], preventing it from being deleted. [recent commit]: https://github.com/odoo/enterprise/commit/336d721f7b353473fe5e07c29ce14ed77a88fb98 [1]- https://github.com/odoo/enterprise/blob/c0045ec3cf94650d66192a4ca3e0dc3c17daa5bd/mrp_workorder/models/mrp_production.py#L213-L216 [2]- https://github.com/odoo/enterprise/blob/51c1e74e90e510d59aad78820e2c29e821ba2854/mrp_workorder/models/mrp_production.py#L214-L217 [3]: https://github.com/odoo/odoo/blob/4c4219a7d9d51f703b15e83ab755faf1f2c8a71d/addons/resource/data/resource_data.xml#L10-L12 [4]: https://github.com/odoo/odoo/blob/4c4219a7d9d51f703b15e83ab755faf1f2c8a71d/addons/resource/models/res_company.py#L12-L13 sentry-7651161729 Forward-Port-Of: odoo/enterprise#126859
This fix ensures Twitter mentions returned by user search are sent in the format the social widget expects. Users can now see and select mentions correctly when preparing Twitter social content, avoiding a broken or confusing posting experience.
Original PR description
This commit fixes an issue with the introduction of the new user search endpoint in [1]. The new endpoint returned a list of mentions that were wrongly wrapped inside of another list. This meant that the widget couldn't properly handle them when it received the mentions. Now the mentions are properly handled by the widget as they follow the correct format. task-6026857 [1]: https://github.com/odoo/enterprise/commit/cdc2bd4bff93e5081858c4f7e2e08061131f6e2d