Broken master: ee/spec/models/concerns/elastic/project_spec.rb fails

https://gitlab.com/gitlab-org/gitlab/-/jobs/3570345900 is failing:

Failures:
  1) Project when projects and snippets co-exist when searching with a wildcard only returns projects
     Failure/Error: expect(response.total_count).to eq(1)
       expected: 1
            got: 18
       (compared using ==)
     # ./ee/spec/models/concerns/elastic/project_spec.rb:157:in `block (4 levels) in <top (required)>'
     # ./spec/spec_helper.rb:415:in `block (3 levels) in <top (required)>'
     # ./spec/support/sidekiq_middleware.rb:18:in `with_sidekiq_server_middleware'
     # ./spec/spec_helper.rb:407:in `block (2 levels) in <top (required)>'
     # ./spec/spec_helper.rb:403:in `block (3 levels) in <top (required)>'
     # ./lib/gitlab/application_context.rb:59:in `with_raw_context'
     # ./spec/spec_helper.rb:403:in `block (2 levels) in <top (required)>'
     # ./spec/spec_helper.rb:239:in `block (2 levels) in <top (required)>'
     # ./spec/support/sidekiq.rb:21:in `block (3 levels) in <top (required)>'
     # ./spec/support/sidekiq.rb:8:in `gitlab_sidekiq_inline'
     # ./spec/support/sidekiq.rb:21:in `block (2 levels) in <top (required)>'
     # ./spec/support/system_exit_detected.rb:7:in `block (2 levels) in <top (required)>'
     # ./spec/support/redis.rb:17:in `block (3 levels) in <top (required)>'
     # ./spec/support/redis.rb:17:in `block (3 levels) in <top (required)>'
     # ./spec/support/flaky_tests.rb:27:in `block (2 levels) in <top (required)>'
     # ./spec/support/database/prevent_cross_joins.rb:106:in `block (3 levels) in <top (required)>'
     # ./spec/support/database/prevent_cross_joins.rb:60:in `with_cross_joins_prevented'
     # ./spec/support/database/prevent_cross_joins.rb:106:in `block (2 levels) in <top (required)>'
     # ./ee/spec/support/elastic.rb:87:in `block (2 levels) in <top (required)>'
Finished in 1 minute 19.22 seconds (files took 1 minute 6.54 seconds to load)
102 examples, 1 failure
Failed examples:
rspec ./ee/spec/models/concerns/elastic/project_spec.rb:153 # Project when projects and snippets co-exist when searching with a wildcard only returns projects

Note that I'm using Ruby 3.0.5, but I don't think it's a Ruby version issue. Here's some investigation:

diff --git a/.tool-versions b/.tool-versions
index 0442b347209d..ecddbdfeadce 100644
--- a/.tool-versions
+++ b/.tool-versions
@@ -2,6 +2,6 @@ minio 2022-07-15T03-44-22Z
 nodejs 16.15.0
 postgres 12.13 13.9
 redis 6.2.7
-ruby 2.7.7
+ruby 3.0.5
 rust 1.65.0
 yarn 1.22.19
diff --git a/ee/spec/models/concerns/elastic/project_spec.rb b/ee/spec/models/concerns/elastic/project_spec.rb
index 3579099f8769..2bca475eec5a 100644
--- a/ee/spec/models/concerns/elastic/project_spec.rb
+++ b/ee/spec/models/concerns/elastic/project_spec.rb
@@ -154,6 +154,8 @@
         ensure_elasticsearch_index!
         response = described_class.elastic_search('*')
 
+        byebug
+
         expect(response.total_count).to eq(1)
         expect(response.results.first['_source']['type']).to eq(Project.es_type)
       end

Working output

(byebug) pp response.results.records
[#<Elasticsearch::Model::Response::Result:0x000000011fd9b2f8
  @result=
   {"_index"=>"gitlab-test-20230109-0557",
    "_id"=>"project_25",
    "_score"=>1.0,
    "_source"=>
     {"id"=>25,
      "name"=>"project1",
      "path"=>"project1",
      "description"=>nil,
      "namespace_id"=>61,
      "created_at"=>"2023-01-09T05:56:37.222Z",
      "updated_at"=>"2023-01-09T05:56:37.222Z",
      "archived"=>false,
      "visibility_level"=>0,
      "last_activity_at"=>"2023-01-09T05:56:37.222Z",
      "name_with_namespace"=>"Sidney Jones2 / project1",
      "path_with_namespace"=>"namespace1/project1",
      "join_field"=>"project",
      "type"=>"project",
      "issues_access_level"=>20,
      "merge_requests_access_level"=>20,
      "snippets_access_level"=>20,
      "wiki_access_level"=>20,
      "repository_access_level"=>20},

Not working output

(byebug) pp response.results.records
[#<Elasticsearch::Model::Response::Result:0x0000000153c6cb28
  @result=
   {"_index"=>"gitlab-test-20230109-0606",
    "_id"=>"project_30",
    "_score"=>1.0,
    "_source"=>
     {"id"=>30,
      "name"=>"test3",
      "path"=>"test3",
      "description"=>nil,
      "namespace_id"=>72,
      "created_at"=>"2023-01-09T06:05:46.126Z",
      "updated_at"=>"2023-01-09T06:05:46.126Z",
      "archived"=>false,
      "visibility_level"=>0,
      "last_activity_at"=>"2023-01-09T06:05:46.126Z",
      "name_with_namespace"=>"Sidney Jones6 / test3",
      "path_with_namespace"=>"namespace5/test3",
      "join_field"=>"project",
      "type"=>"project",
      "issues_access_level"=>20,
      "merge_requests_access_level"=>20,
      "snippets_access_level"=>20,
      "wiki_access_level"=>20,
      "repository_access_level"=>20},
    "matched_queries"=>["doc:is_a:project", "project:match:search_terms"]}>,
 #<Elasticsearch::Model::Response::Result:0x0000000153c5ef50
  @result=
   {"_index"=>"gitlab-test-20230109-0606",
    "_id"=>"project_33",
    "_score"=>1.0,
    "_source"=>
     {"id"=>33,
      "name"=>"tesla_model_s",
      "path"=>"tesla_model_s",
      "description"=>nil,
      "namespace_id"=>78,
      "created_at"=>"2023-01-09T06:05:47.902Z",
      "updated_at"=>"2023-01-09T06:05:47.902Z",
      "archived"=>false,
      "visibility_level"=>0,
      "last_activity_at"=>"2023-01-09T06:05:47.902Z",
      "name_with_namespace"=>"Sidney Jones9 / tesla_model_s",
      "path_with_namespace"=>"namespace8/tesla_model_s",
      "join_field"=>"project",
      "type"=>"project",
      "issues_access_level"=>20,
      "merge_requests_access_level"=>20,
      "snippets_access_level"=>20,
      "wiki_access_level"=>20,
      "repository_access_level"=>20},
    "matched_queries"=>["doc:is_a:project", "project:match:search_terms"]}>,
 #<Elasticsearch::Model::Response::Result:0x0000000153c5dce0
  @result=
   {"_index"=>"gitlab-test-20230109-0606",
    "_id"=>"project_45",
    "_score"=>1.0,
    "_source"=>
     {"id"=>45,
      "name"=>"project3",
      "path"=>"project3",
      "description"=>"foo",
      "namespace_id"=>88,
      "created_at"=>"2023-01-09T06:05:54.020Z",
      "updated_at"=>"2023-01-09T06:05:54.020Z",
      "archived"=>false,
      "visibility_level"=>0,
      "last_activity_at"=>"2023-01-09T06:05:54.020Z",
      "name_with_namespace"=>"group1 / project3",
      "path_with_namespace"=>"group1/project3",
      "join_field"=>"project",
      "type"=>"project",
      "issues_access_level"=>20,
      "merge_requests_access_level"=>20,
      "snippets_access_level"=>20,
      "wiki_access_level"=>20,
      "repository_access_level"=>20},
    "matched_queries"=>["doc:is_a:project", "project:match:search_terms"]}>,
 #<Elasticsearch::Model::Response::Result:0x0000000153c5cb10
  @result=
   {"_index"=>"gitlab-test-20230109-0606",
    "_id"=>"project_46",
    "_score"=>1.0,
    "_source"=>
     {"id"=>46,
      "name"=>"project1",
      "path"=>"project1",
      "description"=>"test foo",
      "namespace_id"=>88,
      "created_at"=>"2023-01-09T06:05:55.004Z",
      "updated_at"=>"2023-01-09T06:05:55.004Z",
      "archived"=>false,
      "visibility_level"=>0,
      "last_activity_at"=>"2023-01-09T06:05:55.004Z",
      "name_with_namespace"=>"group1 / project1",
      "path_with_namespace"=>"group1/project1",
      "join_field"=>"project",
      "type"=>"project",
      "issues_access_level"=>20,
      "merge_requests_access_level"=>20,
      "snippets_access_level"=>20,
      "wiki_access_level"=>20,
      "repository_access_level"=>20},
    "matched_queries"=>["doc:is_a:project", "project:match:search_terms"]}>,
 #<Elasticsearch::Model::Response::Result:0x0000000153c6b5e8
  @result=
   {"_index"=>"gitlab-test-20230109-0606",
    "_id"=>"project_27",
    "_score"=>1.0,
    "_source"=>
     {"id"=>27,
      "name"=>"project1",
      "path"=>"test2",
      "description"=>"awesome project",
      "namespace_id"=>66,
      "created_at"=>"2023-01-09T06:05:44.861Z",
      "updated_at"=>"2023-01-09T06:05:44.861Z",
      "archived"=>false,
      "visibility_level"=>0,
      "last_activity_at"=>"2023-01-09T06:05:44.861Z",
      "name_with_namespace"=>"Sidney Jones3 / project1",
      "path_with_namespace"=>"namespace2/test2",
      "join_field"=>"project",
      "type"=>"project",
      "issues_access_level"=>20,
      "merge_requests_access_level"=>20,
      "snippets_access_level"=>20,
      "wiki_access_level"=>20,
      "repository_access_level"=>20},
    "matched_queries"=>["doc:is_a:project", "project:match:search_terms"]}>,
 #<Elasticsearch::Model::Response::Result:0x0000000153c6a2d8
  @result=
   {"_index"=>"gitlab-test-20230109-0606",
    "_id"=>"project_32",
    "_score"=>1.0,
    "_source"=>
     {"id"=>32,
      "name"=>"tesla-model-s",
      "path"=>"tesla-model-s",
      "description"=>nil,
      "namespace_id"=>76,
      "created_at"=>"2023-01-09T06:05:47.529Z",
      "updated_at"=>"2023-01-09T06:05:47.529Z",
      "archived"=>false,
      "visibility_level"=>0,
      "last_activity_at"=>"2023-01-09T06:05:47.529Z",
      "name_with_namespace"=>"Sidney Jones8 / tesla-model-s",
      "path_with_namespace"=>"namespace7/tesla-model-s",
      "join_field"=>"project",
      "type"=>"project",
      "issues_access_level"=>20,
      "merge_requests_access_level"=>20,
      "snippets_access_level"=>20,
      "wiki_access_level"=>20,
      "repository_access_level"=>20},
    "matched_queries"=>["doc:is_a:project", "project:match:search_terms"]}>,
 #<Elasticsearch::Model::Response::Result:0x0000000153c68ff0
  @result=
   {"_index"=>"gitlab-test-20230109-0606",
    "_id"=>"project_43",
    "_score"=>1.0,
    "_source"=>
     {"id"=>43,
      "name"=>"project1",
      "path"=>"project1",
      "description"=>"test foo",
      "namespace_id"=>88,
      "created_at"=>"2023-01-09T06:05:53.183Z",
      "updated_at"=>"2023-01-09T06:05:53.183Z",
      "archived"=>false,
      "visibility_level"=>0,
      "last_activity_at"=>"2023-01-09T06:05:53.183Z",
      "name_with_namespace"=>"group1 / project1",
      "path_with_namespace"=>"group1/project1",
      "join_field"=>"project",
      "type"=>"project",
      "issues_access_level"=>20,
      "merge_requests_access_level"=>20,
      "snippets_access_level"=>20,
      "wiki_access_level"=>20,
      "repository_access_level"=>20},
    "matched_queries"=>["doc:is_a:project", "project:match:search_terms"]}>,
 #<Elasticsearch::Model::Response::Result:0x00000001206e7bb8
  @result=
   {"_index"=>"gitlab-test-20230109-0606",
    "_id"=>"project_48",
    "_score"=>1.0,
    "_source"=>
     {"id"=>48,
      "name"=>"project3",
      "path"=>"project3",
      "description"=>"foo",
      "namespace_id"=>88,
      "created_at"=>"2023-01-09T06:05:55.689Z",
      "updated_at"=>"2023-01-09T06:05:55.689Z",
      "archived"=>false,
      "visibility_level"=>0,
      "last_activity_at"=>"2023-01-09T06:05:55.689Z",
      "name_with_namespace"=>"group1 / project3",
      "path_with_namespace"=>"group1/project3",
      "join_field"=>"project",
      "type"=>"project",
      "issues_access_level"=>20,
      "merge_requests_access_level"=>20,
      "snippets_access_level"=>20,
      "wiki_access_level"=>20,
      "repository_access_level"=>20},
    "matched_queries"=>["doc:is_a:project", "project:match:search_terms"]}>,
 #<Elasticsearch::Model::Response::Result:0x00000001206e6858
  @result=
   {"_index"=>"gitlab-test-20230109-0606",
    "_id"=>"project_47",
    "_score"=>1.0,
    "_source"=>
     {"id"=>47,
      "name"=>"project2",
      "path"=>"project2",
      "description"=>"test",
      "namespace_id"=>88,
      "created_at"=>"2023-01-09T06:05:55.369Z",
      "updated_at"=>"2023-01-09T06:05:55.369Z",
      "archived"=>false,
      "visibility_level"=>0,
      "last_activity_at"=>"2023-01-09T06:05:55.369Z",
      "name_with_namespace"=>"group1 / project2",
      "path_with_namespace"=>"group1/project2",
      "join_field"=>"project",
      "type"=>"project",
      "issues_access_level"=>20,
      "merge_requests_access_level"=>20,
      "snippets_access_level"=>20,
      "wiki_access_level"=>20,
      "repository_access_level"=>20},
    "matched_queries"=>["doc:is_a:project", "project:match:search_terms"]}>,
 #<Elasticsearch::Model::Response::Result:0x00000001206e5458
  @result=
   {"_index"=>"gitlab-test-20230109-0606",
    "_id"=>"project_28",
    "_score"=>1.0,
    "_source"=>
     {"id"=>28,
      "name"=>"project2",
      "path"=>"project2",
      "description"=>nil,
      "namespace_id"=>68,
      "created_at"=>"2023-01-09T06:05:45.409Z",
      "updated_at"=>"2023-01-09T06:05:45.409Z",
      "archived"=>false,
      "visibility_level"=>0,
      "last_activity_at"=>"2023-01-09T06:05:45.409Z",
      "name_with_namespace"=>"Sidney Jones4 / project2",
      "path_with_namespace"=>"namespace3/project2",
      "join_field"=>"project",
      "type"=>"project",
      "issues_access_level"=>20,
      "merge_requests_access_level"=>20,
      "snippets_access_level"=>20,
      "wiki_access_level"=>20,
      "repository_access_level"=>20},
    "matched_queries"=>["doc:is_a:project", "project:match:search_terms"]}>]

It looks to me like the test is failing because there are some stale projects in the index?

Edited by Stan Hu