Daily updates from Odoo
Wednesday, March 12, 2025
38 changes
5 changes
Resolved issues and error corrections
The timesheet list view no longer shows an empty timer status column. This removes confusing, non-useful information from the screen and keeps the timesheet view cleaner for users.
Original PR description
Before this commit, the `is_timer_running` field defined timesheet model is displayed in the list but the column is always empty. This commit makes sure the column is also hidden in the list view since no data is displayed. The field is in fact just a technical field and not really useful for the user.
This change moves a Belgian payroll accounting test into the appropriate Belgian localization test module. It helps keep automated checks reliable by avoiding dependency errors, with no expected impact on day-to-day product use.
Original PR description
Move the test to the l10n_be test module to avoid dependencies error
This update aligns the Enterprise appointment app with a related core fix so frontend appointment pages can use the shared formatting and HTML utilities they expect. It helps prevent display or interaction issues in appointment scheduling without changing the user workflow.
Original PR description
Enterprise counter-part. runbot-134831 https://github.com/odoo/odoo/pull/201247
This update fixes an issue that could prevent online bank synchronization records from being created after a recent platform change. It helps keep account connections working reliably without changing user workflows.
Original PR description
`create` only accepts a list or a tuple now, not dict_values
A typo was corrected in the appraisal campaign wizard. This helps keep the employee appraisal experience clear and professional without changing how the feature works.
33 changes
Resolved issues and error corrections
This update brings Odoo Spreadsheet up to the latest maintenance version, fixing issues with Excel imports, chart labels, sheet switching while editing, and data validation. It also improves spreadsheet performance, making larger or more complex spreadsheets faster and more reliable for users.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/d8dea1b8e [REL] 18.0.19 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/d8dea1b8e [REL] 18.0.19 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/359d0ccde [FIX] xlsx: correctly import labels from scatter charts [Task: 4626572](https://www.odoo.com/odoo/2328/tasks/4626572) https://github.com/odoo/o-spreadsheet/commit/daf2fad27 [FIX] BottomBar: Keep editing when selecting sheet in bottombar list [Task: 4626098](https://www.odoo.com/odoo/2328/tasks/4626098) https://github.com/odoo/o-spreadsheet/commit/d6264f24a [PERF] content_helper: pushElement use cache instead of deepEquals [Task: 4563258](https://www.odoo.com/odoo/2328/tasks/4563258) https://github.com/odoo/o-spreadsheet/commit/40ebc1cd3 [PERF] deepCopy: optimize initialization and iteration [Task: 4563258](https://www.odoo.com/odoo/2328/tasks/4563258) https://github.com/odoo/o-spreadsheet/commit/dc04aca7b [PERF] data_normalization: getItemId use cache instead of deepEquals [Task: 4563258](https://www.odoo.com/odoo/2328/tasks/4563258) https://github.com/odoo/o-spreadsheet/commit/8057e52ba [FIX] data_validation: don't prefilter on initial exact match [Task: 4518009](https://www.odoo.com/odoo/2328/tasks/4518009) https://github.com/odoo/o-spreadsheet/commit/da1e832ad [FIX] Xlsx: do not nest literal strings [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) Co-authored-by: Anthony Hendrickx (anhe) <anhe@odoo.com> Co-authored-by: Alexis Lacroix (laa) <laa@odoo.com> Co-authored-by: Lucas Lefèvre (lul) <lul@odoo.com> Co-authored-by: Dhrutik Patel (dhrp) <dhrp@odoo.com> Co-authored-by: Adrien Minne (adrm) <adrm@odoo.com> Co-authored-by: Mehdi Rachico (mera) <mera@odoo.com> Co-authored-by: Florian Damhaut (flda) <flda@odoo.com> Co-authored-by: Rémi Rahir (rar) <rar@odoo.com> Co-authored-by: Pierre Rousseau (pro) <pro@odoo.com> Co-authored-by: Vincent Schippefilt (vsc) <vsc@odoo.com>
Users who leave a discussion call before responding to the browser microphone permission prompt will no longer trigger an error if they then deny permission. This makes call handling more reliable and avoids an unnecessary crash in the Mail app.
Original PR description
Before this commit, closing the microphone permission request outside of a call would result in a traceback. Steps to reproduce: 1. Start a call on a channel (observe the browser's microphone permission request pop-up) 2. Quit the call 3. Refuse the microphone permissions -> traceback This happens because the `joinCall` method waits for the permissions before accessing `selfSession` in `_initConnection`, if that happens after the call has ended it produces a traceback as there is no `selfSession`. This commit fixes the issue by moving the permission request after the `_initConnection`, thus ensuring that `selfSession` does not get accessed if there is no call.
This change fixes how sales loyalty cards are compared while editing an order, so temporary on-screen loyalty data is matched safely against saved records. It prevents valid loyalty reward lines from being deleted unexpectedly, helping sales orders keep the correct discounts or rewards.
Original PR description
Description of the issue/feature this PR addresses: Loyalty card model in UI is changeable and its values are not in the database yet It can not be compared to already existing records of loyalty cards in the database As they are not of the same datatype, so we should compare their ids instead. Current behavior before PR: Loyalty records in the sale order lines get deleted unfairly Desired behavior after PR is merged: Loyalty records in the sale order lines should be deleted if they follow one of the three conditions, but firts condition should be fixed. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The portal now safely handles salespeople who do not have an email address. This prevents affected users from seeing an error when logging in or viewing portal contact details.
Original PR description
Steps to reproduce: 1. Create a user partner without an email address. 2. Assign the newly created user as the salesperson of another user. 3. Log in with the user to trigger the traceback. Issue: Attempting to concatenate `False` with a string (`'mailto:'`) in the portal contact template caused a `TypeError`. Fix: Added `t-if="sales_user.email"` to ensure the email field is present before rendering the link. task-4458848 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes a form view issue where user avatar lookup fields ignored the setting meant to prevent opening linked records. Businesses can now reliably configure these fields to stay non-clickable when needed, improving consistency and control in forms.
Original PR description
The goal of this commit is to be able to use the option _no_open_ when displaying fields with the many2one_avatar_user widget in a form view (similar to #194845). Prior to this commit, the _no_open_ option was ineffective for fields using the many2one_avatar_user widget in form views if the view type was a form. This was because the _no_open_ option was overridden, and the expression `fieldInfo.viewType === "form"` was always used, regardless of the specified value for _no_open_. As a result, the field's behavior could not be customized to prevent opening. After this commit, the _no_open_ option is fully supported in this scenario. If the view type is not form, the canOpen expression will always evaluate to False, maintaining the expected behavior. However, when the view type is form, you can now explicitly use the _no_open_ option to control whether the field can be opened. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Changing the date on a confirmed payment now also updates the date on its associated accounting entry. This keeps payment records and accounting records aligned, reducing confusion and helping ensure accurate financial reporting.
Original PR description
Steps to reproduce: - Create a payment - Confirm - Edit and change date - Check associated move Issue: move date is not updated opw-4598423
This fix ensures stock reservations use the product’s base unit of measure when quantities are entered in another unit, such as grams for a product tracked in kilograms. It prevents overstated reserved stock, improving inventory accuracy and avoiding misleading availability information.
Original PR description
Steps to reproduce the bug:
- Create a storable product “P1”:
- UoM: Kg
- Create a delivery order:
- product: P1
- qty: 100 g
- Mark the delivery as "To Do"
- Set the quantity to 100 g
- Go to the product form of P1 → Update quantity
Problem:
The reserved quantity is set to 100 kg instead of 0.1 kg
opw-4638315A test in the Romanian stock e-invoicing area now checks whether the stock batch picking feature is installed before using it. This prevents false test failures in setups where that optional feature is not available, improving reliability without changing business workflows.
Original PR description
…lled in the test The test was failing when the module was not installed because it was trying to access the auto_batch field but AttributeError: 'stock.picking.type' object has no attribute 'auto_batch' , because we need to install the module to have the field available which is stock_picking_batch module. so I conditionally check if stock_picking_batch module is installed build_error-115361
The HTML editor table controls now appear when users hover over table header cells, not just regular cells. This fixes an editing inconsistency so users can manage tables with header rows more reliably.
Original PR description
**Problem**: The table menu doesn't appear when hovering over `th` elements. **Solution**: Treat `th` elements the same way as `td` to ensure the menu appears. **Steps to Reproduce**: 1. Setup an editor with the following HTML structure: `<table class="table table-bordered o_table">` ` <tbody>` ` <tr>` ` <th><div class="o-paragraph">Header 1</div></th>` ` <th><div class="o-paragraph">Header 2</div></th>` ` </tr>` ` <tr>` ` <td><div class="o-paragraph">Content 1</div></td>` ` <td><div class="o-paragraph">Content 2</div></td>` ` </tr>` ` </tbody>` `</table>` 2. Hover over "Header 1". 3. The table menu does not appear. opw-4610578 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix prevents the event booth registration page from crashing when an expected page block is not present. It keeps the booking flow stable after recent website framework changes in Odoo 18.0.
Original PR description
Oversight of odoo/odoo@8a5019c5e576a4bd9ef745768de47bfab8d31a49 The previous versions of the code were using jQuery, which was compliant with the view element not existing. However, the FW to version 18.0 now uses native JavaScript. When switching to native JavaScript, we have to adapt the code to account for the selected block not existing to avoid a crash.
This fixes an issue where the anti-bot verification could fail to appear when an event sign-up form opens in a pop-up window. Visitors should now see the verification at the right time, helping them complete registrations without disruption.
Original PR description
[1] migrates jquery for event form modal display for the more standard modal.js component. This means the modal is not yet added to the document when `_addTurnstile` is added which makes rendering fail. We now wait for the modal to be shown before adding turnstile. [1]: 8510021c1b5395fb2cb134bbeab93ecd536ba5a6 task-4335141
This fix prevents the Danish localization update from failing when a specific tax record was previously deleted. It helps companies complete localization updates more reliably without needing to recreate removed tax entries.
Original PR description
to reproduce 1) install l10n_dk with minor version 1.2 in 18.0 2) delete tax `K-EU-Momsfritaget` from taxes while selecting l10n_dk company. 3) bump minor version and update. 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 internal automated tests for Odoo's base email server behavior after a recent change caused connection failures to surface unexpectedly. The update helps keep the test suite reliable, reducing the risk of future email-related regressions reaching users.
Original PR description
That were previously failing since this change https://github.com/odoo/odoo/commit/7aac5cecf198ed07fd6c71a0958f948512c50416#diff-d2dd39541c27864eca6e3d570d14208095c4c5509214e650bdc5bb8d69b5f672R40 making it so that the mail server refuses to connect https://github.com/odoo/odoo/blob/18.0/odoo/addons/base/models/ir_mail_server.py#L374 and later on raises an error as it returns None --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Report headers now keep company addresses on one line where appropriate, avoiding awkward breaks in generated PDF documents. This helps preserve a professional document layout across available report styles.
Original PR description
Steps: - Open Settings - Configure document layout - Set address to "123 avenue bois cambre" (just an example) - Choose a new layout, bubble for example Actual result: - Address is wrapped after "bois" without reason by wkhtmltopdf  Expected result: - Address is not wrapped Seems good for standard, bold and striped layout, Updating it to be aligned with other and to ensure no-wrap opw-4637433
When a user is archived, their linked sales team member record is now archived as well. This keeps sales team membership lists accurate and avoids inactive users appearing as active team members.
Original PR description
**How to reproduce:** - Create a user, assign it to a team (in multi-team, or not) - Archive this user - Open the list of members (CRM>Configuration in debug mode) - The team member has not been archived **Technical Reason:** When user is archived, its respective record in crm_team_member is not updated. **After this PR:** When user is archived, their linked sales team member will also be archived. Task-4617779
This fix lets customers clean up duplicated Point of Sale record identifiers by upgrading the Point of Sale module, instead of needing a technical support intervention. It reduces manual ticket handling and helps affected upgraded databases recover more easily.
Original PR description
This PR introduces a local upgrade script to fix the duplicate UUID issue for customers who upgraded to 18.0 before this PR was merged: #194990 The creation of this local upgrade script was requested towards the end of the conversation on that PR. Before the above PR was merged, older POS [order, order.line, payment] records all got the same UUID during the upgrade to 18.0 for the reason laid out in the conversation on the PR: > [in reference to the default value for the uuid column calling `uuid4()`] ... when the ORM inits the column it will set the same value for all rows. Current behavior before PR: Post-upgrade POS tickets get sent to Tech for us to clean manually via a server action that duplicates UUIDs. Desired behavior after PR is merged: Post-upgrade POS tickets can be solved in Functional by "Upgrading" the `point_of_sale` module **or** the customer doesn't need to create a ticket because they solved it themselves by upgrading their module.
The point of sale customer display now uses the correct language instead of always showing English text. This helps stores provide a localized checkout experience for customers in their preferred language.
Original PR description
Currently, the customer display can only be viewed in English. opw-4419620
Fixes an accounting issue where creating a customer invoice payment could fail if the selected payment method had been left unnamed. This helps users complete payments reliably even when a payment method label is blank.
Original PR description
Steps to reproduce : - Open accounting and select the 3 dots on the top right corner of Bank in the dashboard - Select "Configuration" - In the Incoming Payments, for a payment method, change the name to an empty string - Make sure that this payment method has an "Outstanding Receipts accounts" - Open Customers/Invoices and open an invoice that is not paid - Click on "Pay" - Select the unamed payment method - Click on Create Payment Problem : An error message appears https://github.com/odoo/odoo/blob/9a27b53e6dacf7380dac6da5ae84f39f2812c9f7/addons/account/models/account_payment.py#L337 opw-4574452
Product images now display cleanly in dark mode without an unwanted white background beneath them. This improves visual consistency in the Field Service product catalog and other screens that use the same image display component.
Original PR description
Steps to reproduce: - Turn on dark mode - Open the Field Service app. - Click on "Add Product" to navigate to the product catalog. Issue: - An extra white background appears below the product image. Solution: - Updated the CSS to apply `--ImageField-background-color` directly to the `<img>` tag instead of the `.o_field_image` parent div. This prevents unwanted white spaces below the parent container The change has been applied globally to all `.o_field_image` elements, as the `.o_field_image` class is always on the parent `<div>`, not on the `<img>` tag. task-4302221
This fixes an issue where the vendor bills list could fail when duplicate-bill warning data was not yet available after an update. The list now checks that the data exists before using it, helping users continue reviewing bills without interruption.
Original PR description
In b2200c8928b240d78f2f24ced39a0d45c928a666, we added a feature to show a warning background in the vendor bills list view if it had duplicated. However, we had to add the field `duplicated_ref_ids` in the xml view so that we could use it in the JS part. However, this field will only be available in JS upon upgrading the `account` module. To avoid this, we now check that `duplicated_ref_ids` is defined before accessing its `count`. opw-none
Sale orders now calculate taxes consistently with invoices when early payment discounts apply under the always-on invoice tax setting. This prevents mismatched totals between sales documents and invoices, improving pricing accuracy for customers and finance teams.
Original PR description
When applying a payment term with an early payment discount, and when said payment term computes the tax on the 'mixed' setting (_"Always (upon invoice)"_), the tax computation is based on the discounted amount untaxed, whether or not the conditions to benefit from the discount are fulfilled. In other words, applying this payment term will always affect the tax. The invoices can display this behavior, while the sale order would not. In this PR we copy the basics of the tax computation from `account` regarding this aspect. task-4491439
This fixes the Guatemala accounting setup so purchase VAT is treated as included in prices, matching the existing sales VAT behavior. It restores consistency with prior Odoo versions and helps Guatemalan businesses calculate VAT correctly on both sales and purchases.
Original PR description
In Guatemala, both sales and purchases VAT are tax_included. Currently, in version 18.0, only sales VAT has the tax_included configured. But it should be both. On previous versions of Odoo, this was correctly configured as can be seen here: https://github.com/odoo/odoo/blob/17.0/addons/l10n_gt/data/template/account.tax-gt.csv?plain=1#L2 Here, the price_include field is True for both. Version 18.0 should have this same behavior. Fixes #201036 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 change prevents Odoo tests from failing when run with tools other than the default Python unittest runner, such as pytest. It improves compatibility for development and quality assurance workflows without changing business features or user-facing behavior.
Original PR description
## Description of the issue/feature this PR addresses: Allow other python test launcher than unittest back (this was introduced by this commit…
## Description of the issue/feature this PR addresses:
Allow other python test launcher than unittest back (this was introduced by this commit https://github.com/odoo/odoo/commit/ccf3c1ed3949f3307909678efe1245aa92ef752f) in odoo 18 only.
`wasSuccessful` function is injected by unitest launcher and not present while using pytest launcher (using pytest-odoo plugin)
## Current behavior before PR:
Tests failed with following error using pytest
```
def run(self, result):
testMethod = getattr(self, self._testMethodName)
if getattr(testMethod, '_retry', True) and getattr(self, '_retry', True):
tests_run_count = self._tests_run_count
else:
tests_run_count = 1
_logger.info('Auto retry disabled for %s', self)
quiet_log = None
for retry in range(tests_run_count):
result.had_failure = False # reset in case of retry without soft_fail
if retry:
_logger.runbot(f'Retrying a failed test: {self}')
if retry < tests_run_count-1:
with warnings.catch_warnings(), \
result.soft_fail(), \
lower_logging(25, logging.INFO) as quiet_log:
super().run(result)
if not (result.had_failure or quiet_log.had_error_log):
break
else: # last try
super().run(result)
> if not result.wasSuccessful() and BaseCase._tests_run_count != 1:
E AttributeError: 'TestCaseFunction' object has no attribute 'wasSuccessful'
.venv/lib/python3.12/site-packages/odoo/tests/common.py:339: AttributeError
```
## Desired behavior after PR is merged:
no errors raised from tests/common.py
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prFixed an issue where subscriptions paid through the portal could receive the wrong deadline when their start date was in the past or future. This prevents duplicated quantities on invoices and removes an unnecessary message about an automated job running later.
Original PR description
## Purpose - When paying from the portal a quotation for a subscription starting in the past, or in the future, the deadline is incorrectly set which leads in a duplication of the quantities when creating the invoice. - Removal of the banner indicating the cron will run as not needed anymore Task: 4571168
This fixes an issue where team-based commission plans could assign the full commission to the last salesperson instead of separating results by plan user. Businesses using sales commissions get more accurate payouts and reporting for team achievements.
Original PR description
Before this commit, when a commission plan was based on achivements of team, the plan user would not be distinguished. As a reusult, the last salesperson would get the totality of the commission. opw-ticket: 4534131
The Chilean electronic factoring module now handles unexpected or incorrectly encoded responses from the tax authority when uploading electronic yielding files. Instead of failing when the response is not valid XML, the system records the response in the document chatter so users are informed and can continue investigating with clearer context.
Original PR description
Before the PR: As could be experienced, the SII sometimes sends responses that are not encoded properly, or instead of responding with an XML, the response is an HTML instead. As a consequence of this, a bug was discovered in the response after uploading an AEC file (stands for electronic yielding file in Spanish). After the PR: We added a special parser method, that before transforming the response to a parsed XML, analyzes the encoding, and concludes in an html parsing and posting it to the chatter to inform the user. This is difficult to debug since the possible undocumented responses are not easy to reproduce in an SII test environment, so we applied this method only to a particular case, found in some situations for some users.
POS users in Ecuador can now validate invoiced POS orders without needing inventory administrator rights. This prevents an access error during order synchronization, helping sales continue smoothly at checkout.
Original PR description
### Steps to reproduce: - install l10n_ec_edi_pos - Create a new POS in the EC Company. - With a use without inventory adminstrator access rights: - Open a pos session, select any product and a…
### Steps to reproduce: - install l10n_ec_edi_pos - Create a new POS in the EC Company. - With a use without inventory adminstrator access rights: - Open a pos session, select any product and a custome linked to the EC localisation. - Try to validate the POS order that is invoiced using the cash payment method. #### > An access error is raised with respect to the `stock_valuation_layer_ids` fields of the account.move model ### Cause of the issue: Clicking on validate will launch a call of the `syncAllOrders` method. During this call, missing records will be fetched recursisvely here: https://github.com/odoo/odoo/blob/2108ad3f7c851eeceb84d7459485a18e1574fa64/addons/point_of_sale/static/src/app/store/pos_store.js#L1271 (Note that this call does not exist prior to 18.0). However, as the data contains a pos order that is related to account moves and since the `account.move` model of the localisation inherit from the `pos.load.mixin`: https://github.com/odoo/enterprise/blob/efa1853cf1f9bbd945a91971ffe40c6906482063/l10n_ec_edi_pos/models/account_move.py#L6-L8 the account move will be fetched as a related record to the pos order and we will launch a `read` for the `fields=[]`: https://github.com/odoo/odoo/blob/2108ad3f7c851eeceb84d7459485a18e1574fa64/addons/point_of_sale/static/src/app/models/data_service.js#L513-L515 https://github.com/odoo/odoo/blob/2108ad3f7c851eeceb84d7459485a18e1574fa64/addons/point_of_sale/models/pos_load_mixin.py#L9-L11 However, a read performed with a false value in the `fields` tries to read the value of each field on the records: https://github.com/odoo/odoo/blob/2108ad3f7c851eeceb84d7459485a18e1574fa64/odoo/models.py#L3792-L3798 This includes protected fields such as the `stock_valuation_layer_ids` that can only be read by user's with administrator stock access rights. opw-4498024
This fixes an intermittent failure in a Web Studio automated tour caused by animations preventing the test from consistently finding the next step. The change helps keep automated checks stable, reducing false alarms during quality validation without changing user-facing behavior.
The Documents app now avoids loading embedded actions for folders a user cannot access. This prevents unnecessary access errors and helps users continue working smoothly when permissions limit folder visibility.
Original PR description
No need to fetch available embedded actions on inaccessible folders. FU of d391313e. Task-4525850
Fixes an issue where clicking a shared Documents link from a project note could show a missing action error instead of opening the document. Shared document links are now left to the normal redirect process, ensuring users reach the correct backend or portal page.
Original PR description
Steps to reproduce ================== - Install documents,project - Go to documents - Open any document - Click on share - Click on "Copy link" - Go to a project task - Click on a log note - Open the full composer - Type some text and select it - Paste the copied url - Post the log note - Click on the link => Missing Action: the action "..." does not exist Cause of the issue ================== Documents [redirects] `/odoo/documents/<access-token>` to either the backend or the portal. There is a global click handler in the router that intercepts click on links to update and push the router state. Solution ======== We should not handle those links, the http redirection will take care of it. --- [redirects]: https://github.com/odoo/enterprise/blob/882e4453c8eadae8e39ea02314377c617d3b9e0f/documents/controllers/home.py#L24 opw-4611260
The trash folder now hides unnecessary action buttons so users only see the Download option when viewing deleted documents. This reduces confusion and keeps available actions aligned with what can actually be done from the trash.
Original PR description
Specs: When documents are in the trash folder, no actions are required except for the Download button, which remains visible. After this commit: Remove action buttons from the control panel in the trash folder. Task-4574919
The Field Service product catalog no longer shows a blank image placeholder when a product has no image. This keeps the catalog consistent with the Sales app and avoids visual clutter, especially in dark mode.
Original PR description
Steps to reproduce: - Turn on dark mode - Open the Field Service app. - Click on "Add Product" to navigate to the product catalog. Issue: - An image placeholder appears when no image is set for a product. This behavior is inconsistent with the product catalog page in the Sales app. Solution: - Removed the XPath that adds the image placeholder in the product catalog. task-4302221
This fixes an unstable automated test in Odoo Studio that could fail even when the product was working correctly. The change helps keep validation results consistent, reducing false alarms during development and release checks.