Skip to content

chore(deps): bump the ruby-dependencies group across 1 directory with 7 updates - #87

Open
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/bundler/ruby-dependencies-6f36d76925
Open

chore(deps): bump the ruby-dependencies group across 1 directory with 7 updates#87
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/bundler/ruby-dependencies-6f36d76925

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Jul 27, 2026

Copy link
Copy Markdown
Contributor

Bumps the ruby-dependencies group with 7 updates in the / directory:

Package From To
rbs 4.0.3 4.1.0
rubocop 1.88.0 1.88.2
simplecov 0.22.0 1.0.3
yard 0.9.44 0.9.45
async 2.39.0 2.43.0
async-http 0.95.1 0.98.1
opentelemetry-api 1.10.0 1.11.0

Updates rbs from 4.0.3 to 4.1.0

Release notes

Sourced from rbs's releases.

4.1.0

Release note

RBS 4.1 ships with JRuby support. The RBS parser is written in plain C without depending on the Ruby C API, so it is compiled to WebAssembly and runs on a Wasm runtime, with the parsed AST serialized in a binary format and decoded into RBS objects. The full test suite runs on JRuby in CI.

The inline RBS syntax gets three new features: singleton method definitions (def self.), the module-self constraint, and instance variable annotations in module declarations. Note that RBS inline is still experimental and may change in future releases.

This release also introduces RBS::Rewriter, an API to edit RBS source text while preserving the surrounding content, which rbs annotate is now built on. Parsing performance is improved by interning type names in a shared trie and reducing allocations per node.

RBS::Prototype::Runtime, the RDoc plugin parser, and the top-level float type alias are deprecated in this release.

Signature updates

Updated classes/modules/methods: ARGF, Array, CSV, Class, Delegator, Digest, ERB, Enumerable, Enumerator, Enumerator::Product, Etc, File, File::Constants, File::Stat, FileUtils, Float, Gem, Hash, IO, IPAddr, Integer, JSON, Kernel, MatchData, Module, Monitor, Numeric, ObjectSpace::WeakKeyMap, OpenSSL, Pathname, RBS::Ops, Ractor, Range, Resolv, RubyVM::InstructionSequence, Set, Shellwords, String, StringIO, StringScanner, Struct, Tempfile, Thread, Timeout, TSort, URI::Generic, Zlib::GzipReader, Zlib::ZStream

  • Remove stale Float constants and add a constant drift test (#2994)
  • Update RDoc comments with Ruby 4.0.6 (#3035)
  • Add a dependency on tempfile. (#3025)
  • Support %a{implicitly-returns-nil} on MatchData#[] (#2990)
  • Update Array (#2987)
  • Allow nil output buffers for reader methods (#3002)
  • Add stdlib signature tests for #2967 (#2989)
  • Update Integer, phase 1 (#2995)
  • Add RBS::Ops (#2934)
  • Update Module (#2933)
  • Correct core/stdlib signatures to match Ruby 4.0 (#2967)
  • Revert Digest::Class method changes (#2980)
  • Add stdlib tests for updated StringScanner signatures (#2968)
  • Update StringScanner signatures to match strscan 3.1.6 (#2959)
  • Remove StringScanner methods absent from the latest Ruby release (#2961)
  • Fix Resolv#initialize signature: array of resolvers + use_ipv6: (#2960)
  • [Hash] Update Hash's signatures and tests to be correct (#2694)
  • update rbs signatures to be more consistent with generics (#2867)
  • Use top-level path in fileutils.rbs to suppress deprecation warning (#2949)
  • Update File::Constants and File::Stat (#2942)
  • Add signature for RubyVM::InstructionSequence.of (#2916)
  • fix OpenSSL#session_new_cb signature (#2924)
  • [Class] update class.rbs (#2898)
  • Deprecate top-level float (#2695)
  • [Kernel] Updated querying methods (#2685)

Library changes

  • Convert character offset to byte offset in parse_inline_*_annotation (#2945)
  • Guard against underflow when sysconf(_SC_PAGESIZE) returns 0 (#3031)
  • Report invalid UTF-8 byte in a comment as a parsing error (#2983)
  • Fetch Chicory/ASM jars from Maven instead of bundling in gem (#3019)
  • Add write barrier protection to RBS Location objects (#3022)
  • Rename parameter in rbs_intern_type_name for clarity (#3023)
  • Deprecate RDoc plugin parser (#3016)

... (truncated)

Changelog

Sourced from rbs's changelog.

4.1.0 (2026-07-27)

RBS 4.1 ships with JRuby support. The RBS parser is written in plain C without depending on the Ruby C API, so it is compiled to WebAssembly and runs on a Wasm runtime, with the parsed AST serialized in a binary format and decoded into RBS objects. The full test suite runs on JRuby in CI.

The inline RBS syntax gets three new features: singleton method definitions (def self.), the module-self constraint, and instance variable annotations in module declarations. Note that RBS inline is still experimental and may change in future releases.

This release also introduces RBS::Rewriter, an API to edit RBS source text while preserving the surrounding content, which rbs annotate is now built on. Parsing performance is improved by interning type names in a shared trie and reducing allocations per node.

RBS::Prototype::Runtime, the RDoc plugin parser, and the top-level float type alias are deprecated in this release.

Signature updates

Updated classes/modules/methods: ARGF, Array, CSV, Class, Delegator, Digest, ERB, Enumerable, Enumerator, Enumerator::Product, Etc, File, File::Constants, File::Stat, FileUtils, Float, Gem, Hash, IO, IPAddr, Integer, JSON, Kernel, MatchData, Module, Monitor, Numeric, ObjectSpace::WeakKeyMap, OpenSSL, Pathname, RBS::Ops, Ractor, Range, Resolv, RubyVM::InstructionSequence, Set, Shellwords, String, StringIO, StringScanner, Struct, Tempfile, Thread, Timeout, TSort, URI::Generic, Zlib::GzipReader, Zlib::ZStream

  • Remove stale Float constants and add a constant drift test (#2994)
  • Update RDoc comments with Ruby 4.0.6 (#3035)
  • Add a dependency on tempfile. (#3025)
  • Support %a{implicitly-returns-nil} on MatchData#[] (#2990)
  • Update Array (#2987)
  • Allow nil output buffers for reader methods (#3002)
  • Add stdlib signature tests for #2967 (#2989)
  • Update Integer, phase 1 (#2995)
  • Add RBS::Ops (#2934)
  • Update Module (#2933)
  • Correct core/stdlib signatures to match Ruby 4.0 (#2967)
  • Revert Digest::Class method changes (#2980)
  • Add stdlib tests for updated StringScanner signatures (#2968)
  • Update StringScanner signatures to match strscan 3.1.6 (#2959)
  • Remove StringScanner methods absent from the latest Ruby release (#2961)
  • Fix Resolv#initialize signature: array of resolvers + use_ipv6: (#2960)
  • [Hash] Update Hash's signatures and tests to be correct (#2694)
  • update rbs signatures to be more consistent with generics (#2867)
  • Use top-level path in fileutils.rbs to suppress deprecation warning (#2949)
  • Update File::Constants and File::Stat (#2942)
  • Add signature for RubyVM::InstructionSequence.of (#2916)
  • fix OpenSSL#session_new_cb signature (#2924)
  • [Class] update class.rbs (#2898)
  • Deprecate top-level float (#2695)
  • [Kernel] Updated querying methods (#2685)

Library changes

  • Convert character offset to byte offset in parse_inline_*_annotation (#2945)
  • Guard against underflow when sysconf(_SC_PAGESIZE) returns 0 (#3031)
  • Report invalid UTF-8 byte in a comment as a parsing error (#2983)
  • Fetch Chicory/ASM jars from Maven instead of bundling in gem (#3019)
  • Add write barrier protection to RBS Location objects (#3022)
  • Rename parameter in rbs_intern_type_name for clarity (#3023)
  • Deprecate RDoc plugin parser (#3016)
  • Run the test suite on JRuby (JRuby support, step 4) (#3008)

... (truncated)

Commits
  • 432d955 Merge pull request #3036 from ruby/version-4.1.0
  • d73d078 Version 4.1.0
  • 8aeb996 Merge pull request #3034 from ruby/claude/ci-ruby-version-check-4v4bw0
  • 10e3c8b Update outdated versions used in CI
  • f4ecb8b Merge pull request #3035 from ruby/claude/rdoc-comments-update-be6d28
  • 4ca6229 Merge pull request #3029 from infiton/fix/rbi-nested-declarations
  • bd24e79 Update RDoc comments with Ruby 4.0.6
  • cd82fcf ci: use Ruby 4.0.6 for RBS Comments workflow
  • 2674c28 Update rdoc to 8.0.0
  • 73eb521 Merge pull request #3033 from ruby/dependabot/bundler/steep/json-2.19.9
  • Additional commits viewable in compare view

Updates rubocop from 1.88.0 to 1.88.2

Release notes

Sourced from rubocop's releases.

RuboCop v1.88.2

Bug fixes

  • #15417: Fix a false negative for Lint/ToJSON, which did not flag singleton def self.to_json definitions. (@​bbatsov)
  • #15418: Fix a false negative for Lint/UnreachableCode, which only flagged the first statement after a flow-of-control statement instead of every unreachable statement that followed it. (@​bbatsov)
  • #15416: Fix a false negative for Lint/UselessNumericOperation, which only flagged bare method-call receivers and ignored local variables, instance/class/global variables, and constants (e.g. @x + 0, CONST * 1). (@​bbatsov)
  • #15419: Fix a false negative for Lint/Void where safe-navigation calls to nonmutating methods (e.g. x&.sort) were not flagged when CheckForMethodsWithNoSideEffects is enabled. (@​bbatsov)
  • #15421: Fix a false negative for Style/ArrayIntersect with the block form using include? (e.g. array1.any? { |e| array2.include?(e) }), which was only detected for member?. (@​bbatsov)
  • #15420: Fix a false negative for Style/CollectionCompact, which did not flag grep_v(nil)/grep_v(NilClass) on a safe-navigation call (e.g. array&.grep_v(nil)). (@​bbatsov)
  • #15422: Fix a false negative for Style/DefWithParentheses with a single-line definition whose body follows a semicolon (e.g. def foo(); end), where the parentheses can be safely omitted. (@​bbatsov)
  • #15388: Fix a false negative for Style/MixinUsage when including multiple modules in one statement. (@​bbatsov)
  • #15388: Fix a false negative for Style/ModuleFunction when the module body is a single statement. (@​bbatsov)
  • #15388: Fix a false negative for Style/RedundantCurrentDirectoryInPath with double-quoted strings containing interpolation. (@​bbatsov)
  • #15395: Fix a false negative for Style/RedundantHeredocDelimiterQuotes with double-quoted delimiters whose body contains interpolation or escapes. (@​bbatsov)
  • #15409: Fix a false positive for Gemspec/DuplicatedAssignment with multiple specifications. (@​bbatsov)
  • #15403: Fix a false positive for Layout/CommentIndentation with a comment above an inline access modifier (e.g. private def foo) when Layout/AccessModifierIndentation is configured with EnforcedStyle: outdent. (@​grk)
  • #15372: Fix a false positive for Style/InvertibleUnlessCondition with a multi-statement begin condition. (@​bbatsov)
  • #15360: Fix an incorrect autocorrect for Style/ArgumentsForwarding and Style/MethodDefParentheses when autocorrection conflicts while adding parentheses to method definition arguments. (@​koic)
  • #15417: Fix an incorrect autocorrect for Lint/ToJSON that produced invalid Ruby (def to_json(*_args)()) when the method had explicit empty parentheses. (@​bbatsov)
  • #15426: Fix an incorrect autocorrect for Style/MethodCallWithoutArgsParentheses when empty parentheses span multiple lines and the method call has a block. (@​koic)
  • #15328: Fix a false positive for Style/HashConversion with a splat argument, which previously produced an invalid hash literal. (@​bbatsov)
  • #15338: Fix a false positive for Style/HashLookupMethod with safe navigation, where the suggested bracket form would be the unreadable hash&.[](https://github.com/rubocop/rubocop/blob/HEAD/key). (@​bbatsov)
  • #15397: Fix an incorrect autocorrect for Style/IdenticalConditionalBranches that hoisted the moved expression to column zero instead of matching the surrounding indentation. (@​bbatsov)
  • #15372: Fix an incorrect autocorrect for Style/InvertibleUnlessCondition with mixed &&/|| conditions, which lost the required parentheses when inverting. (@​bbatsov)
  • #15428: Fix an incorrect autocorrect for Style/TrivialAccessors when AllowPredicates: false is set and a trivial reader is defined as a predicate class method. (@​koic)
  • #15402: Fix an infinite loop and file corruption for Layout/LineLength with SplitStrings when an over-long string is indented under a multi-line parent. (@​bbatsov)
  • #15384: Fix a false positive and a false negative for Style/MissingRespondToMissing when method_missing is defined at the top level or alongside sibling classes. (@​bbatsov)
  • #15432: Fix false positives in Layout/ElseAlignment when using else within a block that is part of a larger expression. (@​koic)
  • #15423: Fix false positives in Layout/MultilineMethodCallIndentation when a method chain is nested inside a parenthesized argument list or a grouped expression within a hash pair value. (@​koic)
  • #15424: Fix Style/StructInheritance autocorrect dropping leading indentation when class is inside a module or namespace. (@​amckinnie)
  • #15325: Fix Style/DocumentationMethod ignoring AllowedMethods for inline modifier defs. (@​bbatsov)
  • #15369: Fix a false positive for Style/LambdaCall when the argument list contains a comment, which the autocorrect would have dropped. (@​bbatsov)

Changes

  • #15430: Improve performance of offense reporting by not allocating a new source range per offense outside of embedded sources. (@​bbatsov)
  • #15430: Improve investigation performance by dispatching on_new_investigation, on_investigation_end, and on_other_file only to cops that refine them, and by skipping after_* dispatch when no cop needs it. (@​bbatsov)
  • #15430: Improve performance of the per-file cop relevancy check by skipping gem requirement evaluation for cops without gem requirements. (@​bbatsov)
  • #15430: Improve Lint/Debugger performance on code without debugger calls. (@​bbatsov)
  • #15430: Improve autocorrection performance by keeping corrections in memory across inspection iterations and writing each corrected file only once. (@​bbatsov)
  • #15415: Mark Lint/NumericOperationWithConstantResult autocorrect as unsafe because it drops the operands, discarding their side effects and silencing cases where the result is not actually constant (e.g. x / x raises when x is 0). (@​bbatsov)
  • #15430: Improve performance of cops using AllowedPatterns, ForbiddenPatterns, and AllowedMethods by compiling the configured patterns only once. (@​bbatsov)
  • #15430: Improve performance of Style/IfUnlessModifier and other modifier cops on files with many comments or conditionals. (@​bbatsov)

RuboCop v1.88.1

... (truncated)

Changelog

Sourced from rubocop's changelog.

1.88.2 (2026-07-08)

Bug fixes

  • #15417: Fix a false negative for Lint/ToJSON, which did not flag singleton def self.to_json definitions. ([@​bbatsov][])
  • #15418: Fix a false negative for Lint/UnreachableCode, which only flagged the first statement after a flow-of-control statement instead of every unreachable statement that followed it. ([@​bbatsov][])
  • #15416: Fix a false negative for Lint/UselessNumericOperation, which only flagged bare method-call receivers and ignored local variables, instance/class/global variables, and constants (e.g. @x + 0, CONST * 1). ([@​bbatsov][])
  • #15419: Fix a false negative for Lint/Void where safe-navigation calls to nonmutating methods (e.g. x&.sort) were not flagged when CheckForMethodsWithNoSideEffects is enabled. ([@​bbatsov][])
  • #15421: Fix a false negative for Style/ArrayIntersect with the block form using include? (e.g. array1.any? { |e| array2.include?(e) }), which was only detected for member?. ([@​bbatsov][])
  • #15420: Fix a false negative for Style/CollectionCompact, which did not flag grep_v(nil)/grep_v(NilClass) on a safe-navigation call (e.g. array&.grep_v(nil)). ([@​bbatsov][])
  • #15422: Fix a false negative for Style/DefWithParentheses with a single-line definition whose body follows a semicolon (e.g. def foo(); end), where the parentheses can be safely omitted. ([@​bbatsov][])
  • #15388: Fix a false negative for Style/MixinUsage when including multiple modules in one statement. ([@​bbatsov][])
  • #15388: Fix a false negative for Style/ModuleFunction when the module body is a single statement. ([@​bbatsov][])
  • #15388: Fix a false negative for Style/RedundantCurrentDirectoryInPath with double-quoted strings containing interpolation. ([@​bbatsov][])
  • #15395: Fix a false negative for Style/RedundantHeredocDelimiterQuotes with double-quoted delimiters whose body contains interpolation or escapes. ([@​bbatsov][])
  • #15409: Fix a false positive for Gemspec/DuplicatedAssignment with multiple specifications. ([@​bbatsov][])
  • #15403: Fix a false positive for Layout/CommentIndentation with a comment above an inline access modifier (e.g. private def foo) when Layout/AccessModifierIndentation is configured with EnforcedStyle: outdent. ([@​grk][])
  • #15372: Fix a false positive for Style/InvertibleUnlessCondition with a multi-statement begin condition. ([@​bbatsov][])
  • #15360: Fix an incorrect autocorrect for Style/ArgumentsForwarding and Style/MethodDefParentheses when autocorrection conflicts while adding parentheses to method definition arguments. ([@​koic][])
  • #15417: Fix an incorrect autocorrect for Lint/ToJSON that produced invalid Ruby (def to_json(*_args)()) when the method had explicit empty parentheses. ([@​bbatsov][])
  • #15426: Fix an incorrect autocorrect for Style/MethodCallWithoutArgsParentheses when empty parentheses span multiple lines and the method call has a block. ([@​koic][])
  • #15328: Fix a false positive for Style/HashConversion with a splat argument, which previously produced an invalid hash literal. ([@​bbatsov][])
  • #15338: Fix a false positive for Style/HashLookupMethod with safe navigation, where the suggested bracket form would be the unreadable hash&.[](https://github.com/rubocop/rubocop/blob/master/key). ([@​bbatsov][])
  • #15397: Fix an incorrect autocorrect for Style/IdenticalConditionalBranches that hoisted the moved expression to column zero instead of matching the surrounding indentation. ([@​bbatsov][])
  • #15372: Fix an incorrect autocorrect for Style/InvertibleUnlessCondition with mixed &&/|| conditions, which lost the required parentheses when inverting. ([@​bbatsov][])
  • #15428: Fix an incorrect autocorrect for Style/TrivialAccessors when AllowPredicates: false is set and a trivial reader is defined as a predicate class method. ([@​koic][])
  • #15402: Fix an infinite loop and file corruption for Layout/LineLength with SplitStrings when an over-long string is indented under a multi-line parent. ([@​bbatsov][])
  • #15384: Fix a false positive and a false negative for Style/MissingRespondToMissing when method_missing is defined at the top level or alongside sibling classes. ([@​bbatsov][])
  • #15432: Fix false positives in Layout/ElseAlignment when using else within a block that is part of a larger expression. ([@​koic][])
  • #15423: Fix false positives in Layout/MultilineMethodCallIndentation when a method chain is nested inside a parenthesized argument list or a grouped expression within a hash pair value. ([@​koic][])
  • #15424: Fix Style/StructInheritance autocorrect dropping leading indentation when class is inside a module or namespace. ([@​amckinnie][])
  • #15325: Fix Style/DocumentationMethod ignoring AllowedMethods for inline modifier defs. ([@​bbatsov][])
  • #15369: Fix a false positive for Style/LambdaCall when the argument list contains a comment, which the autocorrect would have dropped. ([@​bbatsov][])

Changes

  • #15430: Improve performance of offense reporting by not allocating a new source range per offense outside of embedded sources. ([@​bbatsov][])
  • #15430: Improve investigation performance by dispatching on_new_investigation, on_investigation_end, and on_other_file only to cops that refine them, and by skipping after_* dispatch when no cop needs it. ([@​bbatsov][])
  • #15430: Improve performance of the per-file cop relevancy check by skipping gem requirement evaluation for cops without gem requirements. ([@​bbatsov][])
  • #15430: Improve Lint/Debugger performance on code without debugger calls. ([@​bbatsov][])
  • #15430: Improve autocorrection performance by keeping corrections in memory across inspection iterations and writing each corrected file only once. ([@​bbatsov][])
  • #15415: Mark Lint/NumericOperationWithConstantResult autocorrect as unsafe because it drops the operands, discarding their side effects and silencing cases where the result is not actually constant (e.g. x / x raises when x is 0). ([@​bbatsov][])
  • #15430: Improve performance of cops using AllowedPatterns, ForbiddenPatterns, and AllowedMethods by compiling the configured patterns only once. ([@​bbatsov][])
  • #15430: Improve performance of Style/IfUnlessModifier and other modifier cops on files with many comments or conditionals. ([@​bbatsov][])

1.88.1 (2026-07-01)

Bug fixes

  • #15408: Fix a crash for Bundler/GemComment with a non-literal gem option key. ([@​bbatsov][])

... (truncated)

Commits
  • ceb6377 Cut 1.88.2
  • ee87be8 Update Changelog
  • e161fe6 Keep autocorrections in memory during the inspection loop
  • c8e0c83 Speed up Style/IfUnlessModifier eligibility checks
  • ef10f8a Dispatch investigation callbacks only to cops that refine them
  • 4de41ea Avoid allocating a Range per offense in the common case
  • be1bb58 Fast-path the gem requirements check in cop relevancy
  • 278525b Memoize compiled regexps in pattern mixins
  • 28b6cd6 Improve Lint/Debugger performance on non-debugger code
  • 1066e7b Merge pull request #15434 from koic/fix_else_alignment_for_block_in_expression
  • Additional commits viewable in compare view

Updates simplecov from 0.22.0 to 1.0.3

Release notes

Sourced from simplecov's releases.

v1.0.3

What's Changed

New Contributors

Full Changelog: simplecov-ruby/simplecov@v1.0.2...v1.0.3

v1.0.2

What's Changed

Full Changelog: simplecov-ruby/simplecov@v1.0.1...v1.0.2

v1.0.1

What's Changed

New Contributors

Full Changelog: simplecov-ruby/simplecov@v1.0.0...v1.0.1

v1.0.0

What's Changed

... (truncated)

Changelog

Sourced from simplecov's changelog.

1.0.3 (2026-07-26)

Bugfixes

  • Generating a report no longer crashes when the coverage universe contains a module that shadows #inspect with an incompatible signature. Rendering a method coverage key's receiver calls to_s, and a singleton class's to_s renders its attached object via #inspect — Liquid's Utils module defines inspect(value, max_depth = 2) as a module_function, so any suite whose report included Liquid's files (typically a vendored bundle under the project root, which is why this surfaced only in CI) raised ArgumentError from the at_exit hook and lost its report. The exposure predates 1.0.2's key normalization, which only moved the call. Rendering now recovers by rebuilding the name from Module#name via bound methods, which user code cannot shadow, falling back to an address form that the existing normalization collapses. The external_at_exit workaround is no longer needed. Reported with an exemplary diagnosis by @​bkuhlmann. See #1236.
  • Method coverage entries are now aggregated by source location alone, completing the aggregation introduced in 1.0.2 (which keyed on name and location). Ruby records one method entry per defined method, so a builder looping container.each_key { |key| define_method(key) { ... } } produces an entry per generated name, all at the block's location — and every name whose generated wrapper no test happened to call showed as an uncovered method on a line with full line and branch coverage. A source location is the unit a file-based report can express, and regular defs map one location to one name, so they are unaffected. The same identity is used when merging resultsets across processes. This also covers methods copied into refinements via import_methods, which Ruby records once per importing refinement at the shared module's original location, so exercising the method through any refinement now marks the shared definition covered and the skip workaround for shared refinement modules can be dropped. Reported with exemplary diagnoses by @​bkuhlmann. See #1234 and #1237.
  • SimpleCov.formatter and SimpleCov.formatters now accept formatter instances in addition to formatter classes, so constructor options can actually be passed — most notably SimpleCov::Formatter::HTMLFormatter.new(silent: true) to suppress the "Coverage report generated" status line. Previously SimpleCov unconditionally called .new on whatever was configured, so passing an instance crashed with NoMethodError at report time. See #1240.

Performance

  • Fix 5x performance regression on report combining (introduced in 1.0.0 as a result of using Ripper#parse in a hot path) by adding parsed key memoisation to RubyDataParser.call.

1.0.2 (2026-07-18)

Bugfixes

  • The standalone simplecov CLI's colorizing subcommands (report, uncovered, coverage, diff) no longer crash with NoMethodError: undefined method 'color' when run in a project without a .simplecov file. The CLI deliberately loads only simplecov/cli rather than the full library, so SimpleCov.color was undefined unless a dotfile load had incidentally defined it — and --no-color was the only workaround, since the documented NO_COLOR env var was checked after the line that raised. Color.enabled? now treats missing configuration the same as its :auto default and falls through to NO_COLOR / FORCE_COLOR / TTY detection. Reported with an exemplary diagnosis by @​hasghari. See #1231.
  • Branch tuples synthesized for tracked-but-unloaded files now match Ruby's Coverage for a safe-navigation call that takes a block. For x&.foo { ... } (and the second link of a chain like x&.foo&.bar { ... }) the extractor keyed the branch on the call node's full source range, which extends through the attached block, while Coverage ends the range at the call itself — so a simulated entry merging with a real one produced a phantom, permanently-missed branch, the same failure mode as the elsif fix in 1.0.1. Reported with an exemplary diagnosis and a suggested fix by @​alexdeng-mp. See #1233.
  • Prompted by the two reports above, an exhaustive differential audit of StaticCoverageExtractor against Ruby's Coverage — a fuzzing harness that runs thousands of generated programs through both and diffs the branch tuples, now part of the spec suite (opt-in via SIMPLECOV_FUZZ=1) — surfaced and fixed four more mismatches of the same phantom-branch class. Conditions that are compile-time literals (if true, if 1, a ternary on a literal) are folded away by Ruby's compiler and no longer produce synthesized branches (while true still does — loops are not folded). On Ruby 3.3, three legacy conventions now match: the body range of a do-while (begin ... end while), the location of empty branch arms (which on 3.3 depends on whether the construct is in value or void position), and one-line pattern matching (x => pattern / x in pattern), which emits a :case branch on 3.3 and nothing on 3.4+. The audit also caught a crash on Ruby 3.3's stdlib Prism (0.19), which still exposes the else clause of UnlessNode / CaseNode / CaseMatchNode under its pre-1.3 name consequent: the extractor raised internally and silently dropped simulated branch and method data for any file containing unless/else or a case with an empty arm, unless a newer prism gem happened to be installed.
  • As a defensive layer against any future extractor drift, merging now treats an actually-executed file's branch and method data as authoritative: when a resultset that merely tracked a file (with simulated, statically-derived tuples) merges with one from a process that really loaded it, the synthesized tuples are dropped rather than unioned. This contains any undiscovered mismatch to denominator inflation on files no process loaded, instead of phantom misses on fully-covered ones. Line coverage still combines from both sides, so tracked-but-unloaded files keep contributing to the line denominator as before.
  • Method coverage no longer reports phantom uncovered methods for define_method / define_singleton_method blocks defined onto more than one receiver — e.g. a module's included hook defining the same block on every including class. Ruby records one method entry per receiver, all pointing at the same source location, so any receiver whose copy was never called showed as an uncovered method on a line with 100% line coverage. Entries are now aggregated by (name, source location) with hit counts summed, and cross-process merging matches methods on the same source identity rather than on the receiver class. Reported with an exemplary diagnosis by @​bkuhlmann. See #1234.
  • Branch coverage under enable_coverage :eval no longer inflates denominators or reports phantom missed branches for templates compiled more than once — e.g. hanami-view compiles each template once per view class, and every ERB.new(...).result is a fresh compile. Ruby's Coverage emits a fresh set of branch entries per compile of the same file (nondeterministically through Ruby 4.0, consistently on current ruby master — see https://bugs.ruby-lang.org/issues/22203), each counting only the renders that flowed through that compile, so a side exercised under one compile appeared as a permanently-missed branch in another compile's entry at the same location, and ignore_branches :implicit_else swung the report wildly by stripping only the synthetic-else halves of the duplicates. Duplicated conditions are now aggregated by source location with arm counts summed. Reported with an exemplary diagnosis by @​bkuhlmann. See #1235.

1.0.1 (2026-07-14)

Enhancements

  • The gem now ships type signatures under sig/, covering the public API: the configuration DSL (including the criterion-scoped coverage block and the legacy deprecated verbs), the Result / FileList / SourceFile / CoverageStatistics read API that formatter authors consume, the formatter and filter class hierarchies, exit codes, and the ParallelAdapters::Base contract. Internal classes carry repository-only skeleton signatures (sig/internal/, excluded from the gem package) so the entire codebase type-checks under Steep in strict mode, while the shipped signature payload stays small. Signatures are checked with rbs validate and steep check as part of the default rake task. RBS and Steep users no longer need the third-party signatures from ruby/gem_rbs_collection, which cover the 0.22 API and predate 1.0's configuration redesign.

Bugfixes

  • Branch tuples synthesized for tracked-but-unloaded files now match Ruby's Coverage exactly for elsif and for if arms with empty bodies. StaticCoverageExtractor attributed the outer else arm of an elsif to the clause's body rather than the whole clause, and an empty if then-body to the whole node rather than Coverage's zero-width point at the predicate's end. Since resultset merges combine branch arms by their exact location, a simulated entry merging with a real one for the same file (parent and worker under Minitest's parallelize, or RSpec and Minitest suites collated together) produced phantom, permanently-missed branch arms. A new differential spec now pins every branch construct tuple-for-tuple against Ruby's Coverage — which promptly caught that CRuby 3.4 changed several of these conventions, so the extractor now emits whichever shape the running Ruby's Coverage uses (on 3.2/3.3: elsif clause ranges end at the chain's last content rather than the shared end, empty if/else/when bodies fall back to enclosing ranges, and empty while/in bodies collapse to points). Reported with an exemplary diagnosis by @​hasghari. See #1226.
  • merge_subprocesses no longer silently drops all worker coverage under Minitest's fork-based parallelize(workers: N) (the setup the rails profile exists for). When Minitest's autorun was armed before SimpleCov.start — which is how rails test loads — SimpleCov deferred its report to Minitest.after_run, and forked workers inherited that deferral even though Minitest pins its after_run hook to the parent's pid, so no exit path in the worker ever stored its resultset. Workers now reset the inherited at_exit state on fork and re-arm their own hook, so their resultsets are stored and merged as documented. Reported with an exemplary diagnosis by @​hasghari. See #1227.
  • Fixed SimpleCov.formatters= raising NoMethodError when given a single formatter instead of an Array — a regression from 0.22.x, where MultiFormatter.new normalized the value internally. This restores the long-documented SimpleCov.formatters = SimpleCov::Formatter::MultiFormatter.new([...]) pattern, in which MultiFormatter.new returns a Class rather than an Array. The regression surfaced in ruby/ruby's CI through net-imap's test helper. Thanks @​koic. See #1224.
  • Formatter status lines ("Coverage report generated for X") and threshold-enforcement output (violation reports, "SimpleCov failed with exit N") no longer route through Kernel#warn. They still print to stderr, but they are program output rather than Ruby warnings, so Warning.warn hooks — warning trackers and raise-on-warning test setups — no longer intercept them as unaddressable noise, and threshold failure explanations now survive ruby -W0, which previously reduced a failing check to a bare exit code with no explanation. Genuine warnings (deprecations, dropped-file notices, parse failures) still use warn. Suppression remains explicit: silent: true for formatter status lines, print_errors false for enforcement output. Thanks @​viralpraxis. See

… 7 updates

Bumps the ruby-dependencies group with 7 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [rbs](https://github.com/ruby/rbs) | `4.0.3` | `4.1.0` |
| [rubocop](https://github.com/rubocop/rubocop) | `1.88.0` | `1.88.2` |
| [simplecov](https://github.com/simplecov-ruby/simplecov) | `0.22.0` | `1.0.3` |
| [yard](https://github.com/lsegal/yard) | `0.9.44` | `0.9.45` |
| [async](https://github.com/socketry/async) | `2.39.0` | `2.43.0` |
| [async-http](https://github.com/socketry/async-http) | `0.95.1` | `0.98.1` |
| [opentelemetry-api](https://github.com/open-telemetry/opentelemetry-ruby) | `1.10.0` | `1.11.0` |



Updates `rbs` from 4.0.3 to 4.1.0
- [Release notes](https://github.com/ruby/rbs/releases)
- [Changelog](https://github.com/ruby/rbs/blob/master/CHANGELOG.md)
- [Commits](ruby/rbs@v4.0.3...v4.1.0)

Updates `rubocop` from 1.88.0 to 1.88.2
- [Release notes](https://github.com/rubocop/rubocop/releases)
- [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md)
- [Commits](rubocop/rubocop@v1.88.0...v1.88.2)

Updates `simplecov` from 0.22.0 to 1.0.3
- [Release notes](https://github.com/simplecov-ruby/simplecov/releases)
- [Changelog](https://github.com/simplecov-ruby/simplecov/blob/main/CHANGELOG.md)
- [Commits](simplecov-ruby/simplecov@v0.22.0...v1.0.3)

Updates `yard` from 0.9.44 to 0.9.45
- [Release notes](https://github.com/lsegal/yard/releases)
- [Changelog](https://github.com/lsegal/yard/blob/main/CHANGELOG.md)
- [Commits](lsegal/yard@v0.9.44...v0.9.45)

Updates `async` from 2.39.0 to 2.43.0
- [Release notes](https://github.com/socketry/async/releases)
- [Changelog](https://github.com/socketry/async/blob/main/releases.md)
- [Commits](socketry/async@v2.39.0...v2.43.0)

Updates `async-http` from 0.95.1 to 0.98.1
- [Release notes](https://github.com/socketry/async-http/releases)
- [Changelog](https://github.com/socketry/async-http/blob/main/releases.md)
- [Commits](socketry/async-http@v0.95.1...v0.98.1)

Updates `opentelemetry-api` from 1.10.0 to 1.11.0
- [Release notes](https://github.com/open-telemetry/opentelemetry-ruby/releases)
- [Commits](open-telemetry/opentelemetry-ruby@opentelemetry-api/v1.10.0...opentelemetry-api/v1.11.0)

---
updated-dependencies:
- dependency-name: rbs
  dependency-version: 4.1.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: ruby-dependencies
- dependency-name: rubocop
  dependency-version: 1.88.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: ruby-dependencies
- dependency-name: simplecov
  dependency-version: 1.0.3
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: ruby-dependencies
- dependency-name: yard
  dependency-version: 0.9.45
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: ruby-dependencies
- dependency-name: async
  dependency-version: 2.43.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: ruby-dependencies
- dependency-name: async-http
  dependency-version: 0.98.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: ruby-dependencies
- dependency-name: opentelemetry-api
  dependency-version: 1.11.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: ruby-dependencies
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot @github

dependabot Bot commented on behalf of github Jul 27, 2026

Copy link
Copy Markdown
Contributor Author

Labels

The following labels could not be found: dependencies. Please create it before Dependabot can add it to a pull request.

Please fix the above issues or remove invalid values from dependabot.yml.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants