Usefulness of CodeReuse/ActiveRecord cop

While reviewing !109475 (closed) I raised the idea of discussing usefulness of CodeReuse/ActiveRecord cop we added 4 years ago in gitlab-foss#49653 (closed)

My major gripes with it:

  1. Unclear definitions
  2. It prevents scope reusal
  3. It doesn't check for described offenses
  4. We didn't expand on it
  5. We disable it a lot of times

Unclear definitions

Going back to the original issue:

The idea is very simple: an abstraction can only use abstractions that are exactly one level below it in the hierarchy. This means a Finder (medium level) can not reuse another Finder (medium level), but can use a class method defined on a model (low level).

So if I'm understanding this correctly, this change is not needed since it leverages methods from an abstraction layer directly below it. Further reading seems to confirm this:

This means a Finder (medium level) can not reuse another Finder (medium level), but can use a class method defined on a model (low level).

Then again the same issue says:

Simple methods for finding rows, such as find_by_id or find_by_email. If it takes more than two arguments it's probably a micro level abstraction.

So under this definition #where would be a micro-level abstraction but #find_by_id is a low-level abstraction. #where comes from ActiveRecord::QueryMethods and ActiveRecord::FinderMethods so both are a part of ActiveRecord querying API which... belongs to the micro-level abstractions so Finders should not be able to use them.

On the other hand:

but can use a class method defined on a model (low level).

Both #where and find_by_id are defined on the class method level because they're modules so they are class methods defined on a model. I'm assuming the intent here was that only custom methods defined on the model are considered low-level so this would make sense in that case.

I find this... confusing when read as-is.

It prevents scope reusal

I had the same question and gitlab-foss#49653 (comment 91203233)+ confirms the intent and our current cop does not warn you against doing this as seen in !109475 (comment 1247813907)+

As we use scopes virtually everywhere we'd need to find a way to address this

It doesn't check for described offenses

In !109475 (comment 1247813912) we used a low-level abstraction in a serializer which is a high-level abstraction and the cop doesn't complain and we're actually violating it.

In !109475 (comment 1247813907) we're reusing a micro-level abstraction from a different module and the cop doesn't complain about it.

We didn't expand on it

The discussions too place from July 26th to August 1st and some of the steps suggested never became any guidelines. In particular:

  1. Model validations are moved to separate classes
  2. Model hooks are moved to separate classes
  3. Scopes become class methods, mostly to keep things consistent and easier to grep for
  4. Base classes become modules that you include, making it easier to compose behaviour

We disable it a lot of times

❯ rg 'rubocop: disable CodeReuse/ActiveRecord' --stats --files-with-matches

1093 matches
1093 matched lines
694 files contained matches
58780 files searched
99776 bytes printed
258832543 bytes searched
0.221488 seconds spent searching
0.127977 seconds
List of files
app/finders/deployments_finder.rb
app/finders/notes_finder.rb
app/finders/keys_finder.rb
app/finders/ci/pipeline_schedules_finder.rb
app/finders/ci/daily_build_group_report_results_finder.rb
app/finders/ci/runner_jobs_finder.rb
app/finders/groups/projects_requiring_authorizations_refresh/base.rb
app/finders/labels_finder.rb
app/finders/projects_finder.rb
app/finders/fork_projects_finder.rb
app/finders/concerns/finder_methods.rb
app/finders/concerns/custom_attributes_filter.rb
app/finders/groups_finder.rb
app/finders/projects/groups_finder.rb
app/finders/user_groups_counter.rb
app/finders/group_descendants_finder.rb
app/finders/issuable_finder/params.rb
app/finders/packages/build_infos_finder.rb
app/finders/environments/environments_by_deployments_finder.rb
app/finders/applications_finder.rb
app/finders/user_recent_events_finder.rb
app/finders/projects/members/effective_access_level_per_user_finder.rb
app/finders/projects/members/effective_access_level_finder.rb
app/finders/ci/pipelines_finder.rb
app/finders/resource_milestone_event_finder.rb
app/finders/groups/base.rb
app/finders/releases_finder.rb
app/finders/ci/pipelines_for_merge_request_finder.rb
app/finders/resource_state_event_finder.rb
app/finders/issuable_finder.rb
app/finders/issues_finder.rb
app/finders/merge_requests_finder.rb
app/finders/bulk_imports/entities_finder.rb
app/finders/milestones_finder.rb
app/finders/members_finder.rb
app/finders/clusters/agent_authorizations_finder.rb
app/finders/group_finder.rb
app/finders/autocomplete/users_finder.rb
app/finders/admin/projects_finder.rb
app/finders/admin/plans_finder.rb
app/finders/autocomplete/move_to_project_finder.rb
app/finders/autocomplete/routes_finder.rb
app/finders/autocomplete/acts_as_taggable_on/tags_finder.rb
app/finders/events_finder.rb
app/finders/fork_targets_finder.rb
app/finders/issuables/crm_organization_filter.rb
app/finders/issuables/label_filter.rb
app/finders/issuables/crm_contact_filter.rb
app/finders/releases/group_releases_finder.rb
app/finders/users_finder.rb
app/uploaders/records_uploads.rb
app/graphql/resolvers/groups_resolver.rb
app/policies/application_setting/term_policy.rb
app/graphql/resolvers/ci/runner_owner_project_resolver.rb
app/graphql/resolvers/ci/runner_groups_resolver.rb
app/graphql/resolvers/ci/pipeline_job_artifacts_resolver.rb
app/graphql/resolvers/concerns/looks_ahead.rb
app/graphql/resolvers/concerns/caching_array_resolver.rb
app/policies/project_policy.rb
app/graphql/types/merge_request_connection_type.rb
app/graphql/types/time_tracking/timelog_connection_type.rb
app/graphql/types/board_list_type.rb
app/graphql/types/ci/stage_type.rb
app/graphql/types/countable_connection_type.rb
app/graphql/types/ci/runner_type.rb
app/graphql/types/ci/pipeline_type.rb
app/graphql/types/work_items/widgets/hierarchy_type.rb
app/views/shared/members/_access_request_links.html.haml
app/views/shared/issuable/_assignees.html.haml
app/views/shared/issuable/_reviewers.html.haml
app/views/projects/merge_requests/index.atom.builder
app/views/projects/runners/_runner.html.haml
app/views/projects/issues/index.atom.builder
app/views/issues/_issues_calendar.ics.ruby
app/views/groups/issues.atom.builder
app/graphql/types/packages/package_dependency_link_type.rb
app/views/admin/users/projects.html.haml
app/views/dashboard/issues.atom.builder
app/controllers/groups/autocomplete_sources_controller.rb
app/controllers/profiles_controller.rb
app/controllers/explore/projects_controller.rb
app/controllers/snippets/notes_controller.rb
app/controllers/profiles/notifications_controller.rb
app/presenters/dev_ops_report/metric_presenter.rb
app/controllers/profiles/accounts_controller.rb
app/presenters/project_presenter.rb
app/controllers/passwords_controller.rb
app/presenters/projects/settings/deploy_keys_presenter.rb
app/presenters/projects/import_export/project_export_presenter.rb
app/controllers/users/unsubscribes_controller.rb
app/serializers/group_entity.rb
app/serializers/pipeline_serializer.rb
app/controllers/concerns/group_tree.rb
app/presenters/ci/build_runner_presenter.rb
app/serializers/fork_namespace_entity.rb
app/serializers/ci/dag_pipeline_entity.rb
app/serializers/ci/dag_job_entity.rb
app/controllers/concerns/uploads_actions.rb
app/controllers/concerns/issuable_collections.rb
app/serializers/group_child_entity.rb
app/controllers/concerns/membership_actions.rb
app/controllers/concerns/enforces_two_factor_authentication.rb
app/controllers/concerns/renders_member_access.rb
app/serializers/diffs_entity.rb
app/controllers/concerns/creates_commit.rb
app/controllers/concerns/renders_notes.rb
app/controllers/concerns/authenticates_with_two_factor.rb
app/controllers/import/github_controller.rb
app/controllers/import/manifest_controller.rb
app/serializers/environment_serializer.rb
app/controllers/projects/discussions_controller.rb
app/controllers/projects/milestones_controller.rb
app/controllers/import/base_controller.rb
app/controllers/projects/labels_controller.rb
app/controllers/projects/blob_controller.rb
app/controllers/projects/merge_requests/creations_controller.rb
app/controllers/projects/merge_requests/drafts_controller.rb
app/controllers/projects/compare_controller.rb
app/controllers/projects/merge_requests/diffs_controller.rb
app/controllers/projects/environments_controller.rb
app/controllers/repositories/lfs_storage_controller.rb
app/controllers/registrations_controller.rb
app/controllers/projects/forks_controller.rb
app/controllers/groups/labels_controller.rb
app/controllers/projects/deployments_controller.rb
app/controllers/projects/commits_controller.rb
app/controllers/projects/branches_controller.rb
app/controllers/projects/issue_links_controller.rb
app/controllers/projects/commit_controller.rb
app/controllers/projects/pages_controller.rb
app/controllers/projects/tags_controller.rb
app/controllers/projects/pipelines_controller.rb
app/controllers/projects/issues_controller.rb
app/controllers/projects/settings/repository_controller.rb
app/mailers/repository_check_mailer.rb
app/controllers/projects_controller.rb
app/controllers/groups_controller.rb
app/mailers/emails/issues.rb
app/mailers/emails/profile.rb
app/mailers/emails/members.rb
app/mailers/emails/merge_requests.rb
app/controllers/abuse_reports_controller.rb
app/controllers/admin/impersonation_tokens_controller.rb
app/controllers/admin/projects_controller.rb
app/controllers/admin/broadcast_messages_controller.rb
app/controllers/admin/groups_controller.rb
app/controllers/admin/identities_controller.rb
app/controllers/admin/runners_controller.rb
app/controllers/admin/users_controller.rb
app/controllers/admin/spam_logs_controller.rb
app/controllers/admin/keys_controller.rb
app/controllers/dashboard/projects_controller.rb
app/controllers/admin/dev_ops_report_controller.rb
app/helpers/notes_helper.rb
app/helpers/environment_helper.rb
app/helpers/application_helper.rb
app/services/namespaces/in_product_marketing_emails_service.rb
app/services/boards/base_items_list_service.rb
app/services/issues/build_service.rb
app/services/groups/autocomplete_service.rb
app/services/issues/relative_position_rebalancing_service.rb
app/services/boards/lists/move_service.rb
app/services/merge_requests/create_from_issue_service.rb
app/services/database/consistency_fix_service.rb
app/services/merge_requests/refresh_service.rb
app/helpers/learn_gitlab_helper.rb
app/helpers/visibility_level_helper.rb
app/services/notification_recipients/builder/base.rb
app/services/projects/move_lfs_objects_projects_service.rb
app/services/projects/unlink_fork_service.rb
app/services/projects/container_repository/third_party/delete_tags_service.rb
app/services/projects/disable_deploy_key_service.rb
app/services/projects/move_project_members_service.rb
app/services/projects/transfer_service.rb
app/services/projects/auto_devops/disable_service.rb
app/services/projects/move_project_authorizations_service.rb
app/services/ci/resource_groups/assign_resource_from_resource_group_service.rb
app/services/ci/delete_objects_service.rb
app/services/projects/batch_open_issues_count_service.rb
app/services/projects/detect_repository_languages_service.rb
app/services/projects/batch_forks_count_service.rb
app/helpers/namespaces_helper.rb
app/services/projects/move_forks_service.rb
app/services/ci/delete_unit_tests_service.rb
app/services/ci/expire_pipeline_cache_service.rb
app/services/projects/move_notification_settings_service.rb
app/services/projects/gitlab_projects_import_service.rb
app/services/ci/job_artifacts/destroy_batch_service.rb
app/services/projects/destroy_service.rb
app/helpers/issuables_helper.rb
app/services/projects/in_product_marketing_campaign_emails_service.rb
app/services/packages/create_package_service.rb
app/services/packages/nuget/search_service.rb
app/services/packages/rubygems/metadata_extraction_service.rb
app/services/projects/open_issues_count_service.rb
app/services/packages/cleanup/execute_policy_service.rb
app/services/ci/pipeline_processing/atomic_processing_service/status_collection.rb
app/services/ci/runners/reconcile_existing_runner_versions_service.rb
app/services/projects/move_deploy_keys_projects_service.rb
app/services/branches/delete_merged_service.rb
app/services/ci/reset_skipped_jobs_service.rb
app/services/projects/forks_count_service.rb
app/services/resource_events/synthetic_milestone_notes_builder_service.rb
app/services/resource_events/synthetic_state_notes_builder_service.rb
app/services/resource_events/synthetic_label_notes_builder_service.rb
app/services/snippets/count_service.rb
app/services/ci/retry_job_service.rb
app/helpers/auth_helper.rb
app/services/projects/move_project_group_links_service.rb
app/services/projects/overwrite_project_service.rb
app/services/issuable/export_csv/base_service.rb
app/services/ci/ensure_stage_service.rb
app/services/ci/register_job_service.rb
app/services/design_management/generate_image_versions_service.rb
app/services/loose_foreign_keys/cleaner_service.rb
app/services/ci/stuck_builds/drop_helpers.rb
app/services/ci/stuck_builds/drop_pending_service.rb
app/services/design_management/copy_design_collection/copy_service.rb
app/services/pages/migrate_from_legacy_storage_service.rb
app/services/concerns/issues/resolve_discussions.rb
app/services/users/update_service.rb
app/services/pages/destroy_deployments_service.rb
app/services/search/global_service.rb
app/services/merge_requests/pushed_branches_service.rb
app/services/database/consistency_check_service.rb
app/services/boards/lists/base_destroy_service.rb
app/services/boards/lists/base_create_service.rb
app/services/issues/export_csv_service.rb
app/services/ci/pipeline_creation/cancel_redundant_pipelines_service.rb
app/services/users/respond_to_terms_service.rb
app/services/users/batch_status_cleaner_service.rb
app/services/users/last_push_event_service.rb
app/services/uploads/destroy_service.rb
app/services/users/assigned_issues_count_service.rb
app/services/authorized_project_update/project_recalculate_per_user_service.rb
app/services/authorized_project_update/project_recalculate_service.rb
app/services/search_service.rb
app/services/bulk_update_integration_service.rb
app/services/groups/transfer_service.rb
app/services/merge_requests/reload_diffs_service.rb
app/services/chat_names/find_user_service.rb
app/services/suggestions/outdate_service.rb
app/services/labels/find_or_create_service.rb
app/services/labels/promote_service.rb
app/services/labels/transfer_service.rb
app/services/boards/base_item_move_service.rb
app/services/work_items/parent_links/create_service.rb
app/services/work_items/widgets/hierarchy_service/base_service.rb
app/services/issues/referenced_merge_requests_service.rb
app/services/lfs/lock_file_service.rb
app/services/lfs/locks_finder_service.rb
app/services/merge_requests/remove_approval_service.rb
app/services/topics/merge_service.rb
app/services/groups/destroy_service.rb
app/services/lfs/unlock_file_service.rb
app/services/terraform/remote_state_handler.rb
app/services/bulk_imports/relation_export_service.rb
app/services/issues/set_crm_contacts_service.rb
app/services/issuable_base_service.rb
app/services/lfs/file_transformer.rb
app/services/issuable_links/create_service.rb
app/services/bulk_imports/uploads_export_service.rb
app/services/issues/update_service.rb
app/services/service_ping/submit_service.rb
app/services/bulk_imports/lfs_objects_export_service.rb
app/helpers/users_helper.rb
app/services/clusters/agents/refresh_authorization_service.rb
app/services/merge_requests/base_service.rb
app/helpers/search_helper.rb
app/services/milestones/find_or_create_service.rb
app/services/milestones/promote_service.rb
app/services/milestones/transfer_service.rb
app/services/cohorts_service.rb
app/services/quick_actions/interpret_service.rb
app/services/quick_actions/target_service.rb
app/services/todos/destroy/base_service.rb
app/services/todos/destroy/unauthorized_features_service.rb
app/services/todos/destroy/entity_leave_service.rb
app/services/todos/destroy/group_private_service.rb
app/services/todos/destroy/project_private_service.rb
app/services/todos/destroy/confidential_issue_service.rb
app/workers/update_highest_role_worker.rb
app/workers/bulk_imports/stuck_import_worker.rb
app/workers/remove_expired_members_worker.rb
app/workers/stuck_merge_jobs_worker.rb
app/workers/issues/placement_worker.rb
app/workers/authorized_project_update/user_refresh_over_user_range_worker.rb
app/workers/disallow_two_factor_for_subgroups_worker.rb
app/workers/x509_issuer_crl_check_worker.rb
app/workers/projects/inactive_projects_deletion_cron_worker.rb
app/workers/propagate_integration_project_worker.rb
app/workers/admin_email_worker.rb
app/workers/pipeline_metrics_worker.rb
app/workers/object_storage/migrate_uploads_worker.rb
app/workers/stuck_export_jobs_worker.rb
app/workers/concerns/gitlab/github_import/stage_methods.rb
app/workers/concerns/limited_capacity/job_tracker.rb
app/workers/mail_scheduler/issue_due_worker.rb
app/workers/container_expiration_policies/cleanup_container_repository_worker.rb
app/workers/issue_due_scheduler_worker.rb
app/workers/packages/cleanup/execute_policy_worker.rb
app/workers/propagate_integration_inherit_descendant_worker.rb
app/workers/delete_diff_files_worker.rb
app/workers/propagate_integration_inherit_worker.rb
app/workers/remove_unaccepted_member_invites_worker.rb
app/workers/build_hooks_worker.rb
app/workers/ci/archive_traces_cron_worker.rb
app/workers/repository_check/single_repository_worker.rb
app/workers/repository_check/batch_worker.rb
app/workers/repository_check/clear_worker.rb
app/workers/propagate_integration_group_worker.rb
app/workers/personal_access_tokens/expired_notification_worker.rb
app/workers/personal_access_tokens/expiring_worker.rb
app/validators/nested_attributes_duplicates_validator.rb
app/workers/jira_connect/sync_project_worker.rb
app/workers/ssh_keys/expired_notification_worker.rb
ee/lib/analytics/merge_request_metrics_calculator.rb
ee/lib/analytics/devops_adoption/snapshot_calculator.rb
ee/lib/ee/backup/repositories.rb
ee/app/controllers/projects/path_locks_controller.rb
ee/app/controllers/groups/epics_controller.rb
ee/app/controllers/groups/scim_oauth_controller.rb
ee/app/controllers/projects/approver_groups_controller.rb
ee/app/controllers/groups/todos_controller.rb
ee/app/controllers/groups/ldap_group_links_controller.rb
ee/app/controllers/projects/approvers_controller.rb
ee/app/controllers/projects/quality/test_cases_controller.rb
ee/app/controllers/groups/analytics/productivity_analytics_controller.rb
ee/app/controllers/groups/epics/notes_controller.rb
ee/app/controllers/ee/application_controller.rb
ee/app/controllers/ee/groups/group_members_controller.rb
ee/app/controllers/ee/admin/users_controller.rb
ee/lib/ee/api/helpers.rb
ee/app/controllers/admin/push_rules_controller.rb
ee/lib/ee/api/projects.rb
ee/app/controllers/admin/application_settings/scim_oauth_controller.rb
ee/lib/ee/api/groups.rb
ee/lib/ee/api/internal/base.rb
ee/lib/ee/api/helpers/award_emoji.rb
ee/lib/ee/api/helpers/common_helpers.rb
ee/lib/ee/api/helpers/members_helpers.rb
ee/lib/ee/banzai/filter/references/iteration_reference_filter.rb
ee/lib/ee/api/entities/analytics/code_review/merge_request.rb
ee/lib/ee/banzai/filter/references/epic_reference_filter.rb
ee/lib/ee/banzai/reference_parser/epic_parser.rb
ee/lib/ee/gitlab/usage_data.rb
ee/app/serializers/dashboard_environments_serializer.rb
ee/app/finders/iterations_finder.rb
ee/app/finders/group_saml_identity_finder.rb
ee/app/finders/dast_site_validations_finder.rb
ee/app/finders/status_page/incidents_finder.rb
ee/lib/ee/gitlab/analytics/cycle_analytics/aggregated/base_query_builder.rb
ee/app/finders/ee/group_members_finder.rb
ee/lib/ee/gitlab/analytics/cycle_analytics/base_query_builder.rb
ee/app/finders/ee/issues_finder.rb
ee/app/finders/ee/issuables/label_filter.rb
ee/app/finders/ee/fork_targets_finder.rb
ee/app/finders/status_page/incident_comments_finder.rb
ee/lib/ee/gitlab/import_export/after_export_strategies/custom_template_export_import_strategy.rb
ee/app/finders/concerns/epics/with_access_check.rb
ee/app/finders/concerns/epics/findable.rb
ee/lib/ee/gitlab/auth/ldap/access.rb
ee/app/finders/approval_rules/group_finder.rb
ee/lib/ee/gitlab/auth/ldap/group.rb
ee/lib/ee/gitlab/auth/ldap/sync/proxy.rb
ee/lib/ee/gitlab/auth/ldap/sync/group.rb
ee/lib/ee/gitlab/auth/ldap/sync/groups.rb
ee/lib/ee/gitlab/auth/ldap/sync/users.rb
ee/app/finders/software_license_policies_finder.rb
ee/app/finders/groups_with_templates_finder.rb
ee/lib/ee/gitlab/import_export/project/object_builder.rb
ee/app/finders/geo/repository_verification_finder.rb
ee/app/finders/geo/project_registry_status_finder.rb
ee/app/finders/merge_requests/by_approvers_finder.rb
ee/lib/ee/gitlab/object_hierarchy.rb
ee/app/finders/dast/profiles_finder.rb
ee/app/finders/productivity_analytics_finder.rb
ee/app/finders/epics/with_issues_finder.rb
ee/lib/ee/gitlab/quick_actions/users_extractor.rb
ee/app/graphql/mutations/projects/set_locked.rb
ee/app/graphql/types/boards/epic_list_type.rb
ee/app/graphql/resolvers/requirements_management/requirements_resolver.rb
ee/app/graphql/resolvers/board_groupings/epics_resolver.rb
ee/app/graphql/resolvers/ci/runners_jobs_statistics_resolver.rb
ee/app/graphql/mutations/dast_on_demand_scans/create.rb
ee/lib/api/audit_events.rb
ee/app/graphql/ee/types/issue_connection_type.rb
ee/lib/api/saml_group_links.rb
ee/lib/api/epic_issues.rb
ee/lib/api/helpers/epics_helpers.rb
ee/lib/api/ldap_group_links.rb
ee/lib/api/geo_replication.rb
ee/app/helpers/projects/on_demand_scans_helper.rb
ee/app/helpers/ee/application_helper.rb
ee/app/services/epics/update_service.rb
ee/app/services/epics/transfer_service.rb
ee/app/services/vulnerabilities/manually_create_service.rb
ee/app/services/vulnerabilities/create_service_base.rb
ee/app/services/timebox_report_service.rb
ee/app/services/analytics/cycle_analytics/data_loader_service.rb
ee/app/services/analytics/cycle_analytics/consistency_check_service.rb
ee/app/services/slash_commands/global_slack_handler.rb
ee/app/services/incident_management/escalation_rules/destroy_service.rb
ee/app/services/security/update_training_service.rb
ee/app/services/projects/slack_application_install_service.rb
ee/app/services/protected_environments/search_service.rb
ee/app/services/analytics/devops_adoption/enabled_namespaces/find_or_create_service.rb
ee/app/services/ee/milestones/promote_service.rb
ee/app/services/ee/lfs/unlock_file_service.rb
ee/app/services/ee/search_service.rb
ee/app/services/ee/boards/issues/list_service.rb
ee/app/services/ee/boards/lists/create_service.rb
ee/app/services/ee/labels/promote_service.rb
ee/app/services/ee/search/global_service.rb
ee/app/services/ee/projects/create_from_template_service.rb
ee/app/services/ee/projects/create_service.rb
ee/app/services/ee/resource_events/synthetic_weight_notes_builder_service.rb
ee/app/services/ee/resource_events/synthetic_iteration_notes_builder_service.rb
ee/app/services/ee/users/destroy_service.rb
ee/app/services/ee/merge_requests/refresh_service.rb
ee/app/services/ee/boards/base_service.rb
ee/app/services/ee/quick_actions/target_service.rb
ee/app/services/approval_rules/params_filtering_service.rb
ee/app/services/epic_issues/create_service.rb
ee/app/services/ee/ci/queue/build_queue_service.rb
ee/app/services/ee/groups/autocomplete_service.rb
ee/app/helpers/ee/kerberos_helper.rb
ee/app/services/members/await_service.rb
ee/app/services/members/activate_service.rb
ee/app/services/work_items/widgets/iteration_service/base_service.rb
ee/app/services/billable_members/destroy_service.rb
ee/app/services/ci/minutes/batch_reset_service.rb
ee/app/services/ci/minutes/reset_usage_service.rb
ee/app/services/ci/minutes/refresh_cached_data_service.rb
ee/app/services/ci/runners/stale_group_runners_prune_service.rb
ee/app/services/ci/minutes/additional_packs/create_service.rb
ee/app/services/gitlab_subscriptions/trials/apply_trial_service.rb
ee/app/services/epics/strategies/start_date_inherited_strategy.rb
ee/app/services/epics/strategies/due_date_inherited_strategy.rb
ee/app/services/epics/strategies/base_dates_strategy.rb
ee/app/services/epics/update_dates_service.rb
ee/app/services/geo/container_repository_sync_service.rb
ee/app/services/app_sec/dast/site_profiles/update_service.rb
ee/app/services/geo/wiki_sync_service.rb
ee/app/services/app_sec/dast/site_tokens/find_or_create_service.rb
ee/app/services/geo/repository_sync_service.rb
ee/app/services/geo/repository_verification_secondary_service.rb
ee/app/services/geo/design_repository_sync_service.rb
ee/app/services/app_sec/dast/site_profile_secret_variables/create_or_update_service.rb
ee/app/services/geo/repository_verification_reset.rb
ee/app/services/geo/project_housekeeping_service.rb
ee/app/services/geo/files_expire_service.rb
ee/lib/elastic/latest/project_class_proxy.rb
ee/app/validators/user_existence_validator.rb
ee/lib/elastic/latest/merge_request_class_proxy.rb
ee/lib/elastic/latest/note_class_proxy.rb
ee/lib/elastic/latest/issue_class_proxy.rb
ee/app/workers/ldap_sync_worker.rb
ee/app/workers/adjourned_projects_deletion_cron_worker.rb
ee/app/workers/update_all_mirrors_worker.rb
ee/app/workers/geo/project_sync_worker.rb
ee/app/workers/update_max_seats_used_for_gitlab_com_subscriptions_worker.rb
ee/app/workers/vulnerabilities/statistics/schedule_worker.rb
ee/app/workers/geo/design_repository_shard_sync_worker.rb
ee/app/workers/geo/design_repository_sync_worker.rb
ee/app/workers/geo/repository_shard_sync_worker.rb
ee/app/workers/geo/repository_verification/primary/shard_worker.rb
ee/app/workers/ldap_group_sync_worker.rb
ee/app/workers/analytics/devops_adoption/create_snapshot_worker.rb
ee/app/workers/concerns/elastic/indexing_control.rb
ee/app/workers/ee/repository_check/batch_worker.rb
ee/app/workers/incident_management/oncall_rotations/persist_all_rotations_shifts_job.rb
ee/app/workers/ee/repository_check/single_repository_worker.rb
ee/app/workers/group_saml_group_sync_worker.rb
ee/app/workers/admin_emails_worker.rb
ee/app/workers/set_user_status_based_on_user_cap_setting_worker.rb
ee/app/workers/adjourned_group_deletion_worker.rb
ee/app/workers/elastic/project_transfer_worker.rb
ee/lib/gitlab/middleware/ip_restrictor.rb
ee/lib/gitlab/geo/geo_node_status_check.rb
ee/lib/gitlab/geo/event_gap_tracking.rb
ee/lib/gitlab/path_locks_finder.rb
ee/lib/gitlab/group_plans_preloader.rb
ee/lib/gitlab/search/recent_epics.rb
ee/lib/gitlab/license_scanning/package_licenses.rb
ee/lib/gitlab/contribution_analytics/data_collector.rb
ee/lib/gitlab/auth/group_saml/identity_linker.rb
ee/lib/gitlab/com.rb
ee/lib/gitlab/geo/log_cursor/daemon.rb
ee/lib/gitlab/graphql/loaders/oncall_participant_loader.rb
ee/lib/gitlab/analytics/type_of_work/tasks_by_type.rb
ee/lib/gitlab/analytics/cycle_analytics/distinct_stage_loader.rb
ee/lib/gitlab/usage/metrics/instrumentations/protected_environment_approval_rules_required_approvals_average_metric.rb
ee/lib/gitlab/geo/log_cursor/events/container_repository_updated_event.rb
ee/lib/gitlab/usage/metrics/instrumentations/protected_environments_required_approvals_average_metric.rb
ee/lib/gitlab/usage/metrics/instrumentations/approval_project_rules_with_user_metric.rb
ee/lib/gitlab/usage/metrics/instrumentations/count_distinct_merged_merge_requests_using_approval_rules_metric.rb
ee/lib/gitlab/analytics/cycle_analytics/stage_events/label_based_stage_event.rb
ee/lib/gitlab/analytics/cycle_analytics/summary/base_time.rb
ee/lib/gitlab/usage/metrics/instrumentations/count_ci_builds_metric.rb
ee/lib/gitlab/usage/metrics/instrumentations/count_users_creating_ci_builds_metric.rb
ee/lib/gitlab/analytics/cycle_analytics/data_for_duration_chart.rb
ee/lib/gitlab/geo/log_cursor/events/design_repository_updated_event.rb
ee/lib/gitlab/geo/log_cursor/events/base_event.rb
ee/lib/gitlab/analytics/cycle_analytics/aggregated/data_for_duration_chart.rb
ee/lib/gitlab/geo/log_cursor/event_logs.rb
ee/lib/gitlab/compliance_management/violations/approved_by_committer.rb
ee/lib/gitlab/elastic/indexer.rb
ee/lib/gitlab/insights/finders/issuable_finder.rb
ee/lib/gitlab/insights/executors/dora_executor.rb
app/workers/gitlab/github_import/refresh_import_jid_worker.rb
app/workers/gitlab/import/stuck_import_job.rb
app/workers/create_note_diff_file_worker.rb
app/workers/gitlab/github_import/stage/import_repository_worker.rb
ee/elastic/migrate/20221221110300_backfill_traversal_ids_to_blobs_and_wiki_blobs.rb
ee/spec/requests/api/graphql/mutations/boards/epic_boards/epic_move_list_spec.rb
ee/spec/lib/ee/gitlab/issuable_metadata_spec.rb
ee/spec/helpers/ee/releases_helper_spec.rb
lib/gitlab/utils/usage_data.rb
lib/gitlab/object_hierarchy.rb
lib/gitlab/github_import/label_finder.rb
lib/gitlab/github_import/importer/releases_importer.rb
lib/gitlab/github_import/importer/single_endpoint_merge_request_notes_importer.rb
lib/gitlab/github_import/importer/repository_importer.rb
lib/gitlab/github_import/importer/labels_importer.rb
lib/gitlab/application_rate_limiter/base_strategy.rb
lib/gitlab/github_import/importer/single_endpoint_issue_events_importer.rb
lib/gitlab/github_import/importer/single_endpoint_issue_notes_importer.rb
lib/gitlab/monitor/demo_projects.rb
lib/gitlab/issues/rebalancing/state.rb
lib/gitlab/checks/diff_check.rb
lib/gitlab/composer/cache.rb
lib/gitlab/checks/matching_merge_request.rb
lib/gitlab/dependency_linker/go_mod_linker.rb
lib/gitlab/dependency_linker/go_sum_linker.rb
lib/gitlab/github_import/importer/single_endpoint_diff_notes_importer.rb
lib/gitlab/github_import/importer/milestones_importer.rb
lib/gitlab/bitbucket_server_import/importer.rb
lib/gitlab/bitbucket_import/importer.rb
lib/gitlab/github_import/user_finder.rb
lib/gitlab/data_builder/pipeline.rb
lib/gitlab/fogbugz_import/importer.rb
lib/gitlab/config/entry/configurable.rb
lib/gitlab/pagination/offset_pagination.rb
lib/gitlab/pagination/keyset/paginator.rb
lib/gitlab/pagination/keyset/iterator.rb
lib/gitlab/pagination/keyset/pager.rb
lib/gitlab/pagination/keyset/in_operator_optimization/query_builder.rb
lib/gitlab/application_context.rb
lib/gitlab/instrumentation/redis_cluster_validator.rb
lib/gitlab/ci/charts.rb
lib/gitlab/ci/queue/metrics.rb
lib/gitlab/ci/config/entry/root.rb
lib/gitlab/identifier.rb
lib/gitlab/gpg/invalid_gpg_signature_updater.rb
lib/gitlab/metrics/dashboard/validator/post_schema_validator.rb
lib/gitlab/import/merge_request_helpers.rb
lib/gitlab/background_migration/update_jira_tracker_data_deployment_type_based_on_url.rb
lib/gitlab/git/patches/collection.rb
lib/gitlab/analytics/cycle_analytics/base_query_builder.rb
lib/gitlab/analytics/cycle_analytics/records_fetcher.rb
lib/gitlab/analytics/cycle_analytics/stage_events/metrics_based_stage_event.rb
lib/gitlab/analytics/cycle_analytics/stage_events/plan_stage_start.rb
lib/gitlab/analytics/cycle_analytics/stage_events/stage_event.rb
lib/gitlab/analytics/cycle_analytics/stage_events/merge_request_first_deployed_to_production.rb
lib/gitlab/faraday/error_callback.rb
lib/gitlab/hashed_storage/migrator.rb
lib/gitlab/seeders/ci/runner/runner_fleet_pipeline_seeder.rb
lib/gitlab/hashed_storage/rake_helper.rb
lib/gitlab/slash_commands/base_command.rb
lib/gitlab/snippet_search_results.rb
lib/gitlab/slash_commands/presenters/run.rb
lib/gitlab/background_migration/migrate_personal_namespace_project_maintainer_to_owner.rb
lib/gitlab/slash_commands/deploy.rb
lib/gitlab/slash_commands/issue_search.rb
lib/gitlab/lets_encrypt/client.rb
lib/gitlab/email/handler/create_note_on_issuable_handler.rb
lib/gitlab/email/handler/create_merge_request_handler.rb
lib/gitlab/email/handler/create_issue_handler.rb
lib/gitlab/background_migration/drop_invalid_vulnerabilities.rb
lib/gitlab/analytics/cycle_analytics/stage_events/issue_stage_end.rb
lib/gitlab/analytics/cycle_analytics/stage_events/code_stage_start.rb
lib/gitlab/analytics/cycle_analytics/average.rb
lib/gitlab/analytics/cycle_analytics/stage_events/issue_deployed_to_production.rb
lib/gitlab/analytics/cycle_analytics/median.rb
lib/gitlab/analytics/cycle_analytics/stage_query_helpers.rb
lib/gitlab/usage/metrics/name_suggestion.rb
lib/gitlab/analytics/cycle_analytics/sorting.rb
lib/gitlab/usage/metrics/query.rb
lib/gitlab/analytics/cycle_analytics/aggregated/records_fetcher.rb
lib/gitlab/analytics/cycle_analytics/aggregated/base_query_builder.rb
lib/gitlab/analytics/cycle_analytics/aggregated/median.rb
lib/gitlab/profiler.rb
lib/gitlab/otp_key_rotator.rb
lib/gitlab/prometheus/queries/environment_query.rb
lib/gitlab/prometheus/queries/additional_metrics_deployment_query.rb
lib/gitlab/prometheus/queries/additional_metrics_environment_query.rb
lib/gitlab/usage/metrics/instrumentations/count_imported_projects_metric.rb
lib/gitlab/prometheus/queries/deployment_query.rb
lib/gitlab/sanitizers/exif.rb
lib/gitlab/search_results.rb
lib/gitlab/search/recent_items.rb
lib/gitlab/auth/o_auth/user.rb
lib/gitlab/metrics/dashboard/importers/prometheus_metrics.rb
lib/gitlab/auth/omniauth_identity_linker_base.rb
lib/gitlab/performance_bar.rb
lib/gitlab/database/consistency_checker.rb
lib/gitlab/contributions_calendar.rb
lib/gitlab/graphql/pagination/keyset/connection.rb
lib/gitlab/graphql/loaders/batch_commit_loader.rb
lib/gitlab/ci/trace/chunked_io.rb
lib/gitlab/ci/status/composite.rb
lib/gitlab/graphql/loaders/batch_model_loader.rb
lib/gitlab/ci/reports/test_suite.rb
lib/gitlab/ci/reports/test_suite_summary.rb
lib/gitlab/ci/reports/test_reports_comparer.rb
lib/gitlab/ci/build/artifacts/metadata/entry.rb
lib/gitlab/ci/reports/test_suite_comparer.rb
lib/gitlab/ci/reports/test_report.rb
lib/gitlab/ci/reports/accessibility_reports.rb
lib/gitlab/ci/badge/pipeline/status.rb
lib/gitlab/ci/config/normalizer/matrix_strategy.rb
lib/gitlab/usage_data_queries.rb
lib/gitlab/ci/lint.rb
lib/gitlab/ci/pipeline/duration.rb
lib/gitlab/usage_data.rb
lib/gitlab/database.rb
lib/gitlab/verify/uploads.rb
lib/gitlab/pagination/keyset/order.rb
lib/gitlab/relative_positioning/item_context.rb
lib/gitlab/github_import/milestone_finder.rb
lib/gitlab/project_search_results.rb
lib/feature.rb
lib/gitlab/quick_actions/issue_actions.rb
lib/atlassian/jira_connect/serializers/build_entity.rb
lib/gitlab/diff/pair_selector.rb
lib/gitlab/diff/file.rb
lib/gitlab/diff/file_collection/merge_request_diff_batch.rb
lib/container_registry/tag.rb
lib/container_registry/path.rb
lib/gitlab/cleanup/personal_access_tokens.rb
lib/gitlab/health_checks/redis/redis_abstract_check.rb
lib/gitlab/cleanup/project_uploads.rb
lib/gitlab/cleanup/remote_uploads.rb
lib/event_filter.rb
lib/csv_builders/stream.rb
lib/api/project_snippets.rb
lib/api/commit_statuses.rb
lib/api/helpers.rb
lib/api/discussions.rb
lib/api/issue_links.rb
lib/api/issues.rb
lib/api/v3/github.rb
lib/api/helpers/award_emoji.rb
lib/api/custom_attributes_endpoints.rb
lib/api/access_requests.rb
lib/api/helpers/variables_helpers.rb
lib/api/helpers/users_helpers.rb
lib/api/helpers/custom_attributes.rb
lib/api/members.rb
lib/api/pages_domains.rb
lib/api/entities/project.rb
lib/api/notes.rb
lib/api/branches.rb
lib/api/users.rb
lib/api/deploy_keys.rb
lib/api/groups.rb
lib/api/merge_requests.rb
lib/api/snippet_repository_storage_moves.rb
lib/api/projects.rb
lib/api/ci/jobs.rb
lib/api/ci/pipeline_schedules.rb
lib/api/ci/variables.rb
lib/api/ci/runners.rb
lib/api/ci/triggers.rb
lib/api/helpers/members_helpers.rb
lib/api/protected_tags.rb
lib/api/protected_branches.rb
lib/api/entities/project_with_access.rb
lib/api/entities/issuable_time_stats.rb
lib/api/entities/tag.rb
lib/api/entities/ci/runner_details.rb
lib/api/entities/basic_project_details.rb
lib/bulk_imports/groups/transformers/group_attributes_transformer.rb
lib/bulk_imports/common/pipelines/lfs_objects_pipeline.rb
lib/bulk_imports/common/transformers/user_reference_transformer.rb
lib/bulk_imports/common/pipelines/entity_finisher.rb
lib/gitlab/legacy_github_import/base_formatter.rb
lib/gitlab/legacy_github_import/user_formatter.rb
lib/gitlab/gitlab_import/importer.rb
lib/gitlab/legacy_github_import/issuable_formatter.rb
lib/gitlab/legacy_github_import/importer.rb
lib/csv_builder.rb
spec/helpers/releases_helper_spec.rb

So we disable it over 1000 times already 🤔

My proposal

My proposal:

  1. Evaluate the definitions and see if we can make them work
  2. Evaluate the steps suggested in gitlab-foss#49653 (comment 90610308) and see if that's the way we want to proceed
  3. Improve the cop or introduce more cops to handle the guidelines proposed

Alternatively:

  1. Remove the cop altogether
Edited by 🤖 GitLab Bot 🤖