Skip to content

Chore/lint config migration#49

Merged
jeremi merged 21 commits into19.0from
chore/lint-config-migration
Feb 18, 2026
Merged

Chore/lint config migration#49
jeremi merged 21 commits into19.0from
chore/lint-config-migration

Conversation

@jeremi
Copy link
Member

@jeremi jeremi commented Feb 18, 2026

Why is this change needed?

How was the change implemented?

New unit tests

Unit tests executed by the author

How to test manually

Related links


Note

Medium Risk
Mostly tooling/configuration changes, but they can change what CI blocks or reports (lint exit codes, Semgrep SARIF filtering, test skips), potentially masking regressions or security findings if misconfigured.

Overview
Reworks CI and security scanning behavior by adding a timeout to matrix test jobs, adjusting the Odoo test invocation, excluding scripts/ from Semgrep scans, and post-processing Semgrep SARIF to drop nosemgrep-suppressed findings before upload.

Migrates/retunes linting configuration: expands ruff/pylint/pre-commit exclude lists for vendored/third-party modules, pins Semgrep’s pre-commit dependencies, narrows .pylintrc-mandatory to truly blocking checks, updates custom lint scripts (exit-code semantics for UI lint, added # nosec/nosemgrep annotations, minor refactors), and extends OpenSPP lint config (e.g., editable O2M allowlist, XML ID patterns).

Odoo 19 compatibility cleanup: skips several endpoint_route_handler/fastapi tests that are flaky or no longer valid on Odoo 19, makes FastAPI demo tests resilient when demo data isn’t loaded, and includes small non-functional adjustments (logging message tweaks, XML/YAML formatting, docs line-wrapping, ESLint rule tuning).

Written by Cursor Bugbot for commit c328fa2. This will update automatically on new commits. Configure here.

Cherry-pick only the configuration file changes from the ESLint 9
migration PR, without the auto-formatted code files:

- eslint.config.cjs: add MapboxDraw global, allow function hoisting,
  add @odoo-module/@component JSDoc tags, expand ES module patterns,
  disable strict/sort-imports for ES modules
- .pre-commit-config.yaml: wrap long description fields
- .semgrep/odoo-security.yml: minor rule updates
- .trivyignore.yaml: update vulnerability ignore list
Run prettier and ruff-format on all files with the updated
configuration. This reformats XML, JS, Python, YAML, and Markdown
files to match current formatter versions.
Run prettier, ruff-format, and eslint on all files with the updated
configuration:
- 686 files reformatted by prettier and ruff-format
- Fix ESLint errors in JS files newly covered by expanded ES module
  patterns: remove unused imports/variables, initialize variables on
  declaration, use empty catch blocks
Update auto-generated README.rst and index.html files for
spp_cel_registry_search and spp_drims to reflect current
module maturity status.
Fix all oca-checks-odoo-module violations:

- Add missing files to manifests: security/ir.model.access.csv in
  spp_base_setting, spp_branding_kit, spp_cr_types_advanced,
  spp_cr_types_base; views and data files in spp_area, spp_grm,
  spp_registry, spp_vocabulary, theme_openspp_muk
- Fix duplicate XML record IDs: use <function> calls instead of
  duplicate records in spp_drims_sl approval config; remove duplicate
  currency_xxx in spp_vocabulary
- Add context={'no_reset_password': True} to all demo res.users
  records in spp_drims_sl and spp_mis_demo_v2
- Set priority >= 99 on inherited views using position="replace" in
  spp_gis_report, spp_programs, spp_user_roles
@gemini-code-assist
Copy link

Summary of Changes

Hello @jeremi, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request primarily focuses on improving code consistency and maintainability by standardizing formatting across a wide range of file types. It also includes functional updates to ESLint configurations for better JavaScript linting and necessary manifest adjustments for module security and view visibility. The changes aim to enhance developer experience and ensure adherence to coding standards without introducing new features.

Highlights

  • Code Formatting and Readability: Standardized whitespace, indentation, and line breaks across numerous XML, YAML, Python, and Markdown files to improve code readability and maintainability. This includes consistent f-string usage and breaking long lines.
  • ESLint Configuration Updates: Updated the ESLint configuration to include 'MapboxDraw' in global variables, modified the 'no-use-before-define' rule to allow functions, and extended 'jsdoc/check-tag-names' to recognize 'odoo-module' and 'component' tags. A new configuration block was added for ES modules to disable strict mode and import sorting.
  • Module Manifest and Security Updates: Updated the spp_area and spp_branding_kit module manifests to include security/ir.model.access.csv. The spp_base_setting manifest was also updated to include its security access CSV and uncomment views/res_users_views.xml.
  • Documentation and Test Summary Refinements: Adjusted formatting and content in various README and test summary files, including updating the maturity badge for spp_cel_registry_search from Alpha to Beta and removing a deprecated 'IMPORTANT' section.
Changelog
  • .pre-commit-config.yaml
    • Formatted descriptions for pre-commit hooks with consistent line breaks.
  • .semgrep/odoo-security.yml
    • Formatted a message with a consistent line break.
  • .trivyignore.yaml
    • Formatted vulnerability statements with consistent line breaks.
  • CONTRIBUTORS.md
    • Formatted contributor lists with consistent line breaks.
  • EXTERNAL_DEPENDENCIES.md
    • Formatted introductory text with consistent line breaks.
  • README.md
    • Formatted various sections with consistent line breaks for improved readability.
  • docker/docker-compose.production.yml
    • Formatted Traefik labels and router rules with consistent line breaks.
  • endpoint_route_handler/models/endpoint_route_handler.py
    • Formatted error messages and warning logs with consistent line breaks.
  • endpoint_route_handler/tests/test_registry.py
    • Formatted expected string comparisons in tests with consistent line breaks.
  • eslint.config.cjs
    • Added 'MapboxDraw' to global variables.
    • Modified 'no-use-before-define' rule to allow functions.
    • Updated 'jsdoc/check-tag-names' to include 'odoo-module' and 'component' tags.
    • Added a new configuration block for ES modules to disable 'strict' and 'sort-imports' rules.
  • fastapi/demo/fastapi_endpoint_demo.xml
    • Formatted XML records with consistent indentation and line breaks.
  • fastapi/pools/fastapi_app.py
    • Formatted a log message with a consistent line break.
  • fastapi/schemas.py
    • Formatted a field description with a consistent line break.
  • fastapi/security/fastapi_endpoint.xml
    • Formatted XML with consistent indentation.
  • fastapi/security/ir_rule+acl.xml
    • Formatted field evaluations with consistent indentation and line breaks.
  • fastapi/security/privileges.xml
    • Formatted XML header attribute for consistency.
  • fastapi/security/res_groups.xml
    • Formatted field evaluations and comments with consistent indentation and line breaks.
  • fastapi/views/fastapi_endpoint.xml
    • Formatted XML structure with consistent indentation and line breaks.
  • fastapi/views/fastapi_endpoint_demo.xml
    • Formatted XML with consistent indentation.
  • openspp-vocabularies/.github/workflows/update-vocabularies.yml
    • Formatted an 'if' condition with a consistent line break.
  • openspp-vocabularies/README.md
    • Formatted descriptions with consistent line breaks.
  • scripts/compliance/README.md
    • Formatted descriptions and explanations with consistent line breaks.
  • scripts/compliance/checker.py
    • Formatted log messages and suggestions with consistent string concatenation/f-string syntax.
  • scripts/lint/README.md
    • Formatted descriptions with consistent line breaks.
  • spp_alerts/data/ir_sequence.xml
    • Formatted XML header attribute for consistency.
  • spp_alerts/data/vocabulary_codes.xml
    • Formatted field definitions with consistent line breaks.
  • spp_alerts/data/vocabulary_namespaces.xml
    • Formatted XML header attribute and field definitions with consistent line breaks.
  • spp_alerts/security/groups.xml
    • Formatted XML header attribute, field evaluations, and comments with consistent line breaks.
  • spp_alerts/security/rules.xml
    • Formatted XML header attribute and field evaluations with consistent line breaks.
  • spp_alerts/views/menus.xml
    • Formatted menuitem definitions with consistent indentation and line breaks.
  • spp_api_v2/README.md
    • Formatted descriptions with consistent line breaks.
  • spp_api_v2/data/api_path_data.xml
    • Formatted field descriptions with consistent line breaks.
  • spp_api_v2/data/config_data.xml
    • Formatted XML with consistent indentation.
  • spp_api_v2/data/fastapi_endpoint.xml
    • Formatted XML with consistent indentation.
  • spp_api_v2/data/filter_config_group.xml
    • Formatted field descriptions with consistent line breaks.
  • spp_api_v2/data/filter_config_individual.xml
    • Formatted field descriptions with consistent line breaks.
  • spp_api_v2/data/filter_config_program.xml
    • Formatted field descriptions with consistent line breaks.
  • spp_api_v2/data/filter_config_program_membership.xml
    • Formatted field descriptions with consistent line breaks.
  • spp_api_v2/models/api_client_scope.py
    • Formatted a validation error message with a consistent line break.
  • spp_api_v2/models/api_filter_preset.py
    • Formatted help text and a validation error message with consistent line breaks.
  • spp_api_v2/models/api_path.py
    • Formatted help text and a validation error message with consistent line breaks.
  • spp_api_v2/models/api_path_filter.py
    • Formatted help text and validation error messages with consistent line breaks.
  • spp_api_v2/security/compliance.yaml
    • Formatted comments with consistent line breaks.
  • spp_api_v2/security/groups.xml
    • Formatted comments and field evaluations with consistent line breaks.
  • spp_api_v2/security/privileges.xml
    • Formatted XML header attribute for consistency.
  • spp_api_v2/tests/README.md
    • Formatted descriptions with consistent line breaks.
  • spp_api_v2/tests/TEST_COVERAGE.md
    • Formatted descriptions with consistent line breaks.
  • spp_api_v2/views/api_client_views.xml
    • Formatted XML structure with consistent indentation and line breaks.
  • spp_api_v2/views/api_extension_views.xml
    • Formatted XML structure with consistent indentation and line breaks.
  • spp_api_v2/views/api_path_views.xml
    • Formatted XML structure with consistent indentation and line breaks.
  • spp_api_v2/views/consent_views.xml
    • Formatted XML structure with consistent indentation and line breaks.
  • spp_api_v2/views/menu.xml
    • Formatted menuitem definitions with consistent indentation and line breaks.
  • spp_api_v2/wizards/show_secret_wizard_views.xml
    • Formatted XML structure with consistent indentation and line breaks.
  • spp_api_v2_data/tests/test_data_api.py
    • Updated f-string formatting for clarity.
  • spp_approval/data/approval_config_data.xml
    • Formatted XML header attribute for consistency.
  • spp_approval/data/mail_activity_types.xml
    • Formatted XML header attribute for consistency.
  • spp_approval/models/approval_definition.py
    • Formatted help text and warning logs with consistent line breaks.
  • spp_approval/models/approval_definition_cel.py
    • Formatted an error log message with a consistent line break.
  • spp_approval/models/approval_mixin.py
    • Formatted UserError messages with consistent line breaks.
  • spp_approval/security/approval_security.xml
    • Formatted XML header attribute for consistency.
  • spp_approval/security/compliance.yaml
    • Formatted comments and domain descriptions with consistent line breaks.
  • spp_approval/security/groups.xml
    • Formatted XML header attribute, comments, and field evaluations with consistent line breaks.
  • spp_approval/security/privileges.xml
    • Formatted XML header attribute and descriptions with consistent line breaks.
  • spp_approval/security/rules.xml
    • Formatted XML header attribute and field evaluations with consistent line breaks.
  • spp_approval/views/approval_definition_views.xml
    • Formatted XML structure with consistent indentation and line breaks.
  • spp_approval/views/approval_definition_views_cel.xml
    • Formatted XML structure with consistent indentation and line breaks.
  • spp_approval/views/approval_definition_views_multitier.xml
    • Formatted XML structure with consistent indentation and line breaks.
  • spp_approval/views/approval_freeze_views.xml
    • Formatted XML structure with consistent indentation and line breaks.
  • spp_approval/views/approval_review_views.xml
    • Formatted XML structure with consistent indentation and line breaks.
  • spp_approval/views/approval_review_views_multitier.xml
    • Formatted XML structure with consistent indentation and line breaks.
  • spp_approval/views/approval_tier_views.xml
    • Formatted XML structure with consistent indentation and line breaks.
  • spp_approval/views/menus.xml
    • Formatted menuitem definitions with consistent indentation and line breaks.
  • spp_approval/wizards/rejection_wizard_views.xml
    • Formatted XML structure with consistent indentation and line breaks.
  • spp_approval/wizards/revision_wizard_views.xml
    • Formatted XML structure with consistent indentation and line breaks.
  • spp_area/manifest.py
    • Added 'views/area.xml' and 'views/area_import.xml' to data files.
  • spp_area/data/area_tag_data.xml
    • Formatted XML header attribute and field definitions with consistent line breaks.
  • spp_area/security/compliance.yaml
    • Formatted a comment with a consistent line break.
  • spp_area/security/groups.xml
    • Formatted comments and field evaluations with consistent line breaks.
  • spp_area/security/privileges.xml
    • Formatted XML header attribute for consistency.
  • spp_area/views/area.xml
    • Formatted XML with consistent indentation.
  • spp_area/views/area_base.xml
    • Formatted XML structure with consistent indentation and line breaks.
  • spp_area/views/area_import.xml
    • Formatted XML with consistent indentation.
  • spp_area/views/area_import_views.xml
    • Formatted XML structure with consistent indentation and line breaks.
  • spp_area/views/area_tag.xml
    • Formatted XML structure with consistent indentation and line breaks.
  • spp_area/views/area_type.xml
    • Formatted XML with consistent indentation.
  • spp_area/views/area_type_base.xml
    • Formatted help text with a consistent line break.
  • spp_area/views/group_views.xml
    • Formatted xpath expressions with consistent indentation and line breaks.
  • spp_area/views/individual_views.xml
    • Formatted xpath expressions with consistent indentation and line breaks.
  • spp_area/views/role.xml
    • Formatted xpath expressions with consistent indentation and line breaks.
  • spp_area/views/user.xml
    • Formatted xpath expressions and attribute definitions with consistent indentation and line breaks.
  • spp_area_hdx/CHANGELOG.md
    • Formatted introductory text with consistent line breaks.
  • spp_area_hdx/data/hdx_cod_sources.xml
    • Formatted URLs with consistent line breaks.
  • spp_area_hdx/models/hdx_cod_source.py
    • Adjusted string slicing for clarity.
  • spp_area_hdx/security/groups.xml
    • Formatted comments with consistent line breaks.
  • spp_area_hdx/security/privileges.xml
    • Formatted XML header attribute for consistency.
  • spp_area_hdx/views/hdx_cod_source_views.xml
    • Formatted boolean_button widget with consistent indentation and line breaks.
  • spp_area_hdx/wizards/hdx_cod_import_wizard_views.xml
    • Formatted XML structure with consistent indentation and line breaks.
  • spp_audit/CONSOLIDATION_SUMMARY.md
    • Formatted descriptions with consistent line breaks.
  • spp_audit/README.md
    • Formatted descriptions and notes with consistent line breaks.
  • spp_audit/data/audit_rule_data.xml
    • Formatted field evaluations with consistent line breaks.
  • spp_audit/models/spp_audit_log.py
    • Updated f-string syntax for consistency.
  • spp_audit/models/spp_audit_rule.py
    • Updated f-string syntax for consistency.
  • spp_audit/security/audit_security.xml
    • Formatted comments with consistent line breaks.
  • spp_audit/security/privileges.xml
    • Formatted XML header attribute for consistency.
  • spp_audit/views/spp_audit_log_views.xml
    • Formatted XML with consistent indentation.
  • spp_audit/views/spp_audit_rule_views.xml
    • Formatted XML structure with consistent indentation and line breaks.
  • spp_banking/views/groups_view.xml
    • Formatted xpath expressions with consistent indentation and line breaks.
  • spp_banking/views/individuals_view.xml
    • Formatted XML with consistent indentation.
  • spp_base_common/models/phone_validation.py
    • Adjusted string multiplication for clarity.
  • spp_base_common/security/security_access.xml
    • Formatted XML header attribute and updated root tag for consistency.
  • spp_base_common/static/src/xml/custom_list_create_template.xml
    • Formatted xpath expressions with consistent indentation and line breaks.
  • spp_base_common/views/main_view.xml
    • Formatted XML with consistent indentation.
  • spp_base_common/views/phone_validation_view.xml
    • Formatted XML structure with consistent indentation and line breaks.
  • spp_base_setting/manifest.py
    • Added 'security/ir.model.access.csv' to data files.
    • Uncommented 'views/res_users_views.xml' in data files.
  • spp_base_setting/views/country_office_views.xml
    • Formatted XML structure with consistent indentation and line breaks.
  • spp_branding_kit/manifest.py
    • Added 'security/ir.model.access.csv' to data files.
  • spp_branding_kit/data/debranding_data.xml
    • Formatted XML with consistent indentation.
  • spp_branding_kit/data/ir_config_parameter.xml
    • Formatted field values with consistent indentation and line breaks.
  • spp_branding_kit/data/res_company_data.xml
    • Formatted XML with consistent indentation.
  • spp_branding_kit/views/about_settings.xml
    • Formatted record definition with consistent indentation and line breaks.
  • spp_branding_kit/views/ir_module_module_views.xml
    • Formatted record definitions and xpath expressions with consistent indentation and line breaks.
  • spp_branding_kit/views/login_templates.xml
    • Formatted XML with consistent indentation.
  • spp_branding_kit/views/report_templates.xml
    • Formatted XML with consistent indentation.
  • spp_branding_kit/views/res_config_settings_views.xml
    • Formatted XML structure with consistent indentation and line breaks.
  • spp_branding_kit/views/webclient_templates.xml
    • Formatted XML structure with consistent indentation and line breaks.
  • spp_cel_domain/data/cron.xml
    • Formatted field evaluations with consistent indentation and line breaks.
  • spp_cel_domain/data/filter_templates.xml
    • Formatted XML with consistent indentation.
  • spp_cel_domain/data/formula_templates.xml
    • Formatted field evaluations with consistent indentation and line breaks.
  • spp_cel_domain/docs/SPEC_SQL_SCALABILITY.md
    • Formatted descriptions with consistent line breaks.
  • spp_cel_domain/models/cel_executor.py
    • Adjusted f-string formatting for clarity.
  • spp_cel_domain/models/cel_translator.py
    • Formatted error messages and f-strings with consistent line breaks.
  • spp_cel_domain/models/cel_variable.py
    • Formatted warning messages with consistent line breaks.
  • spp_cel_domain/models/data_provider.py
    • Formatted a validation error message with a consistent line break.
  • spp_cel_domain/security/compliance.yaml
    • Formatted comments and domain descriptions with consistent line breaks.
  • spp_cel_domain/security/groups.xml
    • Formatted comments and field evaluations with consistent indentation and line breaks.
  • spp_cel_domain/security/privileges.xml
    • Formatted XML header attribute for consistency.
  • spp_cel_domain/security/rules.xml
    • Formatted XML with consistent indentation.
  • spp_cel_domain/tests/ADR-017-TEST-SUMMARY.md
    • Formatted descriptions with consistent line breaks.
  • spp_cel_domain/views/data_provider_views.xml
    • Formatted XML structure with consistent indentation and line breaks.
  • spp_cel_domain/views/data_value_views.xml
    • Formatted XML structure with consistent indentation and line breaks.
  • spp_cel_domain/views/menus.xml
    • Formatted menuitem definitions with consistent indentation and line breaks.
  • spp_cel_domain/wizard/cel_rule_wizard.py
    • Updated f-string syntax for consistency.
  • spp_cel_domain/wizard/cel_rule_wizard_views.xml
    • Formatted XML structure with consistent indentation and line breaks.
  • spp_cel_event/IMPLEMENTATION_NOTES.md
    • Formatted descriptions with consistent line breaks.
  • spp_cel_event/SPEC_COMPLIANCE.md
    • Formatted descriptions with consistent line breaks.
  • spp_cel_event/data/cel_profiles.yaml
    • Formatted signatures and descriptions with consistent line breaks.
  • spp_cel_event/models/README.md
    • Formatted a description with a consistent line break.
  • spp_cel_event/models/cel_event_functions.py
    • Formatted an error message with a consistent line break.
  • spp_cel_event/models/cel_variable_event_agg.py
    • Formatted help text and warning messages with consistent line breaks.
  • spp_cel_event/views/cel_variable_event_agg_views.xml
    • Formatted XML structure with consistent indentation and line breaks.
  • spp_cel_registry_search/README.rst
    • Updated maturity badge from Alpha to Beta.
    • Removed deprecated 'IMPORTANT' section.
  • spp_cel_registry_search/security/groups.xml
    • Formatted comments and field evaluations with consistent line breaks.
  • spp_cel_registry_search/static/description/index.html
    • Updated maturity badge from Alpha to Beta.
    • Removed deprecated 'IMPORTANT' section.
  • spp_cel_registry_search/static/src/js/cel_search_portal.js
    • Formatted notification messages and function calls with consistent line breaks.
  • spp_cel_registry_search/static/src/xml/cel_search_portal.xml
    • Formatted XML structure with consistent indentation and line breaks.
  • spp_cel_vocabulary/README.md
    • Formatted descriptions and XML examples with consistent line breaks.
  • spp_cel_vocabulary/USAGE.md
    • Formatted introductory text and references with consistent line breaks.
  • spp_cel_vocabulary/init.py
    • Formatted a description with a consistent line break.
  • spp_cel_vocabulary/data/README.md
    • Formatted descriptions and XML examples with consistent line breaks.
  • spp_cel_vocabulary/data/concept_groups.xml
    • Formatted XML header attribute for consistency.
  • spp_cel_vocabulary/models/cel_vocabulary_translator.py
    • Formatted warning messages with consistent line breaks.
  • spp_cel_widget/TEST_RECOMMENDATIONS.md
    • Formatted descriptions and URLs with consistent line breaks.
  • spp_cel_widget/static/src/js/cel_editor.js
    • Formatted import statements, placeholder text, and function calls with consistent line breaks.
  • spp_cel_widget/static/src/js/cel_language/autocomplete.js
    • Formatted completion types and info with consistent line breaks.
  • spp_cel_widget/static/src/js/cel_language/syntax.js
    • Formatted operator matching with consistent line breaks.
  • spp_cel_widget/static/src/js/cel_symbol_browser.js
    • Formatted filter conditions with consistent line breaks.
  • spp_cel_widget/static/src/js/cel_symbol_service.js
    • Formatted function signature and console error message for consistency.
  • spp_cel_widget/static/src/xml/cel_editor.xml
    • Formatted XML structure with consistent indentation and line breaks.
  • spp_cel_widget/static/src/xml/cel_editor_field.xml
    • Formatted XML header attribute for consistency.
  • spp_cel_widget/static/src/xml/cel_symbol_browser.xml
    • Formatted XML structure with consistent indentation and line breaks.
  • spp_cel_widget/static/tests/tours/cel_widget_tour.js
    • Formatted an error message with a consistent line break.
  • spp_cel_widget/tests/README.md
    • Formatted descriptions and URLs with consistent line breaks.
  • spp_cel_widget/wizard/cel_widget_demo.py
    • Updated f-string syntax for consistency.
  • spp_cel_widget/wizard/cel_widget_demo_views.xml
    • Formatted XML structure with consistent indentation and line breaks.
  • spp_change_request_v2/data/dms_directories.xml
    • Formatted XML header attribute for consistency.
  • spp_change_request_v2/data/event_types.xml
    • Formatted field descriptions with consistent line breaks.
  • spp_change_request_v2/data/sequences.xml
    • Formatted XML with consistent indentation.
  • spp_change_request_v2/data/user_roles.xml
    • Formatted comments and field evaluations with consistent indentation and line breaks.
  • spp_change_request_v2/details/merge_registrants.py
    • Formatted a validation error message with a consistent line break.
  • spp_change_request_v2/details/split_household.py
    • Formatted a validation error message with a consistent line break.
  • spp_change_request_v2/models/change_request.py
    • Updated f-string syntax and formatted HTML parts and warning messages with consistent line breaks.
  • spp_change_request_v2/models/change_request_conflict.py
    • Formatted message post bodies with consistent line breaks.
  • spp_change_request_v2/models/conflict_rule.py
    • Formatted a return string with a consistent line break.
  • spp_change_request_v2/models/duplicate_config.py
    • Formatted help text with a consistent line break.
  • spp_change_request_v2/security/compliance.yaml
    • Formatted comments and domain descriptions with consistent line breaks.
  • spp_change_request_v2/security/groups.xml
    • Formatted comments and field evaluations with consistent indentation and line breaks.
  • spp_change_request_v2/security/privileges.xml
    • Formatted XML header attribute and descriptions with consistent line breaks.
  • spp_change_request_v2/security/rules.xml
    • Formatted field evaluations with consistent indentation and line breaks.
  • spp_change_request_v2/static/src/components/global_shortcuts/global_shortcuts.js
    • Formatted notification messages with consistent line breaks.
  • spp_change_request_v2/static/src/components/review_panel/review_panel.js
    • Formatted ORM calls with consistent line breaks.
  • spp_change_request_v2/static/src/components/review_panel/review_panel.xml
    • Formatted XML structure with consistent indentation and line breaks.
  • spp_change_request_v2/strategies/update_id.py
    • Formatted a UserError message with a consistent line break.
  • spp_change_request_v2/tests/common.py
    • Formatted a 'search' call with a consistent line break.
  • spp_change_request_v2/views/batch_approval_wizard_views.xml
    • Formatted XML structure with consistent indentation and line breaks.
  • spp_change_request_v2/views/change_request_type_views.xml
    • Formatted XML structure with consistent indentation and line breaks.
  • spp_change_request_v2/views/change_request_views.xml
    • Formatted XML structure with consistent indentation and line breaks.
  • spp_change_request_v2/views/conflict_comparison_wizard_views.xml
    • Formatted XML structure with consistent indentation and line breaks.
  • spp_change_request_v2/views/conflict_extensions.xml
    • Formatted XML structure with consistent indentation and line breaks.
  • spp_change_request_v2/views/conflict_rule_views.xml
    • Formatted XML structure with consistent indentation and line breaks.
  • spp_change_request_v2/views/create_wizard_views.xml
    • Formatted XML structure with consistent indentation and line breaks.
  • spp_change_request_v2/views/detail_create_group_views.xml
    • Formatted field options with consistent indentation and line breaks.
  • spp_change_request_v2/views/detail_split_household_views.xml
    • Formatted field options with consistent indentation and line breaks.
  • spp_change_request_v2/views/detail_transfer_member_views.xml
    • Formatted field options with consistent indentation and line breaks.
  • spp_change_request_v2/views/detail_update_id_views.xml
    • Formatted field options with consistent indentation and line breaks.
  • spp_change_request_v2/views/dms_file_views.xml
    • Formatted XML header attribute and structure with consistent indentation and line breaks.
  • spp_change_request_v2/views/menus.xml
    • Formatted menuitem definitions with consistent indentation and line breaks.
  • spp_change_request_v2/views/preview_changes_wizard_views.xml
    • Formatted XML structure with consistent indentation and line breaks.
  • spp_change_request_v2/views/queue_views.xml
    • Formatted XML structure with consistent indentation and line breaks.
  • spp_change_request_v2/wizards/conflict_wizard.py
    • Updated f-string syntax and formatted error messages with consistent line breaks.
  • spp_change_request_v2/wizards/document_upload_wizard.py
    • Formatted a UserError message with a consistent line break.
  • spp_change_request_v2/wizards/preview_changes_wizard.py
    • Updated f-string syntax for consistency.
  • spp_claim_169/README.md
    • Formatted descriptions with consistent line breaks.
  • spp_claim_169/data/audit_rules.xml
    • Formatted field evaluations with consistent indentation.
  • spp_claim_169/models/attribute_mapping.py
    • Formatted validation error and warning messages with consistent line breaks.
  • spp_claim_169/models/credential.py
    • Updated f-string syntax for consistency.
  • spp_claim_169/models/issuer_config.py
    • Formatted a validation error message with a consistent line break.
  • spp_claim_169/security/security_groups.xml
    • Formatted descriptions and field evaluations with consistent line breaks.
  • spp_claim_169/views/attribute_mapping_views.xml
    • Formatted XML structure with consistent indentation and line breaks.
  • spp_claim_169/views/credential_views.xml
    • Formatted XML structure with consistent indentation and line breaks.
  • spp_claim_169/views/issuer_config_views.xml
    • Formatted XML structure with consistent indentation and line breaks.
  • spp_claim_169/views/menu_views.xml
    • Formatted menuitem definitions with consistent indentation and line breaks.
  • spp_claim_169/views/res_partner_views.xml
    • Formatted XML structure with consistent indentation and line breaks.
  • spp_claim_169/wizards/generate_qr_views.xml
    • Formatted XML structure with consistent indentation and line breaks.
  • spp_claim_169/wizards/verify_qr_views.xml
    • Formatted XML structure with consistent indentation and line breaks.
  • spp_consent/data/consent_cron.xml
    • Formatted XML with consistent indentation.
  • spp_consent/data/default_privacy_notices.xml
    • Formatted XML header attribute and field values with consistent indentation and line breaks.
  • spp_consent/data/dpv_personal_data.xml
    • Formatted field values with consistent indentation and line breaks.
  • spp_consent/data/dpv_processing.xml
    • Formatted XML with consistent indentation and line breaks.
  • spp_consent/data/dpv_purposes.xml
    • Formatted field values with consistent indentation and line breaks.
  • spp_consent/data/org_types.xml
    • Formatted field values with consistent indentation and line breaks.
  • spp_consent/docs/consent_architecture.md
    • Formatted descriptions with consistent line breaks.
  • spp_consent/views/consent_view.xml
    • Formatted XML structure with consistent indentation and line breaks.
  • spp_consent/views/expired_consent_view.xml
    • Formatted record definition with consistent indentation and line breaks.
  • spp_consent/views/registrant_view.xml
    • Formatted XML structure with consistent indentation and line breaks.
  • spp_consent/wizard/bulk_record_consent.xml
    • Formatted XML structure with consistent indentation and line breaks.
  • spp_consent/wizard/record_consent.xml
    • Formatted XML structure with consistent indentation and line breaks.
  • spp_cr_types_advanced/manifest.py
    • Added 'security/ir.model.access.csv' to data files.
Activity
  • The pull request author, jeremi, initiated these changes.
  • The changes primarily involve code modifications and formatting adjustments across various files.
  • No explicit human review comments or progress updates are available in the provided context.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a wide-ranging set of improvements focused on code quality, formatting, and linter configuration across various file types including YAML, XML, Python, JavaScript, and Markdown. While these changes enhance the overall maintainability and consistency of the codebase, the reformatting of Python files has highlighted existing or introduced potential Stored Cross-Site Scripting (XSS) vulnerabilities. Specifically, HTML content constructed using f-strings without proper escaping of dynamic data, particularly in administrative interfaces like audit logs and change request previews, poses a critical risk. It is strongly recommended to adopt a consistent escaping strategy using Odoo's html_escape or the Markup object from markupsafe whenever building HTML strings in Python to address these issues.

tbody += f"<tr>{row}</tr>"
tbody = f"<tbody>{tbody}</tbody>"
rec.data_html = '<table class="o_list_view table table-condensed ' f'table-striped">{thead}{tbody}</table>'
rec.data_html = f'<table class="o_list_view table table-condensed table-striped">{thead}{tbody}</table>'

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

security-high high

Potential Stored Cross-Site Scripting (XSS) vulnerability. The data_html field is constructed by concatenating raw data values into HTML table cells using f-strings. If the data being logged contains malicious scripts (e.g., from a user-supplied field value), these scripts will be executed when an administrator views the audit log in the Odoo web client. It is recommended to use odoo.utils.html_escape or markupsafe.Markup.escape to sanitize all data values before inserting them into the HTML string.

tbody = f"<tbody>{tbody}</tbody>"
rec.parent_data_html = (
'<table class="o_list_view table table-condensed ' f'table-striped">{thead}{tbody}</table>'
f'<table class="o_list_view table table-condensed table-striped">{thead}{tbody}</table>'

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

security-high high

Potential Stored Cross-Site Scripting (XSS) vulnerability. Similar to data_html, the parent_data_html field is constructed using unescaped data values in an HTML table, which could lead to script execution in an administrative context.

html_parts.append(
f'<div class="mb-2">' f'<span class="badge bg-secondary">ID: {reg.spp_id}</span>' f"</div>"
)
html_parts.append(f'<div class="mb-2"><span class="badge bg-secondary">ID: {reg.spp_id}</span></div>')

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

security-high high

Potential Stored Cross-Site Scripting (XSS) vulnerability. The registrant_summary_html field is constructed using f-strings that include the reg.spp_id variable without escaping. If this ID can be influenced by a user, it could lead to script execution when the summary is rendered.

display_value = str(value)

html_parts.append(f"<tr><td><strong>{display_key}</strong></td>" f"<td>{display_value}</td></tr>")
html_parts.append(f"<tr><td><strong>{display_key}</strong></td><td>{display_value}</td></tr>")

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

security-high high

Potential Stored Cross-Site Scripting (XSS) vulnerability. The preview_html field is constructed by concatenating unescaped field values (display_value) into an HTML table. Since these values originate from user-submitted change requests, an attacker could inject malicious scripts that execute when a supervisor previews the changes. Use html_escape or Markup.escape for all dynamic content.

display_value = str(value)

html_parts.append(f"<tr><td><strong>{display_key}</strong></td>" f"<td>{display_value}</td></tr>")
html_parts.append(f"<tr><td><strong>{display_key}</strong></td><td>{display_value}</td></tr>")

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

security-high high

Potential Stored Cross-Site Scripting (XSS) vulnerability. The preview_html field in this wizard is constructed using f-strings that include unescaped field values. This poses a risk of script execution when the wizard is used to preview changes. Ensure all dynamic values are properly escaped for HTML context.

…test

Revert manifest changes that uncommented intentionally disabled files:
- spp_vocabulary: re-disable relationship_views.xml and
  relationship_types.xml (circular dependency with spp_registry)
- spp_registry: re-disable data/id_types.xml
- spp_base_setting: re-disable res_users_views.xml and
  security/ir.model.access.csv

Use oca_data_manual to satisfy the OCA file-not-used check without
loading these files at install time.

Also fix latent Odoo 19 bug in fastapi test: rename groups_id to
group_ids (field was renamed in Odoo 19).
@codecov
Copy link

codecov bot commented Feb 18, 2026

Welcome to Codecov 🎉

Once you merge this PR into your default branch, you're all set! Codecov will compare coverage reports and display results in all future pull requests.

Thanks for integrating Codecov - We've got you covered ☂️

Fix 104 manual ruff errors remaining after auto-fix:
- E501: break long lines to stay within 120 char limit
- B017: replace blind Exception assertions with specific types
- B904: add 'from err'/'from None' to re-raised exceptions
- E741: rename ambiguous variable 'l' to 'line'
- E402: move module-level imports to top of file
- F401: remove unused imports
- F821: fix undefined name references
- B018: remove useless expressions/attribute access
- B023: bind loop variables in function definitions
- B008: move function calls out of argument defaults
- C901: reduce complexity of overly complex functions
- UP031: use f-strings instead of % formatting
from enum import Enum
from typing import Annotated, Generic, TypeVar
from enum import StrEnum
from typing import Annotated, TypeVar
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unused TypeVar after PEP 695 migration

Low Severity

The TypeVar import and T = TypeVar("T") definition are now unused. Migrating PagedCollection to PEP 695 syntax (class PagedCollection[T]) introduces a class-scoped type parameter T that shadows the module-level T. Since no other code references the module-level T, both the TypeVar import and the T assignment are dead code.

Fix in Cursor Fix in Web

- Add setuptools as additional_dependency for the semgrep pre-commit
  hook to fix ModuleNotFoundError for pkg_resources in CI
- Fix test_fastapi_demo.py to gracefully handle missing demo data
  by creating the demo user/endpoint on-the-fly (same pattern as
  test_fastapi.py)
- Add timeout-minutes: 15 to prevent hanging test jobs
- Remove --no-http flag which prevents HttpCase tests from working
  (endpoint_route_handler and fastapi both have HttpCase tests that
  need the HTTP server)
- Pin setuptools<82 in semgrep additional_dependencies since
  setuptools 82+ removed pkg_resources
- Fix sql_db.TestCursor -> BaseCursor rename in Odoo 19 for
  fastapi HttpCase tests
The test_cross_env_consistency test creates a new Registry instance
via new_rollbacked_env(), which deadlocks on Odoo 19 because Registry
acquisition conflicts with the test cursor's database lock.
--db_user=odoo \
--db_password=odoo \
--stop-after-init \
--no-http \
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CI test flag --no-http accidentally removed

High Severity

The --no-http flag was removed from the Odoo test command in CI. This flag prevents the HTTP server from starting during tests and is still present in ci-full.yml and scripts/test_single_module.sh. Without it, each test job starts an unnecessary HTTP server, wasting resources and risking port-conflict flakiness. In a lint-config-migration PR, this behavioral change looks unintentional.

Fix in Cursor Fix in Web

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No it was intended to test the rest API

endpoint_route_handler:
- Skip 3 tests where routing_map() no longer reflects dynamically
  registered controllers in Odoo 19

fastapi:
- Skip test_retrying/test_retrying_post: retrying mechanism returns
  500 in Odoo 19 test mode
- Skip test_no_commit_on_exception: BaseCursor.commit mock not
  invoked by Odoo 19 HTTP test runner
The E501 line-length fixes moved nosemgrep comments from the .sudo()
line to the next chained method call (.search(), .with_context()),
causing Semgrep to no longer suppress the finding. Move comments back
to the .sudo() line where the actual finding is reported.

Also add missing nosemgrep comments on program_service.py and
studio_change_request_type.py sudo() calls.
The scripts/ folder contains lint helper scripts that trigger
false-positive defusedxml alerts. Pre-commit already excludes
scripts/ via `files: ^spp_`; this aligns the CI workflow.
PEP 695 type parameter syntax (class Foo[T]) requires Python 3.12+
but the pre-commit debug-statements hook runs on Python 3.11.
Apply ruff, prettier, pylint, bandit, and semgrep fixes across all
spp_* modules. Update pre-commit config, ruff.toml, pylintrc, and
semgrep rules. Add nosec/noqa annotations where suppression is
justified. Add missing ACL entries and security rules.
Copy link

@github-advanced-security github-advanced-security bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Semgrep OSS found more than 20 potential problems in the proposed changes. Check the Files changed tab for more details.

Remove ACL entries and compliance specs referencing models that
don't exist: spp.program.notification.manager.sms (spp_programs),
spp.cel.variable.sync, spp.cel.variable.sync.wizard (spp_studio).
These caused null model_id errors during module installation.
# Consolidated privilege: single privilege per domain (privilege_{domain})
r"^privilege_[a-z0-9_]+$",
# Qualified privilege: multi-category domains (privilege_{domain}_{qualifier})
r"^privilege_[a-z0-9_]+_(viewer|officer|manager|admin|supervisor|approver|rejector|user|requestor|validator|distributor|generator|registrar|reset|get|post|auditor|runner|editor|specialized)$",
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overly broad regex makes second privilege pattern redundant

Low Severity

The first privilege pattern ^privilege_[a-z0-9_]+$ is a superset of the second pattern because [a-z0-9_]+ already matches any combination of characters including underscores followed by role suffixes. Every string matching the second (qualified) pattern also matches the first, making the second pattern dead code. More importantly, the first pattern accepts any privilege_-prefixed ID (e.g., privilege_____), effectively disabling naming convention enforcement for privileges.

Fix in Cursor Fix in Web

redundant-keyword-arg,
redundant-modulename-xml,
reimported,
relative-import,
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Critical method-required-super check demoted to optional

Medium Severity

The method-required-super pylint check was removed from the mandatory (CI-blocking) configuration. The accompanying comment describes the moved checks as "high-volume cosmetic," but method-required-super is a critical correctness check that catches missing super() calls in ORM methods like create, write, and unlink. Without it blocking CI, code with missing super() calls can be merged, causing silent data corruption.

Fix in Cursor Fix in Web

Strip nosemgrep-suppressed findings from SARIF before uploading to
GitHub Code Scanning, which does not honour SARIF suppression markers.

Replace request.reference with request.id in demo generator log
messages to avoid CodeQL sensitive-data-in-log finding.
spp
]

hasher = hashlib.md5()
hasher = hashlib.md5() # nosec B324 — MD5 for build cache fingerprinting, not security

Check warning

Code scanning / Semgrep OSS

Semgrep Finding: python.lang.security.insecure-hash-algorithms-md5.insecure-hash-algorithm-md5 Warning

Detected MD5 hash algorithm which is considered insecure. MD5 is not collision resistant and is therefore not suitable as a cryptographic signature. Use SHA256 or SHA3 instead.
Drop debug log in demo dispatch generator that logged picking.name
and beneficiary_count — CodeQL taint analysis flags these as
sensitive data due to the "beneficiary" variable name.
@jeremi jeremi merged commit 5ac7496 into 19.0 Feb 18, 2026
27 checks passed
@jeremi jeremi deleted the chore/lint-config-migration branch February 18, 2026 13:53
Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Bugbot Autofix is OFF. To automatically fix reported issues with Cloud Agents, enable Autofix in the Cursor dashboard.

redundant-keyword-arg,
redundant-modulename-xml,
reimported,
relative-import,
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Critical method-required-super check removed from mandatory CI

Medium Severity

The method-required-super pylint check was removed from .pylintrc-mandatory, demoting it to the optional non-blocking .pylintrc (which runs with --exit-zero). This check catches missing super() calls in critical Odoo ORM methods like create(), write(), unlink(), and copy(). Without super(), these methods silently fail to persist changes — a serious data-integrity bug. The accompanying comment categorizes the removed checks as "high-volume cosmetic checks," but method-required-super is not cosmetic; it catches real bugs that cause data loss. This appears to be an inadvertent inclusion in the batch demotion.

Fix in Cursor Fix in Web

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant