diff --git a/GITALY_SERVER_VERSION b/GITALY_SERVER_VERSION
index 3f667dbcd8903e2772108cde47a1ee6d3af2071d..a185d30948bce395d323792ac9c3e3dbf283368c 100644
--- a/GITALY_SERVER_VERSION
+++ b/GITALY_SERVER_VERSION
@@ -1 +1,5 @@
+<<<<<<< HEAD
 0.108.0
+=======
+0.109.0
+>>>>>>> upstream/master
diff --git a/PROCESS.md b/PROCESS.md
index 6ce107c6cc910cec24409e5836964b6b9b6e2f22..de470391156d73737d6810a59836590725b4d7c3 100644
--- a/PROCESS.md
+++ b/PROCESS.md
@@ -205,24 +205,7 @@ to. For example:
 If you think a merge request should go into an RC or patch even though it does not meet these requirements,
 you can ask for an exception to be made.
 
-Go to [Release tasks issue tracker](https://gitlab.com/gitlab-org/release/tasks/issues/new) and create an issue
-using the `Exception-request` issue template.
-
-**Do not** set the relevant `Pick into X.Y` label (see above) before request an
-exception; this should be done after the exception is approved.
-
-You can find who is who on the [team page](https://about.gitlab.com/team/).
-
-Whether an exception is made is determined by weighing the benefit and urgency of the change
-(how important it is to the company that this is released _right now_ instead of in a month)
-against the potential negative impact
-(things breaking without enough time to comfortably find and fix them before the release on the 22nd).
-When in doubt, we err on the side of _not_ cherry-picking.
-
-For example, it is likely that an exception will be made for a trivial 1-5 line performance improvement
-(e.g. adding a database index or adding `includes` to a query), but not for a new feature, no matter how relatively small or thoroughly tested.
-
-All MRs which have had exceptions granted must be merged by the 15th.
+Check [this guide](https://gitlab.com/gitlab-org/release/docs/blob/master/general/exception-request/process.md) about how to open an exception request before opening one.
 
 ### Regressions
 
diff --git a/app/assets/javascripts/boards/components/issue_card_inner.vue b/app/assets/javascripts/boards/components/issue_card_inner.vue
index 99534d5385e00af270ff644c32ff2c118564224a..3b50eff5eebe08128cbe75c54fc3b06978b88255 100644
--- a/app/assets/javascripts/boards/components/issue_card_inner.vue
+++ b/app/assets/javascripts/boards/components/issue_card_inner.vue
@@ -1,6 +1,9 @@
 <script>
   import $ from 'jquery';
+<<<<<<< HEAD
   import IssueCardWeight from 'ee/boards/components/issue_card_weight.vue';
+=======
+>>>>>>> upstream/master
   import UserAvatarLink from '../../vue_shared/components/user_avatar/user_avatar_link.vue';
   import eventHub from '../eventhub';
 
@@ -9,7 +12,10 @@
   export default {
     components: {
       UserAvatarLink,
+<<<<<<< HEAD
       IssueCardWeight,
+=======
+>>>>>>> upstream/master
     },
     props: {
       issue: {
@@ -154,10 +160,13 @@
         >
           {{ issue.referencePath }}
         </span>
+<<<<<<< HEAD
         <issue-card-weight
           v-if="issue.weight"
           :weight="issue.weight"
         />
+=======
+>>>>>>> upstream/master
       </h4>
       <div class="board-card-assignee">
         <user-avatar-link
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index 28f75451df6d626930ec5ae13e68e7f1ac7ff82d..59056655286574b52e56622f458369fe774ad8fc 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -276,7 +276,7 @@ module ApplicationHelper
     {
       members: members_project_autocomplete_sources_path(object, type: noteable_type, type_id: params[:id]),
       issues: issues_project_autocomplete_sources_path(object),
-      merge_requests: merge_requests_project_autocomplete_sources_path(object),
+      mergeRequests: merge_requests_project_autocomplete_sources_path(object),
       labels: labels_project_autocomplete_sources_path(object, type: noteable_type, type_id: params[:id]),
       milestones: milestones_project_autocomplete_sources_path(object),
       commands: commands_project_autocomplete_sources_path(object, type: noteable_type, type_id: params[:id])
diff --git a/app/workers/ci/archive_traces_cron_worker.rb b/app/workers/ci/archive_traces_cron_worker.rb
index 2ac65f41f4e99d9c17f0cef005b4f12d52587041..7016edde6981a61309f0d3eeff1552a8cbf002df 100644
--- a/app/workers/ci/archive_traces_cron_worker.rb
+++ b/app/workers/ci/archive_traces_cron_worker.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Ci
   class ArchiveTracesCronWorker
     include ApplicationWorker
diff --git a/app/workers/ci/build_trace_chunk_flush_worker.rb b/app/workers/ci/build_trace_chunk_flush_worker.rb
index 218d6688bd9e7ad5fa7c096218817588dc20217a..6376c6d32cff3ccf2ab653f199b3138f43fc1e09 100644
--- a/app/workers/ci/build_trace_chunk_flush_worker.rb
+++ b/app/workers/ci/build_trace_chunk_flush_worker.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Ci
   class BuildTraceChunkFlushWorker
     include ApplicationWorker
diff --git a/app/workers/concerns/application_worker.rb b/app/workers/concerns/application_worker.rb
index 37586e161c92b8e5abe2ad726118072fb8584734..bb06e31641d635d0933cf5b281c96cde00d3c863 100644
--- a/app/workers/concerns/application_worker.rb
+++ b/app/workers/concerns/application_worker.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 Sidekiq::Worker.extend ActiveSupport::Concern
 
 module ApplicationWorker
diff --git a/app/workers/concerns/cluster_applications.rb b/app/workers/concerns/cluster_applications.rb
index 24ecaa0b52fb1273373fd883e3aea9515c12241d..9758a1ceb0efbe8cb8238dcf65fcb025f2546ef6 100644
--- a/app/workers/concerns/cluster_applications.rb
+++ b/app/workers/concerns/cluster_applications.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module ClusterApplications
   extend ActiveSupport::Concern
 
diff --git a/app/workers/concerns/cluster_queue.rb b/app/workers/concerns/cluster_queue.rb
index 24b9f14522097a1a64d220fccdbfe1eb43c5665b..e44b40c36c9f56112c0d0151a99aacfa19092cdc 100644
--- a/app/workers/concerns/cluster_queue.rb
+++ b/app/workers/concerns/cluster_queue.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 ##
 # Concern for setting Sidekiq settings for the various Gcp clusters workers.
 #
diff --git a/app/workers/concerns/cronjob_queue.rb b/app/workers/concerns/cronjob_queue.rb
index b6581779f6a0f5909ab2f0f50c0bc9ab8feb0fad..0683b2293815f46a25e0491cd1be2f7f9f5ab34a 100644
--- a/app/workers/concerns/cronjob_queue.rb
+++ b/app/workers/concerns/cronjob_queue.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 # Concern that sets various Sidekiq settings for workers executed using a
 # cronjob.
 module CronjobQueue
diff --git a/app/workers/concerns/exception_backtrace.rb b/app/workers/concerns/exception_backtrace.rb
index ea0f1f8d19ba523d5ba9e2f19105cd1e404ded2f..37c9eaba0d7010ada4281c1bb84ac1aa24bbe98e 100644
--- a/app/workers/concerns/exception_backtrace.rb
+++ b/app/workers/concerns/exception_backtrace.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 # Concern for enabling a few lines of exception backtraces in Sidekiq
 module ExceptionBacktrace
   extend ActiveSupport::Concern
diff --git a/app/workers/concerns/gitlab/github_import/queue.rb b/app/workers/concerns/gitlab/github_import/queue.rb
index 22c2ce458e8fbb653bb52f4d079a1d71bddcfdca..59b621f16abde15634caca35e04c859e5471175b 100644
--- a/app/workers/concerns/gitlab/github_import/queue.rb
+++ b/app/workers/concerns/gitlab/github_import/queue.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Gitlab
   module GithubImport
     module Queue
diff --git a/app/workers/concerns/mail_scheduler_queue.rb b/app/workers/concerns/mail_scheduler_queue.rb
index f3e9680d7566dbafa264450fd49637a2390e982c..c051151e973b135f955935e9a9ab3907ae73ea32 100644
--- a/app/workers/concerns/mail_scheduler_queue.rb
+++ b/app/workers/concerns/mail_scheduler_queue.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module MailSchedulerQueue
   extend ActiveSupport::Concern
 
diff --git a/app/workers/concerns/new_issuable.rb b/app/workers/concerns/new_issuable.rb
index 526ed0bad077ba4c2463417412d593700daf9bfa..7735dec5e6be3781af984ed54c2e756950bcd55a 100644
--- a/app/workers/concerns/new_issuable.rb
+++ b/app/workers/concerns/new_issuable.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module NewIssuable
   attr_reader :issuable, :user
 
diff --git a/app/workers/concerns/object_storage_queue.rb b/app/workers/concerns/object_storage_queue.rb
index a80f473a6d44cbec23bb40d21cce88cfd7d7ceff..8650eed213a9c43bf3f5588df9c2353e23d37f3c 100644
--- a/app/workers/concerns/object_storage_queue.rb
+++ b/app/workers/concerns/object_storage_queue.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 # Concern for setting Sidekiq settings for the various GitLab ObjectStorage workers.
 module ObjectStorageQueue
   extend ActiveSupport::Concern
diff --git a/app/workers/concerns/pipeline_background_queue.rb b/app/workers/concerns/pipeline_background_queue.rb
index 8bf43de6b26e892250321c705b26344a6f28a7b0..bbb8ad0c982f07638b3bb12ee2dc78a9243b4d89 100644
--- a/app/workers/concerns/pipeline_background_queue.rb
+++ b/app/workers/concerns/pipeline_background_queue.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 ##
 # Concern for setting Sidekiq settings for the low priority CI pipeline workers.
 #
diff --git a/app/workers/concerns/pipeline_queue.rb b/app/workers/concerns/pipeline_queue.rb
index e77093a690209599c0583de6333e8552f9a73265..3aaed4669e5fe649849859ba3e3bb144329e70d6 100644
--- a/app/workers/concerns/pipeline_queue.rb
+++ b/app/workers/concerns/pipeline_queue.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 ##
 # Concern for setting Sidekiq settings for the various CI pipeline workers.
 #
diff --git a/app/workers/concerns/project_import_options.rb b/app/workers/concerns/project_import_options.rb
index ef23990ad97bb4f895c4f9f82c7995c8e8e31a2b..22bdf441d6b94e05f9586ba6cce9111dbbce9121 100644
--- a/app/workers/concerns/project_import_options.rb
+++ b/app/workers/concerns/project_import_options.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module ProjectImportOptions
   extend ActiveSupport::Concern
 
diff --git a/app/workers/concerns/project_start_import.rb b/app/workers/concerns/project_start_import.rb
index 4e55a1ee3d6b85f768d5d92c12cd81e528e15c23..46a133db2a1c1490bf0655d40a40b83153a19759 100644
--- a/app/workers/concerns/project_start_import.rb
+++ b/app/workers/concerns/project_start_import.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 # Used in EE by mirroring
 module ProjectStartImport
   def start(project)
diff --git a/app/workers/concerns/repository_check_queue.rb b/app/workers/concerns/repository_check_queue.rb
index 43fb66c31b020acb76961e39a4a5f81357b01f6c..216d67e5dbcce629302931e64e0dd64c3b7028ce 100644
--- a/app/workers/concerns/repository_check_queue.rb
+++ b/app/workers/concerns/repository_check_queue.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 # Concern for setting Sidekiq settings for the various repository check workers.
 module RepositoryCheckQueue
   extend ActiveSupport::Concern
diff --git a/app/workers/concerns/waitable_worker.rb b/app/workers/concerns/waitable_worker.rb
index 48ebe862248e86dc8bfb233cbbcc8f1e1178cb78..d85bc7d16600902c48570d3d88225506ea6b121b 100644
--- a/app/workers/concerns/waitable_worker.rb
+++ b/app/workers/concerns/waitable_worker.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module WaitableWorker
   extend ActiveSupport::Concern
 
diff --git a/app/workers/mail_scheduler/issue_due_worker.rb b/app/workers/mail_scheduler/issue_due_worker.rb
index 54285884a52d89e91e8ccc0c85db6a58dd0df14e..8794ad7a82cda7fbb6d030d3ac63a9e8d2b0cad3 100644
--- a/app/workers/mail_scheduler/issue_due_worker.rb
+++ b/app/workers/mail_scheduler/issue_due_worker.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module MailScheduler
   class IssueDueWorker
     include ApplicationWorker
diff --git a/app/workers/mail_scheduler/notification_service_worker.rb b/app/workers/mail_scheduler/notification_service_worker.rb
index 7cfe0aa0df1c9c96da4b8a5621c13580d773c94f..4726e4161824f80a556e8e654d10a15e7647e383 100644
--- a/app/workers/mail_scheduler/notification_service_worker.rb
+++ b/app/workers/mail_scheduler/notification_service_worker.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 require 'active_job/arguments'
 
 module MailScheduler
diff --git a/app/workers/object_storage/background_move_worker.rb b/app/workers/object_storage/background_move_worker.rb
index 9c4d72e0ecf4a99de7933120a51c0cd602e3ffc6..8dff65e46e39d8283252747da3f40e6caa640cce 100644
--- a/app/workers/object_storage/background_move_worker.rb
+++ b/app/workers/object_storage/background_move_worker.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module ObjectStorage
   class BackgroundMoveWorker
     include ApplicationWorker
diff --git a/app/workers/repository_check/batch_worker.rb b/app/workers/repository_check/batch_worker.rb
index 246c9b0fbdf1f6cf6358969920e540c328f8f837..42d829fc8cc44e71ca14f8a21e8aa09f1549e4cb 100644
--- a/app/workers/repository_check/batch_worker.rb
+++ b/app/workers/repository_check/batch_worker.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module RepositoryCheck
   class BatchWorker
     prepend ::EE::RepositoryCheck::BatchWorker
diff --git a/app/workers/repository_check/clear_worker.rb b/app/workers/repository_check/clear_worker.rb
index 97b89dc3db5413c9a055a0b009a77c85b9a4fe16..81e1a4b63bbb7ed24131a42c02363896e5ee5b2b 100644
--- a/app/workers/repository_check/clear_worker.rb
+++ b/app/workers/repository_check/clear_worker.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module RepositoryCheck
   class ClearWorker
     include ApplicationWorker
diff --git a/app/workers/repository_check/single_repository_worker.rb b/app/workers/repository_check/single_repository_worker.rb
index 72d109aad56819c1164216082d942729210ca4f0..1db19e5cafa3bdee6931b0918fdbbe06de3a54c7 100644
--- a/app/workers/repository_check/single_repository_worker.rb
+++ b/app/workers/repository_check/single_repository_worker.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module RepositoryCheck
   class SingleRepositoryWorker
     include ApplicationWorker
diff --git a/changelogs/unreleased/46546-do-not-pre-select-previous-user-s-when-creating-protected-branches.yml b/changelogs/unreleased/46546-do-not-pre-select-previous-user-s-when-creating-protected-branches.yml
new file mode 100644
index 0000000000000000000000000000000000000000..7d42d971022a9b903ad127f43ae2cc302e987622
--- /dev/null
+++ b/changelogs/unreleased/46546-do-not-pre-select-previous-user-s-when-creating-protected-branches.yml
@@ -0,0 +1,5 @@
+---
+title: CE port gitlab-ee!6112
+merge_request: 19714
+author:
+type: other
diff --git a/changelogs/unreleased/48528-fix-mr-autocompletion.yml b/changelogs/unreleased/48528-fix-mr-autocompletion.yml
new file mode 100644
index 0000000000000000000000000000000000000000..ac44f878d1d7bde9ca287ff73d07455a0a78062a
--- /dev/null
+++ b/changelogs/unreleased/48528-fix-mr-autocompletion.yml
@@ -0,0 +1,5 @@
+---
+title: Fix broken '!' support to autocomplete MRs in GFM fields
+merge_request: 20204
+author:
+type: fixed
diff --git a/changelogs/unreleased/frozen-string-enable-app-workers-2.yml b/changelogs/unreleased/frozen-string-enable-app-workers-2.yml
new file mode 100644
index 0000000000000000000000000000000000000000..81de6899d7614e948c1ef4688c7f48ef6c6a6cb9
--- /dev/null
+++ b/changelogs/unreleased/frozen-string-enable-app-workers-2.yml
@@ -0,0 +1,5 @@
+---
+title: Finish enabling frozen string for app/workers/*.rb
+merge_request: 20197
+author: gfyoung
+type: other
diff --git a/config/initializers/1_settings.rb b/config/initializers/1_settings.rb
index 7f230c89241043208c828786c66d83191df2fd30..158867ec770b9e2a113f43fca2a4516d48ea2883 100644
--- a/config/initializers/1_settings.rb
+++ b/config/initializers/1_settings.rb
@@ -454,7 +454,7 @@ repositories_storages          = Settings.repositories.storages.values
 repository_downloads_path      = Settings.gitlab['repository_downloads_path'].to_s.gsub(%r{/$}, '')
 repository_downloads_full_path = File.expand_path(repository_downloads_path, Settings.gitlab['user_home'])
 
-# Gitaly migration: https://gitlab.com/gitlab-org/gitaly/issues/1237
+# Gitaly migration: https://gitlab.com/gitlab-org/gitaly/issues/1255
 Gitlab::GitalyClient::StorageSettings.allow_disk_access do
   if repository_downloads_path.blank? || repositories_storages.any? { |rs| [repository_downloads_path, repository_downloads_full_path].include?(rs.legacy_disk_path.gsub(%r{/$}, '')) }
     Settings.gitlab['repository_downloads_path'] = File.join(Settings.shared['path'], 'cache/archive')
diff --git a/config/initializers/6_validations.rb b/config/initializers/6_validations.rb
index ff6865608f09f7d6b157c865c84fbdfba616bce7..bf9e5a50382cf77e4647bf3ea60214a3518d08ea 100644
--- a/config/initializers/6_validations.rb
+++ b/config/initializers/6_validations.rb
@@ -2,20 +2,6 @@ def storage_name_valid?(name)
   !!(name =~ /\A[a-zA-Z0-9\-_]+\z/)
 end
 
-def find_parent_path(name, path)
-  parent = Pathname.new(path).realpath.parent
-  Gitlab.config.repositories.storages.detect do |n, rs|
-    name != n && Pathname.new(rs.legacy_disk_path).realpath == parent
-  end
-rescue Errno::EIO, Errno::ENOENT => e
-  warning = "WARNING: couldn't verify #{path} (#{name}). "\
-            "If this is an external storage, it might be offline."
-  message = "#{warning}\n#{e.message}"
-  Rails.logger.error("#{message}\n\t" + e.backtrace.join("\n\t"))
-
-  nil
-end
-
 def storage_validation_error(message)
   raise "#{message}. Please fix this in your gitlab.yml before starting GitLab."
 end
@@ -37,17 +23,4 @@ def validate_storages_config
   end
 end
 
-# Gitaly migration: https://gitlab.com/gitlab-org/gitaly/issues/1237
-def validate_storages_paths
-  Gitlab::GitalyClient::StorageSettings.allow_disk_access do
-    Gitlab.config.repositories.storages.each do |name, repository_storage|
-      parent_name, _parent_path = find_parent_path(name, repository_storage.legacy_disk_path)
-      if parent_name
-        storage_validation_error("#{name} is a nested path of #{parent_name}. Nested paths are not supported for repository storages")
-      end
-    end
-  end
-end
-
 validate_storages_config
-validate_storages_paths unless Rails.env.test? || ENV['SKIP_STORAGE_VALIDATION'] == 'true'
diff --git a/doc/administration/repository_storage_types.md b/doc/administration/repository_storage_types.md
index c50e8b4c4dfc225a95d8cd80a7bd19e15892b8de..0d2d33785567a56925f0d2dbf1af7d65e8a2408c 100644
--- a/doc/administration/repository_storage_types.md
+++ b/doc/administration/repository_storage_types.md
@@ -82,6 +82,46 @@ To migrate your existing projects to the new storage type, check the specific
 [rake tasks]: raketasks/storage.md#migrate-existing-projects-to-hashed-storage
 [storage-paths]: repository_storage_types.md
 
+#### Rollback
+
+There is no automated rollback implemented. Below are the steps required to rollback
+from each storage migration.
+
+The rollback has to be performed in the reverse order. To get into "Legacy" state,
+you need to rollback Attachments first, then Project.
+
+Also note that if Geo is enabled, after the migration was triggered, an event is generated
+to replicate the operation on any Secondary node. That means the on disk changes will also
+need to be performed on these nodes as well. Database changes will propagate without issues.
+
+You must make sure the migration event was already processed or otherwise it may migrate
+the files back to Hashed state again.
+
+##### Attachments
+
+To rollback single Attachment migration, rename `aa/bb/abcdef1234567890...` folder back to `namespace/project`.
+
+Both folder names can be generated by the `FileUploader.absolute_base_dir(project)`, you
+just need to switch the version from the `project` back to the previous one.
+
+```ruby
+project.storage_version
+# => 2
+
+FileUploader.absolute_base_dir(project)
+# => "/opt/gitlab/embedded/service/gitlab-rails/public/uploads/@hashed/d4/73/d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35"
+
+project.storage_version = 1
+
+FileUploader.absolute_base_dir(project)
+# => "/opt/gitlab/embedded/service/gitlab-rails/public/uploads/gitlab/gitlab-shell-renamed"
+```
+
+##### Project
+
+To rollback single Project migration, move `@hashed/aa/bb/aabbcdef1234567890abcdef.git` and `@hashed/aa/bb/aabbcdef1234567890abcdef.wiki.git`
+back to `namespace/project.git` and `namespace/project.wiki.git` respectively and switch the version from the `project` back to `null`.
+
 ### Hashed Storage coverage
 
 We are incrementally moving every storable object in GitLab to the Hashed
@@ -100,6 +140,30 @@ which is true for CI Cache and LFS Objects.
 | Pages           | Yes            | No             | -             | -              |
 | Docker Registry | Yes            | No             | -             | -              |
 | CI Build Logs   | No             | No             | -             | -              |
-| CI Artifacts    | No             | No             | Yes (Premium) | -              |
+| CI Artifacts    | No             | No             | Yes           | 9.4 / 10.6     |
 | CI Cache        | No             | No             | Yes           | -              |
-| LFS Objects     | Yes            | No             | Yes (Premium) | -              |
+| LFS Objects     | Yes            | Similar        | Yes           | 10.0 / 10.7    |
+
+#### Implementation Details
+
+##### Avatars
+
+Each file is stored in a folder with its `id` from the database. The filename is always `avatar.png` for user avatars.
+When avatar is replaced, `Upload` model is destroyed and a new one takes place with different `id`.
+
+##### CI Artifacts
+
+CI Artifacts are S3 compatible since **9.4** (GitLab Premium), and available in GitLab Core since **10.6**.
+
+##### LFS Objects
+
+LFS Objects implements a similar storage pattern using 2 chars, 2 level folders, following git own implementation:
+
+```ruby
+"shared/lfs-objects/#{oid[0..1}/#{oid[2..3]}/#{oid[4..-1]}"
+
+# Based on object `oid`: `8909029eb962194cfb326259411b22ae3f4a814b5be4f80651735aeef9f3229c`, path will be:
+"shared/lfs-objects/89/09/029eb962194cfb326259411b22ae3f4a814b5be4f80651735aeef9f3229c"
+```
+
+They are also S3 compatible since **10.0** (GitLab Premium), and available in GitLab Core since **10.7**.
diff --git a/spec/features/protected_branches_spec.rb b/spec/features/protected_branches_spec.rb
index 38fff08ff6fc4c0718a117fc63093a2558348945..d8c98a011fddf1404f23dd3583ef9def4bc5cfb4 100644
--- a/spec/features/protected_branches_spec.rb
+++ b/spec/features/protected_branches_spec.rb
@@ -72,6 +72,7 @@ feature 'Protected Branches', :js do
     describe "explicit protected branches" do
       it "allows creating explicit protected branches" do
         visit project_protected_branches_path(project)
+        set_defaults
         set_protected_branch_name('some-branch')
         set_allowed_to('merge')
         set_allowed_to('push')
@@ -87,6 +88,7 @@ feature 'Protected Branches', :js do
         project.repository.add_branch(admin, 'some-branch', commit.id)
 
         visit project_protected_branches_path(project)
+        set_defaults
         set_protected_branch_name('some-branch')
         set_allowed_to('merge')
         set_allowed_to('push')
@@ -97,6 +99,7 @@ feature 'Protected Branches', :js do
 
       it "displays an error message if the named branch does not exist" do
         visit project_protected_branches_path(project)
+        set_defaults
         set_protected_branch_name('some-branch')
         set_allowed_to('merge')
         set_allowed_to('push')
@@ -109,6 +112,7 @@ feature 'Protected Branches', :js do
     describe "wildcard protected branches" do
       it "allows creating protected branches with a wildcard" do
         visit project_protected_branches_path(project)
+        set_defaults
         set_protected_branch_name('*-stable')
         set_allowed_to('merge')
         set_allowed_to('push')
@@ -124,6 +128,7 @@ feature 'Protected Branches', :js do
         project.repository.add_branch(admin, 'staging-stable', 'master')
 
         visit project_protected_branches_path(project)
+        set_defaults
         set_protected_branch_name('*-stable')
         set_allowed_to('merge')
         set_allowed_to('push')
@@ -142,8 +147,12 @@ feature 'Protected Branches', :js do
 
         visit project_protected_branches_path(project)
         set_protected_branch_name('*-stable')
+<<<<<<< HEAD
         set_allowed_to('merge')
         set_allowed_to('push')
+=======
+        set_defaults
+>>>>>>> upstream/master
         click_on "Protect"
 
         visit project_protected_branches_path(project)
@@ -228,4 +237,18 @@ feature 'Protected Branches', :js do
     find(".dropdown-input-field").set(branch_name)
     click_on("Create wildcard #{branch_name}")
   end
+
+  def set_defaults
+    find(".js-allowed-to-merge").click
+    within('.qa-allowed-to-merge-dropdown') do
+      expect(first("li")).to have_content("Roles")
+      find(:link, 'No one').click
+    end
+
+    find(".js-allowed-to-push").click
+    within('.qa-allowed-to-push-dropdown') do
+      expect(first("li")).to have_content("Roles")
+      find(:link, 'No one').click
+    end
+  end
 end
diff --git a/spec/helpers/application_helper_spec.rb b/spec/helpers/application_helper_spec.rb
index 593b2ca18251982cbdd8f0193d190f2c7152f710..14297a1a54448e1e11f58e1b2bcff9eeac5b857f 100644
--- a/spec/helpers/application_helper_spec.rb
+++ b/spec/helpers/application_helper_spec.rb
@@ -157,7 +157,7 @@ describe ApplicationHelper do
     let(:noteable_type) { Issue }
     it 'returns paths for autocomplete_sources_controller' do
       sources = helper.autocomplete_data_sources(project, noteable_type)
-      expect(sources.keys).to match_array([:members, :issues, :merge_requests, :labels, :milestones, :commands])
+      expect(sources.keys).to match_array([:members, :issues, :mergeRequests, :labels, :milestones, :commands])
       sources.keys.each do |key|
         expect(sources[key]).not_to be_nil
       end
diff --git a/spec/initializers/6_validations_spec.rb b/spec/initializers/6_validations_spec.rb
index 8d9dc092547d55d8c1454a954a86be1489ef3603..f96e5a2133f3c2df0b1c0a77b6f772d15762dac9 100644
--- a/spec/initializers/6_validations_spec.rb
+++ b/spec/initializers/6_validations_spec.rb
@@ -44,49 +44,6 @@ describe '6_validations' do
     end
   end
 
-  describe 'validate_storages_paths' do
-    context 'with correct settings' do
-      before do
-        mock_storages('foo' => Gitlab::GitalyClient::StorageSettings.new('path' => 'tmp/tests/paths/a/b/c'), 'bar' => Gitlab::GitalyClient::StorageSettings.new('path' => 'tmp/tests/paths/a/b/d'))
-      end
-
-      it 'passes through' do
-        expect { validate_storages_paths }.not_to raise_error
-      end
-    end
-
-    context 'with nested storage paths' do
-      before do
-        mock_storages('foo' => Gitlab::GitalyClient::StorageSettings.new('path' => 'tmp/tests/paths/a/b/c'), 'bar' => Gitlab::GitalyClient::StorageSettings.new('path' => 'tmp/tests/paths/a/b/c/d'))
-      end
-
-      it 'throws an error' do
-        expect { validate_storages_paths }.to raise_error('bar is a nested path of foo. Nested paths are not supported for repository storages. Please fix this in your gitlab.yml before starting GitLab.')
-      end
-    end
-
-    context 'with similar but un-nested storage paths' do
-      before do
-        mock_storages('foo' => Gitlab::GitalyClient::StorageSettings.new('path' => 'tmp/tests/paths/a/b/c'), 'bar' => Gitlab::GitalyClient::StorageSettings.new('path' => 'tmp/tests/paths/a/b/c2'))
-      end
-
-      it 'passes through' do
-        expect { validate_storages_paths }.not_to raise_error
-      end
-    end
-
-    describe 'inaccessible storage' do
-      before do
-        mock_storages('foo' => Gitlab::GitalyClient::StorageSettings.new('path' => 'tmp/tests/a/path/that/does/not/exist'))
-      end
-
-      it 'passes through with a warning' do
-        expect(Rails.logger).to receive(:error)
-        expect { validate_storages_paths }.not_to raise_error
-      end
-    end
-  end
-
   def mock_storages(storages)
     allow(Gitlab.config.repositories).to receive(:storages).and_return(storages)
   end