Skip to content

Bump sentry-ruby from 5.26.0 to 6.4.0#889

Closed
dependabot[bot] wants to merge 1 commit intomainfrom
dependabot/bundler/sentry-ruby-6.4.0
Closed

Bump sentry-ruby from 5.26.0 to 6.4.0#889
dependabot[bot] wants to merge 1 commit intomainfrom
dependabot/bundler/sentry-ruby-6.4.0

Conversation

@dependabot
Copy link
Copy Markdown
Contributor

@dependabot dependabot bot commented on behalf of github Feb 26, 2026

Bumps sentry-ruby from 5.26.0 to 6.4.0.

Changelog

Sourced from sentry-ruby's changelog.

6.4.0

Features

  • Add support for OTLP ingestion in sentry-opentelemetry (#2853)

    Sentry now has first class OTLP ingestion capabilities.

    Sentry.init do |config|
      ## ...
      config.otlp.enabled = true
    end

    Under the hood, this will setup:

    • An OpenTelemetry::Exporter that will automatically set up the OTLP ingestion endpoint from your DSN
      • You can turn this off with config.otlp.setup_otlp_traces_exporter = false to setup your own exporter
    • An OTLPPropagator that ensures Distributed Tracing works
      • You can turn this off with config.otlp.setup_propagator = false
    • Trace/Span linking for all other Sentry events such as Errors, Logs, Crons and Metrics

    If you were using the SpanProcessor before, we recommend migrating over to config.otlp since it's a much simpler setup.

  • Treat Sidekiq nil retry as true (#2864)

  • Queue time capture for Rack (#2838)

Bug Fixes

  • Fix MetricEvent timestamp serialization to float (#2862)
  • Fix CGI imports for ruby 4.x (#2863)
  • Always include scope user data in telemetry (#2866)

6.3.1

Bug Fixes

  • Use ActionDispatch::ExceptionWrapper for correct HTTP status code (#2850)
  • Add explicit dependency on logger gem to fix Ruby 4.0 warning (#2837)

Internal

  • Add external_propagation_context support (#2841)

6.3.0

Features

  • Implement new Sentry.metrics functionality (#2818)

... (truncated)

Commits

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

Bumps [sentry-ruby](https://github.com/getsentry/sentry-ruby) from 5.26.0 to 6.4.0.
- [Release notes](https://github.com/getsentry/sentry-ruby/releases)
- [Changelog](https://github.com/getsentry/sentry-ruby/blob/master/CHANGELOG.md)
- [Commits](getsentry/sentry-ruby@5.26.0...6.4.0)

---
updated-dependencies:
- dependency-name: sentry-ruby
  dependency-version: 6.4.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot bot added dependencies ruby Pull requests that update Ruby code labels Feb 26, 2026
@github-actions
Copy link
Copy Markdown
Contributor

4 similar comments
@github-actions
Copy link
Copy Markdown
Contributor

@github-actions
Copy link
Copy Markdown
Contributor

@github-actions
Copy link
Copy Markdown
Contributor

@github-actions
Copy link
Copy Markdown
Contributor

@github-actions
Copy link
Copy Markdown
Contributor

gem compare concurrent-ruby 1.3.5 1.3.6

Compared versions: ["1.3.5", "1.3.6"]
  DIFFERENT date:
    1.3.5: 2025-01-15 00:00:00 UTC
    1.3.6: 2025-12-13 00:00:00 UTC
  DIFFERENT rubygems_version:
    1.3.5: 3.3.26
    1.3.6: 3.3.27
  DIFFERENT version:
    1.3.5: 1.3.5
    1.3.6: 1.3.6
  DIFFERENT files:
    1.3.5->1.3.6:
      * Added:
            lib/concurrent-ruby/concurrent/collection/ruby_timeout_queue.rb +55/-0
            lib/concurrent-ruby/concurrent/collection/timeout_queue.rb +18/-0
      * Changed:
            CHANGELOG.md +6/-0
            README.md +4/-2
            lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb +1/-0
            lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb +2/-4
            lib/concurrent-ruby/concurrent/executor/java_executor_service.rb +1/-0
            lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb +2/-0
            lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb +2/-0
            lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb +54/-31
            lib/concurrent-ruby/concurrent/executor/timer_set.rb +4/-1
            lib/concurrent-ruby/concurrent/executors.rb +0/-1
            lib/concurrent-ruby/concurrent/mvar.rb +4/-4
            lib/concurrent-ruby/concurrent/promise.rb +1/-1
            lib/concurrent-ruby/concurrent/timer_task.rb +7/-2
            lib/concurrent-ruby/concurrent/version.rb +1/-1
  DIFFERENT extra_rdoc_files:
    1.3.5->1.3.6:
      * Changed:
            README.md +4/-2
            CHANGELOG.md +6/-0

2 similar comments
@github-actions
Copy link
Copy Markdown
Contributor

gem compare concurrent-ruby 1.3.5 1.3.6

Compared versions: ["1.3.5", "1.3.6"]
  DIFFERENT date:
    1.3.5: 2025-01-15 00:00:00 UTC
    1.3.6: 2025-12-13 00:00:00 UTC
  DIFFERENT rubygems_version:
    1.3.5: 3.3.26
    1.3.6: 3.3.27
  DIFFERENT version:
    1.3.5: 1.3.5
    1.3.6: 1.3.6
  DIFFERENT files:
    1.3.5->1.3.6:
      * Added:
            lib/concurrent-ruby/concurrent/collection/ruby_timeout_queue.rb +55/-0
            lib/concurrent-ruby/concurrent/collection/timeout_queue.rb +18/-0
      * Changed:
            CHANGELOG.md +6/-0
            README.md +4/-2
            lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb +1/-0
            lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb +2/-4
            lib/concurrent-ruby/concurrent/executor/java_executor_service.rb +1/-0
            lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb +2/-0
            lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb +2/-0
            lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb +54/-31
            lib/concurrent-ruby/concurrent/executor/timer_set.rb +4/-1
            lib/concurrent-ruby/concurrent/executors.rb +0/-1
            lib/concurrent-ruby/concurrent/mvar.rb +4/-4
            lib/concurrent-ruby/concurrent/promise.rb +1/-1
            lib/concurrent-ruby/concurrent/timer_task.rb +7/-2
            lib/concurrent-ruby/concurrent/version.rb +1/-1
  DIFFERENT extra_rdoc_files:
    1.3.5->1.3.6:
      * Changed:
            README.md +4/-2
            CHANGELOG.md +6/-0

@github-actions
Copy link
Copy Markdown
Contributor

gem compare concurrent-ruby 1.3.5 1.3.6

Compared versions: ["1.3.5", "1.3.6"]
  DIFFERENT date:
    1.3.5: 2025-01-15 00:00:00 UTC
    1.3.6: 2025-12-13 00:00:00 UTC
  DIFFERENT rubygems_version:
    1.3.5: 3.3.26
    1.3.6: 3.3.27
  DIFFERENT version:
    1.3.5: 1.3.5
    1.3.6: 1.3.6
  DIFFERENT files:
    1.3.5->1.3.6:
      * Added:
            lib/concurrent-ruby/concurrent/collection/ruby_timeout_queue.rb +55/-0
            lib/concurrent-ruby/concurrent/collection/timeout_queue.rb +18/-0
      * Changed:
            CHANGELOG.md +6/-0
            README.md +4/-2
            lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb +1/-0
            lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb +2/-4
            lib/concurrent-ruby/concurrent/executor/java_executor_service.rb +1/-0
            lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb +2/-0
            lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb +2/-0
            lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb +54/-31
            lib/concurrent-ruby/concurrent/executor/timer_set.rb +4/-1
            lib/concurrent-ruby/concurrent/executors.rb +0/-1
            lib/concurrent-ruby/concurrent/mvar.rb +4/-4
            lib/concurrent-ruby/concurrent/promise.rb +1/-1
            lib/concurrent-ruby/concurrent/timer_task.rb +7/-2
            lib/concurrent-ruby/concurrent/version.rb +1/-1
  DIFFERENT extra_rdoc_files:
    1.3.5->1.3.6:
      * Changed:
            README.md +4/-2
            CHANGELOG.md +6/-0

@github-actions
Copy link
Copy Markdown
Contributor

gem compare --diff concurrent-ruby 1.3.5 1.3.6

Compared versions: ["1.3.5", "1.3.6"]
  DIFFERENT files:
    1.3.5->1.3.6:
      * Added:
        lib/concurrent-ruby/concurrent/collection/ruby_timeout_queue.rb
                --- /tmp/20260226-881-y8u4zb	2026-02-26 03:33:20.645134272 +0000
                +++ /tmp/d20260226-881-l7xhyr/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/collection/ruby_timeout_queue.rb	2026-02-26 03:33:20.635134295 +0000
                @@ -0,0 +1,55 @@
                +module Concurrent
                +  module Collection
                +    # @!visibility private
                +    # @!macro ruby_timeout_queue
                +    class RubyTimeoutQueue < ::Queue
                +      def initialize(*args)
                +        if RUBY_VERSION >= '3.2'
                +          raise "#{self.class.name} is not needed on Ruby 3.2 or later, use ::Queue instead"
                +        end
                +
                +        super(*args)
                +
                +        @mutex = Mutex.new
                +        @cond_var = ConditionVariable.new
                +      end
                +
                +      def push(obj)
                +        @mutex.synchronize do
                +          super(obj)
                +          @cond_var.signal
                +        end
                +      end
                +      alias_method :enq, :push
                +      alias_method :<<, :push
                +
                +      def pop(non_block = false, timeout: nil)
                +        if non_block && timeout
                +          raise ArgumentError, "can't set a timeout if non_block is enabled"
                +        end
                +
                +        if non_block
                +          super(true)
                +        elsif timeout
                +          @mutex.synchronize do
                +            deadline = Concurrent.monotonic_time + timeout
                +            while (now = Concurrent.monotonic_time) < deadline && empty?
                +              @cond_var.wait(@mutex, deadline - now)
                +            end
                +            begin
                +              return super(true)
                +            rescue ThreadError
                +              # still empty
                +              nil
                +            end
                +          end
                +        else
                +          super(false)
                +        end
                +      end
                +      alias_method :deq, :pop
                +      alias_method :shift, :pop
                +    end
                +    private_constant :RubyTimeoutQueue
                +  end
                +end
        lib/concurrent-ruby/concurrent/collection/timeout_queue.rb
                --- /tmp/20260226-881-9mlj93	2026-02-26 03:33:20.647134267 +0000
                +++ /tmp/d20260226-881-l7xhyr/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/collection/timeout_queue.rb	2026-02-26 03:33:20.635134295 +0000
                @@ -0,0 +1,18 @@
                +module Concurrent
                +  module Collection
                +    # @!visibility private
                +    # @!macro internal_implementation_note
                +    TimeoutQueueImplementation = if RUBY_VERSION >= '3.2'
                +                                   ::Queue
                +                                 else
                +                                   require 'concurrent/collection/ruby_timeout_queue'
                +                                   RubyTimeoutQueue
                +                                 end
                +    private_constant :TimeoutQueueImplementation
                +
                +    # @!visibility private
                +    # @!macro timeout_queue
                +    class TimeoutQueue < TimeoutQueueImplementation
                +    end
                +  end
                +end
      * Changed:
        CHANGELOG.md
                --- /tmp/d20260226-881-l7xhyr/concurrent-ruby-1.3.5/CHANGELOG.md	2026-02-26 03:33:20.608134359 +0000
                +++ /tmp/d20260226-881-l7xhyr/concurrent-ruby-1.3.6/CHANGELOG.md	2026-02-26 03:33:20.627134314 +0000
                @@ -2,0 +3,6 @@
                +## Release v1.3.6 (13 December 2025)
                +
                +concurrent-ruby:
                +
                +* See the [release notes on GitHub](https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.3.6).
                +
        README.md
                --- /tmp/d20260226-881-l7xhyr/concurrent-ruby-1.3.5/README.md	2026-02-26 03:33:20.608134359 +0000
                +++ /tmp/d20260226-881-l7xhyr/concurrent-ruby-1.3.6/README.md	2026-02-26 03:33:20.627134314 +0000
                @@ -210 +210 @@
                -keep backward compatibility (there may also lack tests and documentation). Semantic versions will
                +keep backward compatibility (they may also lack tests and documentation). Semantic versions will
                @@ -361 +361,2 @@
                -* Install Docker, required for Windows builds
                +* Install Docker or Podman, required for Windows builds
                +* If `bundle config get path` is set, use `bundle config set --local path.system true` otherwise the `gem name, path: '.'` gems won't be found (Bundler limitation).
                @@ -380,0 +382 @@
                +* [Joshua Young](https://github.com/joshuay03)
        lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb
                --- /tmp/d20260226-881-l7xhyr/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb	2026-02-26 03:33:20.615134342 +0000
                +++ /tmp/d20260226-881-l7xhyr/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb	2026-02-26 03:33:20.633134300 +0000
                @@ -8,0 +9 @@
                +    return RUBY_VERSION < "3.0" if Concurrent.on_cruby?
        lib/concurrent-ruby/concurrent/concurrent_ruby.jar
                Binary files /tmp/d20260226-881-l7xhyr/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/concurrent_ruby.jar and /tmp/d20260226-881-l7xhyr/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/concurrent_ruby.jar differ
        lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb
                --- /tmp/d20260226-881-l7xhyr/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb	2026-02-26 03:33:20.620134331 +0000
                +++ /tmp/d20260226-881-l7xhyr/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb	2026-02-26 03:33:20.638134288 +0000
                @@ -84,4 +84,2 @@
                -  #   This is a no-op on some pool implementation (e.g. the Java one).  The Ruby
                -  #   pool will auto-prune each time a new job is posted. You will need to call
                -  #   this method explicitly in case your application post jobs in bursts (a
                -  #   lot of jobs and then nothing for long periods)
                +  #   This is a no-op on all pool implementations as they prune themselves
                +  #   automatically, and has been deprecated.
        lib/concurrent-ruby/concurrent/executor/java_executor_service.rb
                --- /tmp/d20260226-881-l7xhyr/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/java_executor_service.rb	2026-02-26 03:33:20.620134331 +0000
                +++ /tmp/d20260226-881-l7xhyr/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/java_executor_service.rb	2026-02-26 03:33:20.638134288 +0000
                @@ -48,0 +49 @@
                +          wait_for_termination
        lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb
                --- /tmp/d20260226-881-l7xhyr/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb	2026-02-26 03:33:20.620134331 +0000
                +++ /tmp/d20260226-881-l7xhyr/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb	2026-02-26 03:33:20.638134288 +0000
                @@ -10,0 +11 @@
                +      include Concern::Deprecation
                @@ -102,0 +104 @@
                +        deprecated "#prune_pool has no effect and will be removed in the next release."
        lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb
                --- /tmp/d20260226-881-l7xhyr/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb	2026-02-26 03:33:20.620134331 +0000
                +++ /tmp/d20260226-881-l7xhyr/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb	2026-02-26 03:33:20.638134288 +0000
                @@ -1,0 +2 @@
                +require 'concurrent/executor/serial_executor_service'
                @@ -8,0 +10 @@
                +    include SerialExecutorService
        lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb
                --- /tmp/d20260226-881-l7xhyr/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb	2026-02-26 03:33:20.620134331 +0000
                +++ /tmp/d20260226-881-l7xhyr/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb	2026-02-26 03:33:20.638134288 +0000
                @@ -5,0 +6 @@
                +require 'concurrent/collection/timeout_queue'
                @@ -12,0 +14 @@
                +    include Concern::Deprecation
                @@ -96,0 +99,4 @@
                +    # removes the worker if it can be pruned
                +    #
                +    # @return [true, false] if the worker was pruned
                +    #
                @@ -98,2 +104,17 @@
                -    def remove_busy_worker(worker)
                -      synchronize { ns_remove_busy_worker worker }
                +    def prune_worker(worker)
                +      synchronize do
                +        if ns_prunable_capacity > 0
                +          remove_worker worker
                +          true
                +        else
                +          false
                +        end
                +      end
                +    end
                +
                +    # @!visibility private
                +    def remove_worker(worker)
                +      synchronize do
                +        ns_remove_ready_worker worker
                +        ns_remove_busy_worker worker
                +      end
                @@ -119 +140 @@
                -      synchronize { ns_prune_pool }
                +      deprecated "#prune_pool has no effect and will be removed in next the release, see https://github.com/ruby-concurrency/concurrent-ruby/pull/1082."
                @@ -149,3 +169,0 @@
                -
                -      @gc_interval  = opts.fetch(:gc_interval, @idletime / 2.0).to_i # undocumented
                -      @next_gc_time = Concurrent.monotonic_time + @gc_interval
                @@ -164,0 +183 @@
                +        nil
                @@ -166 +185 @@
                -        return fallback_action(*args, &task)
                +        fallback_action(*args, &task)
                @@ -168,3 +186,0 @@
                -
                -      ns_prune_pool if @next_gc_time < Concurrent.monotonic_time
                -      nil
                @@ -221 +237 @@
                -      
                +
                @@ -268 +284 @@
                -    # removes a worker which is not in not tracked in @ready
                +    # removes a worker which is not tracked in @ready
                @@ -277,2 +292,0 @@
                -    # try oldest worker if it is idle for enough time, it's returned back at the start
                -    #
                @@ -280,11 +294,3 @@
                -    def ns_prune_pool
                -      now = Concurrent.monotonic_time
                -      stopped_workers = 0
                -      while !@ready.empty? && (@pool.size - stopped_workers > @min_length)
                -        worker, last_message = @ready.first
                -        if now - last_message > self.idletime
                -          stopped_workers += 1
                -          @ready.shift
                -          worker << :stop
                -        else break
                -        end
                +    def ns_remove_ready_worker(worker)
                +      if index = @ready.index { |rw, _| rw == worker }
                +        @ready.delete_at(index)
                @@ -291,0 +298,2 @@
                +      true
                +    end
                @@ -293 +301,10 @@
                -      @next_gc_time = Concurrent.monotonic_time + @gc_interval
                +    # @return [Integer] number of excess idle workers which can be removed without
                +    #                   going below min_length, or all workers if not running
                +    #
                +    # @!visibility private
                +    def ns_prunable_capacity
                +      if running?
                +        [@pool.size - @min_length, @ready.size].min
                +      else
                +        @pool.size
                +      end
                @@ -295,0 +313 @@
                +    # @!visibility private
                @@ -315 +333 @@
                -        @queue  = Queue.new
                +        @queue  = Collection::TimeoutQueue.new
                @@ -341 +359 @@
                -            loop do
                +            prunable = true
                @@ -343 +361,6 @@
                -              case message = my_queue.pop
                +            loop do
                +              timeout = prunable && my_pool.running? ? my_idletime : nil
                +              case message = my_queue.pop(timeout: timeout)
                +              when nil
                +                throw :stop if my_pool.prune_worker(self)
                +                prunable = false
                @@ -345 +368 @@
                -                my_pool.remove_busy_worker(self)
                +                my_pool.remove_worker(self)
                @@ -347 +369,0 @@
                -
                @@ -351,0 +374 @@
                +                prunable = true
        lib/concurrent-ruby/concurrent/executor/timer_set.rb
                --- /tmp/d20260226-881-l7xhyr/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/timer_set.rb	2026-02-26 03:33:20.621134328 +0000
                +++ /tmp/d20260226-881-l7xhyr/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/timer_set.rb	2026-02-26 03:33:20.639134286 +0000
                @@ -63,0 +64 @@
                +      @timer_executor.kill
                @@ -125 +126,3 @@
                -      @timer_executor.kill
                +      @condition.set
                +      @condition.reset
                +      @timer_executor.shutdown
        lib/concurrent-ruby/concurrent/executors.rb
                --- /tmp/d20260226-881-l7xhyr/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executors.rb	2026-02-26 03:33:20.621134328 +0000
                +++ /tmp/d20260226-881-l7xhyr/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executors.rb	2026-02-26 03:33:20.639134286 +0000
                @@ -13 +12,0 @@
                -require 'concurrent/executor/cached_thread_pool'
        lib/concurrent-ruby/concurrent/mvar.rb
                --- /tmp/d20260226-881-l7xhyr/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/mvar.rb	2026-02-26 03:33:20.622134326 +0000
                +++ /tmp/d20260226-881-l7xhyr/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/mvar.rb	2026-02-26 03:33:20.640134284 +0000
                @@ -12 +12 @@
                -  # `#mutate` that is atomic with respect to operations on the same instance.
                +  # `#modify` that is atomic with respect to operations on the same instance.
                @@ -90 +90 @@
                -        # if we timeoud out we'll still be empty
                +        # If we timed out we'll still be empty
                @@ -119 +119 @@
                -    # `put` the transformed value. Returns the transformed value. A timeout can
                +    # `put` the transformed value. Returns the pre-transform value. A timeout can
                @@ -122 +122 @@
                -    # @return [Object] the transformed value, or `TIMEOUT`
                +    # @return [Object] the pre-transform value, or `TIMEOUT`
        lib/concurrent-ruby/concurrent/promise.rb
                --- /tmp/d20260226-881-l7xhyr/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/promise.rb	2026-02-26 03:33:20.622134326 +0000
                +++ /tmp/d20260226-881-l7xhyr/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/promise.rb	2026-02-26 03:33:20.640134284 +0000
                @@ -170 +170 @@
                -  # c1.value       #=> 45
                +  # c1.value       #=> 42
        lib/concurrent-ruby/concurrent/timer_task.rb
                --- /tmp/d20260226-881-l7xhyr/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/timer_task.rb	2026-02-26 03:33:20.625134319 +0000
                +++ /tmp/d20260226-881-l7xhyr/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/timer_task.rb	2026-02-26 03:33:20.643134276 +0000
                @@ -4,0 +5 @@
                +require 'concurrent/atomic/atomic_fixnum'
                @@ -238,0 +240 @@
                +          @age.increment
                @@ -311,0 +314 @@
                +      @age = Concurrent::AtomicFixnum.new(0)
                @@ -331 +334 @@
                -      ScheduledTask.execute(interval, executor: @executor, args: [Concurrent::Event.new], &method(:execute_task))
                +      ScheduledTask.execute(interval, executor: @executor, args: [Concurrent::Event.new, @age.value], &method(:execute_task))
                @@ -336 +339 @@
                -    def execute_task(completion)
                +    def execute_task(completion, age_when_scheduled)
                @@ -337,0 +341,2 @@
                +      return nil unless @age.value == age_when_scheduled
                +
        lib/concurrent-ruby/concurrent/version.rb
                --- /tmp/d20260226-881-l7xhyr/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/version.rb	2026-02-26 03:33:20.626134316 +0000
                +++ /tmp/d20260226-881-l7xhyr/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/version.rb	2026-02-26 03:33:20.644134274 +0000
                @@ -2 +2 @@
                -  VERSION = '1.3.5'
                +  VERSION = '1.3.6'

@github-actions
Copy link
Copy Markdown
Contributor

gem compare --diff concurrent-ruby 1.3.5 1.3.6

Compared versions: ["1.3.5", "1.3.6"]
  DIFFERENT files:
    1.3.5->1.3.6:
      * Added:
        lib/concurrent-ruby/concurrent/collection/ruby_timeout_queue.rb
                --- /tmp/20260226-876-vswk8j	2026-02-26 03:33:24.863774987 +0000
                +++ /tmp/d20260226-876-x0di7z/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/collection/ruby_timeout_queue.rb	2026-02-26 03:33:24.853775005 +0000
                @@ -0,0 +1,55 @@
                +module Concurrent
                +  module Collection
                +    # @!visibility private
                +    # @!macro ruby_timeout_queue
                +    class RubyTimeoutQueue < ::Queue
                +      def initialize(*args)
                +        if RUBY_VERSION >= '3.2'
                +          raise "#{self.class.name} is not needed on Ruby 3.2 or later, use ::Queue instead"
                +        end
                +
                +        super(*args)
                +
                +        @mutex = Mutex.new
                +        @cond_var = ConditionVariable.new
                +      end
                +
                +      def push(obj)
                +        @mutex.synchronize do
                +          super(obj)
                +          @cond_var.signal
                +        end
                +      end
                +      alias_method :enq, :push
                +      alias_method :<<, :push
                +
                +      def pop(non_block = false, timeout: nil)
                +        if non_block && timeout
                +          raise ArgumentError, "can't set a timeout if non_block is enabled"
                +        end
                +
                +        if non_block
                +          super(true)
                +        elsif timeout
                +          @mutex.synchronize do
                +            deadline = Concurrent.monotonic_time + timeout
                +            while (now = Concurrent.monotonic_time) < deadline && empty?
                +              @cond_var.wait(@mutex, deadline - now)
                +            end
                +            begin
                +              return super(true)
                +            rescue ThreadError
                +              # still empty
                +              nil
                +            end
                +          end
                +        else
                +          super(false)
                +        end
                +      end
                +      alias_method :deq, :pop
                +      alias_method :shift, :pop
                +    end
                +    private_constant :RubyTimeoutQueue
                +  end
                +end
        lib/concurrent-ruby/concurrent/collection/timeout_queue.rb
                --- /tmp/20260226-876-fwvuso	2026-02-26 03:33:24.865774983 +0000
                +++ /tmp/d20260226-876-x0di7z/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/collection/timeout_queue.rb	2026-02-26 03:33:24.853775005 +0000
                @@ -0,0 +1,18 @@
                +module Concurrent
                +  module Collection
                +    # @!visibility private
                +    # @!macro internal_implementation_note
                +    TimeoutQueueImplementation = if RUBY_VERSION >= '3.2'
                +                                   ::Queue
                +                                 else
                +                                   require 'concurrent/collection/ruby_timeout_queue'
                +                                   RubyTimeoutQueue
                +                                 end
                +    private_constant :TimeoutQueueImplementation
                +
                +    # @!visibility private
                +    # @!macro timeout_queue
                +    class TimeoutQueue < TimeoutQueueImplementation
                +    end
                +  end
                +end
      * Changed:
        CHANGELOG.md
                --- /tmp/d20260226-876-x0di7z/concurrent-ruby-1.3.5/CHANGELOG.md	2026-02-26 03:33:24.822775061 +0000
                +++ /tmp/d20260226-876-x0di7z/concurrent-ruby-1.3.6/CHANGELOG.md	2026-02-26 03:33:24.844775021 +0000
                @@ -2,0 +3,6 @@
                +## Release v1.3.6 (13 December 2025)
                +
                +concurrent-ruby:
                +
                +* See the [release notes on GitHub](https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.3.6).
                +
        README.md
                --- /tmp/d20260226-876-x0di7z/concurrent-ruby-1.3.5/README.md	2026-02-26 03:33:24.822775061 +0000
                +++ /tmp/d20260226-876-x0di7z/concurrent-ruby-1.3.6/README.md	2026-02-26 03:33:24.845775019 +0000
                @@ -210 +210 @@
                -keep backward compatibility (there may also lack tests and documentation). Semantic versions will
                +keep backward compatibility (they may also lack tests and documentation). Semantic versions will
                @@ -361 +361,2 @@
                -* Install Docker, required for Windows builds
                +* Install Docker or Podman, required for Windows builds
                +* If `bundle config get path` is set, use `bundle config set --local path.system true` otherwise the `gem name, path: '.'` gems won't be found (Bundler limitation).
                @@ -380,0 +382 @@
                +* [Joshua Young](https://github.com/joshuay03)
        lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb
                --- /tmp/d20260226-876-x0di7z/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb	2026-02-26 03:33:24.831775045 +0000
                +++ /tmp/d20260226-876-x0di7z/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb	2026-02-26 03:33:24.851775009 +0000
                @@ -8,0 +9 @@
                +    return RUBY_VERSION < "3.0" if Concurrent.on_cruby?
        lib/concurrent-ruby/concurrent/concurrent_ruby.jar
                Binary files /tmp/d20260226-876-x0di7z/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/concurrent_ruby.jar and /tmp/d20260226-876-x0di7z/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/concurrent_ruby.jar differ
        lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb
                --- /tmp/d20260226-876-x0di7z/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb	2026-02-26 03:33:24.837775034 +0000
                +++ /tmp/d20260226-876-x0di7z/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb	2026-02-26 03:33:24.856774999 +0000
                @@ -84,4 +84,2 @@
                -  #   This is a no-op on some pool implementation (e.g. the Java one).  The Ruby
                -  #   pool will auto-prune each time a new job is posted. You will need to call
                -  #   this method explicitly in case your application post jobs in bursts (a
                -  #   lot of jobs and then nothing for long periods)
                +  #   This is a no-op on all pool implementations as they prune themselves
                +  #   automatically, and has been deprecated.
        lib/concurrent-ruby/concurrent/executor/java_executor_service.rb
                --- /tmp/d20260226-876-x0di7z/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/java_executor_service.rb	2026-02-26 03:33:24.837775034 +0000
                +++ /tmp/d20260226-876-x0di7z/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/java_executor_service.rb	2026-02-26 03:33:24.856774999 +0000
                @@ -48,0 +49 @@
                +          wait_for_termination
        lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb
                --- /tmp/d20260226-876-x0di7z/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb	2026-02-26 03:33:24.837775034 +0000
                +++ /tmp/d20260226-876-x0di7z/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb	2026-02-26 03:33:24.857774998 +0000
                @@ -10,0 +11 @@
                +      include Concern::Deprecation
                @@ -102,0 +104 @@
                +        deprecated "#prune_pool has no effect and will be removed in the next release."
        lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb
                --- /tmp/d20260226-876-x0di7z/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb	2026-02-26 03:33:24.837775034 +0000
                +++ /tmp/d20260226-876-x0di7z/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb	2026-02-26 03:33:24.857774998 +0000
                @@ -1,0 +2 @@
                +require 'concurrent/executor/serial_executor_service'
                @@ -8,0 +10 @@
                +    include SerialExecutorService
        lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb
                --- /tmp/d20260226-876-x0di7z/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb	2026-02-26 03:33:24.838775032 +0000
                +++ /tmp/d20260226-876-x0di7z/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb	2026-02-26 03:33:24.857774998 +0000
                @@ -5,0 +6 @@
                +require 'concurrent/collection/timeout_queue'
                @@ -12,0 +14 @@
                +    include Concern::Deprecation
                @@ -96,0 +99,4 @@
                +    # removes the worker if it can be pruned
                +    #
                +    # @return [true, false] if the worker was pruned
                +    #
                @@ -98,2 +104,17 @@
                -    def remove_busy_worker(worker)
                -      synchronize { ns_remove_busy_worker worker }
                +    def prune_worker(worker)
                +      synchronize do
                +        if ns_prunable_capacity > 0
                +          remove_worker worker
                +          true
                +        else
                +          false
                +        end
                +      end
                +    end
                +
                +    # @!visibility private
                +    def remove_worker(worker)
                +      synchronize do
                +        ns_remove_ready_worker worker
                +        ns_remove_busy_worker worker
                +      end
                @@ -119 +140 @@
                -      synchronize { ns_prune_pool }
                +      deprecated "#prune_pool has no effect and will be removed in next the release, see https://github.com/ruby-concurrency/concurrent-ruby/pull/1082."
                @@ -149,3 +169,0 @@
                -
                -      @gc_interval  = opts.fetch(:gc_interval, @idletime / 2.0).to_i # undocumented
                -      @next_gc_time = Concurrent.monotonic_time + @gc_interval
                @@ -164,0 +183 @@
                +        nil
                @@ -166 +185 @@
                -        return fallback_action(*args, &task)
                +        fallback_action(*args, &task)
                @@ -168,3 +186,0 @@
                -
                -      ns_prune_pool if @next_gc_time < Concurrent.monotonic_time
                -      nil
                @@ -221 +237 @@
                -      
                +
                @@ -268 +284 @@
                -    # removes a worker which is not in not tracked in @ready
                +    # removes a worker which is not tracked in @ready
                @@ -277,2 +292,0 @@
                -    # try oldest worker if it is idle for enough time, it's returned back at the start
                -    #
                @@ -280,11 +294,3 @@
                -    def ns_prune_pool
                -      now = Concurrent.monotonic_time
                -      stopped_workers = 0
                -      while !@ready.empty? && (@pool.size - stopped_workers > @min_length)
                -        worker, last_message = @ready.first
                -        if now - last_message > self.idletime
                -          stopped_workers += 1
                -          @ready.shift
                -          worker << :stop
                -        else break
                -        end
                +    def ns_remove_ready_worker(worker)
                +      if index = @ready.index { |rw, _| rw == worker }
                +        @ready.delete_at(index)
                @@ -291,0 +298,2 @@
                +      true
                +    end
                @@ -293 +301,10 @@
                -      @next_gc_time = Concurrent.monotonic_time + @gc_interval
                +    # @return [Integer] number of excess idle workers which can be removed without
                +    #                   going below min_length, or all workers if not running
                +    #
                +    # @!visibility private
                +    def ns_prunable_capacity
                +      if running?
                +        [@pool.size - @min_length, @ready.size].min
                +      else
                +        @pool.size
                +      end
                @@ -295,0 +313 @@
                +    # @!visibility private
                @@ -315 +333 @@
                -        @queue  = Queue.new
                +        @queue  = Collection::TimeoutQueue.new
                @@ -341 +359 @@
                -            loop do
                +            prunable = true
                @@ -343 +361,6 @@
                -              case message = my_queue.pop
                +            loop do
                +              timeout = prunable && my_pool.running? ? my_idletime : nil
                +              case message = my_queue.pop(timeout: timeout)
                +              when nil
                +                throw :stop if my_pool.prune_worker(self)
                +                prunable = false
                @@ -345 +368 @@
                -                my_pool.remove_busy_worker(self)
                +                my_pool.remove_worker(self)
                @@ -347 +369,0 @@
                -
                @@ -351,0 +374 @@
                +                prunable = true
        lib/concurrent-ruby/concurrent/executor/timer_set.rb
                --- /tmp/d20260226-876-x0di7z/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/timer_set.rb	2026-02-26 03:33:24.838775032 +0000
                +++ /tmp/d20260226-876-x0di7z/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/timer_set.rb	2026-02-26 03:33:24.858774996 +0000
                @@ -63,0 +64 @@
                +      @timer_executor.kill
                @@ -125 +126,3 @@
                -      @timer_executor.kill
                +      @condition.set
                +      @condition.reset
                +      @timer_executor.shutdown
        lib/concurrent-ruby/concurrent/executors.rb
                --- /tmp/d20260226-876-x0di7z/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executors.rb	2026-02-26 03:33:24.839775030 +0000
                +++ /tmp/d20260226-876-x0di7z/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executors.rb	2026-02-26 03:33:24.858774996 +0000
                @@ -13 +12,0 @@
                -require 'concurrent/executor/cached_thread_pool'
        lib/concurrent-ruby/concurrent/mvar.rb
                --- /tmp/d20260226-876-x0di7z/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/mvar.rb	2026-02-26 03:33:24.840775029 +0000
                +++ /tmp/d20260226-876-x0di7z/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/mvar.rb	2026-02-26 03:33:24.859774994 +0000
                @@ -12 +12 @@
                -  # `#mutate` that is atomic with respect to operations on the same instance.
                +  # `#modify` that is atomic with respect to operations on the same instance.
                @@ -90 +90 @@
                -        # if we timeoud out we'll still be empty
                +        # If we timed out we'll still be empty
                @@ -119 +119 @@
                -    # `put` the transformed value. Returns the transformed value. A timeout can
                +    # `put` the transformed value. Returns the pre-transform value. A timeout can
                @@ -122 +122 @@
                -    # @return [Object] the transformed value, or `TIMEOUT`
                +    # @return [Object] the pre-transform value, or `TIMEOUT`
        lib/concurrent-ruby/concurrent/promise.rb
                --- /tmp/d20260226-876-x0di7z/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/promise.rb	2026-02-26 03:33:24.840775029 +0000
                +++ /tmp/d20260226-876-x0di7z/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/promise.rb	2026-02-26 03:33:24.859774994 +0000
                @@ -170 +170 @@
                -  # c1.value       #=> 45
                +  # c1.value       #=> 42
        lib/concurrent-ruby/concurrent/timer_task.rb
                --- /tmp/d20260226-876-x0di7z/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/timer_task.rb	2026-02-26 03:33:24.843775023 +0000
                +++ /tmp/d20260226-876-x0di7z/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/timer_task.rb	2026-02-26 03:33:24.862774989 +0000
                @@ -4,0 +5 @@
                +require 'concurrent/atomic/atomic_fixnum'
                @@ -238,0 +240 @@
                +          @age.increment
                @@ -311,0 +314 @@
                +      @age = Concurrent::AtomicFixnum.new(0)
                @@ -331 +334 @@
                -      ScheduledTask.execute(interval, executor: @executor, args: [Concurrent::Event.new], &method(:execute_task))
                +      ScheduledTask.execute(interval, executor: @executor, args: [Concurrent::Event.new, @age.value], &method(:execute_task))
                @@ -336 +339 @@
                -    def execute_task(completion)
                +    def execute_task(completion, age_when_scheduled)
                @@ -337,0 +341,2 @@
                +      return nil unless @age.value == age_when_scheduled
                +
        lib/concurrent-ruby/concurrent/version.rb
                --- /tmp/d20260226-876-x0di7z/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/version.rb	2026-02-26 03:33:24.844775021 +0000
                +++ /tmp/d20260226-876-x0di7z/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/version.rb	2026-02-26 03:33:24.863774987 +0000
                @@ -2 +2 @@
                -  VERSION = '1.3.5'
                +  VERSION = '1.3.6'

@github-actions
Copy link
Copy Markdown
Contributor

gem compare concurrent-ruby 1.3.5 1.3.6

Compared versions: ["1.3.5", "1.3.6"]
  DIFFERENT date:
    1.3.5: 2025-01-15 00:00:00 UTC
    1.3.6: 2025-12-13 00:00:00 UTC
  DIFFERENT rubygems_version:
    1.3.5: 3.3.26
    1.3.6: 3.3.27
  DIFFERENT version:
    1.3.5: 1.3.5
    1.3.6: 1.3.6
  DIFFERENT files:
    1.3.5->1.3.6:
      * Added:
            lib/concurrent-ruby/concurrent/collection/ruby_timeout_queue.rb +55/-0
            lib/concurrent-ruby/concurrent/collection/timeout_queue.rb +18/-0
      * Changed:
            CHANGELOG.md +6/-0
            README.md +4/-2
            lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb +1/-0
            lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb +2/-4
            lib/concurrent-ruby/concurrent/executor/java_executor_service.rb +1/-0
            lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb +2/-0
            lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb +2/-0
            lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb +54/-31
            lib/concurrent-ruby/concurrent/executor/timer_set.rb +4/-1
            lib/concurrent-ruby/concurrent/executors.rb +0/-1
            lib/concurrent-ruby/concurrent/mvar.rb +4/-4
            lib/concurrent-ruby/concurrent/promise.rb +1/-1
            lib/concurrent-ruby/concurrent/timer_task.rb +7/-2
            lib/concurrent-ruby/concurrent/version.rb +1/-1
  DIFFERENT extra_rdoc_files:
    1.3.5->1.3.6:
      * Changed:
            README.md +4/-2
            CHANGELOG.md +6/-0

@github-actions
Copy link
Copy Markdown
Contributor

gem compare sentry-ruby 5.26.0 6.4.0

Compared versions: ["5.26.0", "6.4.0"]
  DIFFERENT homepage:
    5.26.0: https://github.com/getsentry/sentry-ruby/tree/5.26.0/sentry-ruby
    6.4.0: https://github.com/getsentry/sentry-ruby/tree/6.4.0/sentry-ruby
  DIFFERENT metadata:
    5.26.0: {"homepage_uri" => "https://github.com/getsentry/sentry-ruby/tree/5.26.0/sentry-ruby", "source_code_uri" => "https://github.com/getsentry/sentry-ruby/tree/5.26.0/sentry-ruby", "changelog_uri" => "https://github.com/getsentry/sentry-ruby/blob/5.26.0/CHANGELOG.md", "bug_tracker_uri" => "https://github.com/getsentry/sentry-ruby/issues", "documentation_uri" => "http://www.rubydoc.info/gems/sentry-ruby/5.26.0"}
    6.4.0: {"homepage_uri" => "https://github.com/getsentry/sentry-ruby/tree/6.4.0/sentry-ruby", "source_code_uri" => "https://github.com/getsentry/sentry-ruby/tree/6.4.0/sentry-ruby", "changelog_uri" => "https://github.com/getsentry/sentry-ruby/blob/6.4.0/CHANGELOG.md", "bug_tracker_uri" => "https://github.com/getsentry/sentry-ruby/issues", "documentation_uri" => "http://www.rubydoc.info/gems/sentry-ruby/6.4.0"}
  DIFFERENT required_ruby_version:
    5.26.0: >= 2.4
    6.4.0: >= 2.7
  DIFFERENT rubygems_version:
    5.26.0: 3.6.7
    6.4.0: 3.6.9
  DIFFERENT version:
    5.26.0: 5.26.0
    6.4.0: 6.4.0
  DIFFERENT files:
    5.26.0->6.4.0:
      * Deleted:
            lib/sentry/metrics/aggregator.rb
            lib/sentry/metrics/configuration.rb
            lib/sentry/metrics/counter_metric.rb
            lib/sentry/metrics/distribution_metric.rb
            lib/sentry/metrics/gauge_metric.rb
            lib/sentry/metrics/local_aggregator.rb
            lib/sentry/metrics/metric.rb
            lib/sentry/metrics/set_metric.rb
            lib/sentry/metrics/timing.rb
      * Added:
            lib/sentry/backtrace/line.rb +99/-0
            lib/sentry/debug_structured_logger.rb +94/-0
            lib/sentry/metric_event.rb +49/-0
            lib/sentry/metric_event_buffer.rb +28/-0
            lib/sentry/sequel.rb +35/-0
            lib/sentry/telemetry_event_buffer.rb +130/-0
            lib/sentry/transport/debug_transport.rb +70/-0
            lib/sentry/utils/sample_rand.rb +97/-0
            lib/sentry/utils/telemetry_attributes.rb +30/-0
      * Changed:
            Gemfile +27/-5
            README.md +3/-3
            lib/sentry-ruby.rb +56/-29
            lib/sentry/background_worker.rb +1/-4
            lib/sentry/backtrace.rb +44/-76
            lib/sentry/baggage.rb +1/-1
            lib/sentry/breadcrumb.rb +1/-1
            lib/sentry/breadcrumb_buffer.rb +2/-2
            lib/sentry/check_in_event.rb +2/-2
            lib/sentry/client.rb +59/-136
            lib/sentry/configuration.rb +176/-78
            lib/sentry/cron/monitor_check_ins.rb +3/-3
            lib/sentry/cron/monitor_config.rb +2/-2
            lib/sentry/cron/monitor_schedule.rb +2/-2
            lib/sentry/dsn.rb +52/-0
            lib/sentry/envelope/item.rb +3/-3
            lib/sentry/error_event.rb +3/-3
            lib/sentry/event.rb +4/-10
            lib/sentry/graphql.rb +1/-1
            lib/sentry/hub.rb +29/-5
            lib/sentry/interface.rb +1/-1
            lib/sentry/interfaces/exception.rb +2/-2
            lib/sentry/interfaces/request.rb +2/-0
            lib/sentry/interfaces/single_exception.rb +4/-4
            lib/sentry/interfaces/stacktrace.rb +3/-3
            lib/sentry/interfaces/stacktrace_builder.rb +0/-8
            lib/sentry/interfaces/threads.rb +2/-2
            lib/sentry/log_event.rb +32/-137
            lib/sentry/log_event_buffer.rb +13/-60
            lib/sentry/metrics.rb +47/-42
            lib/sentry/profiler.rb +4/-5
            lib/sentry/propagation_context.rb +55/-18
            lib/sentry/rack/capture_exceptions.rb +88/-2
            lib/sentry/rspec.rb +1/-1
            lib/sentry/scope.rb +50/-18
            lib/sentry/span.rb +5/-17
            lib/sentry/std_lib_logger.rb +10/-1
            lib/sentry/test_helper.rb +30/-0
            lib/sentry/transaction.rb +72/-95
            lib/sentry/transaction_event.rb +4/-9
            lib/sentry/transport.rb +4/-6
            lib/sentry/transport/dummy_transport.rb +1/-0
            lib/sentry/transport/http_transport.rb +10/-16
            lib/sentry/utils/encoding_helper.rb +6/-0
            lib/sentry/utils/logging_helper.rb +25/-9
            lib/sentry/vernier/profiler.rb +4/-3
            lib/sentry/version.rb +1/-1
            sentry-ruby-core.gemspec +1/-1
            sentry-ruby.gemspec +2/-1
  DIFFERENT extra_rdoc_files:
    5.26.0->6.4.0:
      * Changed:
            README.md +3/-3
  DIFFERENT runtime dependencies:
    5.26.0->6.4.0:
      * Added:
            logger [">= 0"] (runtime)
  DIFFERENT Gemfile dependencies
    5.26.0->6.4.0:
      * Added:
            graphql [">= 2.2.6"] (runtime)
            sequel [">= 0"] (development)
            activerecord-jdbcmysql-adapter [">= 0"] (development)
            jdbc-sqlite3 [">= 0"] (development)

@github-actions
Copy link
Copy Markdown
Contributor

gem compare --diff concurrent-ruby 1.3.5 1.3.6

Compared versions: ["1.3.5", "1.3.6"]
  DIFFERENT files:
    1.3.5->1.3.6:
      * Added:
        lib/concurrent-ruby/concurrent/collection/ruby_timeout_queue.rb
                --- /tmp/20260226-874-pq113u	2026-02-26 03:33:43.029558923 +0000
                +++ /tmp/d20260226-874-5npd1f/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/collection/ruby_timeout_queue.rb	2026-02-26 03:33:43.019558950 +0000
                @@ -0,0 +1,55 @@
                +module Concurrent
                +  module Collection
                +    # @!visibility private
                +    # @!macro ruby_timeout_queue
                +    class RubyTimeoutQueue < ::Queue
                +      def initialize(*args)
                +        if RUBY_VERSION >= '3.2'
                +          raise "#{self.class.name} is not needed on Ruby 3.2 or later, use ::Queue instead"
                +        end
                +
                +        super(*args)
                +
                +        @mutex = Mutex.new
                +        @cond_var = ConditionVariable.new
                +      end
                +
                +      def push(obj)
                +        @mutex.synchronize do
                +          super(obj)
                +          @cond_var.signal
                +        end
                +      end
                +      alias_method :enq, :push
                +      alias_method :<<, :push
                +
                +      def pop(non_block = false, timeout: nil)
                +        if non_block && timeout
                +          raise ArgumentError, "can't set a timeout if non_block is enabled"
                +        end
                +
                +        if non_block
                +          super(true)
                +        elsif timeout
                +          @mutex.synchronize do
                +            deadline = Concurrent.monotonic_time + timeout
                +            while (now = Concurrent.monotonic_time) < deadline && empty?
                +              @cond_var.wait(@mutex, deadline - now)
                +            end
                +            begin
                +              return super(true)
                +            rescue ThreadError
                +              # still empty
                +              nil
                +            end
                +          end
                +        else
                +          super(false)
                +        end
                +      end
                +      alias_method :deq, :pop
                +      alias_method :shift, :pop
                +    end
                +    private_constant :RubyTimeoutQueue
                +  end
                +end
        lib/concurrent-ruby/concurrent/collection/timeout_queue.rb
                --- /tmp/20260226-874-yxoxbj	2026-02-26 03:33:43.031558917 +0000
                +++ /tmp/d20260226-874-5npd1f/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/collection/timeout_queue.rb	2026-02-26 03:33:43.019558950 +0000
                @@ -0,0 +1,18 @@
                +module Concurrent
                +  module Collection
                +    # @!visibility private
                +    # @!macro internal_implementation_note
                +    TimeoutQueueImplementation = if RUBY_VERSION >= '3.2'
                +                                   ::Queue
                +                                 else
                +                                   require 'concurrent/collection/ruby_timeout_queue'
                +                                   RubyTimeoutQueue
                +                                 end
                +    private_constant :TimeoutQueueImplementation
                +
                +    # @!visibility private
                +    # @!macro timeout_queue
                +    class TimeoutQueue < TimeoutQueueImplementation
                +    end
                +  end
                +end
      * Changed:
        CHANGELOG.md
                --- /tmp/d20260226-874-5npd1f/concurrent-ruby-1.3.5/CHANGELOG.md	2026-02-26 03:33:42.991559027 +0000
                +++ /tmp/d20260226-874-5npd1f/concurrent-ruby-1.3.6/CHANGELOG.md	2026-02-26 03:33:43.010558975 +0000
                @@ -2,0 +3,6 @@
                +## Release v1.3.6 (13 December 2025)
                +
                +concurrent-ruby:
                +
                +* See the [release notes on GitHub](https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.3.6).
                +
        README.md
                --- /tmp/d20260226-874-5npd1f/concurrent-ruby-1.3.5/README.md	2026-02-26 03:33:42.991559027 +0000
                +++ /tmp/d20260226-874-5npd1f/concurrent-ruby-1.3.6/README.md	2026-02-26 03:33:43.011558972 +0000
                @@ -210 +210 @@
                -keep backward compatibility (there may also lack tests and documentation). Semantic versions will
                +keep backward compatibility (they may also lack tests and documentation). Semantic versions will
                @@ -361 +361,2 @@
                -* Install Docker, required for Windows builds
                +* Install Docker or Podman, required for Windows builds
                +* If `bundle config get path` is set, use `bundle config set --local path.system true` otherwise the `gem name, path: '.'` gems won't be found (Bundler limitation).
                @@ -380,0 +382 @@
                +* [Joshua Young](https://github.com/joshuay03)
        lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb
                --- /tmp/d20260226-874-5npd1f/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb	2026-02-26 03:33:42.998559008 +0000
                +++ /tmp/d20260226-874-5npd1f/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb	2026-02-26 03:33:43.017558956 +0000
                @@ -8,0 +9 @@
                +    return RUBY_VERSION < "3.0" if Concurrent.on_cruby?
        lib/concurrent-ruby/concurrent/concurrent_ruby.jar
                Binary files /tmp/d20260226-874-5npd1f/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/concurrent_ruby.jar and /tmp/d20260226-874-5npd1f/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/concurrent_ruby.jar differ
        lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb
                --- /tmp/d20260226-874-5npd1f/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb	2026-02-26 03:33:43.003558994 +0000
                +++ /tmp/d20260226-874-5npd1f/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb	2026-02-26 03:33:43.022558942 +0000
                @@ -84,4 +84,2 @@
                -  #   This is a no-op on some pool implementation (e.g. the Java one).  The Ruby
                -  #   pool will auto-prune each time a new job is posted. You will need to call
                -  #   this method explicitly in case your application post jobs in bursts (a
                -  #   lot of jobs and then nothing for long periods)
                +  #   This is a no-op on all pool implementations as they prune themselves
                +  #   automatically, and has been deprecated.
        lib/concurrent-ruby/concurrent/executor/java_executor_service.rb
                --- /tmp/d20260226-874-5npd1f/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/java_executor_service.rb	2026-02-26 03:33:43.003558994 +0000
                +++ /tmp/d20260226-874-5npd1f/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/java_executor_service.rb	2026-02-26 03:33:43.022558942 +0000
                @@ -48,0 +49 @@
                +          wait_for_termination
        lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb
                --- /tmp/d20260226-874-5npd1f/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb	2026-02-26 03:33:43.003558994 +0000
                +++ /tmp/d20260226-874-5npd1f/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb	2026-02-26 03:33:43.022558942 +0000
                @@ -10,0 +11 @@
                +      include Concern::Deprecation
                @@ -102,0 +104 @@
                +        deprecated "#prune_pool has no effect and will be removed in the next release."
        lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb
                --- /tmp/d20260226-874-5npd1f/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb	2026-02-26 03:33:43.003558994 +0000
                +++ /tmp/d20260226-874-5npd1f/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb	2026-02-26 03:33:43.022558942 +0000
                @@ -1,0 +2 @@
                +require 'concurrent/executor/serial_executor_service'
                @@ -8,0 +10 @@
                +    include SerialExecutorService
        lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb
                --- /tmp/d20260226-874-5npd1f/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb	2026-02-26 03:33:43.004558992 +0000
                +++ /tmp/d20260226-874-5npd1f/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb	2026-02-26 03:33:43.023558939 +0000
                @@ -5,0 +6 @@
                +require 'concurrent/collection/timeout_queue'
                @@ -12,0 +14 @@
                +    include Concern::Deprecation
                @@ -96,0 +99,4 @@
                +    # removes the worker if it can be pruned
                +    #
                +    # @return [true, false] if the worker was pruned
                +    #
                @@ -98,2 +104,17 @@
                -    def remove_busy_worker(worker)
                -      synchronize { ns_remove_busy_worker worker }
                +    def prune_worker(worker)
                +      synchronize do
                +        if ns_prunable_capacity > 0
                +          remove_worker worker
                +          true
                +        else
                +          false
                +        end
                +      end
                +    end
                +
                +    # @!visibility private
                +    def remove_worker(worker)
                +      synchronize do
                +        ns_remove_ready_worker worker
                +        ns_remove_busy_worker worker
                +      end
                @@ -119 +140 @@
                -      synchronize { ns_prune_pool }
                +      deprecated "#prune_pool has no effect and will be removed in next the release, see https://github.com/ruby-concurrency/concurrent-ruby/pull/1082."
                @@ -149,3 +169,0 @@
                -
                -      @gc_interval  = opts.fetch(:gc_interval, @idletime / 2.0).to_i # undocumented
                -      @next_gc_time = Concurrent.monotonic_time + @gc_interval
                @@ -164,0 +183 @@
                +        nil
                @@ -166 +185 @@
                -        return fallback_action(*args, &task)
                +        fallback_action(*args, &task)
                @@ -168,3 +186,0 @@
                -
                -      ns_prune_pool if @next_gc_time < Concurrent.monotonic_time
                -      nil
                @@ -221 +237 @@
                -      
                +
                @@ -268 +284 @@
                -    # removes a worker which is not in not tracked in @ready
                +    # removes a worker which is not tracked in @ready
                @@ -277,2 +292,0 @@
                -    # try oldest worker if it is idle for enough time, it's returned back at the start
                -    #
                @@ -280,11 +294,3 @@
                -    def ns_prune_pool
                -      now = Concurrent.monotonic_time
                -      stopped_workers = 0
                -      while !@ready.empty? && (@pool.size - stopped_workers > @min_length)
                -        worker, last_message = @ready.first
                -        if now - last_message > self.idletime
                -          stopped_workers += 1
                -          @ready.shift
                -          worker << :stop
                -        else break
                -        end
                +    def ns_remove_ready_worker(worker)
                +      if index = @ready.index { |rw, _| rw == worker }
                +        @ready.delete_at(index)
                @@ -291,0 +298,2 @@
                +      true
                +    end
                @@ -293 +301,10 @@
                -      @next_gc_time = Concurrent.monotonic_time + @gc_interval
                +    # @return [Integer] number of excess idle workers which can be removed without
                +    #                   going below min_length, or all workers if not running
                +    #
                +    # @!visibility private
                +    def ns_prunable_capacity
                +      if running?
                +        [@pool.size - @min_length, @ready.size].min
                +      else
                +        @pool.size
                +      end
                @@ -295,0 +313 @@
                +    # @!visibility private
                @@ -315 +333 @@
                -        @queue  = Queue.new
                +        @queue  = Collection::TimeoutQueue.new
                @@ -341 +359 @@
                -            loop do
                +            prunable = true
                @@ -343 +361,6 @@
                -              case message = my_queue.pop
                +            loop do
                +              timeout = prunable && my_pool.running? ? my_idletime : nil
                +              case message = my_queue.pop(timeout: timeout)
                +              when nil
                +                throw :stop if my_pool.prune_worker(self)
                +                prunable = false
                @@ -345 +368 @@
                -                my_pool.remove_busy_worker(self)
                +                my_pool.remove_worker(self)
                @@ -347 +369,0 @@
                -
                @@ -351,0 +374 @@
                +                prunable = true
        lib/concurrent-ruby/concurrent/executor/timer_set.rb
                --- /tmp/d20260226-874-5npd1f/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/timer_set.rb	2026-02-26 03:33:43.004558992 +0000
                +++ /tmp/d20260226-874-5npd1f/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/timer_set.rb	2026-02-26 03:33:43.023558939 +0000
                @@ -63,0 +64 @@
                +      @timer_executor.kill
                @@ -125 +126,3 @@
                -      @timer_executor.kill
                +      @condition.set
                +      @condition.reset
                +      @timer_executor.shutdown
        lib/concurrent-ruby/concurrent/executors.rb
                --- /tmp/d20260226-874-5npd1f/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executors.rb	2026-02-26 03:33:43.004558992 +0000
                +++ /tmp/d20260226-874-5npd1f/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executors.rb	2026-02-26 03:33:43.023558939 +0000
                @@ -13 +12,0 @@
                -require 'concurrent/executor/cached_thread_pool'
        lib/concurrent-ruby/concurrent/mvar.rb
                --- /tmp/d20260226-874-5npd1f/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/mvar.rb	2026-02-26 03:33:43.005558989 +0000
                +++ /tmp/d20260226-874-5npd1f/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/mvar.rb	2026-02-26 03:33:43.024558936 +0000
                @@ -12 +12 @@
                -  # `#mutate` that is atomic with respect to operations on the same instance.
                +  # `#modify` that is atomic with respect to operations on the same instance.
                @@ -90 +90 @@
                -        # if we timeoud out we'll still be empty
                +        # If we timed out we'll still be empty
                @@ -119 +119 @@
                -    # `put` the transformed value. Returns the transformed value. A timeout can
                +    # `put` the transformed value. Returns the pre-transform value. A timeout can
                @@ -122 +122 @@
                -    # @return [Object] the transformed value, or `TIMEOUT`
                +    # @return [Object] the pre-transform value, or `TIMEOUT`
        lib/concurrent-ruby/concurrent/promise.rb
                --- /tmp/d20260226-874-5npd1f/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/promise.rb	2026-02-26 03:33:43.006558986 +0000
                +++ /tmp/d20260226-874-5npd1f/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/promise.rb	2026-02-26 03:33:43.025558934 +0000
                @@ -170 +170 @@
                -  # c1.value       #=> 45
                +  # c1.value       #=> 42
        lib/concurrent-ruby/concurrent/timer_task.rb
                --- /tmp/d20260226-874-5npd1f/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/timer_task.rb	2026-02-26 03:33:43.009558978 +0000
                +++ /tmp/d20260226-874-5npd1f/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/timer_task.rb	2026-02-26 03:33:43.028558925 +0000
                @@ -4,0 +5 @@
                +require 'concurrent/atomic/atomic_fixnum'
                @@ -238,0 +240 @@
                +          @age.increment
                @@ -311,0 +314 @@
                +      @age = Concurrent::AtomicFixnum.new(0)
                @@ -331 +334 @@
                -      ScheduledTask.execute(interval, executor: @executor, args: [Concurrent::Event.new], &method(:execute_task))
                +      ScheduledTask.execute(interval, executor: @executor, args: [Concurrent::Event.new, @age.value], &method(:execute_task))
                @@ -336 +339 @@
                -    def execute_task(completion)
                +    def execute_task(completion, age_when_scheduled)
                @@ -337,0 +341,2 @@
                +      return nil unless @age.value == age_when_scheduled
                +
        lib/concurrent-ruby/concurrent/version.rb
                --- /tmp/d20260226-874-5npd1f/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/version.rb	2026-02-26 03:33:43.010558975 +0000
                +++ /tmp/d20260226-874-5npd1f/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/version.rb	2026-02-26 03:33:43.029558923 +0000
                @@ -2 +2 @@
                -  VERSION = '1.3.5'
                +  VERSION = '1.3.6'

@github-actions
Copy link
Copy Markdown
Contributor

gem compare --diff concurrent-ruby 1.3.5 1.3.6

Compared versions: ["1.3.5", "1.3.6"]
  DIFFERENT files:
    1.3.5->1.3.6:
      * Added:
        lib/concurrent-ruby/concurrent/collection/ruby_timeout_queue.rb
                --- /tmp/20260226-875-qd7fjf	2026-02-26 03:33:49.965681597 +0000
                +++ /tmp/d20260226-875-czrbhx/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/collection/ruby_timeout_queue.rb	2026-02-26 03:33:49.949681346 +0000
                @@ -0,0 +1,55 @@
                +module Concurrent
                +  module Collection
                +    # @!visibility private
                +    # @!macro ruby_timeout_queue
                +    class RubyTimeoutQueue < ::Queue
                +      def initialize(*args)
                +        if RUBY_VERSION >= '3.2'
                +          raise "#{self.class.name} is not needed on Ruby 3.2 or later, use ::Queue instead"
                +        end
                +
                +        super(*args)
                +
                +        @mutex = Mutex.new
                +        @cond_var = ConditionVariable.new
                +      end
                +
                +      def push(obj)
                +        @mutex.synchronize do
                +          super(obj)
                +          @cond_var.signal
                +        end
                +      end
                +      alias_method :enq, :push
                +      alias_method :<<, :push
                +
                +      def pop(non_block = false, timeout: nil)
                +        if non_block && timeout
                +          raise ArgumentError, "can't set a timeout if non_block is enabled"
                +        end
                +
                +        if non_block
                +          super(true)
                +        elsif timeout
                +          @mutex.synchronize do
                +            deadline = Concurrent.monotonic_time + timeout
                +            while (now = Concurrent.monotonic_time) < deadline && empty?
                +              @cond_var.wait(@mutex, deadline - now)
                +            end
                +            begin
                +              return super(true)
                +            rescue ThreadError
                +              # still empty
                +              nil
                +            end
                +          end
                +        else
                +          super(false)
                +        end
                +      end
                +      alias_method :deq, :pop
                +      alias_method :shift, :pop
                +    end
                +    private_constant :RubyTimeoutQueue
                +  end
                +end
        lib/concurrent-ruby/concurrent/collection/timeout_queue.rb
                --- /tmp/20260226-875-con744	2026-02-26 03:33:49.968681643 +0000
                +++ /tmp/d20260226-875-czrbhx/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/collection/timeout_queue.rb	2026-02-26 03:33:49.949681346 +0000
                @@ -0,0 +1,18 @@
                +module Concurrent
                +  module Collection
                +    # @!visibility private
                +    # @!macro internal_implementation_note
                +    TimeoutQueueImplementation = if RUBY_VERSION >= '3.2'
                +                                   ::Queue
                +                                 else
                +                                   require 'concurrent/collection/ruby_timeout_queue'
                +                                   RubyTimeoutQueue
                +                                 end
                +    private_constant :TimeoutQueueImplementation
                +
                +    # @!visibility private
                +    # @!macro timeout_queue
                +    class TimeoutQueue < TimeoutQueueImplementation
                +    end
                +  end
                +end
      * Changed:
        CHANGELOG.md
                --- /tmp/d20260226-875-czrbhx/concurrent-ruby-1.3.5/CHANGELOG.md	2026-02-26 03:33:49.897680534 +0000
                +++ /tmp/d20260226-875-czrbhx/concurrent-ruby-1.3.6/CHANGELOG.md	2026-02-26 03:33:49.932681081 +0000
                @@ -2,0 +3,6 @@
                +## Release v1.3.6 (13 December 2025)
                +
                +concurrent-ruby:
                +
                +* See the [release notes on GitHub](https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.3.6).
                +
        README.md
                --- /tmp/d20260226-875-czrbhx/concurrent-ruby-1.3.5/README.md	2026-02-26 03:33:49.898680549 +0000
                +++ /tmp/d20260226-875-czrbhx/concurrent-ruby-1.3.6/README.md	2026-02-26 03:33:49.933681096 +0000
                @@ -210 +210 @@
                -keep backward compatibility (there may also lack tests and documentation). Semantic versions will
                +keep backward compatibility (they may also lack tests and documentation). Semantic versions will
                @@ -361 +361,2 @@
                -* Install Docker, required for Windows builds
                +* Install Docker or Podman, required for Windows builds
                +* If `bundle config get path` is set, use `bundle config set --local path.system true` otherwise the `gem name, path: '.'` gems won't be found (Bundler limitation).
                @@ -380,0 +382 @@
                +* [Joshua Young](https://github.com/joshuay03)
        lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb
                --- /tmp/d20260226-875-czrbhx/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb	2026-02-26 03:33:49.909680721 +0000
                +++ /tmp/d20260226-875-czrbhx/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb	2026-02-26 03:33:49.945681284 +0000
                @@ -8,0 +9 @@
                +    return RUBY_VERSION < "3.0" if Concurrent.on_cruby?
        lib/concurrent-ruby/concurrent/concurrent_ruby.jar
                Binary files /tmp/d20260226-875-czrbhx/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/concurrent_ruby.jar and /tmp/d20260226-875-czrbhx/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/concurrent_ruby.jar differ
        lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb
                --- /tmp/d20260226-875-czrbhx/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb	2026-02-26 03:33:49.917680846 +0000
                +++ /tmp/d20260226-875-czrbhx/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb	2026-02-26 03:33:49.954681425 +0000
                @@ -84,4 +84,2 @@
                -  #   This is a no-op on some pool implementation (e.g. the Java one).  The Ruby
                -  #   pool will auto-prune each time a new job is posted. You will need to call
                -  #   this method explicitly in case your application post jobs in bursts (a
                -  #   lot of jobs and then nothing for long periods)
                +  #   This is a no-op on all pool implementations as they prune themselves
                +  #   automatically, and has been deprecated.
        lib/concurrent-ruby/concurrent/executor/java_executor_service.rb
                --- /tmp/d20260226-875-czrbhx/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/java_executor_service.rb	2026-02-26 03:33:49.918680862 +0000
                +++ /tmp/d20260226-875-czrbhx/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/java_executor_service.rb	2026-02-26 03:33:49.954681425 +0000
                @@ -48,0 +49 @@
                +          wait_for_termination
        lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb
                --- /tmp/d20260226-875-czrbhx/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb	2026-02-26 03:33:49.918680862 +0000
                +++ /tmp/d20260226-875-czrbhx/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb	2026-02-26 03:33:49.954681425 +0000
                @@ -10,0 +11 @@
                +      include Concern::Deprecation
                @@ -102,0 +104 @@
                +        deprecated "#prune_pool has no effect and will be removed in the next release."
        lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb
                --- /tmp/d20260226-875-czrbhx/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb	2026-02-26 03:33:49.918680862 +0000
                +++ /tmp/d20260226-875-czrbhx/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb	2026-02-26 03:33:49.955681440 +0000
                @@ -1,0 +2 @@
                +require 'concurrent/executor/serial_executor_service'
                @@ -8,0 +10 @@
                +    include SerialExecutorService
        lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb
                --- /tmp/d20260226-875-czrbhx/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb	2026-02-26 03:33:49.919680878 +0000
                +++ /tmp/d20260226-875-czrbhx/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb	2026-02-26 03:33:49.955681440 +0000
                @@ -5,0 +6 @@
                +require 'concurrent/collection/timeout_queue'
                @@ -12,0 +14 @@
                +    include Concern::Deprecation
                @@ -96,0 +99,4 @@
                +    # removes the worker if it can be pruned
                +    #
                +    # @return [true, false] if the worker was pruned
                +    #
                @@ -98,2 +104,17 @@
                -    def remove_busy_worker(worker)
                -      synchronize { ns_remove_busy_worker worker }
                +    def prune_worker(worker)
                +      synchronize do
                +        if ns_prunable_capacity > 0
                +          remove_worker worker
                +          true
                +        else
                +          false
                +        end
                +      end
                +    end
                +
                +    # @!visibility private
                +    def remove_worker(worker)
                +      synchronize do
                +        ns_remove_ready_worker worker
                +        ns_remove_busy_worker worker
                +      end
                @@ -119 +140 @@
                -      synchronize { ns_prune_pool }
                +      deprecated "#prune_pool has no effect and will be removed in next the release, see https://github.com/ruby-concurrency/concurrent-ruby/pull/1082."
                @@ -149,3 +169,0 @@
                -
                -      @gc_interval  = opts.fetch(:gc_interval, @idletime / 2.0).to_i # undocumented
                -      @next_gc_time = Concurrent.monotonic_time + @gc_interval
                @@ -164,0 +183 @@
                +        nil
                @@ -166 +185 @@
                -        return fallback_action(*args, &task)
                +        fallback_action(*args, &task)
                @@ -168,3 +186,0 @@
                -
                -      ns_prune_pool if @next_gc_time < Concurrent.monotonic_time
                -      nil
                @@ -221 +237 @@
                -      
                +
                @@ -268 +284 @@
                -    # removes a worker which is not in not tracked in @ready
                +    # removes a worker which is not tracked in @ready
                @@ -277,2 +292,0 @@
                -    # try oldest worker if it is idle for enough time, it's returned back at the start
                -    #
                @@ -280,11 +294,3 @@
                -    def ns_prune_pool
                -      now = Concurrent.monotonic_time
                -      stopped_workers = 0
                -      while !@ready.empty? && (@pool.size - stopped_workers > @min_length)
                -        worker, last_message = @ready.first
                -        if now - last_message > self.idletime
                -          stopped_workers += 1
                -          @ready.shift
                -          worker << :stop
                -        else break
                -        end
                +    def ns_remove_ready_worker(worker)
                +      if index = @ready.index { |rw, _| rw == worker }
                +        @ready.delete_at(index)
                @@ -291,0 +298,2 @@
                +      true
                +    end
                @@ -293 +301,10 @@
                -      @next_gc_time = Concurrent.monotonic_time + @gc_interval
                +    # @return [Integer] number of excess idle workers which can be removed without
                +    #                   going below min_length, or all workers if not running
                +    #
                +    # @!visibility private
                +    def ns_prunable_capacity
                +      if running?
                +        [@pool.size - @min_length, @ready.size].min
                +      else
                +        @pool.size
                +      end
                @@ -295,0 +313 @@
                +    # @!visibility private
                @@ -315 +333 @@
                -        @queue  = Queue.new
                +        @queue  = Collection::TimeoutQueue.new
                @@ -341 +359 @@
                -            loop do
                +            prunable = true
                @@ -343 +361,6 @@
                -              case message = my_queue.pop
                +            loop do
                +              timeout = prunable && my_pool.running? ? my_idletime : nil
                +              case message = my_queue.pop(timeout: timeout)
                +              when nil
                +                throw :stop if my_pool.prune_worker(self)
                +                prunable = false
                @@ -345 +368 @@
                -                my_pool.remove_busy_worker(self)
                +                my_pool.remove_worker(self)
                @@ -347 +369,0 @@
                -
                @@ -351,0 +374 @@
                +                prunable = true
        lib/concurrent-ruby/concurrent/executor/timer_set.rb
                --- /tmp/d20260226-875-czrbhx/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/timer_set.rb	2026-02-26 03:33:49.920680893 +0000
                +++ /tmp/d20260226-875-czrbhx/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/timer_set.rb	2026-02-26 03:33:49.956681456 +0000
                @@ -63,0 +64 @@
                +      @timer_executor.kill
                @@ -125 +126,3 @@
                -      @timer_executor.kill
                +      @condition.set
                +      @condition.reset
                +      @timer_executor.shutdown
        lib/concurrent-ruby/concurrent/executors.rb
                --- /tmp/d20260226-875-czrbhx/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executors.rb	2026-02-26 03:33:49.920680893 +0000
                +++ /tmp/d20260226-875-czrbhx/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executors.rb	2026-02-26 03:33:49.956681456 +0000
                @@ -13 +12,0 @@
                -require 'concurrent/executor/cached_thread_pool'
        lib/concurrent-ruby/concurrent/mvar.rb
                --- /tmp/d20260226-875-czrbhx/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/mvar.rb	2026-02-26 03:33:49.922680924 +0000
                +++ /tmp/d20260226-875-czrbhx/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/mvar.rb	2026-02-26 03:33:49.957681472 +0000
                @@ -12 +12 @@
                -  # `#mutate` that is atomic with respect to operations on the same instance.
                +  # `#modify` that is atomic with respect to operations on the same instance.
                @@ -90 +90 @@
                -        # if we timeoud out we'll still be empty
                +        # If we timed out we'll still be empty
                @@ -119 +119 @@
                -    # `put` the transformed value. Returns the transformed value. A timeout can
                +    # `put` the transformed value. Returns the pre-transform value. A timeout can
                @@ -122 +122 @@
                -    # @return [Object] the transformed value, or `TIMEOUT`
                +    # @return [Object] the pre-transform value, or `TIMEOUT`
        lib/concurrent-ruby/concurrent/promise.rb
                --- /tmp/d20260226-875-czrbhx/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/promise.rb	2026-02-26 03:33:49.923680940 +0000
                +++ /tmp/d20260226-875-czrbhx/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/promise.rb	2026-02-26 03:33:49.958681487 +0000
                @@ -170 +170 @@
                -  # c1.value       #=> 45
                +  # c1.value       #=> 42
        lib/concurrent-ruby/concurrent/timer_task.rb
                --- /tmp/d20260226-875-czrbhx/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/timer_task.rb	2026-02-26 03:33:49.928681018 +0000
                +++ /tmp/d20260226-875-czrbhx/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/timer_task.rb	2026-02-26 03:33:49.963681565 +0000
                @@ -4,0 +5 @@
                +require 'concurrent/atomic/atomic_fixnum'
                @@ -238,0 +240 @@
                +          @age.increment
                @@ -311,0 +314 @@
                +      @age = Concurrent::AtomicFixnum.new(0)
                @@ -331 +334 @@
                -      ScheduledTask.execute(interval, executor: @executor, args: [Concurrent::Event.new], &method(:execute_task))
                +      ScheduledTask.execute(interval, executor: @executor, args: [Concurrent::Event.new, @age.value], &method(:execute_task))
                @@ -336 +339 @@
                -    def execute_task(completion)
                +    def execute_task(completion, age_when_scheduled)
                @@ -337,0 +341,2 @@
                +      return nil unless @age.value == age_when_scheduled
                +
        lib/concurrent-ruby/concurrent/version.rb
                --- /tmp/d20260226-875-czrbhx/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/version.rb	2026-02-26 03:33:49.931681065 +0000
                +++ /tmp/d20260226-875-czrbhx/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/version.rb	2026-02-26 03:33:49.964681581 +0000
                @@ -2 +2 @@
                -  VERSION = '1.3.5'
                +  VERSION = '1.3.6'

@github-actions
Copy link
Copy Markdown
Contributor

gem compare --diff sentry-ruby 5.26.0 6.4.0

Diff too large (146179 chars)

@github-actions
Copy link
Copy Markdown
Contributor

gem compare sentry-ruby 5.26.0 6.4.0

Compared versions: ["5.26.0", "6.4.0"]
  DIFFERENT homepage:
    5.26.0: https://github.com/getsentry/sentry-ruby/tree/5.26.0/sentry-ruby
    6.4.0: https://github.com/getsentry/sentry-ruby/tree/6.4.0/sentry-ruby
  DIFFERENT metadata:
    5.26.0: {"homepage_uri" => "https://github.com/getsentry/sentry-ruby/tree/5.26.0/sentry-ruby", "source_code_uri" => "https://github.com/getsentry/sentry-ruby/tree/5.26.0/sentry-ruby", "changelog_uri" => "https://github.com/getsentry/sentry-ruby/blob/5.26.0/CHANGELOG.md", "bug_tracker_uri" => "https://github.com/getsentry/sentry-ruby/issues", "documentation_uri" => "http://www.rubydoc.info/gems/sentry-ruby/5.26.0"}
    6.4.0: {"homepage_uri" => "https://github.com/getsentry/sentry-ruby/tree/6.4.0/sentry-ruby", "source_code_uri" => "https://github.com/getsentry/sentry-ruby/tree/6.4.0/sentry-ruby", "changelog_uri" => "https://github.com/getsentry/sentry-ruby/blob/6.4.0/CHANGELOG.md", "bug_tracker_uri" => "https://github.com/getsentry/sentry-ruby/issues", "documentation_uri" => "http://www.rubydoc.info/gems/sentry-ruby/6.4.0"}
  DIFFERENT required_ruby_version:
    5.26.0: >= 2.4
    6.4.0: >= 2.7
  DIFFERENT rubygems_version:
    5.26.0: 3.6.7
    6.4.0: 3.6.9
  DIFFERENT version:
    5.26.0: 5.26.0
    6.4.0: 6.4.0
  DIFFERENT files:
    5.26.0->6.4.0:
      * Deleted:
            lib/sentry/metrics/aggregator.rb
            lib/sentry/metrics/configuration.rb
            lib/sentry/metrics/counter_metric.rb
            lib/sentry/metrics/distribution_metric.rb
            lib/sentry/metrics/gauge_metric.rb
            lib/sentry/metrics/local_aggregator.rb
            lib/sentry/metrics/metric.rb
            lib/sentry/metrics/set_metric.rb
            lib/sentry/metrics/timing.rb
      * Added:
            lib/sentry/backtrace/line.rb +99/-0
            lib/sentry/debug_structured_logger.rb +94/-0
            lib/sentry/metric_event.rb +49/-0
            lib/sentry/metric_event_buffer.rb +28/-0
            lib/sentry/sequel.rb +35/-0
            lib/sentry/telemetry_event_buffer.rb +130/-0
            lib/sentry/transport/debug_transport.rb +70/-0
            lib/sentry/utils/sample_rand.rb +97/-0
            lib/sentry/utils/telemetry_attributes.rb +30/-0
      * Changed:
            Gemfile +27/-5
            README.md +3/-3
            lib/sentry-ruby.rb +56/-29
            lib/sentry/background_worker.rb +1/-4
            lib/sentry/backtrace.rb +44/-76
            lib/sentry/baggage.rb +1/-1
            lib/sentry/breadcrumb.rb +1/-1
            lib/sentry/breadcrumb_buffer.rb +2/-2
            lib/sentry/check_in_event.rb +2/-2
            lib/sentry/client.rb +59/-136
            lib/sentry/configuration.rb +176/-78
            lib/sentry/cron/monitor_check_ins.rb +3/-3
            lib/sentry/cron/monitor_config.rb +2/-2
            lib/sentry/cron/monitor_schedule.rb +2/-2
            lib/sentry/dsn.rb +52/-0
            lib/sentry/envelope/item.rb +3/-3
            lib/sentry/error_event.rb +3/-3
            lib/sentry/event.rb +4/-10
            lib/sentry/graphql.rb +1/-1
            lib/sentry/hub.rb +29/-5
            lib/sentry/interface.rb +1/-1
            lib/sentry/interfaces/exception.rb +2/-2
            lib/sentry/interfaces/request.rb +2/-0
            lib/sentry/interfaces/single_exception.rb +4/-4
            lib/sentry/interfaces/stacktrace.rb +3/-3
            lib/sentry/interfaces/stacktrace_builder.rb +0/-8
            lib/sentry/interfaces/threads.rb +2/-2
            lib/sentry/log_event.rb +32/-137
            lib/sentry/log_event_buffer.rb +13/-60
            lib/sentry/metrics.rb +47/-42
            lib/sentry/profiler.rb +4/-5
            lib/sentry/propagation_context.rb +55/-18
            lib/sentry/rack/capture_exceptions.rb +88/-2
            lib/sentry/rspec.rb +1/-1
            lib/sentry/scope.rb +50/-18
            lib/sentry/span.rb +5/-17
            lib/sentry/std_lib_logger.rb +10/-1
            lib/sentry/test_helper.rb +30/-0
            lib/sentry/transaction.rb +72/-95
            lib/sentry/transaction_event.rb +4/-9
            lib/sentry/transport.rb +4/-6
            lib/sentry/transport/dummy_transport.rb +1/-0
            lib/sentry/transport/http_transport.rb +10/-16
            lib/sentry/utils/encoding_helper.rb +6/-0
            lib/sentry/utils/logging_helper.rb +25/-9
            lib/sentry/vernier/profiler.rb +4/-3
            lib/sentry/version.rb +1/-1
            sentry-ruby-core.gemspec +1/-1
            sentry-ruby.gemspec +2/-1
  DIFFERENT extra_rdoc_files:
    5.26.0->6.4.0:
      * Changed:
            README.md +3/-3
  DIFFERENT runtime dependencies:
    5.26.0->6.4.0:
      * Added:
            logger [">= 0"] (runtime)
  DIFFERENT Gemfile dependencies
    5.26.0->6.4.0:
      * Added:
            graphql [">= 2.2.6"] (runtime)
            sequel [">= 0"] (development)
            activerecord-jdbcmysql-adapter [">= 0"] (development)
            jdbc-sqlite3 [">= 0"] (development)

1 similar comment
@github-actions
Copy link
Copy Markdown
Contributor

gem compare sentry-ruby 5.26.0 6.4.0

Compared versions: ["5.26.0", "6.4.0"]
  DIFFERENT homepage:
    5.26.0: https://github.com/getsentry/sentry-ruby/tree/5.26.0/sentry-ruby
    6.4.0: https://github.com/getsentry/sentry-ruby/tree/6.4.0/sentry-ruby
  DIFFERENT metadata:
    5.26.0: {"homepage_uri" => "https://github.com/getsentry/sentry-ruby/tree/5.26.0/sentry-ruby", "source_code_uri" => "https://github.com/getsentry/sentry-ruby/tree/5.26.0/sentry-ruby", "changelog_uri" => "https://github.com/getsentry/sentry-ruby/blob/5.26.0/CHANGELOG.md", "bug_tracker_uri" => "https://github.com/getsentry/sentry-ruby/issues", "documentation_uri" => "http://www.rubydoc.info/gems/sentry-ruby/5.26.0"}
    6.4.0: {"homepage_uri" => "https://github.com/getsentry/sentry-ruby/tree/6.4.0/sentry-ruby", "source_code_uri" => "https://github.com/getsentry/sentry-ruby/tree/6.4.0/sentry-ruby", "changelog_uri" => "https://github.com/getsentry/sentry-ruby/blob/6.4.0/CHANGELOG.md", "bug_tracker_uri" => "https://github.com/getsentry/sentry-ruby/issues", "documentation_uri" => "http://www.rubydoc.info/gems/sentry-ruby/6.4.0"}
  DIFFERENT required_ruby_version:
    5.26.0: >= 2.4
    6.4.0: >= 2.7
  DIFFERENT rubygems_version:
    5.26.0: 3.6.7
    6.4.0: 3.6.9
  DIFFERENT version:
    5.26.0: 5.26.0
    6.4.0: 6.4.0
  DIFFERENT files:
    5.26.0->6.4.0:
      * Deleted:
            lib/sentry/metrics/aggregator.rb
            lib/sentry/metrics/configuration.rb
            lib/sentry/metrics/counter_metric.rb
            lib/sentry/metrics/distribution_metric.rb
            lib/sentry/metrics/gauge_metric.rb
            lib/sentry/metrics/local_aggregator.rb
            lib/sentry/metrics/metric.rb
            lib/sentry/metrics/set_metric.rb
            lib/sentry/metrics/timing.rb
      * Added:
            lib/sentry/backtrace/line.rb +99/-0
            lib/sentry/debug_structured_logger.rb +94/-0
            lib/sentry/metric_event.rb +49/-0
            lib/sentry/metric_event_buffer.rb +28/-0
            lib/sentry/sequel.rb +35/-0
            lib/sentry/telemetry_event_buffer.rb +130/-0
            lib/sentry/transport/debug_transport.rb +70/-0
            lib/sentry/utils/sample_rand.rb +97/-0
            lib/sentry/utils/telemetry_attributes.rb +30/-0
      * Changed:
            Gemfile +27/-5
            README.md +3/-3
            lib/sentry-ruby.rb +56/-29
            lib/sentry/background_worker.rb +1/-4
            lib/sentry/backtrace.rb +44/-76
            lib/sentry/baggage.rb +1/-1
            lib/sentry/breadcrumb.rb +1/-1
            lib/sentry/breadcrumb_buffer.rb +2/-2
            lib/sentry/check_in_event.rb +2/-2
            lib/sentry/client.rb +59/-136
            lib/sentry/configuration.rb +176/-78
            lib/sentry/cron/monitor_check_ins.rb +3/-3
            lib/sentry/cron/monitor_config.rb +2/-2
            lib/sentry/cron/monitor_schedule.rb +2/-2
            lib/sentry/dsn.rb +52/-0
            lib/sentry/envelope/item.rb +3/-3
            lib/sentry/error_event.rb +3/-3
            lib/sentry/event.rb +4/-10
            lib/sentry/graphql.rb +1/-1
            lib/sentry/hub.rb +29/-5
            lib/sentry/interface.rb +1/-1
            lib/sentry/interfaces/exception.rb +2/-2
            lib/sentry/interfaces/request.rb +2/-0
            lib/sentry/interfaces/single_exception.rb +4/-4
            lib/sentry/interfaces/stacktrace.rb +3/-3
            lib/sentry/interfaces/stacktrace_builder.rb +0/-8
            lib/sentry/interfaces/threads.rb +2/-2
            lib/sentry/log_event.rb +32/-137
            lib/sentry/log_event_buffer.rb +13/-60
            lib/sentry/metrics.rb +47/-42
            lib/sentry/profiler.rb +4/-5
            lib/sentry/propagation_context.rb +55/-18
            lib/sentry/rack/capture_exceptions.rb +88/-2
            lib/sentry/rspec.rb +1/-1
            lib/sentry/scope.rb +50/-18
            lib/sentry/span.rb +5/-17
            lib/sentry/std_lib_logger.rb +10/-1
            lib/sentry/test_helper.rb +30/-0
            lib/sentry/transaction.rb +72/-95
            lib/sentry/transaction_event.rb +4/-9
            lib/sentry/transport.rb +4/-6
            lib/sentry/transport/dummy_transport.rb +1/-0
            lib/sentry/transport/http_transport.rb +10/-16
            lib/sentry/utils/encoding_helper.rb +6/-0
            lib/sentry/utils/logging_helper.rb +25/-9
            lib/sentry/vernier/profiler.rb +4/-3
            lib/sentry/version.rb +1/-1
            sentry-ruby-core.gemspec +1/-1
            sentry-ruby.gemspec +2/-1
  DIFFERENT extra_rdoc_files:
    5.26.0->6.4.0:
      * Changed:
            README.md +3/-3
  DIFFERENT runtime dependencies:
    5.26.0->6.4.0:
      * Added:
            logger [">= 0"] (runtime)
  DIFFERENT Gemfile dependencies
    5.26.0->6.4.0:
      * Added:
            graphql [">= 2.2.6"] (runtime)
            sequel [">= 0"] (development)
            activerecord-jdbcmysql-adapter [">= 0"] (development)
            jdbc-sqlite3 [">= 0"] (development)

@github-actions
Copy link
Copy Markdown
Contributor

gem compare --diff sentry-ruby 5.26.0 6.4.0

Diff too large (146179 chars)

@github-actions
Copy link
Copy Markdown
Contributor

gem compare concurrent-ruby 1.3.5 1.3.6

Compared versions: ["1.3.5", "1.3.6"]
  DIFFERENT date:
    1.3.5: 2025-01-15 00:00:00 UTC
    1.3.6: 2025-12-13 00:00:00 UTC
  DIFFERENT rubygems_version:
    1.3.5: 3.3.26
    1.3.6: 3.3.27
  DIFFERENT version:
    1.3.5: 1.3.5
    1.3.6: 1.3.6
  DIFFERENT files:
    1.3.5->1.3.6:
      * Added:
            lib/concurrent-ruby/concurrent/collection/ruby_timeout_queue.rb +55/-0
            lib/concurrent-ruby/concurrent/collection/timeout_queue.rb +18/-0
      * Changed:
            CHANGELOG.md +6/-0
            README.md +4/-2
            lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb +1/-0
            lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb +2/-4
            lib/concurrent-ruby/concurrent/executor/java_executor_service.rb +1/-0
            lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb +2/-0
            lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb +2/-0
            lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb +54/-31
            lib/concurrent-ruby/concurrent/executor/timer_set.rb +4/-1
            lib/concurrent-ruby/concurrent/executors.rb +0/-1
            lib/concurrent-ruby/concurrent/mvar.rb +4/-4
            lib/concurrent-ruby/concurrent/promise.rb +1/-1
            lib/concurrent-ruby/concurrent/timer_task.rb +7/-2
            lib/concurrent-ruby/concurrent/version.rb +1/-1
  DIFFERENT extra_rdoc_files:
    1.3.5->1.3.6:
      * Changed:
            README.md +4/-2
            CHANGELOG.md +6/-0

@github-actions
Copy link
Copy Markdown
Contributor

gem compare sentry-ruby 5.26.0 6.4.0

Compared versions: ["5.26.0", "6.4.0"]
  DIFFERENT homepage:
    5.26.0: https://github.com/getsentry/sentry-ruby/tree/5.26.0/sentry-ruby
    6.4.0: https://github.com/getsentry/sentry-ruby/tree/6.4.0/sentry-ruby
  DIFFERENT metadata:
    5.26.0: {"homepage_uri" => "https://github.com/getsentry/sentry-ruby/tree/5.26.0/sentry-ruby", "source_code_uri" => "https://github.com/getsentry/sentry-ruby/tree/5.26.0/sentry-ruby", "changelog_uri" => "https://github.com/getsentry/sentry-ruby/blob/5.26.0/CHANGELOG.md", "bug_tracker_uri" => "https://github.com/getsentry/sentry-ruby/issues", "documentation_uri" => "http://www.rubydoc.info/gems/sentry-ruby/5.26.0"}
    6.4.0: {"homepage_uri" => "https://github.com/getsentry/sentry-ruby/tree/6.4.0/sentry-ruby", "source_code_uri" => "https://github.com/getsentry/sentry-ruby/tree/6.4.0/sentry-ruby", "changelog_uri" => "https://github.com/getsentry/sentry-ruby/blob/6.4.0/CHANGELOG.md", "bug_tracker_uri" => "https://github.com/getsentry/sentry-ruby/issues", "documentation_uri" => "http://www.rubydoc.info/gems/sentry-ruby/6.4.0"}
  DIFFERENT required_ruby_version:
    5.26.0: >= 2.4
    6.4.0: >= 2.7
  DIFFERENT rubygems_version:
    5.26.0: 3.6.7
    6.4.0: 3.6.9
  DIFFERENT version:
    5.26.0: 5.26.0
    6.4.0: 6.4.0
  DIFFERENT files:
    5.26.0->6.4.0:
      * Deleted:
            lib/sentry/metrics/aggregator.rb
            lib/sentry/metrics/configuration.rb
            lib/sentry/metrics/counter_metric.rb
            lib/sentry/metrics/distribution_metric.rb
            lib/sentry/metrics/gauge_metric.rb
            lib/sentry/metrics/local_aggregator.rb
            lib/sentry/metrics/metric.rb
            lib/sentry/metrics/set_metric.rb
            lib/sentry/metrics/timing.rb
      * Added:
            lib/sentry/backtrace/line.rb +99/-0
            lib/sentry/debug_structured_logger.rb +94/-0
            lib/sentry/metric_event.rb +49/-0
            lib/sentry/metric_event_buffer.rb +28/-0
            lib/sentry/sequel.rb +35/-0
            lib/sentry/telemetry_event_buffer.rb +130/-0
            lib/sentry/transport/debug_transport.rb +70/-0
            lib/sentry/utils/sample_rand.rb +97/-0
            lib/sentry/utils/telemetry_attributes.rb +30/-0
      * Changed:
            Gemfile +27/-5
            README.md +3/-3
            lib/sentry-ruby.rb +56/-29
            lib/sentry/background_worker.rb +1/-4
            lib/sentry/backtrace.rb +44/-76
            lib/sentry/baggage.rb +1/-1
            lib/sentry/breadcrumb.rb +1/-1
            lib/sentry/breadcrumb_buffer.rb +2/-2
            lib/sentry/check_in_event.rb +2/-2
            lib/sentry/client.rb +59/-136
            lib/sentry/configuration.rb +176/-78
            lib/sentry/cron/monitor_check_ins.rb +3/-3
            lib/sentry/cron/monitor_config.rb +2/-2
            lib/sentry/cron/monitor_schedule.rb +2/-2
            lib/sentry/dsn.rb +52/-0
            lib/sentry/envelope/item.rb +3/-3
            lib/sentry/error_event.rb +3/-3
            lib/sentry/event.rb +4/-10
            lib/sentry/graphql.rb +1/-1
            lib/sentry/hub.rb +29/-5
            lib/sentry/interface.rb +1/-1
            lib/sentry/interfaces/exception.rb +2/-2
            lib/sentry/interfaces/request.rb +2/-0
            lib/sentry/interfaces/single_exception.rb +4/-4
            lib/sentry/interfaces/stacktrace.rb +3/-3
            lib/sentry/interfaces/stacktrace_builder.rb +0/-8
            lib/sentry/interfaces/threads.rb +2/-2
            lib/sentry/log_event.rb +32/-137
            lib/sentry/log_event_buffer.rb +13/-60
            lib/sentry/metrics.rb +47/-42
            lib/sentry/profiler.rb +4/-5
            lib/sentry/propagation_context.rb +55/-18
            lib/sentry/rack/capture_exceptions.rb +88/-2
            lib/sentry/rspec.rb +1/-1
            lib/sentry/scope.rb +50/-18
            lib/sentry/span.rb +5/-17
            lib/sentry/std_lib_logger.rb +10/-1
            lib/sentry/test_helper.rb +30/-0
            lib/sentry/transaction.rb +72/-95
            lib/sentry/transaction_event.rb +4/-9
            lib/sentry/transport.rb +4/-6
            lib/sentry/transport/dummy_transport.rb +1/-0
            lib/sentry/transport/http_transport.rb +10/-16
            lib/sentry/utils/encoding_helper.rb +6/-0
            lib/sentry/utils/logging_helper.rb +25/-9
            lib/sentry/vernier/profiler.rb +4/-3
            lib/sentry/version.rb +1/-1
            sentry-ruby-core.gemspec +1/-1
            sentry-ruby.gemspec +2/-1
  DIFFERENT extra_rdoc_files:
    5.26.0->6.4.0:
      * Changed:
            README.md +3/-3
  DIFFERENT runtime dependencies:
    5.26.0->6.4.0:
      * Added:
            logger [">= 0"] (runtime)
  DIFFERENT Gemfile dependencies
    5.26.0->6.4.0:
      * Added:
            graphql [">= 2.2.6"] (runtime)
            sequel [">= 0"] (development)
            activerecord-jdbcmysql-adapter [">= 0"] (development)
            jdbc-sqlite3 [">= 0"] (development)

@github-actions
Copy link
Copy Markdown
Contributor

gem compare --diff sentry-ruby 5.26.0 6.4.0

Diff too large (146179 chars)

@github-actions
Copy link
Copy Markdown
Contributor

gem compare --diff concurrent-ruby 1.3.5 1.3.6

Compared versions: ["1.3.5", "1.3.6"]
  DIFFERENT files:
    1.3.5->1.3.6:
      * Added:
        lib/concurrent-ruby/concurrent/collection/ruby_timeout_queue.rb
                --- /tmp/20260226-918-p0jcdq	2026-02-26 03:34:21.994529641 +0000
                +++ /tmp/d20260226-918-8w76i1/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/collection/ruby_timeout_queue.rb	2026-02-26 03:34:21.985529667 +0000
                @@ -0,0 +1,55 @@
                +module Concurrent
                +  module Collection
                +    # @!visibility private
                +    # @!macro ruby_timeout_queue
                +    class RubyTimeoutQueue < ::Queue
                +      def initialize(*args)
                +        if RUBY_VERSION >= '3.2'
                +          raise "#{self.class.name} is not needed on Ruby 3.2 or later, use ::Queue instead"
                +        end
                +
                +        super(*args)
                +
                +        @mutex = Mutex.new
                +        @cond_var = ConditionVariable.new
                +      end
                +
                +      def push(obj)
                +        @mutex.synchronize do
                +          super(obj)
                +          @cond_var.signal
                +        end
                +      end
                +      alias_method :enq, :push
                +      alias_method :<<, :push
                +
                +      def pop(non_block = false, timeout: nil)
                +        if non_block && timeout
                +          raise ArgumentError, "can't set a timeout if non_block is enabled"
                +        end
                +
                +        if non_block
                +          super(true)
                +        elsif timeout
                +          @mutex.synchronize do
                +            deadline = Concurrent.monotonic_time + timeout
                +            while (now = Concurrent.monotonic_time) < deadline && empty?
                +              @cond_var.wait(@mutex, deadline - now)
                +            end
                +            begin
                +              return super(true)
                +            rescue ThreadError
                +              # still empty
                +              nil
                +            end
                +          end
                +        else
                +          super(false)
                +        end
                +      end
                +      alias_method :deq, :pop
                +      alias_method :shift, :pop
                +    end
                +    private_constant :RubyTimeoutQueue
                +  end
                +end
        lib/concurrent-ruby/concurrent/collection/timeout_queue.rb
                --- /tmp/20260226-918-z3n43k	2026-02-26 03:34:21.996529635 +0000
                +++ /tmp/d20260226-918-8w76i1/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/collection/timeout_queue.rb	2026-02-26 03:34:21.985529667 +0000
                @@ -0,0 +1,18 @@
                +module Concurrent
                +  module Collection
                +    # @!visibility private
                +    # @!macro internal_implementation_note
                +    TimeoutQueueImplementation = if RUBY_VERSION >= '3.2'
                +                                   ::Queue
                +                                 else
                +                                   require 'concurrent/collection/ruby_timeout_queue'
                +                                   RubyTimeoutQueue
                +                                 end
                +    private_constant :TimeoutQueueImplementation
                +
                +    # @!visibility private
                +    # @!macro timeout_queue
                +    class TimeoutQueue < TimeoutQueueImplementation
                +    end
                +  end
                +end
      * Changed:
        CHANGELOG.md
                --- /tmp/d20260226-918-8w76i1/concurrent-ruby-1.3.5/CHANGELOG.md	2026-02-26 03:34:21.958529747 +0000
                +++ /tmp/d20260226-918-8w76i1/concurrent-ruby-1.3.6/CHANGELOG.md	2026-02-26 03:34:21.977529691 +0000
                @@ -2,0 +3,6 @@
                +## Release v1.3.6 (13 December 2025)
                +
                +concurrent-ruby:
                +
                +* See the [release notes on GitHub](https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.3.6).
                +
        README.md
                --- /tmp/d20260226-918-8w76i1/concurrent-ruby-1.3.5/README.md	2026-02-26 03:34:21.959529744 +0000
                +++ /tmp/d20260226-918-8w76i1/concurrent-ruby-1.3.6/README.md	2026-02-26 03:34:21.977529691 +0000
                @@ -210 +210 @@
                -keep backward compatibility (there may also lack tests and documentation). Semantic versions will
                +keep backward compatibility (they may also lack tests and documentation). Semantic versions will
                @@ -361 +361,2 @@
                -* Install Docker, required for Windows builds
                +* Install Docker or Podman, required for Windows builds
                +* If `bundle config get path` is set, use `bundle config set --local path.system true` otherwise the `gem name, path: '.'` gems won't be found (Bundler limitation).
                @@ -380,0 +382 @@
                +* [Joshua Young](https://github.com/joshuay03)
        lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb
                --- /tmp/d20260226-918-8w76i1/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb	2026-02-26 03:34:21.965529726 +0000
                +++ /tmp/d20260226-918-8w76i1/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb	2026-02-26 03:34:21.982529676 +0000
                @@ -8,0 +9 @@
                +    return RUBY_VERSION < "3.0" if Concurrent.on_cruby?
        lib/concurrent-ruby/concurrent/concurrent_ruby.jar
                Binary files /tmp/d20260226-918-8w76i1/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/concurrent_ruby.jar and /tmp/d20260226-918-8w76i1/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/concurrent_ruby.jar differ
        lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb
                --- /tmp/d20260226-918-8w76i1/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb	2026-02-26 03:34:21.969529714 +0000
                +++ /tmp/d20260226-918-8w76i1/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb	2026-02-26 03:34:21.987529661 +0000
                @@ -84,4 +84,2 @@
                -  #   This is a no-op on some pool implementation (e.g. the Java one).  The Ruby
                -  #   pool will auto-prune each time a new job is posted. You will need to call
                -  #   this method explicitly in case your application post jobs in bursts (a
                -  #   lot of jobs and then nothing for long periods)
                +  #   This is a no-op on all pool implementations as they prune themselves
                +  #   automatically, and has been deprecated.
        lib/concurrent-ruby/concurrent/executor/java_executor_service.rb
                --- /tmp/d20260226-918-8w76i1/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/java_executor_service.rb	2026-02-26 03:34:21.970529711 +0000
                +++ /tmp/d20260226-918-8w76i1/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/java_executor_service.rb	2026-02-26 03:34:21.987529661 +0000
                @@ -48,0 +49 @@
                +          wait_for_termination
        lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb
                --- /tmp/d20260226-918-8w76i1/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb	2026-02-26 03:34:21.970529711 +0000
                +++ /tmp/d20260226-918-8w76i1/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb	2026-02-26 03:34:21.987529661 +0000
                @@ -10,0 +11 @@
                +      include Concern::Deprecation
                @@ -102,0 +104 @@
                +        deprecated "#prune_pool has no effect and will be removed in the next release."
        lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb
                --- /tmp/d20260226-918-8w76i1/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb	2026-02-26 03:34:21.970529711 +0000
                +++ /tmp/d20260226-918-8w76i1/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb	2026-02-26 03:34:21.988529658 +0000
                @@ -1,0 +2 @@
                +require 'concurrent/executor/serial_executor_service'
                @@ -8,0 +10 @@
                +    include SerialExecutorService
        lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb
                --- /tmp/d20260226-918-8w76i1/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb	2026-02-26 03:34:21.970529711 +0000
                +++ /tmp/d20260226-918-8w76i1/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb	2026-02-26 03:34:21.988529658 +0000
                @@ -5,0 +6 @@
                +require 'concurrent/collection/timeout_queue'
                @@ -12,0 +14 @@
                +    include Concern::Deprecation
                @@ -96,0 +99,4 @@
                +    # removes the worker if it can be pruned
                +    #
                +    # @return [true, false] if the worker was pruned
                +    #
                @@ -98,2 +104,17 @@
                -    def remove_busy_worker(worker)
                -      synchronize { ns_remove_busy_worker worker }
                +    def prune_worker(worker)
                +      synchronize do
                +        if ns_prunable_capacity > 0
                +          remove_worker worker
                +          true
                +        else
                +          false
                +        end
                +      end
                +    end
                +
                +    # @!visibility private
                +    def remove_worker(worker)
                +      synchronize do
                +        ns_remove_ready_worker worker
                +        ns_remove_busy_worker worker
                +      end
                @@ -119 +140 @@
                -      synchronize { ns_prune_pool }
                +      deprecated "#prune_pool has no effect and will be removed in next the release, see https://github.com/ruby-concurrency/concurrent-ruby/pull/1082."
                @@ -149,3 +169,0 @@
                -
                -      @gc_interval  = opts.fetch(:gc_interval, @idletime / 2.0).to_i # undocumented
                -      @next_gc_time = Concurrent.monotonic_time + @gc_interval
                @@ -164,0 +183 @@
                +        nil
                @@ -166 +185 @@
                -        return fallback_action(*args, &task)
                +        fallback_action(*args, &task)
                @@ -168,3 +186,0 @@
                -
                -      ns_prune_pool if @next_gc_time < Concurrent.monotonic_time
                -      nil
                @@ -221 +237 @@
                -      
                +
                @@ -268 +284 @@
                -    # removes a worker which is not in not tracked in @ready
                +    # removes a worker which is not tracked in @ready
                @@ -277,2 +292,0 @@
                -    # try oldest worker if it is idle for enough time, it's returned back at the start
                -    #
                @@ -280,11 +294,3 @@
                -    def ns_prune_pool
                -      now = Concurrent.monotonic_time
                -      stopped_workers = 0
                -      while !@ready.empty? && (@pool.size - stopped_workers > @min_length)
                -        worker, last_message = @ready.first
                -        if now - last_message > self.idletime
                -          stopped_workers += 1
                -          @ready.shift
                -          worker << :stop
                -        else break
                -        end
                +    def ns_remove_ready_worker(worker)
                +      if index = @ready.index { |rw, _| rw == worker }
                +        @ready.delete_at(index)
                @@ -291,0 +298,2 @@
                +      true
                +    end
                @@ -293 +301,10 @@
                -      @next_gc_time = Concurrent.monotonic_time + @gc_interval
                +    # @return [Integer] number of excess idle workers which can be removed without
                +    #                   going below min_length, or all workers if not running
                +    #
                +    # @!visibility private
                +    def ns_prunable_capacity
                +      if running?
                +        [@pool.size - @min_length, @ready.size].min
                +      else
                +        @pool.size
                +      end
                @@ -295,0 +313 @@
                +    # @!visibility private
                @@ -315 +333 @@
                -        @queue  = Queue.new
                +        @queue  = Collection::TimeoutQueue.new
                @@ -341 +359 @@
                -            loop do
                +            prunable = true
                @@ -343 +361,6 @@
                -              case message = my_queue.pop
                +            loop do
                +              timeout = prunable && my_pool.running? ? my_idletime : nil
                +              case message = my_queue.pop(timeout: timeout)
                +              when nil
                +                throw :stop if my_pool.prune_worker(self)
                +                prunable = false
                @@ -345 +368 @@
                -                my_pool.remove_busy_worker(self)
                +                my_pool.remove_worker(self)
                @@ -347 +369,0 @@
                -
                @@ -351,0 +374 @@
                +                prunable = true
        lib/concurrent-ruby/concurrent/executor/timer_set.rb
                --- /tmp/d20260226-918-8w76i1/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/timer_set.rb	2026-02-26 03:34:21.971529708 +0000
                +++ /tmp/d20260226-918-8w76i1/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executor/timer_set.rb	2026-02-26 03:34:21.988529658 +0000
                @@ -63,0 +64 @@
                +      @timer_executor.kill
                @@ -125 +126,3 @@
                -      @timer_executor.kill
                +      @condition.set
                +      @condition.reset
                +      @timer_executor.shutdown
        lib/concurrent-ruby/concurrent/executors.rb
                --- /tmp/d20260226-918-8w76i1/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executors.rb	2026-02-26 03:34:21.971529708 +0000
                +++ /tmp/d20260226-918-8w76i1/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/executors.rb	2026-02-26 03:34:21.989529655 +0000
                @@ -13 +12,0 @@
                -require 'concurrent/executor/cached_thread_pool'
        lib/concurrent-ruby/concurrent/mvar.rb
                --- /tmp/d20260226-918-8w76i1/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/mvar.rb	2026-02-26 03:34:21.972529706 +0000
                +++ /tmp/d20260226-918-8w76i1/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/mvar.rb	2026-02-26 03:34:21.989529655 +0000
                @@ -12 +12 @@
                -  # `#mutate` that is atomic with respect to operations on the same instance.
                +  # `#modify` that is atomic with respect to operations on the same instance.
                @@ -90 +90 @@
                -        # if we timeoud out we'll still be empty
                +        # If we timed out we'll still be empty
                @@ -119 +119 @@
                -    # `put` the transformed value. Returns the transformed value. A timeout can
                +    # `put` the transformed value. Returns the pre-transform value. A timeout can
                @@ -122 +122 @@
                -    # @return [Object] the transformed value, or `TIMEOUT`
                +    # @return [Object] the pre-transform value, or `TIMEOUT`
        lib/concurrent-ruby/concurrent/promise.rb
                --- /tmp/d20260226-918-8w76i1/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/promise.rb	2026-02-26 03:34:21.972529706 +0000
                +++ /tmp/d20260226-918-8w76i1/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/promise.rb	2026-02-26 03:34:21.990529653 +0000
                @@ -170 +170 @@
                -  # c1.value       #=> 45
                +  # c1.value       #=> 42
        lib/concurrent-ruby/concurrent/timer_task.rb
                --- /tmp/d20260226-918-8w76i1/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/timer_task.rb	2026-02-26 03:34:21.975529697 +0000
                +++ /tmp/d20260226-918-8w76i1/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/timer_task.rb	2026-02-26 03:34:21.993529644 +0000
                @@ -4,0 +5 @@
                +require 'concurrent/atomic/atomic_fixnum'
                @@ -238,0 +240 @@
                +          @age.increment
                @@ -311,0 +314 @@
                +      @age = Concurrent::AtomicFixnum.new(0)
                @@ -331 +334 @@
                -      ScheduledTask.execute(interval, executor: @executor, args: [Concurrent::Event.new], &method(:execute_task))
                +      ScheduledTask.execute(interval, executor: @executor, args: [Concurrent::Event.new, @age.value], &method(:execute_task))
                @@ -336 +339 @@
                -    def execute_task(completion)
                +    def execute_task(completion, age_when_scheduled)
                @@ -337,0 +341,2 @@
                +      return nil unless @age.value == age_when_scheduled
                +
        lib/concurrent-ruby/concurrent/version.rb
                --- /tmp/d20260226-918-8w76i1/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/version.rb	2026-02-26 03:34:21.976529694 +0000
                +++ /tmp/d20260226-918-8w76i1/concurrent-ruby-1.3.6/lib/concurrent-ruby/concurrent/version.rb	2026-02-26 03:34:21.993529644 +0000
                @@ -2 +2 @@
                -  VERSION = '1.3.5'
                +  VERSION = '1.3.6'

@github-actions
Copy link
Copy Markdown
Contributor

gem compare --diff sentry-ruby 5.26.0 6.4.0

Diff too large (146178 chars)

@github-actions
Copy link
Copy Markdown
Contributor

gem compare sentry-ruby 5.26.0 6.4.0

Compared versions: ["5.26.0", "6.4.0"]
  DIFFERENT homepage:
    5.26.0: https://github.com/getsentry/sentry-ruby/tree/5.26.0/sentry-ruby
    6.4.0: https://github.com/getsentry/sentry-ruby/tree/6.4.0/sentry-ruby
  DIFFERENT metadata:
    5.26.0: {"homepage_uri" => "https://github.com/getsentry/sentry-ruby/tree/5.26.0/sentry-ruby", "source_code_uri" => "https://github.com/getsentry/sentry-ruby/tree/5.26.0/sentry-ruby", "changelog_uri" => "https://github.com/getsentry/sentry-ruby/blob/5.26.0/CHANGELOG.md", "bug_tracker_uri" => "https://github.com/getsentry/sentry-ruby/issues", "documentation_uri" => "http://www.rubydoc.info/gems/sentry-ruby/5.26.0"}
    6.4.0: {"homepage_uri" => "https://github.com/getsentry/sentry-ruby/tree/6.4.0/sentry-ruby", "source_code_uri" => "https://github.com/getsentry/sentry-ruby/tree/6.4.0/sentry-ruby", "changelog_uri" => "https://github.com/getsentry/sentry-ruby/blob/6.4.0/CHANGELOG.md", "bug_tracker_uri" => "https://github.com/getsentry/sentry-ruby/issues", "documentation_uri" => "http://www.rubydoc.info/gems/sentry-ruby/6.4.0"}
  DIFFERENT required_ruby_version:
    5.26.0: >= 2.4
    6.4.0: >= 2.7
  DIFFERENT rubygems_version:
    5.26.0: 3.6.7
    6.4.0: 3.6.9
  DIFFERENT version:
    5.26.0: 5.26.0
    6.4.0: 6.4.0
  DIFFERENT files:
    5.26.0->6.4.0:
      * Deleted:
            lib/sentry/metrics/aggregator.rb
            lib/sentry/metrics/configuration.rb
            lib/sentry/metrics/counter_metric.rb
            lib/sentry/metrics/distribution_metric.rb
            lib/sentry/metrics/gauge_metric.rb
            lib/sentry/metrics/local_aggregator.rb
            lib/sentry/metrics/metric.rb
            lib/sentry/metrics/set_metric.rb
            lib/sentry/metrics/timing.rb
      * Added:
            lib/sentry/backtrace/line.rb +99/-0
            lib/sentry/debug_structured_logger.rb +94/-0
            lib/sentry/metric_event.rb +49/-0
            lib/sentry/metric_event_buffer.rb +28/-0
            lib/sentry/sequel.rb +35/-0
            lib/sentry/telemetry_event_buffer.rb +130/-0
            lib/sentry/transport/debug_transport.rb +70/-0
            lib/sentry/utils/sample_rand.rb +97/-0
            lib/sentry/utils/telemetry_attributes.rb +30/-0
      * Changed:
            Gemfile +27/-5
            README.md +3/-3
            lib/sentry-ruby.rb +56/-29
            lib/sentry/background_worker.rb +1/-4
            lib/sentry/backtrace.rb +44/-76
            lib/sentry/baggage.rb +1/-1
            lib/sentry/breadcrumb.rb +1/-1
            lib/sentry/breadcrumb_buffer.rb +2/-2
            lib/sentry/check_in_event.rb +2/-2
            lib/sentry/client.rb +59/-136
            lib/sentry/configuration.rb +176/-78
            lib/sentry/cron/monitor_check_ins.rb +3/-3
            lib/sentry/cron/monitor_config.rb +2/-2
            lib/sentry/cron/monitor_schedule.rb +2/-2
            lib/sentry/dsn.rb +52/-0
            lib/sentry/envelope/item.rb +3/-3
            lib/sentry/error_event.rb +3/-3
            lib/sentry/event.rb +4/-10
            lib/sentry/graphql.rb +1/-1
            lib/sentry/hub.rb +29/-5
            lib/sentry/interface.rb +1/-1
            lib/sentry/interfaces/exception.rb +2/-2
            lib/sentry/interfaces/request.rb +2/-0
            lib/sentry/interfaces/single_exception.rb +4/-4
            lib/sentry/interfaces/stacktrace.rb +3/-3
            lib/sentry/interfaces/stacktrace_builder.rb +0/-8
            lib/sentry/interfaces/threads.rb +2/-2
            lib/sentry/log_event.rb +32/-137
            lib/sentry/log_event_buffer.rb +13/-60
            lib/sentry/metrics.rb +47/-42
            lib/sentry/profiler.rb +4/-5
            lib/sentry/propagation_context.rb +55/-18
            lib/sentry/rack/capture_exceptions.rb +88/-2
            lib/sentry/rspec.rb +1/-1
            lib/sentry/scope.rb +50/-18
            lib/sentry/span.rb +5/-17
            lib/sentry/std_lib_logger.rb +10/-1
            lib/sentry/test_helper.rb +30/-0
            lib/sentry/transaction.rb +72/-95
            lib/sentry/transaction_event.rb +4/-9
            lib/sentry/transport.rb +4/-6
            lib/sentry/transport/dummy_transport.rb +1/-0
            lib/sentry/transport/http_transport.rb +10/-16
            lib/sentry/utils/encoding_helper.rb +6/-0
            lib/sentry/utils/logging_helper.rb +25/-9
            lib/sentry/vernier/profiler.rb +4/-3
            lib/sentry/version.rb +1/-1
            sentry-ruby-core.gemspec +1/-1
            sentry-ruby.gemspec +2/-1
  DIFFERENT extra_rdoc_files:
    5.26.0->6.4.0:
      * Changed:
            README.md +3/-3
  DIFFERENT runtime dependencies:
    5.26.0->6.4.0:
      * Added:
            logger [">= 0"] (runtime)
  DIFFERENT Gemfile dependencies
    5.26.0->6.4.0:
      * Added:
            graphql [">= 2.2.6"] (runtime)
            sequel [">= 0"] (development)
            activerecord-jdbcmysql-adapter [">= 0"] (development)
            jdbc-sqlite3 [">= 0"] (development)

@github-actions
Copy link
Copy Markdown
Contributor

gem compare --diff sentry-ruby 5.26.0 6.4.0

Diff too large (146179 chars)

@dependabot @github
Copy link
Copy Markdown
Contributor Author

dependabot bot commented on behalf of github Mar 3, 2026

Superseded by #893.

@dependabot dependabot bot closed this Mar 3, 2026
@dependabot dependabot bot deleted the dependabot/bundler/sentry-ruby-6.4.0 branch March 3, 2026 03:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies ruby Pull requests that update Ruby code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants