From 3c23892a11bbb28f0ebc101d2007e0e8504d8534 Mon Sep 17 00:00:00 2001 From: "depfu[bot]" <23717796+depfu[bot]@users.noreply.github.com> Date: Thu, 19 Mar 2026 00:00:59 +0000 Subject: [PATCH 01/13] Update Ruby to version 3.4.9 --- .ruby-version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ruby-version b/.ruby-version index 7921bd0c..7bcbb380 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -3.4.8 +3.4.9 From 2bf6011a2a598c212b0d3df442f420acb0b5fd13 Mon Sep 17 00:00:00 2001 From: "depfu[bot]" <23717796+depfu[bot]@users.noreply.github.com> Date: Thu, 19 Mar 2026 14:15:35 +0000 Subject: [PATCH 02/13] Update json to version 2.19.2 --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index ff2d8288..a7fcb3e1 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -152,7 +152,7 @@ GEM rails-dom-testing (>= 1, < 3) railties (>= 4.2.0) thor (>= 0.14, < 2.0) - json (2.18.1) + json (2.19.2) json_api_client (1.23.0) activemodel (>= 6.0.0) activesupport (>= 6.0.0) From f4ae24081af0aae77445cff9e2b651a86e8debd5 Mon Sep 17 00:00:00 2001 From: "depfu[bot]" <23717796+depfu[bot]@users.noreply.github.com> Date: Thu, 19 Mar 2026 22:20:16 +0000 Subject: [PATCH 03/13] Update oj to version 3.16.16 --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index a7fcb3e1..54a68e62 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -214,7 +214,7 @@ GEM racc (~> 1.4) nokogiri (1.19.1-x86_64-linux-gnu) racc (~> 1.4) - oj (3.16.15) + oj (3.16.16) bigdecimal (>= 3.0) ostruct (>= 0.2) ostruct (0.6.3) From 4d62fce410ea7cb6881113aeb94eb5771d312051 Mon Sep 17 00:00:00 2001 From: "depfu[bot]" <23717796+depfu[bot]@users.noreply.github.com> Date: Sat, 21 Mar 2026 19:25:14 +0000 Subject: [PATCH 04/13] Update mocha to version 3.1.0 --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 54a68e62..c9d12e4c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -191,7 +191,7 @@ GEM minitest-rails-capybara (0.0.2) capybara minitest-rails - mocha (3.0.2) + mocha (3.1.0) ruby2_keywords (>= 0.0.5) msgpack (1.8.0) multi_json (1.15.0) From efaa6567ddd1020413b8f575e3bf0b6901a3d3de Mon Sep 17 00:00:00 2001 From: "depfu[bot]" <23717796+depfu[bot]@users.noreply.github.com> Date: Mon, 23 Mar 2026 09:49:49 +0000 Subject: [PATCH 05/13] Update rubocop to version 1.85.1 --- Gemfile.lock | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index c9d12e4c..d10cc45c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -153,6 +153,9 @@ GEM railties (>= 4.2.0) thor (>= 0.14, < 2.0) json (2.19.2) + json-schema (6.2.0) + addressable (~> 2.8) + bigdecimal (>= 3.1, < 5) json_api_client (1.23.0) activemodel (>= 6.0.0) activesupport (>= 6.0.0) @@ -182,6 +185,8 @@ GEM net-smtp marcel (1.1.0) matrix (0.4.2) + mcp (0.9.0) + json-schema (>= 4.1) method_source (1.1.0) mini_mime (1.1.5) minitest (5.27.0) @@ -219,7 +224,7 @@ GEM ostruct (>= 0.2) ostruct (0.6.3) parallel (1.27.0) - parser (3.3.10.1) + parser (3.3.10.2) ast (~> 2.4.1) racc prism (1.9.0) @@ -277,10 +282,11 @@ GEM roo (2.8.3) nokogiri (~> 1) rubyzip (>= 1.3.0, < 3.0.0) - rubocop (1.84.1) + rubocop (1.85.1) json (~> 2.3) language_server-protocol (~> 3.17.0.2) lint_roller (~> 1.1.0) + mcp (~> 0.6) parallel (~> 1.10) parser (>= 3.3.0.2) rainbow (>= 2.2.2, < 4.0) @@ -288,7 +294,7 @@ GEM rubocop-ast (>= 1.49.0, < 2.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 2.4.0, < 4.0) - rubocop-ast (1.49.0) + rubocop-ast (1.49.1) parser (>= 3.3.7.2) prism (~> 1.7) rubocop-rails (2.34.3) From 8d09c0d99bef928582853c8ffd74521c56d5d09e Mon Sep 17 00:00:00 2001 From: Stephen Hulme Date: Mon, 23 Mar 2026 09:57:30 +0000 Subject: [PATCH 06/13] style: remove empty classes --- .rubocop_todo.yml | 7 ------- app/models/presenter.rb | 7 ------- test/test_helper.rb | 7 ------- 3 files changed, 21 deletions(-) delete mode 100644 app/models/presenter.rb diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index b1a702f4..43d9952b 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -49,13 +49,6 @@ Lint/EmptyBlock: - 'Gemfile' - 'config/routes.rb' -# Offense count: 2 -# Configuration parameters: AllowComments. -Lint/EmptyClass: - Exclude: - - 'app/models/presenter.rb' - - 'test/test_helper.rb' - # Offense count: 3 # Configuration parameters: AllowedParentClasses. Lint/MissingSuper: diff --git a/app/models/presenter.rb b/app/models/presenter.rb deleted file mode 100644 index a20e4c18..00000000 --- a/app/models/presenter.rb +++ /dev/null @@ -1,7 +0,0 @@ -# frozen_string_literal: true - -## -# Presenters are used to represent objects to the view model -# This provides a few universal helper methods -class Presenter -end diff --git a/test/test_helper.rb b/test/test_helper.rb index 60ca81cd..17872f04 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -66,10 +66,3 @@ class ActionDispatch::IntegrationTest Capybara.default_driver = :headless_chrome Capybara.default_max_wait_time = 5 - -class ActiveSupport::TestCase - # Setup all fixtures in test/fixtures/*.(yml|csv) for all tests in alphabetical order. - # fixtures :all - - # Add more helper methods to be used by all tests here... -end From ae08313a960211e34877fd1d986a1924033902ad Mon Sep 17 00:00:00 2001 From: Stephen Hulme Date: Mon, 23 Mar 2026 09:59:55 +0000 Subject: [PATCH 07/13] style: update rubocop config and todo --- .rubocop.yml | 3 +++ .rubocop_todo.yml | 39 +++++++++++++-------------------------- 2 files changed, 16 insertions(+), 26 deletions(-) diff --git a/.rubocop.yml b/.rubocop.yml index 1b52913a..cc572bf8 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -9,6 +9,9 @@ AllCops: - vendor/**/* NewCops: enable +Layout/IndentationWidth: + EnforcedStyleAlignWith: relative_to_receiver + Rails/InverseOf: Enabled: false diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 43d9952b..8f63b9cc 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -1,6 +1,6 @@ # This configuration was generated by # `rubocop --auto-gen-config --no-exclude-limit` -# on 2025-08-27 14:16:51 UTC using RuboCop version 1.79.2. +# on 2026-03-23 09:57:06 UTC using RuboCop version 1.85.1. # The point is for the user to remove these configuration records # one by one as the offenses are removed from the code base. # Note that changes in the inspected code, or installation of new @@ -21,7 +21,7 @@ Layout/ExtraSpacing: Exclude: - 'test/controllers/users_controller_test.rb' -# Offense count: 31 +# Offense count: 32 # This cop supports safe autocorrection (--autocorrect). # Configuration parameters: EnforcedStyle, IndentationWidth. # SupportedStyles: special_inside_parentheses, consistent, align_braces @@ -64,7 +64,7 @@ Lint/ParenthesesAsGroupedExpression: # Offense count: 5 # This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: AutoCorrect, IgnoreEmptyBlocks, AllowUnusedKeywordArguments. +# Configuration parameters: IgnoreEmptyBlocks, AllowUnusedKeywordArguments. Lint/UnusedBlockArgument: Exclude: - 'app/controllers/qc_assets_controller.rb' @@ -74,7 +74,7 @@ Lint/UnusedBlockArgument: # Offense count: 3 # This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: AutoCorrect, AllowUnusedKeywordArguments, IgnoreEmptyMethods, IgnoreNotImplementedMethods, NotImplementedExceptions. +# Configuration parameters: AllowUnusedKeywordArguments, IgnoreEmptyMethods, IgnoreNotImplementedMethods, NotImplementedExceptions. # NotImplementedExceptions: NotImplementedError Lint/UnusedMethodArgument: Exclude: @@ -82,14 +82,12 @@ Lint/UnusedMethodArgument: - 'app/models/gatekeeper/robot.rb' - 'app/models/presenter/lot.rb' -# Offense count: 4 +# Offense count: 3 # This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: AutoCorrect. Lint/UselessAssignment: Exclude: - 'app/helpers/application_helper.rb' - 'app/models/gatekeeper/robot.rb' - - 'lib/tasks/config.rake' # Offense count: 21 # Configuration parameters: AllowedMethods, AllowedPatterns, CountRepeatedAttributes, Max. @@ -207,8 +205,6 @@ Rails/Delegate: - 'test/mock_api.rb' # Offense count: 5 -# Configuration parameters: Include. -# Include: **/app/controllers/**/*.rb, **/app/mailers/**/*.rb Rails/LexicallyScopedActionFilter: Exclude: - 'app/controllers/assets_controller.rb' @@ -264,21 +260,6 @@ Style/IfUnlessModifier: - 'lib/tasks/config.rake' - 'test/mock_api.rb' -# Offense count: 1 -# This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: EnforcedStyle. -# SupportedStyles: line_count_dependent, lambda, literal -Style/Lambda: - Exclude: - - 'lib/tasks/config.rake' - -# Offense count: 1 -# This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: . -# SupportedStyles: call, braces -Style/LambdaCall: - EnforcedStyle: braces - # Offense count: 5 Style/MissingRespondToMissing: Exclude: @@ -337,6 +318,12 @@ Style/PreferredHashMethods: - 'app/models/qc_asset_creator/plate_conversion.rb' - 'test/mock_api.rb' +# Offense count: 1 +# This cop supports unsafe autocorrection (--autocorrect-all). +Style/ReduceToHash: + Exclude: + - 'app/models/qc_asset_creator/multiple_tag2_conversion.rb' + # Offense count: 4 # This cop supports safe autocorrection (--autocorrect). Style/StderrPuts: @@ -384,9 +371,9 @@ Style/ZeroLengthPredicate: - 'app/models/gatekeeper/plate.rb' - 'app/models/gatekeeper/tube.rb' -# Offense count: 78 +# Offense count: 76 # This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: Max, AllowHeredoc, AllowURI, AllowQualifiedName, URISchemes, IgnoreCopDirectives, AllowedPatterns, SplitStrings. +# Configuration parameters: Max, AllowHeredoc, AllowURI, AllowQualifiedName, URISchemes, AllowRBSInlineAnnotation, AllowCopDirectives, AllowedPatterns, SplitStrings. # URISchemes: http, https Layout/LineLength: Exclude: From 17f7704c1d26cd712350b07cd8d646b26060c807 Mon Sep 17 00:00:00 2001 From: Stephen Hulme Date: Tue, 24 Mar 2026 09:53:46 +0000 Subject: [PATCH 08/13] fix: add request logger middleware --- config/initializers/request_logger.rb | 11 ++++ lib/middleware/request_logger.rb | 87 +++++++++++++++++++++++++++ 2 files changed, 98 insertions(+) create mode 100644 config/initializers/request_logger.rb create mode 100644 lib/middleware/request_logger.rb diff --git a/config/initializers/request_logger.rb b/config/initializers/request_logger.rb new file mode 100644 index 00000000..3a94825a --- /dev/null +++ b/config/initializers/request_logger.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +require_relative '../../lib/middleware/request_logger' + +Rails.application.configure do + # Insert RequestLogger near the top, before Rails::Rack::Logger + config.middleware.insert_before(Rails::Rack::Logger, Middleware::RequestLogger) +end + +# Add backtrace silencers for middleware so that we don't see it in backtraces. +Rails.backtrace_cleaner.add_silencer { |line| line.include?('request_logger') } diff --git a/lib/middleware/request_logger.rb b/lib/middleware/request_logger.rb new file mode 100644 index 00000000..d2ad7bd9 --- /dev/null +++ b/lib/middleware/request_logger.rb @@ -0,0 +1,87 @@ +# frozen_string_literal: true + +module Middleware + # Log request and response details for monitoring and high-level profiling. + # + # @param log_level [Symbol] the log level to use for logging requests (default: :info) + # @param environment_context [Hash] additional context to include in log entries, such as host and version information + # + # Returns a JSON parseable log entry like: + # [INFO] [RequestLogger] {"method":"GET","path":"/samples/1234","format":"html","status_code":200, + # "status_message":"OK","duration_ms":935,"client_ip":"172.21.43.210", + # "request_id":"9fd18098-dea3-46f0-83c8-c41852441db3","tags":["request","success"], + # "@timestamp":"2026-02-12T12:10:50.284+00:00"} + class RequestLogger + def initialize(app, log_level: :info, environment_context: nil) + @app = app + @log_level = log_level + @environment_context = environment_context + end + + def call(env) + response, elapsed_ms = elapsed_milliseconds { @app.call(env) } + + request = ActionDispatch::Request.new(env) + log_request(request, response, elapsed_ms) + + response + end + + private + + # Get the current clock time using the Rack::Runtime clock + def clock_time + Rack::Utils.clock_time + end + + def elapsed_milliseconds + start_time = clock_time + result = yield + end_time = clock_time + + elapsed_ms = ((end_time - start_time) * 1000).round + [result, elapsed_ms] + end + + def tag_for_status(status_code) + case status_code + when 100..199 then 'informational' + when 200..299 then 'success' + when 300..399 then 'redirection' + when 400..499 then 'client_error' + when 500..599 then 'server_error' + end + end + + def tags(status_code) + tags = ['request'] + tags << tag_for_status(status_code) + tags.compact! + tags + end + + def log_request(request, response, elapsed_ms) # rubocop:disable Metrics/AbcSize + status_code, _headers, _body = response + + status_message = Rack::Utils::HTTP_STATUS_CODES[status_code] || 'Unknown Status' + timestamp = Time.zone.now.iso8601(3) + + record = { + method: request.request_method, + url: request.fullpath, + path: request.path, + format: request.format.symbol, + status_code: status_code, + status_message: status_message, + duration_ms: elapsed_ms, + client_ip: request.remote_ip, + request_id: request.request_id, + tags: tags(status_code), + '@timestamp': timestamp + } + record.merge!(@environment_context) if @environment_context.present? + + Rails.logger.public_send(@log_level, "[RequestLogger] #{record.to_json}") + end + end +end From 59aea60bcd92df1e7182444edda2498651c600ab Mon Sep 17 00:00:00 2001 From: Stephen Hulme Date: Tue, 24 Mar 2026 10:11:39 +0000 Subject: [PATCH 09/13] style: lint --- lib/middleware/request_logger.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/middleware/request_logger.rb b/lib/middleware/request_logger.rb index d2ad7bd9..5942cbc1 100644 --- a/lib/middleware/request_logger.rb +++ b/lib/middleware/request_logger.rb @@ -60,7 +60,7 @@ def tags(status_code) tags end - def log_request(request, response, elapsed_ms) # rubocop:disable Metrics/AbcSize + def log_request(request, response, elapsed_ms) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength status_code, _headers, _body = response status_message = Rack::Utils::HTTP_STATUS_CODES[status_code] || 'Unknown Status' From a9666396c98fad1245dc3a89f360304d8d92fe07 Mon Sep 17 00:00:00 2001 From: Stephen Hulme Date: Tue, 24 Mar 2026 11:48:49 +0000 Subject: [PATCH 10/13] fix: add inspired favicon --- README.md | 2 +- app/assets/config/manifest.js | 1 + app/assets/images/gate-kk.svg | 63 +++++++++++++++++++++++++ app/assets/stylesheets/gatekeeper.scss | 6 +++ app/views/pages/index.erb | 5 +- config/application.rb | 2 +- public/favicon.ico | Bin 0 -> 32038 bytes 7 files changed, 76 insertions(+), 3 deletions(-) create mode 100644 app/assets/images/gate-kk.svg diff --git a/README.md b/README.md index e517dfb4..22135250 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ [![Ruby Tests](https://github.com/sanger/gatekeeper/actions/workflows/ruby_test.yml/badge.svg)](https://github.com/sanger/gatekeeper/actions/workflows/ruby_test.yml) [![codecov](https://codecov.io/gh/sanger/gatekeeper/graph/badge.svg?token=VbxDtCNFAh)](https://codecov.io/gh/sanger/gatekeeper) -# Gatekeeper +# Reflected K Logo Gatekeeper Gatekeeper is used to track the production and validation of batches of tag plates for sequencing. It is designed to interface with the [Sequencescape](https://github.com/sanger/sequencescape) LIMS. diff --git a/app/assets/config/manifest.js b/app/assets/config/manifest.js index a3d7d420..eadf8b63 100644 --- a/app/assets/config/manifest.js +++ b/app/assets/config/manifest.js @@ -1,2 +1,3 @@ //= link application.css //= link application.js +//= link gate-kk.svg diff --git a/app/assets/images/gate-kk.svg b/app/assets/images/gate-kk.svg new file mode 100644 index 00000000..8068c60d --- /dev/null +++ b/app/assets/images/gate-kk.svg @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + diff --git a/app/assets/stylesheets/gatekeeper.scss b/app/assets/stylesheets/gatekeeper.scss index 99ded5d1..89b4ad02 100644 --- a/app/assets/stylesheets/gatekeeper.scss +++ b/app/assets/stylesheets/gatekeeper.scss @@ -24,6 +24,12 @@ h1 { padding: 0.5em; } +.logo { + margin-bottom: -11px; + margin-right: -11px; + vertical-align: baseline; +} + .gk-section { text-align: justify; } diff --git a/app/views/pages/index.erb b/app/views/pages/index.erb index a4779d32..8eff547a 100644 --- a/app/views/pages/index.erb +++ b/app/views/pages/index.erb @@ -1,5 +1,8 @@
-

<%= Gatekeeper::Application.config.name %>

+

+ <%= image_tag 'gate-kk.svg', alt: 'Reflected K Logo', class: 'logo'%> + <%= Gatekeeper::Application.config.name %> +

Register Lots
diff --git a/config/application.rb b/config/application.rb index b987323b..fd5f673f 100644 --- a/config/application.rb +++ b/config/application.rb @@ -34,7 +34,7 @@ class Application < Rails::Application config.i18n.fallbacks = [I18n.default_locale] # Ensures precompiling is faster by not loading the application - config.assets.initialize_on_precompile = false + config.assets.initialize_on_precompile = true config.disable_animations = false config.destroyable_states = %w[pending available] diff --git a/public/favicon.ico b/public/favicon.ico index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..b29d025fcfa7037f72a9b8ac31d9320c993f9d99 100644 GIT binary patch literal 32038 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 O8|aT!zp8##{r>;t40^l( literal 0 HcmV?d00001 From dbba25ef189470e61c5a0ff533e1b1c395191d76 Mon Sep 17 00:00:00 2001 From: "depfu[bot]" <23717796+depfu[bot]@users.noreply.github.com> Date: Fri, 27 Mar 2026 20:50:17 +0000 Subject: [PATCH 11/13] Update mcp to version 0.9.2 --- Gemfile.lock | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index d10cc45c..4517879f 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -88,14 +88,14 @@ GEM mutex_m securerandom (>= 0.3) tzinfo (~> 2.0) - addressable (2.8.7) - public_suffix (>= 2.0.2, < 7.0) + addressable (2.8.9) + public_suffix (>= 2.0.2, < 8.0) ast (2.4.3) autoprefixer-rails (10.4.7.0) execjs (~> 2) base64 (0.3.0) benchmark (0.5.0) - bigdecimal (4.0.1) + bigdecimal (4.1.0) bootsnap (1.23.0) msgpack (~> 1.2) bootstrap-datepicker-rails (1.10.0.1) @@ -185,7 +185,7 @@ GEM net-smtp marcel (1.1.0) matrix (0.4.2) - mcp (0.9.0) + mcp (0.9.2) json-schema (>= 4.1) method_source (1.1.0) mini_mime (1.1.5) @@ -233,7 +233,7 @@ GEM method_source (~> 1.0) pry-rails (0.3.11) pry (>= 0.13.0) - public_suffix (6.0.1) + public_suffix (7.0.5) puma (7.2.0) nio4r (~> 2.0) racc (1.8.1) From 8ef110b2651c0ee5c7a062ae61e2d879317fb122 Mon Sep 17 00:00:00 2001 From: "depfu[bot]" <23717796+depfu[bot]@users.noreply.github.com> Date: Mon, 30 Mar 2026 21:00:20 +0000 Subject: [PATCH 12/13] Update rubocop to version 1.86.0 --- Gemfile.lock | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 4517879f..1ffc7a22 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -152,10 +152,7 @@ GEM rails-dom-testing (>= 1, < 3) railties (>= 4.2.0) thor (>= 0.14, < 2.0) - json (2.19.2) - json-schema (6.2.0) - addressable (~> 2.8) - bigdecimal (>= 3.1, < 5) + json (2.19.3) json_api_client (1.23.0) activemodel (>= 6.0.0) activesupport (>= 6.0.0) @@ -185,8 +182,6 @@ GEM net-smtp marcel (1.1.0) matrix (0.4.2) - mcp (0.9.2) - json-schema (>= 4.1) method_source (1.1.0) mini_mime (1.1.5) minitest (5.27.0) @@ -224,7 +219,7 @@ GEM ostruct (>= 0.2) ostruct (0.6.3) parallel (1.27.0) - parser (3.3.10.2) + parser (3.3.11.1) ast (~> 2.4.1) racc prism (1.9.0) @@ -282,11 +277,10 @@ GEM roo (2.8.3) nokogiri (~> 1) rubyzip (>= 1.3.0, < 3.0.0) - rubocop (1.85.1) + rubocop (1.86.0) json (~> 2.3) language_server-protocol (~> 3.17.0.2) lint_roller (~> 1.1.0) - mcp (~> 0.6) parallel (~> 1.10) parser (>= 3.3.0.2) rainbow (>= 2.2.2, < 4.0) From 749a08b9d39197a884516b26aff6212f552a031b Mon Sep 17 00:00:00 2001 From: "depfu[bot]" <23717796+depfu[bot]@users.noreply.github.com> Date: Fri, 3 Apr 2026 18:05:26 +0000 Subject: [PATCH 13/13] Update rack to version 2.2.23 --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 1ffc7a22..2984b830 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -232,7 +232,7 @@ GEM puma (7.2.0) nio4r (~> 2.0) racc (1.8.1) - rack (2.2.22) + rack (2.2.23) rack-test (2.2.0) rack (>= 1.3) rails (7.0.10)