diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 6a05caa79d749c81ad396eb16c2ff6f53dab7f51..681f7f1b25d12990c2421f311640152aa166a1b8 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -54,6 +54,9 @@ default:
 .if-not-security-canonical-sync: &if-not-security-canonical-sync
   if: '$CI_MERGE_REQUEST_SOURCE_PROJECT_PATH != "gitlab-org/security/gitlab" || $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME != $CI_DEFAULT_BRANCH'
 
+.if-merge-request-labels-run-with-rails-next: &if-merge-request-labels-run-with-rails-next
+  if: '($CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_EVENT_TYPE != "merge_train") && $CI_MERGE_REQUEST_LABELS =~ /pipeline:run-with-rails-next/'
+
 workflow:
   name: '$PIPELINE_NAME'
   rules:
@@ -101,6 +104,10 @@ workflow:
         <<: [*next-ruby-variables, *default-merge-request-variables]
         PIPELINE_NAME: '$CI_DEFAULT_BRANCH security->canonical sync'
         SKIP_MESSAGE: 'MR only contains changes from the security mirror, which have already been reviewed, tested and deployed.'
+    - <<: *if-merge-request-labels-run-with-rails-next
+      variables:
+        <<: [*next-ruby-variables, *default-merge-request-variables]
+        BUNDLE_GEMFILE: Gemfile.next
     # For (detached) merge request pipelines.
     - if: '$CI_MERGE_REQUEST_IID'
       variables:
@@ -171,6 +178,7 @@ variables:
   BUNDLE_WITHOUT: "production:development"
   BUNDLE_INSTALL_FLAGS: "--jobs=$(nproc) --retry=3"
   BUNDLE_FROZEN: "true"
+  BUNDLE_GEMFILE: Gemfile
   # we override the max_old_space_size to prevent OOM errors
   NODE_OPTIONS: --max_old_space_size=5120
   GIT_DEPTH: "20"
diff --git a/.gitlab/ci/global.gitlab-ci.yml b/.gitlab/ci/global.gitlab-ci.yml
index e582dcb100017aa12895ca89d632dbb816ab0958..0cffeab73bdab6d7936fdd9d91a5b033981295e4 100644
--- a/.gitlab/ci/global.gitlab-ci.yml
+++ b/.gitlab/ci/global.gitlab-ci.yml
@@ -39,7 +39,7 @@
     GITLAB_ALLOW_SEPARATE_CI_DATABASE: "true"
 
 .ruby-gems-cache: &ruby-gems-cache
-  key: "ruby-gems-${BUILD_OS}-${OS_VERSION}-ruby-${RUBY_VERSION}"
+  key: "ruby-gems-${BUILD_OS}-${OS_VERSION}-ruby-${RUBY_VERSION}-gemfile-${BUNDLE_GEMFILE}"
   paths:
     - vendor/ruby/
   policy: pull
@@ -49,7 +49,7 @@
   policy: push  # We want to rebuild the cache from scratch to ensure stale dependencies are cleaned up.
 
 .ruby-coverage-gems-cache: &ruby-coverage-gems-cache
-  key: "ruby-coverage-gems-${BUILD_OS}-${OS_VERSION}-ruby-${RUBY_VERSION}"
+  key: "ruby-coverage-gems-${BUILD_OS}-${OS_VERSION}-ruby-${RUBY_VERSION}-gemfile-${BUNDLE_GEMFILE}"
   paths:
     - vendor/ruby/
   policy: pull
@@ -101,7 +101,7 @@
   policy: push  # We want to rebuild the cache from scratch to ensure stale dependencies are cleaned up.
 
 .assets-tmp-cache: &assets-tmp-cache
-  key: "assets-tmp-${BUILD_OS}-${OS_VERSION}-ruby-${RUBY_VERSION}-node-${NODE_ENV}-v1"
+  key: "assets-tmp-${BUILD_OS}-${OS_VERSION}-ruby-${RUBY_VERSION}-gemfile-${BUNDLE_GEMFILE}-node-${NODE_ENV}-v1"
   paths:
     - tmp/cache/assets/sprockets/
     - tmp/cache/babel-loader/
@@ -123,7 +123,7 @@
   policy: push  # We want to rebuild the cache from scratch to ensure stale dependencies are cleaned up.
 
 .rubocop-cache: &rubocop-cache
-  key: "rubocop-${BUILD_OS}-${OS_VERSION}-ruby-${RUBY_VERSION}"
+  key: "rubocop-${BUILD_OS}-${OS_VERSION}-ruby-${RUBY_VERSION}-gemfile-${BUNDLE_GEMFILE}"
   paths:
     - tmp/rubocop_cache/
   policy: pull
@@ -136,7 +136,7 @@
 
 .qa-ruby-gems-cache: &qa-ruby-gems-cache
   key:
-    prefix: "qa-ruby-gems-${BUILD_OS}-${OS_VERSION}-ruby-${RUBY_VERSION}"
+    prefix: "qa-ruby-gems-${BUILD_OS}-${OS_VERSION}-ruby-${RUBY_VERSION}-gemfile-${BUNDLE_GEMFILE}"
     files:
       - qa/Gemfile.lock
   paths:
diff --git a/.gitlab/ci/preflight.gitlab-ci.yml b/.gitlab/ci/preflight.gitlab-ci.yml
index eb5de20c87cfe1f84a1292b4da85f5d1c601483b..de99c5c734b490cc90d7bac27753481b9faa8e3a 100644
--- a/.gitlab/ci/preflight.gitlab-ci.yml
+++ b/.gitlab/ci/preflight.gitlab-ci.yml
@@ -11,6 +11,7 @@
     - .qa-cache
   variables:
     USE_BUNDLE_INSTALL: "false"
+    BUNDLE_GEMFILE: "Gemfile"
     SETUP_DB: "false"
   before_script:
     - !reference [.default-before_script, before_script]
diff --git a/.gitlab/ci/qa.gitlab-ci.yml b/.gitlab/ci/qa.gitlab-ci.yml
index 220e0f85507f67b48f93a947bb4b5e41a625f2d5..894fd1ce09bb7ffa85e397cf950daeb07807fc24 100644
--- a/.gitlab/ci/qa.gitlab-ci.yml
+++ b/.gitlab/ci/qa.gitlab-ci.yml
@@ -7,6 +7,7 @@
   needs: []
   variables:
     USE_BUNDLE_INSTALL: "false"
+    BUNDLE_GEMFILE: "Gemfile"
     SETUP_DB: "false"
   before_script:
     - !reference [.default-before_script, before_script]
diff --git a/Gemfile.next.checksum b/Gemfile.next.checksum
index fdaa4547e742b2003a376d08061d19700a7cf8fb..802cc903dfa02db18d58571aea19d47f5de8eaef 100644
--- a/Gemfile.next.checksum
+++ b/Gemfile.next.checksum
@@ -34,10 +34,10 @@
 {"name":"awesome_print","version":"1.9.2","platform":"ruby","checksum":"e99b32b704acff16d768b3468680793ced40bfdc4537eb07e06a4be11133786e"},
 {"name":"awrence","version":"1.2.1","platform":"ruby","checksum":"dd1d214c12a91f449d1ef81d7ee3babc2816944e450752e7522c65521872483e"},
 {"name":"aws-eventstream","version":"1.3.0","platform":"ruby","checksum":"f1434cc03ab2248756eb02cfa45e900e59a061d7fbdc4a9fd82a5dd23d796d3f"},
-{"name":"aws-partitions","version":"1.960.0","platform":"ruby","checksum":"0847ac5526305080ba6056d7f6b96c8d580d1526b79915d541333e58bf5ff857"},
+{"name":"aws-partitions","version":"1.877.0","platform":"ruby","checksum":"9552ed7bbd3700ed1eeb0121c160ceaf64fa5dbaff5a1ff5fe6fd8481ecd9cfd"},
 {"name":"aws-sdk-cloudformation","version":"1.41.0","platform":"ruby","checksum":"31e47539719734413671edf9b1a31f8673fbf9688549f50c41affabbcb1c6b26"},
-{"name":"aws-sdk-core","version":"3.201.3","platform":"ruby","checksum":"c045a7ff37b4a6f1de5742e64def0841bdf70d215cb17d3875b2c5bdd9e99d52"},
-{"name":"aws-sdk-kms","version":"1.88.0","platform":"ruby","checksum":"13588d90df1eece81f6d79bd304b3857dc3168e7ea75c933b3b835cfe8a0e309"},
+{"name":"aws-sdk-core","version":"3.201.4","platform":"ruby","checksum":"5f1b8dd75abfe0694557471856cfcda97277a423b221fe9c286047e8ee60f82c"},
+{"name":"aws-sdk-kms","version":"1.76.0","platform":"ruby","checksum":"e7f75013cba9ba357144f66bbc600631c192e2cda9dd572794be239654e2cf49"},
 {"name":"aws-sdk-s3","version":"1.157.0","platform":"ruby","checksum":"e1e0c7a268e710a7ccf4a0f9d2c33e3ca685b06968c3048d907e3a792580e990"},
 {"name":"aws-sigv4","version":"1.8.0","platform":"ruby","checksum":"84dd99768b91b93b63d1d8e53ee837cfd06ab402812772a7899a78f9f9117cbc"},
 {"name":"axe-core-api","version":"4.9.1","platform":"ruby","checksum":"9ea7ac16bfee1cb3545345d210878aa8cccfb41b493e00fe1faab79af4d9fed8"},
@@ -61,7 +61,7 @@
 {"name":"bigdecimal","version":"3.1.7","platform":"ruby","checksum":"e799b369a0005fc6d62eed7ef19139ac9bc319cc51470c637b9dcdf593600133"},
 {"name":"bindata","version":"2.4.11","platform":"ruby","checksum":"c38e0c99ffcd80c10a0a7ae6c8586d2fe26bf245cbefac90bec8764523220f6a"},
 {"name":"binding_of_caller","version":"1.0.0","platform":"ruby","checksum":"3aad25d1d538fc6e7972978f9bf512ccd992784009947c81633bea776713161d"},
-{"name":"bootsnap","version":"1.18.3","platform":"ruby","checksum":"d7b70de761e2fb1d63d21dd941b393c881c5cab5575211369cede788dfc034eb"},
+{"name":"bootsnap","version":"1.18.4","platform":"ruby","checksum":"ac4c42af397f7ee15521820198daeff545e4c360d2772c601fbdc2c07d92af55"},
 {"name":"browser","version":"5.3.1","platform":"ruby","checksum":"62745301701ff2c6c5d32d077bb12532b20be261929dcb52c6781ed0d5658b3c"},
 {"name":"builder","version":"3.2.4","platform":"ruby","checksum":"99caf08af60c8d7f3a6b004029c4c3c0bdaebced6c949165fe98f1db27fbbc10"},
 {"name":"bullet","version":"7.1.2","platform":"ruby","checksum":"429725c174cb74ca0ae99b9720bf22cab80be59ee9401805f7ecc9ac62cbb3bb"},
@@ -161,7 +161,7 @@
 {"name":"extended-markdown-filter","version":"0.7.0","platform":"ruby","checksum":"c8eeef7409fbae18c6b407cd3e4eeb5d25c35cb08fe1ac06f375df3db2d4f138"},
 {"name":"factory_bot","version":"6.4.5","platform":"ruby","checksum":"d71dd29bc95f0ec2bf27e3dd9b1b4d557bd534caca744663cb7db4bacf3198be"},
 {"name":"factory_bot_rails","version":"6.4.3","platform":"ruby","checksum":"ea73ceac1c0ff3dc11fff390bf2ea8a2604066525ed8ecd3b3bc2c267226dcc8"},
-{"name":"faraday","version":"2.10.0","platform":"ruby","checksum":"1a3e6c02acc511fc334d799521f1013e449bde38aa2dceb3af71e8030519bda9"},
+{"name":"faraday","version":"2.10.1","platform":"ruby","checksum":"6bc9fba3f6191684449d94215195b2c43e2a07bd40b321d245881450923d9a80"},
 {"name":"faraday-follow_redirects","version":"0.3.0","platform":"ruby","checksum":"d92d975635e2c7fe525dd494fcd4b9bb7f0a4a0ec0d5f4c15c729530fdb807f9"},
 {"name":"faraday-http-cache","version":"2.5.0","platform":"ruby","checksum":"64b7366d66e508e1c3dd855ebb20ce9da429330e412a23d9ebbc0a7a7b227463"},
 {"name":"faraday-multipart","version":"1.0.4","platform":"ruby","checksum":"9012021ab57790f7d712f590b48d5f948b19b43cfa11ca83e6459f06090b0725"},
@@ -251,24 +251,24 @@
 {"name":"google-cloud-artifact_registry-v1","version":"0.11.0","platform":"ruby","checksum":"ba80d2dce9767e663931ded7929b7f8bf5983a6e2ea68078e27e7ca9a940783e"},
 {"name":"google-cloud-common","version":"1.1.0","platform":"ruby","checksum":"738db08fd144b4fe37b4578ffd63308b64a86fd59f6979d240048f917a6fb5fb"},
 {"name":"google-cloud-compute-v1","version":"2.6.0","platform":"ruby","checksum":"b96059b33ffc2f25644d20161a0c1aa1331197073c2e44786b18f8b670f1141e"},
-{"name":"google-cloud-core","version":"1.6.0","platform":"ruby","checksum":"ea1744cd5a3085d3072de3fab9106afc769cd198609ebb5c6eeb5f13da46b72a"},
-{"name":"google-cloud-env","version":"1.6.0","platform":"ruby","checksum":"6179acb946975892c7908748df5722a4ebadfc8cf5bb7b0d8d933ca67183fa15"},
+{"name":"google-cloud-core","version":"1.7.0","platform":"ruby","checksum":"748028a48530ea5bce159722eb7a02cd0562f1c52f0569e9ed69da3cba6b4f35"},
+{"name":"google-cloud-env","version":"2.1.1","platform":"ruby","checksum":"cf4bb8c7d517ee1ea692baedf06e0b56ce68007549d8d5a66481aa9f97f46999"},
 {"name":"google-cloud-errors","version":"1.3.0","platform":"ruby","checksum":"450b681e24c089a20721a01acc4408bb4a7b0df28c175aaab488da917480d64b"},
 {"name":"google-cloud-location","version":"0.6.0","platform":"ruby","checksum":"386c99ca156e5cac413731c055d7d9c55629860129ad7658a2bf39ea5004d2d0"},
 {"name":"google-cloud-profiler-v2","version":"0.4.0","platform":"ruby","checksum":"53fc2ab175d08f54233c644310d47798feac996220916815c4fb44c937b5d3e3"},
 {"name":"google-cloud-storage","version":"1.45.0","platform":"ruby","checksum":"f280abda4e608f9e91433f9dd907be4a45cdbf251ffeb275d713548e515c6300"},
 {"name":"google-cloud-storage_transfer","version":"1.2.0","platform":"ruby","checksum":"132901f50889e02a0d378e6117c6408cbfc4fdbd15c9d31fabec4f4189ef1658"},
 {"name":"google-cloud-storage_transfer-v1","version":"0.8.0","platform":"ruby","checksum":"9dbef80275db556e046bb24139ca6559affe641d1e38b2537b8caaf2f8896176"},
-{"name":"google-protobuf","version":"3.25.3","platform":"aarch64-linux","checksum":"5ea9d20d60e5d3bef8d881b426946345e5ac6cf4779ac81cd900e45f40567243"},
-{"name":"google-protobuf","version":"3.25.3","platform":"arm64-darwin","checksum":"c42cddd21c4f09fd756fe0efd70ab6c8006dd67ffbb04e99fe7310f49923d18c"},
-{"name":"google-protobuf","version":"3.25.3","platform":"java","checksum":"5790f115de6a61adf80c9ba4d238f4a8ca43e56c879c35d98f56c153a04d49b6"},
-{"name":"google-protobuf","version":"3.25.3","platform":"ruby","checksum":"39bd97cbc7631905e76cdf8f1bf3dda1c3d05200d7e23f575aced78930fbddd6"},
-{"name":"google-protobuf","version":"3.25.3","platform":"x64-mingw-ucrt","checksum":"23f667eda9a2f8e4ade886015bdd6bf769dbec9619fec816f6b6df46c8bf7a3a"},
-{"name":"google-protobuf","version":"3.25.3","platform":"x64-mingw32","checksum":"4b63561bb4809f675601cf585158b4a5a4ff7ab5179051c6b7119b98cde9800e"},
-{"name":"google-protobuf","version":"3.25.3","platform":"x86-linux","checksum":"7a0e74f14affbce6024595cdb55e7e8c5a51716f0bb11b103c63cbe3a3a0e348"},
-{"name":"google-protobuf","version":"3.25.3","platform":"x86-mingw32","checksum":"f513007357656b9772d49f61b4d5818f7b958965f3129a28a2361e62c32281fe"},
-{"name":"google-protobuf","version":"3.25.3","platform":"x86_64-darwin","checksum":"13d27e96e89835f642c444e32414fd50fabc29a125d78760ad067d6536214f02"},
-{"name":"google-protobuf","version":"3.25.3","platform":"x86_64-linux","checksum":"ceeba879d9313a2bd0600a97d6fe3cf529a9b37d12ca026f891996c118b7ffb2"},
+{"name":"google-protobuf","version":"3.25.4","platform":"aarch64-linux","checksum":"d155538358d03af4bcac908811d2c8b287573005f0549d8cf55354ad0c0928ff"},
+{"name":"google-protobuf","version":"3.25.4","platform":"arm64-darwin","checksum":"6d39a99a7910fc6b03479c298f38be9497938f78c0f08c89d7542bc8205be8c7"},
+{"name":"google-protobuf","version":"3.25.4","platform":"java","checksum":"475bd51efa276fa3668abcd3978d8937bae5894ffe9d963c0a9e5cf151a1ee35"},
+{"name":"google-protobuf","version":"3.25.4","platform":"ruby","checksum":"a1c594ca9d99c894e558f984d70731a8935ec639e75865f0181cab126a0aef0e"},
+{"name":"google-protobuf","version":"3.25.4","platform":"x64-mingw-ucrt","checksum":"4c2e26a244f639aa658a33d74ab1a3ff74210756c14588b0bbf0d6b93ff388aa"},
+{"name":"google-protobuf","version":"3.25.4","platform":"x64-mingw32","checksum":"343134507de2602079837727cc1121af39bce3e382e91f3aa14a259ae78be7d6"},
+{"name":"google-protobuf","version":"3.25.4","platform":"x86-linux","checksum":"7721d1b40f3edd951484b448f4b404bdc954159026c93ba5ee37a3a0e386a92c"},
+{"name":"google-protobuf","version":"3.25.4","platform":"x86-mingw32","checksum":"fb00901bb3803ed361eb8e667af4d1ab2136c43ae870cc8b3a2ded08ceee2072"},
+{"name":"google-protobuf","version":"3.25.4","platform":"x86_64-darwin","checksum":"bf53084c00d78a8a960af5a3fc5175c59f1f4708ddd00398781a2c3a3370c977"},
+{"name":"google-protobuf","version":"3.25.4","platform":"x86_64-linux","checksum":"9e8e66fb5a00cf90f88f37b07e7da10ca9e176e28a3314fc80c4e7fdab120aeb"},
 {"name":"googleapis-common-protos","version":"1.4.0","platform":"ruby","checksum":"da2380fb5ab1563580816c74e8d684ac17512c3654c829a3ee84f6d6139de382"},
 {"name":"googleapis-common-protos-types","version":"1.5.0","platform":"ruby","checksum":"5769cf7376abc86ef7f5897a4aaca1d5c5a3c49ddabeddd2c251fcf8155f858b"},
 {"name":"googleauth","version":"1.8.1","platform":"ruby","checksum":"814adadaaa1221dce72a67131e3ecbd6d23491a161ec84fb15fd353b87d8c9e7"},
@@ -457,6 +457,7 @@
 {"name":"opentelemetry-common","version":"0.21.0","platform":"ruby","checksum":"fe891a44583a20bc3217b324aec76d066504494951682d391cfd57d40cd01c98"},
 {"name":"opentelemetry-exporter-otlp","version":"0.27.0","platform":"ruby","checksum":"0050cf6ade97186ee3176cd8c44087b70cb739c3c624dbfc7c33097a3a189e4c"},
 {"name":"opentelemetry-helpers-sql-obfuscation","version":"0.1.0","platform":"ruby","checksum":"bc6ef1373dbcf979647091b3bfc99d7b6fb9669f74c3ae184f58b48adfc8d432"},
+{"name":"opentelemetry-instrumentation-action_mailer","version":"0.1.0","platform":"ruby","checksum":"52fe3400bb9051d079a2aed0858fc2d98c677bfb66d163e3b438b67c795dd1a9"},
 {"name":"opentelemetry-instrumentation-action_pack","version":"0.9.0","platform":"ruby","checksum":"c5df8472afc9cdbfc1425d9af7816b9cfc1a1a69b86621f1fc624974bd9acb9a"},
 {"name":"opentelemetry-instrumentation-action_view","version":"0.7.0","platform":"ruby","checksum":"bc7c714be0b4bb76843085c29ecc9465e65cb7fe6722e34c71629e44f8c3cb75"},
 {"name":"opentelemetry-instrumentation-active_job","version":"0.7.1","platform":"ruby","checksum":"da24806c9d92fe580db42638f6c763fe1324ff90aa147d45d4247f8052c68089"},
@@ -475,7 +476,7 @@
 {"name":"opentelemetry-instrumentation-net_http","version":"0.22.5","platform":"ruby","checksum":"99bd10e03918032ea6e4670c121c8778403e729d343446a5901d1126fcc5f7be"},
 {"name":"opentelemetry-instrumentation-pg","version":"0.27.3","platform":"ruby","checksum":"b689e9c47185729d671669a0f7c206c013d9c8dfc7a355901ec50b12c94e35cd"},
 {"name":"opentelemetry-instrumentation-rack","version":"0.24.4","platform":"ruby","checksum":"be35db05a459a608e2854baea7257daadd37d34fe7a274ff75cb63b5896e82b5"},
-{"name":"opentelemetry-instrumentation-rails","version":"0.30.1","platform":"ruby","checksum":"73060c76be009c75af5c3c4bb94bf9883cb5770d6a5115bcddbc590afc823142"},
+{"name":"opentelemetry-instrumentation-rails","version":"0.30.2","platform":"ruby","checksum":"42ddd023afa551f60ea632712d5125ce8b781eeb8d311a02efc2c62e02613a12"},
 {"name":"opentelemetry-instrumentation-rake","version":"0.2.2","platform":"ruby","checksum":"fbde8a6aab77c09bf0f94d914dd26dcf2e23ec67e2300f06a1cb8294a97d8020"},
 {"name":"opentelemetry-instrumentation-redis","version":"0.25.5","platform":"ruby","checksum":"d7ce798069539ab25a0d1685837d482eb40d076c642b4b15cecfed56516333d7"},
 {"name":"opentelemetry-instrumentation-sidekiq","version":"0.25.4","platform":"ruby","checksum":"4ce1b2e0952321d504d4c3e0e4fcbd5d090ff1f4de4cb214c6aa79d70ce8a3a3"},
@@ -615,8 +616,8 @@
 {"name":"rubocop-rails","version":"2.24.1","platform":"ruby","checksum":"03edf766954947468f3686cedb69142fae4f10e2007287f89cc0ea7072eeac19"},
 {"name":"rubocop-rspec","version":"2.27.1","platform":"ruby","checksum":"2f27ce04700be75db65afe83d7993a36e0fafd07ec062222f4b3cc10137a7a9e"},
 {"name":"ruby-fogbugz","version":"0.3.0","platform":"ruby","checksum":"5e04cde474648f498a71cf1e1a7ab42c66b953862fbe224f793ec0a7a1d5f657"},
-{"name":"ruby-lsp","version":"0.17.4","platform":"ruby","checksum":"49ea1d6a49f5cfb79296fcb96c1988768737c2325270f6dce5aec64a1840e213"},
-{"name":"ruby-lsp-rails","version":"0.3.8","platform":"ruby","checksum":"847d3ac0a131a794831ceb3ad780ab3e00ddb4e91ab8e965017c817a6068a975"},
+{"name":"ruby-lsp","version":"0.17.14","platform":"ruby","checksum":"02ee435f03aaf3f858dc1c1f8a001fbb85887a3291534c054e556340712fb1c9"},
+{"name":"ruby-lsp-rails","version":"0.3.13","platform":"ruby","checksum":"689bf2d0961cb73192d3c65c589000b9ed99275cf4abb5fe2c5243e0e42fe7fa"},
 {"name":"ruby-lsp-rspec","version":"0.1.12","platform":"ruby","checksum":"34fe775e27dc4c2f31df901f3d44ee885ed0806b05ba9be0ea564682dd4811e5"},
 {"name":"ruby-magic","version":"0.6.0","platform":"ruby","checksum":"7b2138877b7d23aff812c95564eba6473b74b815ef85beb0eb792e729a2b6101"},
 {"name":"ruby-openai","version":"3.7.0","platform":"ruby","checksum":"fb735d4c055e282ade264cab9864944c05a8a10e0cddd45a0551e8a9851b1850"},
@@ -662,7 +663,7 @@
 {"name":"sd_notify","version":"0.1.1","platform":"ruby","checksum":"cbc7ac6caa7cedd26b30a72b5eeb6f36050dc0752df263452ea24fb5a4ad3131"},
 {"name":"seed-fu","version":"2.3.7","platform":"ruby","checksum":"f19673443e9af799b730e3d4eca6a89b39e5a36825015dffd00d02ea3365cf74"},
 {"name":"selenium-webdriver","version":"4.23.0","platform":"ruby","checksum":"490aeddee879cfea58a4db6628338d60a905bc56cd5e1a60dfbaa9090a19b801"},
-{"name":"semver_dialects","version":"3.4.0","platform":"ruby","checksum":"9625fd343cd47335961ccd71249ad905b1a7c03c514a031b35540bc2946eab59"},
+{"name":"semver_dialects","version":"3.4.3","platform":"ruby","checksum":"ae3ea99f7806693ab031df3121017c102f1a35f4fc2524674055cb446fb9cc82"},
 {"name":"sentry-rails","version":"5.19.0","platform":"ruby","checksum":"d4ad5323feea8e876f9feb2f50b126a3be3b4f6e137d37c360c31d52b6861995"},
 {"name":"sentry-ruby","version":"5.19.0","platform":"ruby","checksum":"0ddf89f246840a5c50df6c68b8eb59ad23ee4adb4a91187a414bb196cee1838b"},
 {"name":"sentry-sidekiq","version":"5.19.0","platform":"ruby","checksum":"1b16ec4b15b35dcbdd182494d612aae7ec5c923a9ed6814aed1b56103feecb80"},
@@ -739,7 +740,7 @@
 {"name":"tty-prompt","version":"0.23.1","platform":"ruby","checksum":"fcdbce905238993f27eecfdf67597a636bc839d92192f6a0eef22b8166449ec8"},
 {"name":"tty-reader","version":"0.9.0","platform":"ruby","checksum":"c62972c985c0b1566f0e56743b6a7882f979d3dc32ff491ed490a076f899c2b1"},
 {"name":"tty-screen","version":"0.8.1","platform":"ruby","checksum":"6508657c38f32bdca64880abe201ce237d80c94146e1f9b911cba3c7823659a2"},
-{"name":"typhoeus","version":"1.4.0","platform":"ruby","checksum":"fff9880d5dc35950e7706cf132fd297f377c049101794be1cf01c95567f642d4"},
+{"name":"typhoeus","version":"1.4.1","platform":"ruby","checksum":"1c17db8364bd45ab302dc61e460173c3e69835896be88a3df07c206d5c55ef7c"},
 {"name":"tzinfo","version":"2.0.6","platform":"ruby","checksum":"8daf828cc77bcf7d63b0e3bdb6caa47e2272dcfaf4fbfe46f8c3a9df087a829b"},
 {"name":"uber","version":"0.1.0","platform":"ruby","checksum":"5beeb407ff807b5db994f82fa9ee07cfceaa561dad8af20be880bc67eba935dc"},
 {"name":"undercover","version":"0.5.0","platform":"ruby","checksum":"ef99a8478be5466fb13fcd199f659ae308b81f71145a5a4e57428ff67d109fae"},
diff --git a/Gemfile.next.lock b/Gemfile.next.lock
index 899fa89dfda9f5a21fe61ed7367af91a0a9e804d..e1d0ad353588a4ab56c0788c6e00a90748a04974 100644
--- a/Gemfile.next.lock
+++ b/Gemfile.next.lock
@@ -331,18 +331,18 @@ GEM
     awesome_print (1.9.2)
     awrence (1.2.1)
     aws-eventstream (1.3.0)
-    aws-partitions (1.960.0)
+    aws-partitions (1.877.0)
     aws-sdk-cloudformation (1.41.0)
       aws-sdk-core (~> 3, >= 3.99.0)
       aws-sigv4 (~> 1.1)
-    aws-sdk-core (3.201.3)
+    aws-sdk-core (3.201.4)
       aws-eventstream (~> 1, >= 1.3.0)
       aws-partitions (~> 1, >= 1.651.0)
       aws-sigv4 (~> 1.8)
       jmespath (~> 1, >= 1.6.1)
-    aws-sdk-kms (1.88.0)
-      aws-sdk-core (~> 3, >= 3.201.0)
-      aws-sigv4 (~> 1.5)
+    aws-sdk-kms (1.76.0)
+      aws-sdk-core (~> 3, >= 3.188.0)
+      aws-sigv4 (~> 1.1)
     aws-sdk-s3 (1.157.0)
       aws-sdk-core (~> 3, >= 3.201.0)
       aws-sdk-kms (~> 1)
@@ -381,7 +381,7 @@ GEM
     bindata (2.4.11)
     binding_of_caller (1.0.0)
       debug_inspector (>= 0.0.1)
-    bootsnap (1.18.3)
+    bootsnap (1.18.4)
       msgpack (~> 1.2)
     browser (5.3.1)
     builder (3.2.4)
@@ -596,7 +596,7 @@ GEM
     factory_bot_rails (6.4.3)
       factory_bot (~> 6.4)
       railties (>= 5.0.0)
-    faraday (2.10.0)
+    faraday (2.10.1)
       faraday-net_http (>= 2.0, < 3.2)
       logger
     faraday-follow_redirects (0.3.0)
@@ -844,11 +844,11 @@ GEM
       gapic-common (>= 0.20.0, < 2.a)
       google-cloud-common (~> 1.0)
       google-cloud-errors (~> 1.0)
-    google-cloud-core (1.6.0)
-      google-cloud-env (~> 1.0)
+    google-cloud-core (1.7.0)
+      google-cloud-env (>= 1.0, < 3.a)
       google-cloud-errors (~> 1.0)
-    google-cloud-env (1.6.0)
-      faraday (>= 0.17.3, < 3.0)
+    google-cloud-env (2.1.1)
+      faraday (>= 1.0, < 3.a)
     google-cloud-errors (1.3.0)
     google-cloud-location (0.6.0)
       gapic-common (>= 0.20.0, < 2.a)
@@ -870,7 +870,7 @@ GEM
     google-cloud-storage_transfer-v1 (0.8.0)
       gapic-common (>= 0.20.0, < 2.a)
       google-cloud-errors (~> 1.0)
-    google-protobuf (3.25.3)
+    google-protobuf (3.25.4)
     googleapis-common-protos (1.4.0)
       google-protobuf (~> 3.14)
       googleapis-common-protos-types (~> 1.2)
@@ -1284,6 +1284,10 @@ GEM
       opentelemetry-semantic_conventions
     opentelemetry-helpers-sql-obfuscation (0.1.0)
       opentelemetry-common (~> 0.20)
+    opentelemetry-instrumentation-action_mailer (0.1.0)
+      opentelemetry-api (~> 1.0)
+      opentelemetry-instrumentation-active_support (~> 0.1)
+      opentelemetry-instrumentation-base (~> 0.22.1)
     opentelemetry-instrumentation-action_pack (0.9.0)
       opentelemetry-api (~> 1.0)
       opentelemetry-instrumentation-base (~> 0.22.1)
@@ -1348,8 +1352,9 @@ GEM
       opentelemetry-api (~> 1.0)
       opentelemetry-common (~> 0.21.0)
       opentelemetry-instrumentation-base (~> 0.22.1)
-    opentelemetry-instrumentation-rails (0.30.1)
+    opentelemetry-instrumentation-rails (0.30.2)
       opentelemetry-api (~> 1.0)
+      opentelemetry-instrumentation-action_mailer (~> 0.1.0)
       opentelemetry-instrumentation-action_pack (~> 0.9.0)
       opentelemetry-instrumentation-action_view (~> 0.7.0)
       opentelemetry-instrumentation-active_job (~> 0.7.0)
@@ -1670,13 +1675,13 @@ GEM
     ruby-fogbugz (0.3.0)
       crack (~> 0.4)
       multipart-post (~> 2.0)
-    ruby-lsp (0.17.4)
+    ruby-lsp (0.17.14)
       language_server-protocol (~> 3.17.0)
       prism (>= 0.29.0, < 0.31)
       rbs (>= 3, < 4)
       sorbet-runtime (>= 0.5.10782)
-    ruby-lsp-rails (0.3.8)
-      ruby-lsp (>= 0.17.2, < 0.18.0)
+    ruby-lsp-rails (0.3.13)
+      ruby-lsp (>= 0.17.12, < 0.18.0)
     ruby-lsp-rspec (0.1.12)
       ruby-lsp (~> 0.17.0)
     ruby-magic (0.6.0)
@@ -1715,7 +1720,7 @@ GEM
       rexml (~> 3.2, >= 3.2.5)
       rubyzip (>= 1.2.2, < 3.0)
       websocket (~> 1.0)
-    semver_dialects (3.4.0)
+    semver_dialects (3.4.3)
       deb_version (~> 1.0.1)
       pastel (~> 0.8.0)
       thor (~> 1.3)
@@ -1879,7 +1884,7 @@ GEM
       tty-screen (~> 0.8)
       wisper (~> 2.0)
     tty-screen (0.8.1)
-    typhoeus (1.4.0)
+    typhoeus (1.4.1)
       ethon (>= 0.9.0)
     tzinfo (2.0.6)
       concurrent-ruby (~> 1.0)