Monday, August 24, 2026
38 changes · master
Enhancements to existing features
Time off administrators can now see and configure whether each time off type creates a matching Calendar entry. This makes the existing setting easier to find and helps businesses control when leave requests appear in employees' calendars.
Original PR description
The `create_calendar_meeting` field on `hr.leave.type` allows users to choose if leave requests created with a given time off type generate a corresponding entry in the Calendar app. However, this field was not displayed on the form view. This commit adds `create_calendar_meeting` to the `hr.leave.type` form view inside the configuration section, along with dedicated help text explaining its behavior. Task: 6445794 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#283450
This update enables stricter automated quality checks for project-related document test code. It helps keep the codebase more reliable while limiting user-facing changes to a minor adjustment in how a project menu option is evaluated.
Original PR description
Task-5180137 Forward-Port-Of: odoo/odoo#284055 Forward-Port-Of: odoo/odoo#280233
New employee payroll review records now start in the reviewed status instead of an empty status. This removes ambiguity in employee payroll setup and keeps review indicators clearer for payroll and accounting teams.
Original PR description
Default the field to '1_reviewed' task-6470096
Email notifications no longer send readers to internal contact records when they see a partner mention. Mentions are shown as non-clickable highlighted text, avoiding confusing or inaccessible links for email recipients.
Original PR description
**Before this PR:** Partner @mentions in email notifications linked to the corresponding partner record. **After this PR:** Partner @mentions now render as links when the mentioned partner has an email address. If the mentioned partner has no email address, the @mention is rendered as plain text instead. task-4844982 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Stock quantity updates now reuse the same warehouse lookup when processing multiple products. This reduces unnecessary database work during batch operations, helping inventory-related actions run more efficiently without changing user workflows.
Original PR description
When `_inverse_qty_available` processes multiple products, it performs the same warehouse search for every eligible product, resulting in redundant queries during batch operations. Look up the warehouse lazily once and reuse it for all products in the recordset. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#283564
This change improves Odoo's internal testing tools so simulated dates and times can be advanced during automated checks. It helps teams validate future marketing automation work more reliably, including incremental synchronization and application overhaul efforts.
Original PR description
Allows notably to make time move forward (tick). Prepares Task-6425785 [marketing_automation] Incremental sync Prepares Task-3866422 [marketing_automation] Overhaul application
This update improves internal testing for Marketing Automation scheduled jobs, helping ensure campaign activities run reliably over time. It also prevents test scenarios from getting stuck when scheduled jobs trigger repeatedly, reducing risk in future application improvements.
Original PR description
Forward-Port-Of: odoo/enterprise#128884 Forward-Port-Of: odoo/enterprise#128522
Resolved issues and error corrections
Cancelling the product configurator in Point of Sale no longer shows optional products for an item that was not added. This prevents cashiers from being prompted to add extras for a discarded product, reducing confusion during checkout.
Original PR description
When discarding the product configurator, we still showed the optional product. We no longer do that as no one wants to add optional products to a not-added product. task-6442422 Forward-Port-Of: odoo/odoo#283378 Forward-Port-Of: odoo/odoo#282916
Features or functions removed from Odoo
Odoo removed a temporary icon compatibility layer that supported legacy FontAwesome markup after the system completed its move to the newer icon format. This reduces maintenance overhead and keeps the web and editor code cleaner, with safeguards already in place to prevent old icon usage from returning.
Original PR description
__What__ - Remove `icons_mappings/fa_to_ms.scss` and `icons_mappings/oi_to_ms.scss`, along with every `.fa`/`.fa-*` compatibility rule in `icons.scss`. - Remove `LegacyIconMigrationPlugin` (and its…
__What__ - Remove `icons_mappings/fa_to_ms.scss` and `icons_mappings/oi_to_ms.scss`, along with every `.fa`/`.fa-*` compatibility rule in `icons.scss`. - Remove `LegacyIconMigrationPlugin` (and its tests), which rewrote legacy `fa fa-*` markup into `oi` + `data-icon` at editor startup. __Why__ The mappings only existed as a transition layer: they let old `fa-*` markup keep rendering while the codebase was being converted. That transition is over. - odoo/odoo#256840 converted every remaining `fa-*` usage to `oi` + `data-icon`, so nothing relies on the mapping anymore. - odoo/odoo#279361 added a CI check preventing any new `fa-*` class from being introduced, so the mapping cannot become needed again. __Note__ `icons.scss` was cleaned up along the way: the now single-purpose mixins (`icon-content`, `ms-icon`, `oi-icon`, `rotate`, `flip`) were inlined, duplicated blocks (`.oi-fw`, `.oi-spin`, `.oi-pulse`, the variables section) were deduplicated, the RTL rules were collapsed into a single selector list, and the `-webkit-` prefixed transforms/animations were dropped. The `fa-spin` keyframes are renamed `oi-spin` since the FontAwesome ones are no longer inherited. task-5901783
Code cleanup and technical improvements
This update removes redundant invoice code that no longer performed any useful work. It helps keep the GCC invoicing module simpler and easier to maintain without changing how users create or view invoices.
Original PR description
Remove create() and _compute_narration() method overrides from l10n_gcc_invoice as they only existed to call _load_narration_translation(), which has already been disabled. The parent class implementations handle all required functionality. Keeps the codebase clean by removing unnecessary method overrides. Forward-Port-Of: odoo/odoo#281565 Forward-Port-Of: odoo/odoo#281395
Documentation and clarification updates
This update records that GitHub user kshitij-nariya has signed Odoo's Individual Contributor License Agreement. It ensures their future contributions can be reviewed and merged without legal approval blockers.
Original PR description
Description of the issue/feature this PR addresses: Signed the Odoo Individual Contributor License Agreement to contribute to the Odoo repository. Current behaviour before PR: The CLA signature is missing for GitHub user `kshitij-nariya`, which will prevent future contributions from being accepted and merged. Desired behaviour after PR is merged: The CLA signature for `kshitij-nariya` is recorded in the repository, allowing future pull requests and contributions to be successfully merged. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#282808
Fixes issues in Odoo's JSON logging so ignored fields and test-related log information are handled correctly. Adds automated checks to help prevent these logging problems from returning, improving reliability for monitoring and troubleshooting.
Original PR description
The JsonFormatter has two bugs - the ignore list is not working as expected - in 18.0-18.4 the 'test' key is broken This commit add tests to ensure those behavior works as expected While on it, also…
The JsonFormatter has two bugs - the ignore list is not working as expected - in 18.0-18.4 the 'test' key is broken This commit add tests to ensure those behavior works as expected While on it, also adds a `additional_record_keys` parameter to allow to specifically add keys to the default list, without having to override the whole list, and add additional default keys (exc_info and test) The previous `ignored_record_keys` default value was possible to remove by calling `JSONFormatter(ignore_record_keys=[])` The purpose was to be able to easily include all keys and ignore the default ingnore list, but this makes the additional blacklisting of a few keys more tedious, and the general usage and implementation more complex `JSONFormatter(ignore_record_keys=[*JSONFormatter.DEFAULT_IGNORED_RECORD_KEYS, 'other key'])` To simplify the logic, **this is not the case anymore**, so to include all keys something like this would be needed `JSONFormatter(additional_record_keys=JSONFormatter.DEFAULT_IGNORED_RECORD_KEYS)` Or an hardcoded list. Forward-Port-Of: odoo/odoo#284051 Forward-Port-Of: odoo/odoo#279049
This fix prevents planning shifts from failing when no related sales order line is attached. It ensures the customer field is still set safely, improving reliability for sales planning workflows.
Original PR description
Before this commit, when the shift has no SOL set, the `_compute_partner_id` crashes because the value for partner_id field is not set for that shift. This commit fixes the compute method of partner_id to make sure the value is correctly set for all shifts. Forward-Port-Of: odoo/enterprise#128965
This fixes an internal test for appointment rescheduling so it behaves consistently when demo data is present. It helps prevent false test failures without changing the customer-facing appointment experience.
Original PR description
In test_reschedule_appointment_event the tracking is rendered by the public user, which has no timezone hence fallback to UTC. But the expected values are formatted by the test environment, running as OdooBot, whose timezone demo data sets to Europe/Brussels. Without demo data both fall back to UTC and the test passes. Format the expected values in UTC as well. Runbot-946307
Argentine delivery operations using class X document types can now be saved without entering CAI authorization details or an expiration date. This aligns the workflow with local regulations, where those fields are only required for class R delivery notes.
Original PR description
Currently, when the user attempts to create a delivery operation for a class X document type, the system prompts the user to provide values for the CAI and CAI Expiration Date fields. ## Steps to…
Currently, when the user attempts to create a delivery operation for a class X document type, the system prompts the user to provide values for the CAI and CAI Expiration Date fields. ## Steps to produce: - Install `l10n_ar_stock` with demo data - Switch Company to `(AR) Exento` - Create a warehouse - Configuration > Operation Types > Delivery Orders - Set Document Type to `'(94) MAILING X' `and try to save ## Observed Behavior: The fields 'CAI' and 'CAI Expiration Date', which represent the authorization code and expiration date issued by the government, are currently configured as required fields. **Expected Behavior:** As specified on the [government site](https://www.argentina.gob.ar/normativa/nacional/resoluci%C3%B3n-1415-2003-81316/actualizacion#:~:text=Los%20datos%20indicados%20en%20el%20inciso%20a%29%2C%20puntos%207%2C%2010%2C%2011%2C%2012%20y%2013%2C%20s%C3%B3lo%20ser%C3%A1n%20para%20los%20remitos%20clase%20%27R%27%2E): > > 12. Printing authorization code, preceded by the acronym 'CAI No. ...'. > 13. Expiration date of the receipt, preceded by the legend 'Expiration Date ...' > > 'The data indicated in section a), points 7, 10, 11, 12 and 13, will only be for 'R' class delivery notes.' These statements indicate that the information mentioned in points 12 and 13, including the **CAI** and **CAI Expiration Date** fields, is applicable only to **'R'** class delivery notes. Therefore, for class X delivery notes, these fields should be optional rather than required. ## Root Cause: According to [1], the field is configured as a required field when a Document Type ID is selected. This configuration causes the **CAI** and **CAI Expiration Date** fields to become mandatory, regardless of the document type requirements defined by the government specification. [1]- https://github.com/odoo/odoo/blob/62b05c4ea61942072b6b1fb420fe3efedb11ed14/addons/l10n_ar_stock/views/stock_picking_type_views.xml#L11-L16 ## Solution: Apply constraints that align with the government specifications, allowing the CAI and CAI Expiration Date fields to remain optional for document types where they are not required. opw-6359503 Forward-Port-Of: odoo/odoo#283822 Forward-Port-Of: odoo/odoo#275533
The Belgian salary configurator now calculates wages consistently when employees have extra-legal leave and a mobility budget. This prevents the mobility budget from being incorrectly adjusted for leave, so employer cost and gross wage figures align with the standard payroll formula.
Original PR description
Forward-Port-Of: odoo/enterprise#112723
Adds automated coverage to ensure currency translation adjustments use the correct exchange rates when the company currency changes over time. This helps prevent inaccurate financial report values in fluctuating-rate scenarios.
Original PR description
Following the fix made in community branch, this adds a test veryfing the expected behavior in case of a fluctuating rate for the domestic currency. Scenario 2: fluctuating domestic (USD) rate USD…
Following the fix made in community branch, this adds a test veryfing the expected behavior in case of a fluctuating rate for the domestic currency. Scenario 2: fluctuating domestic (USD) rate USD rate=1 from Jan 1 to Jun 30, USD rate=3 from Jul 1 to Dec 31 EUR rates unchanged: 2 from Jan 1, 4 from Jul 1 Correct conversion factors (= USD_rate / EUR_rate): Jan 1 – Jun 30 (182 days): 1/2 = 0.50 Jul 1 – Dec 31 (184 days): 3/4 = 0.75 Current rate at 2020-12-31: 3/4 = 0.75 Correct average rate: (0.50 * 182 + 0.75 * 184) / 366 = 229/366 ≈ 0.62568 Previsouly bugged average rate (USD fixed at current=3): (1.50 * 182 + 0.75 * 184) / 366 = 411/366 ≈ 1.12295 Historical equity rates (correct vs previously bugged): Mar 1 (USD=1, EUR=2): correct = 1/2 = 0.50; buggy = 3/2 = 1.50 → 40 * 0.50 = 20 vs 40 * 1.50 = 60 Oct 1 (USD=3, EUR=4): correct = 3/4 = 0.75; buggy = 3/4 = 0.75 → 60 * 0.75 = 45 (same by coincidence) task-5953104 Forward-Port-Of: odoo/enterprise#125363 Forward-Port-Of: odoo/enterprise#123055
Sales order sections and subsections no longer show quantity delivered, delivery percentage, or unit price fields that do not apply to them. This keeps order lines easier to read and avoids confusion when reviewing structured sales orders.
Original PR description
On the SO form view, some fields that are not meant to be displayed on sections/subsections are displayed on them. These fields are: qty_delivered, qty_delivered_percent, and price_unit. Follow-up task: 6075605 and 6450100 <img width="1223" height="286" alt="screen" src="https://github.com/user-attachments/assets/f07e2343-c3ba-46b7-b6d3-b4e4d20491a2" />
This fixes a timing issue in the website page creation flow where the interface could remain blocked while redirecting to a newly created page. It makes the automated flow wait until navigation is fully complete, improving reliability of website testing and reducing false failures.
Original PR description
runbot-944311 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#278652
Belgian payroll demo records now use the correct meal voucher values and Belgian office work locations, making test employee data more accurate. The update also fixes a company mismatch on a demo vehicle to avoid multi-company errors during testing.
Original PR description
In Belgian demo data, several employees have an incorrect meal voucher employee share set to 0.00€ instead of the standard rate. Additionally, the default work address for BE test employees is set to a US location. This updates the demo records: - Sets meal voucher amount to 8.00€ and employee's share to 1.09€ (except for employees in JC 999). - Updates all BE test employees' work location to "Belgian offices". Task-6471822
The tax totals display no longer shows cash rounding controls in sales and purchase documents, where they are not intended to be used. This keeps rounding behavior limited to accounting and invoicing, reducing confusion for users preparing quotes, orders, or purchase documents.
Original PR description
The cash rounding on the tax totals widget is intended to work only with accounting/invoicing, but not sales/purchases.
Odoo now ignores a saved default search filter when its linked record no longer exists. This prevents affected screens from crashing and lets users continue working normally.
Original PR description
…'t exist Have a search view with a m2o field Have an action that sets search_default_m2o: [/BAD ID/] Before this commit there was a crash After this commit, we simply ignore the filter. task-6469841 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#282738
This fixes an issue where pressing Shift+Enter in Safari created a new paragraph instead of a soft line break in the editor. Users editing Knowledge articles on Mac Safari can now format text consistently with other browsers.
Original PR description
**Steps to reproduce:** - Use a Mac with Safari - Install Knowledge app - Go to any article - Press Shift+Enter to try to enter a soft line break - Hard split is done instead **Issue:** Shift+Enter causes a `insertParagraph` event instead of `insertLineBreak` in Safari, which triggers the `SplitPlugin` instead of the `LineBreakPlugin`. **Fix:** Check if the browser is Safari and call `insertLineBreak` from the `SplitPlugin` (when needed) by listening to the "keydown" events. (note: I was not able to find any other key combination to properly trigger the `insertLineBreak` event in Safari) opw-6413507 Forward-Port-Of: odoo/odoo#281458
This fix prevents certain Indian localization reports from failing when they use shared report handling logic. The B2C HSN line adjustment now only runs for the GSTR-1 report, improving reliability for other reports.
Original PR description
Currently, every l10n_in report is handled by a single handler. Therefore, a check condition is required for each report option. This check was missing in _custom_line_postprocessor, which removes the B2C HSN line conditionally. As a result, it could cause a traceback for reports other than GSTR-1. This PR fixes the issue by adding a condition to ensure that the B2C HSN line is removed only for the GSTR-1 report.
Quotation PDFs with product images now keep long product names and descriptions within their columns. This improves the readability and professionalism of sales quotes, especially when products have lengthy descriptions or unbroken text.
Original PR description
Currently, with images enabled for quotation reports and if the product name is long enough, it overflows through the column border a bit before breaking to the next line. This seems to be caused by…
Currently, with images enabled for quotation reports and if the product name is long enough, it overflows through the column border a bit before breaking to the next line. This seems to be caused by some incompatibility between wkhtmltopdf and d-flex, adding `col` to the product name container forces it to respect column boundaries. This commit also adds `text-break` as having a long uninterupded string in the description would end up stretching the column and making the next ones disapear. <img width="811" height="266" alt="image" src="https://github.com/user-attachments/assets/90043c88-d03f-4324-9935-e669f6a256ab" /> <img width="964" height="431" alt="image" src="https://github.com/user-attachments/assets/2b8e8a6c-6fd5-4813-8160-d94bbb5490d1" /> ### Steps to reproduce: - Enable Display Product Images in the setting - Create a product with an image - Create a quotation with said product and add a description that is long enough to break to the next line - Print said quotation - You will notice that before the line breaks it will overflow to the next column (you might need to tweak the description a bit by removing or adding a few lines) opw-6367076 Forward-Port-Of: odoo/odoo#275978
The Swiss payroll module no longer assigns a Swiss contract type by default when the employee or company context is not Swiss. This prevents incorrect employee contract information and avoids related automated test failures.
Original PR description
[FIX] l10n_ch: fix default contract type This task is runbot error fix that occured from 19.0 to 19.2 Bug reproduction: 1 - Go to version 19.0, install l10n_ch_hr_payroll_account 2 - Execute…
[FIX] l10n_ch: fix default contract type
This task is runbot error fix that occured from 19.0 to 19.2
Bug reproduction:
1 - Go to version 19.0, install l10n_ch_hr_payroll_account 2 - Execute test_version_timeline_auto_save_tour tour test 3 - It fails in .o_arrow_button_wrapper[data-tooltip^='Contract:'] step
Bug cause:
1 - When l10n_ch_hr_payroll_account is installed:
1.1 - contract type becomes "Permanent contract with monthly salary"
1.2 - the employee is not swiss but it has this CH contract type
2 - data-tooltip starts with Permanent contract instead of contract
2.1 - Tour fails
3 - contract_type_id is overwritten in swiss modules
3.1 - Default is assigned without looking to the country of self.env
Bug solution:
1 - If the country is not swiss, the default is assigned as False
1.1 -> fixed in l10n_ch_hr_payroll/hr_version
1.2 instead of assigning swiss contract type to the non-swiss emp.
Note: This is fix from saas-18.4 to master.
task-6392040
runbot error: https://runbot.odoo.com/odoo/runbot.build.error/941358
Forward-Port-Of: odoo/enterprise#127830
Forward-Port-Of: odoo/enterprise#126520Fixes an editor display issue where gradient-styled text inside a link could disappear when selected. Users editing website or email content can now clearly see linked text during selection, reducing confusion and editing mistakes.
Original PR description
Problem: When text formatted with `.text-gradient` is inside a link with `.o_link_in_selection`, the selected text becomes invisible. `.text-gradient` sets `-webkit-text-fill-color: transparent`, which prevents `color: black !important` on `.o_link_in_selection` from taking effect. Cause: `-webkit-text-fill-color: transparent` from `.text-gradient` overrides standard text `color` rendering, causing the text to stay transparent against the selection highlight background. Solution: Set `-webkit-text-fill-color: black` on `.o_link_in_selection` to ensure text inside gradient links is rendered in black and remains clearly visible when selected. Steps to reproduce: - Add text "ABCD". - Apply gradient color to all text. - Create a link on "BC". - Place cursor/selection inside the new link. - Observe that the text is not visible. opw-6479350 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#282952
Belgian payroll now avoids showing a missing transport benefit warning for company executives. This prevents an incorrect alert from appearing on executive contracts where the rule should not apply.
Original PR description
The transport benefit warning incorrectly applies to company executives (Joint Committee = 999). This warning is intended solely for regular employees. Steps to reproduce: 1. Go to an employee's contract and set the Joint Committee to 999. 2. Set a monthly wage that results in an annual salary below 34,654€. 3. Ensure no transport benefits are selected. 4. Save the contract; the missing transport benefit warning is incorrectly displayed. This change skips the validation for Joint Committee 999 to ensure the warning only triggers when applicable. task-6442880 Forward-Port-Of: odoo/enterprise#126642
Projects linked to both standard sales orders and rental orders now show the full list when users open the Sales button. This makes the displayed sales count match the actual orders shown, reducing confusion for teams managing rental-related projects.
Original PR description
Steps to Reproduce --- 1. Install sale_renting_project. 2. Create a Project linked to 1 standard Sales Order and 1 Rental Order. 3. Observe the "Sales" stat button counts 2 Sales. 4. Click the stat button. Only the standard Sales Order is displayed. Issue --- In saas-18.4, the project Sales stat button calls action_view_sos without the from_embedded_action context key. As a result, _get_sale_orders_domain applies the non-rental filter by default, causing rental orders to be excluded from the action even though they are included in the displayed counter. Expected Behavior --- The Sales stat button should display all orders linked to the project, including both standard and rental orders, matching its total counter. Fix --- Return the base project domain unmodified when from_embedded_action is not set in the context. task-6140201 Forward-Port-Of: odoo/enterprise#128468 Forward-Port-Of: odoo/enterprise#121449
The LinkedIn social integration now handles cases where LinkedIn returns no account statistics. This prevents refresh failures and helps users keep their social account data up to date reliably.
Original PR description
Bug === When the LinkedIn API returns no statistics for the account, the refresh crashes. Task-6425391 Forward-Port-Of: odoo/enterprise#126326
The AI assistant for drafting social posts no longer crashes when preparing the request context, especially when using Google-backed AI services. This helps users reliably ask AI for help writing social content without interruption.
Original PR description
Bug === The `aiChatSourceId` contains `datapoint_x`. Also, look like now we should `json.dumps` the initial context. Task-6485440 Forward-Port-Of: odoo/enterprise#124832
Fixed an issue where inserting an AI-generated image from the media dialog could cause an error. This helps users complete social post content creation smoothly without being interrupted by a crash.
Original PR description
Bug === Since odoo/odoo@7427089969ab445dc86e37d628c9c59e7c73c632 , when we open the media dialog, click on the AI button, generate an image and then insert it, a traceback is raised. Task-6432288 Forward-Port-Of: odoo/enterprise#126229
This update standardizes how Odoo builds and runs database queries across many apps, reducing maintenance risk and helping prevent query mistakes. Most changes are internal, but they support more reliable behavior in areas such as accounting, CRM, events, HR, mail, purchasing, and marketing.
Original PR description
Detected usages by a new linter for SQL. https://github.com/odoo/enterprise/pull/128045 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update standardizes how many Odoo modules retrieve and prepare data behind the scenes, especially in accounting, reporting, documents, payroll, helpdesk, knowledge, and marketing-related areas. It should make the codebase easier to maintain and reduce the risk of inconsistent database behavior, with limited direct impact on day-to-day users.
Original PR description
https://github.com/odoo/odoo/pull/282652
This change modernizes the internal way Odoo handles popovers, bottom sheets, and dialogs while keeping existing compatibility in place. Users should not see major behavior changes, but the update helps make these interface elements easier to maintain and evolve.
Original PR description
In this commit, we rewrite the popover, bottom_sheet and dialog services as plugins. For legacy purposes, we keep the popover, bottom_sheet and dialog services (as services). We also adapt the codebase to reflect the changes on the services.
The way Odoo manages popovers, bottom sheets, and dialogs has been modernized behind the scenes. This helps keep the web interface easier to maintain while preserving existing behavior for users and older customizations.
Original PR description
In this commit, we rewrite the popover, bottom_sheet and dialog services as plugins. For legacy purposes, we keep the popover, bottom_sheet and dialog services (as services). We also adapt the codebase to reflect the changes on the services. Community: https://github.com/odoo/odoo/pull/281432
Web view URLs now keep only the search filters the user actively applied, instead of storing extra internal page details. This makes shared or saved links lighter, clearer, and less likely to expose unnecessary technical information while keeping search behavior consistent.
Original PR description
Only the search performed by the user (the active facets) needs to end up in the url, not the whole internal state of the view. Pushing the complete state was heavier than necessary and leaked more detail into the url than a search really is. A lightweight representation of "what the user searched for" already existed, introduced for reapplying a search when working offline. Reusing it here avoids maintaining two different ways to describe a search, and pushed us to make that representation a bit more robust so it can be trusted for both purposes. Finally, deciding what belongs in the url is the search model's responsibility, not the action service's: the model is the one that actually knows what a facet is. Moving that decision there removes an indirection the action service had no real reason to carry.
A contributor has submitted their Individual Contributor License Agreement for Odoo. This is a legal housekeeping update that helps ensure future contributions can be accepted under the project’s licensing requirements.
Original PR description
This pull request submits my Odoo Individual Contributor License Agreement signature. Forward-Port-Of: odoo/odoo#282045