Skip to content

chore(deps-dev): bump the dev-dependencies group across 1 directory with 4 updates - #8586

Merged
adi-herwana-nus merged 4 commits into
masterfrom
dependabot/bundler/dev-dependencies-8dc78c3c70
Sep 22, 2026
Merged

adi-herwana-nus merged 4 commits into
masterfrom
dependabot/bundler/dev-dependencies-8dc78c3c70

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Sep 21, 2026

Copy link
Copy Markdown
Contributor

Bumps the dev-dependencies group with 4 updates in the / directory: rubocop, bullet, parallel_tests and simplecov.

Updates rubocop from 1.89.0 to 1.91.0

Release notes

Sourced from rubocop's releases.

RuboCop v1.91.0

New features

  • #15631: Add a preview channel for unstable behavior. ([@​bbatsov][])
  • #15627: Add a SARIF formatter. ([@​bbatsov][])
  • #15686: Add AllCops: FailLevel, the configuration equivalent of --fail-level. ([@​bbatsov][])
  • #15650: Add AllowedDirectives option to Style/DisableCopsWithinSourceCodeDirective, exempting directive kinds such as generated rubocop:todo comments. ([@​bbatsov][])
  • #15629: Add --changed to inspect only the files git says changed. ([@​bbatsov][])
  • #15628: Add --diff to preview autocorrection without writing files. ([@​bbatsov][])
  • #15615: Add new Lint/MisplacedMagicComment cop to flag magic comments in positions where Ruby ignores them. ([@​bbatsov][])
  • #15600: Add the rubocop:enable-next directive to re-enable cops for the next statement only. ([@​bbatsov][])
  • #15600: Add the rubocop:next directive, combining push-style +/- arguments with disable-next's statement scope. ([@​bbatsov][])
  • #15363: Let a cop's entry in the default configuration carry a Preview section with the defaults it is expected to adopt in the next major release, applied under Preview. ([@​bbatsov][])

Bug fixes

  • #15349: Fix a false positive for Style/RedundantRegexpCharacterClass with \8/\9. ([@​bbatsov][])
  • #15646: Fix an error for Layout/ElseAlignment when else is used with rescue in a class, module, or singleton class body. ([@​viralpraxis][])
  • #15613: Fix an error for Layout/HashAlignment when a hash value starts on the line below its key. ([@​viralpraxis][])
  • #15623: Fix an error for Layout/HashAlignment when the first pair of a hash omits its value, and an incorrect autocorrection when a later pair does. ([@​viralpraxis][])
  • #15602: Fix an error for Layout/IndentationWidth on under-indented code with tab indentation. ([@​Starlexxx][])
  • #15672: Fix an error for Lint/RedundantCopDisableDirective when a file contains more than one rubocop:push/rubocop:pop pair. ([@​koic][])
  • #15625: Fix an error for Style/AccessModifierDeclarations when a body repeats the same access modifier. ([@​viralpraxis][])
  • #15603: Fix an error for Style/AccessModifierDeclarations with EnforcedStyle: inline when an access modifier is the body of an if without an else branch. ([@​viralpraxis][])
  • #15604: Fix an error for Style/ConstantVisibility when a visibility declaration splats anything other than an array literal, e.g. private_constant(*constants(false)). ([@​viralpraxis][])
  • #15647: Fix an error for Style/DocumentationMethod when an inline module_function/ruby2_keywords def is preceded by another argument. ([@​viralpraxis][])
  • #15680: Fix an error for Style/EndlessMethod when a method definition is nested inside another method definition. ([@​viralpraxis][])
  • #15674: Fix an error for Style/FloatDivision when using EnforcedStyle: fdiv and one operand of a float division is itself a parenthesized float division. ([@​viralpraxis][])
  • #15624: Fix an error for Style/HashLookupMethod when the looked-up key is itself a hash lookup. ([@​viralpraxis][])
  • #15642: Fix an error for Style/HashSyntax when hash rockets are enforced and a hash value repeats its key. ([@​viralpraxis][])
  • #15634: Fix an incorrect autocorrect for Lint/LiteralAsCondition when the other operand is a parenthesized return. ([@​Starlexxx][])
  • #15648: Fix an incorrect autocorrect for Lint/ParenthesesAsGroupedExpression when the parentheses contain and, or, not, or a modifier expression. ([@​Starlexxx][])
  • #15612: Fix an incorrect autocorrect for Naming/BlockForwarding with Style/MethodDefParentheses. ([@​Starlexxx][])
  • #15680: Fix an incorrect autocorrect for Style/EndlessMethod when using EnforcedStyle: require_always and the method body has a rescue or ensure clause. ([@​viralpraxis][])
  • #15669: Fix an incorrect autocorrect for Style/FloatDivision when using EnforcedStyle: fdiv and the divisor is a method call with parenthesized arguments. ([@​viralpraxis][])
  • #15678: Fix an incorrect autocorrect for Style/For when using EnforcedStyle: for and the block body has a rescue or ensure clause. ([@​viralpraxis][])
  • #15645: Fix an incorrect autocorrect for Style/GuardClause with Style/MissingElse. ([@​Starlexxx][])
  • #15668: Fix an incorrect autocorrect for Style/MethodCallWithArgsParentheses when EnforcedStyle: omit_parentheses is used together with Style/TrailingCommaInArguments. ([@​viralpraxis][])
  • #15347: Fix an incorrect autocorrect for Style/NestedModifier. ([@​bbatsov][])
  • #15347: Fix an incorrect autocorrect for Style/NonNilCheck. ([@​bbatsov][])
  • #15347: Fix an incorrect autocorrect for Style/Not with a flip-flop or assignment. ([@​bbatsov][])
  • #15349: Fix an incorrect autocorrect for Style/RedundantDoubleSplatHashBraces with a braced merge argument. ([@​bbatsov][])
  • #15349: Fix an incorrect autocorrect for Style/RedundantParentheses around and/or. ([@​bbatsov][])
  • #15349: Fix an incorrect autocorrect for Style/RedundantRegexpConstructor with %r{} delimiters. ([@​bbatsov][])
  • #15614: Fix an infinite loop between Layout/ArgumentAlignment and Layout/HashAlignment with separator style. ([@​Starlexxx][])
  • #15599: Fix an infinite loop error for Layout/CommentIndentation when many comment blocks with the same indentation are separated by empty lines. ([@​Starlexxx][])
  • #15597: Fix an infinite loop error for Layout/EmptyLinesAfterModuleInclusion when a module inclusion is directly before rescue. ([@​Starlexxx][])
  • #15617: Fix an infinite loop between Layout/ExtraSpacing with ForceEqualSignAlignment and Layout/SpaceAroundOperators. ([@​Starlexxx][])
  • #15638: Fix an infinite loop error for Layout/FirstArrayElementIndentation with Layout/ArrayAlignment when EnforcedStyle: with_fixed_indentation is configured. ([@​RedZapdos123][])
  • #15639: Fix an infinite loop error for Layout/FirstParameterIndentation with Layout/ParameterAlignment when EnforcedStyle: with_fixed_indentation is configured. ([@​RedZapdos123][])

... (truncated)

Changelog

Sourced from rubocop's changelog.

1.91.0 (2026-09-10)

New features

  • #15631: Add a preview channel for unstable behavior. ([@​bbatsov][])
  • #15627: Add a SARIF formatter. ([@​bbatsov][])
  • #15686: Add AllCops: FailLevel, the configuration equivalent of --fail-level. ([@​bbatsov][])
  • #15650: Add AllowedDirectives option to Style/DisableCopsWithinSourceCodeDirective, exempting directive kinds such as generated rubocop:todo comments. ([@​bbatsov][])
  • #15629: Add --changed to inspect only the files git says changed. ([@​bbatsov][])
  • #15628: Add --diff to preview autocorrection without writing files. ([@​bbatsov][])
  • #15615: Add new Lint/MisplacedMagicComment cop to flag magic comments in positions where Ruby ignores them. ([@​bbatsov][])
  • #15600: Add the rubocop:enable-next directive to re-enable cops for the next statement only. ([@​bbatsov][])
  • #15600: Add the rubocop:next directive, combining push-style +/- arguments with disable-next's statement scope. ([@​bbatsov][])
  • #15363: Let a cop's entry in the default configuration carry a Preview section with the defaults it is expected to adopt in the next major release, applied under Preview. ([@​bbatsov][])

Bug fixes

  • #15349: Fix a false positive for Style/RedundantRegexpCharacterClass with \8/\9. ([@​bbatsov][])
  • #15646: Fix an error for Layout/ElseAlignment when else is used with rescue in a class, module, or singleton class body. ([@​viralpraxis][])
  • #15613: Fix an error for Layout/HashAlignment when a hash value starts on the line below its key. ([@​viralpraxis][])
  • #15623: Fix an error for Layout/HashAlignment when the first pair of a hash omits its value, and an incorrect autocorrection when a later pair does. ([@​viralpraxis][])
  • #15602: Fix an error for Layout/IndentationWidth on under-indented code with tab indentation. ([@​Starlexxx][])
  • #15672: Fix an error for Lint/RedundantCopDisableDirective when a file contains more than one rubocop:push/rubocop:pop pair. ([@​koic][])
  • #15625: Fix an error for Style/AccessModifierDeclarations when a body repeats the same access modifier. ([@​viralpraxis][])
  • #15603: Fix an error for Style/AccessModifierDeclarations with EnforcedStyle: inline when an access modifier is the body of an if without an else branch. ([@​viralpraxis][])
  • #15604: Fix an error for Style/ConstantVisibility when a visibility declaration splats anything other than an array literal, e.g. private_constant(*constants(false)). ([@​viralpraxis][])
  • #15647: Fix an error for Style/DocumentationMethod when an inline module_function/ruby2_keywords def is preceded by another argument. ([@​viralpraxis][])
  • #15680: Fix an error for Style/EndlessMethod when a method definition is nested inside another method definition. ([@​viralpraxis][])
  • #15674: Fix an error for Style/FloatDivision when using EnforcedStyle: fdiv and one operand of a float division is itself a parenthesized float division. ([@​viralpraxis][])
  • #15624: Fix an error for Style/HashLookupMethod when the looked-up key is itself a hash lookup. ([@​viralpraxis][])
  • #15642: Fix an error for Style/HashSyntax when hash rockets are enforced and a hash value repeats its key. ([@​viralpraxis][])
  • #15634: Fix an incorrect autocorrect for Lint/LiteralAsCondition when the other operand is a parenthesized return. ([@​Starlexxx][])
  • #15648: Fix an incorrect autocorrect for Lint/ParenthesesAsGroupedExpression when the parentheses contain and, or, not, or a modifier expression. ([@​Starlexxx][])
  • #15612: Fix an incorrect autocorrect for Naming/BlockForwarding with Style/MethodDefParentheses. ([@​Starlexxx][])
  • #15680: Fix an incorrect autocorrect for Style/EndlessMethod when using EnforcedStyle: require_always and the method body has a rescue or ensure clause. ([@​viralpraxis][])
  • #15669: Fix an incorrect autocorrect for Style/FloatDivision when using EnforcedStyle: fdiv and the divisor is a method call with parenthesized arguments. ([@​viralpraxis][])
  • #15678: Fix an incorrect autocorrect for Style/For when using EnforcedStyle: for and the block body has a rescue or ensure clause. ([@​viralpraxis][])
  • #15645: Fix an incorrect autocorrect for Style/GuardClause with Style/MissingElse. ([@​Starlexxx][])
  • #15668: Fix an incorrect autocorrect for Style/MethodCallWithArgsParentheses when EnforcedStyle: omit_parentheses is used together with Style/TrailingCommaInArguments. ([@​viralpraxis][])
  • #15347: Fix an incorrect autocorrect for Style/NestedModifier. ([@​bbatsov][])
  • #15347: Fix an incorrect autocorrect for Style/NonNilCheck. ([@​bbatsov][])
  • #15347: Fix an incorrect autocorrect for Style/Not with a flip-flop or assignment. ([@​bbatsov][])
  • #15349: Fix an incorrect autocorrect for Style/RedundantDoubleSplatHashBraces with a braced merge argument. ([@​bbatsov][])
  • #15349: Fix an incorrect autocorrect for Style/RedundantParentheses around and/or. ([@​bbatsov][])
  • #15349: Fix an incorrect autocorrect for Style/RedundantRegexpConstructor with %r{} delimiters. ([@​bbatsov][])
  • #15614: Fix an infinite loop between Layout/ArgumentAlignment and Layout/HashAlignment with separator style. ([@​Starlexxx][])
  • #15599: Fix an infinite loop error for Layout/CommentIndentation when many comment blocks with the same indentation are separated by empty lines. ([@​Starlexxx][])
  • #15597: Fix an infinite loop error for Layout/EmptyLinesAfterModuleInclusion when a module inclusion is directly before rescue. ([@​Starlexxx][])
  • #15617: Fix an infinite loop between Layout/ExtraSpacing with ForceEqualSignAlignment and Layout/SpaceAroundOperators. ([@​Starlexxx][])
  • #15638: Fix an infinite loop error for Layout/FirstArrayElementIndentation with Layout/ArrayAlignment when EnforcedStyle: with_fixed_indentation is configured. ([@​RedZapdos123][])

... (truncated)

Commits
  • 6eee0af Cut 1.91
  • ed0572d Update Changelog
  • 3181272 Fix an infinite loop for Style/NumericLiteralPrefix with signed literals
  • b87652a Fix Layout/LineLength SplitStrings loop on trailing-space split point
  • fce7a33 [Fix #15638] Fix first array indentation loop
  • 321bd65 #15347 Fix an incorrect autocorrect for Style/NestedModifier
  • a464cba #15347 Fix incorrect autocorrects for Style/NilComparison with precedence...
  • 3192b70 #15347 Fix an incorrect autocorrect for Style/NonNilCheck
  • f747cab #15347 Fix an incorrect autocorrect for Style/Not with a flip-flop or ass...
  • 3f52020 Add CHANGELOG entry for the preview fail level
  • Additional commits viewable in compare view

Updates bullet from 8.1.3 to 8.2.0

Changelog

Sourced from bullet's changelog.

8.2.0 (08/29/2026)

  • Add thread-safe Bullet.pause, Bullet.resume, Bullet.paused?, and Bullet.skip APIs
  • Add configurable footer positioning
  • Fix unused eager loading false positives when N+1 detection is disabled
  • Fix unused eager loading false positives for conditional has_many :through associations
  • Fix Ruby 4.0 compatibility issues
  • Drop support for ActiveRecord versions older than 7 and Mongoid versions older than 8
Commits
  • 805fc58 Bump version to 8.2.0
  • fa67b54 Merge pull request #777 from deivid-rodriguez/deivid-rodriguez/fix-has-many-t...
  • 5471086 Merge pull request #780 from deivid-rodriguez/deivid-rodriguez/mongoid-compat
  • 0962b7b Make Gemfile.mongoid-8.0 installable
  • 8ca4ff0 Drop no longer supported mongoid versions
  • a48b03a rbx implementation is no longer maintained
  • 1372b2b Fix has many through unused eager load false positives
  • 09cd01d Merge pull request #779 from deivid-rodriguez/deivid-rodriguez/drop-very-old-...
  • 770547f Drop support for ActiveRecord older than 7.x
  • 3820804 Merge pull request #776 from deivid-rodriguez/deivid-rodriguez/fix-unused-eag...
  • Additional commits viewable in compare view

Updates parallel_tests from 5.7.0 to 5.8.0

Changelog

Sourced from parallel_tests's changelog.

5.8.0 - 2026-09-13

Added

  • Adds flag --only-group-continuous-test-env that sets ENV['TEST_ENV_NUMBER'] to match the current --only-group GROUP_INDEX
Commits

Updates simplecov from 1.0.0 to 1.3.0

Release notes

Sourced from simplecov's releases.

v1.3.0

SimpleCov 1.3 raises the minimum Ruby to 3.3, brings the coverage directives to ERB, Haml, and Slim templates, teaches simplecov patch and simplecov uncovered to annotate CI hosts natively, and settles what the report says about files and groups that hold nothing.

Highlights

  • Ruby 3.2 is no longer supported. The minimum is Ruby 3.3, which bundles Prism, so the static coverage extractor stops probing for it and the emulation of 3.2's constant folding is gone.
  • # simplecov:disable and # simplecov:enable work inside ERB, Haml, and Slim templates measured with cover_views, in each language's own comment syntax or as Ruby comments on a code line.
  • --annotate KIND turns simplecov patch and simplecov uncovered into inline CI annotations for GitHub, GitLab, reviewdog, Azure, TeamCity, and Buildkite, so one CI step can both annotate and gate.
  • Groups that match no files are omitted from the report instead of padding it at 100%, and the rails profile declares its groups alphabetically.
  • cover_views is the only way to measure a template now: a cover glob that matches one warns and leaves it out, and ignore: :eval_generated no longer drops a template's real branches and methods.
  • A file with nothing to cover reports the same percentage in the file list as it does in the source view.

Upgrade notes

  • The minimum supported Ruby is now 3.3. Ruby 3.2 reached end of life in March 2026. JRuby 10 remains supported for line coverage.
  • A group that matched no files disappears from the HTML report, coverage.json, and the history file, and a per-group minimum on it passes silently rather than complaining that the group does not exist.
  • The rails profile's group tabs come out in alphabetical order, so an existing project's tabs move.
  • A never-loaded file with no branches or methods reports 100% for those criteria rather than 0%, so a per-file branch or method threshold that failed such a file passes now. A file the report carries no branch or method table for at all is still unaccounted for, and keeps its 0%.
  • A cover glob matching .erb, .haml, or .slim warns and drops those files from the report. Measure templates with cover_views instead.
  • coverage.json stays at schema 1.3, unchanged by this release.

Breaking Changes

  • Dropped support for Ruby 3.2. The minimum supported Ruby is now 3.3 (required_ruby_version >= 3.3), with JRuby 10 still supported and TruffleRuby exercised only by the nightly unstable build. Prism is bundled with every supported Ruby, so the static coverage extractor stops probing for it: StaticCoverageExtractor.available? and the empty-hash fallbacks for its absence are gone. So is the emulation of Ruby 3.2's constant folding, where parentheses were transparent for every literal and a folded dead arm's branches survived in the branch table.

Enhancements

  • # simplecov:disable and # simplecov:enable work inside ERB, Haml, and Slim templates measured with cover_views, in each language's own comment syntax (<%# simplecov:disable %>, -# simplecov:disable, / simplecov:disable) or as Ruby comments on a code line. A template's directives were never found before: the comment scan tokenizes a file as Ruby, and in ERB %> opens a percent literal that swallowed every comment after the template's first tag, while Haml and Slim comments are not Ruby comments at all and a Slim - # simplecov:disable line even read as an inline directive that disabled only itself. The scan now reads only the Ruby a template holds, at the template's own lines, so a Devise app can disable the confirmable link it never renders instead of carrying it as uncovered. See simplecov-ruby/simplecov#1295.
  • Groups that match no files are omitted from the report instead of appearing as 100% covered with nothing in them. Formatters, coverage.json, and the history file all skip them, so the rails profile's Channels, Mailers, and Views tabs no longer pad the HTML report of an app without those directories, and a project can declare a group per directory it might have (Dir["app/*"].each { |dir| group File.basename(dir).capitalize, dir }) without checking each one for Ruby files first. A minimum_coverage_by_group threshold on a group that matched nothing passes silently, as it did when the empty group reported 100%, rather than complaining that the group does not exist. See simplecov-ruby/simplecov#1293.
  • The rails profile declares its groups in alphabetical order: Channels, Controllers, Helpers, Jobs, Libraries, Mailers, Models, Views. Group tabs render in declaration order, so the report of a Rails app lists them that way instead of in the order they accumulated over the years. Nothing else about the groups changes, and a project that declares its own groups is unaffected.
  • simplecov patch and simplecov uncovered annotate CI hosts natively. --annotate KIND on both commands turns the answer into inline annotations in the host's own channel, one per contiguous missed range with project-relative paths (patch adds one per uncovered touched branch or method when the report measured them): github emits ::warning workflow commands, gitlab a Code Quality report for the codequality artifact, rdjson reviewdog's Diagnostic Format for any host reviewdog posts to, azure ##vso[task.logissue] logging commands, teamcity code inspection service messages, and buildkite the Markdown body for buildkite-agent annotate. uncovered previously offered only github, and its annotations now name the chosen criterion the way patch's do. Nothing else reaches stdout in that mode and patch --minimum still sets the exit status, so one CI step can annotate and gate. Documented under CI annotations in docs/CLI.md.

Bugfixes

  • A file with no branches or no methods reports the same percentage everywhere. A file tracked but never loaded had its empty branch and method sets forced to 0% (simplecov-ruby/simplecov#902), from a time when simulation recorded no tuples for such a file and an empty set really did mean "nobody knows". Simulation has synthesized those tuples statically for a while now, so an empty set is a fact about the file: it has no branches, or a directive skipped the ones it has. Such a file now reports 100% the way a loaded file with none always has, so the file list stops showing 0% beside a source view that says 100%, and a per-file branch or method minimum stops failing a file that has nothing to cover. A file carrying no table at all for the criterion is still unaccounted for, and 0% stands there. The HTML report's source view also takes each header percentage from the report rather than recomputing it from the fraction, so the two views cannot drift again. See simplecov-ruby/simplecov#1296.
  • A cover glob that matches a template warns and leaves it out instead of simulating it. Simulation classifies lines as Ruby and parses for branches, so a swept-in template appeared with a comment counted as a missed line, an #id tag counted as never relevant, and no branches at all. The warning names the templates and points at cover_views, which compiles them and measures the real thing.
  • The deprecated # :nocov: toggle works in a template's own comment syntax (<%# :nocov: %>, -# :nocov:, / :nocov:) and emits its deprecation warning there. The matcher read raw lines and needed the line to begin with #, so those forms were silently ignored while the Ruby-comment form inside an ERB code tag happened to work. The matcher now reads the same extracted Ruby the directives do.
  • ignore: :eval_generated no longer drops a template's real branches and methods. The filter keeps a Coverage entry only when Prism finds a matching construct in the static source, which for a template measured with cover_views meant parsing ERB, Haml, or Slim as Ruby. That usually fails and the entry is kept, but a template whose text happens to parse (a Haml or Slim #id tag reads as a Ruby comment, and so does an ERB text line starting with #) yielded a confident wrong parse, and the template's own conditionals vanished from branch coverage. Templates now skip the parse, since everything a template reports is eval-generated by construction and the filter has nothing to distinguish there.

v1.2.0

SimpleCov 1.2 adds change-focused coverage, per-test attribution, production coverage, and a substantially expanded CLI while keeping the existing configuration API working through deprecation aliases.

Highlights

  • track_tests, simplecov tests, and simplecov affected connect covered lines to the tests that exercised them; the HTML report displays the same attribution and simplecov watch uses it for focused reruns.
  • simplecov patch, per-file baselines, missed-count caps, and coverage history make coverage gates useful for both new changes and legacy codebases.
  • SimpleCov::Production records low-overhead production line coverage, while simplecov dead-code and the bundled reports cross it with test coverage.
  • ActionView templates can be measured with cover_views, including ERB, Haml, and Slim source highlighting.
  • The CLI gains annotated source, report freshness, history, badges, shell completions, a man page, and richer machine-readable output.

Upgrade notes

  • The minimum supported Ruby remains 3.2; JRuby 10 remains supported for line coverage.

... (truncated)

Changelog

Sourced from simplecov's changelog.

1.3.0 (2026-09-12)

SimpleCov 1.3 raises the minimum Ruby to 3.3, brings the coverage directives to ERB, Haml, and Slim templates, teaches simplecov patch and simplecov uncovered to annotate CI hosts natively, and settles what the report says about files and groups that hold nothing.

Highlights

  • Ruby 3.2 is no longer supported. The minimum is Ruby 3.3, which bundles Prism, so the static coverage extractor stops probing for it and the emulation of 3.2's constant folding is gone.
  • # simplecov:disable and # simplecov:enable work inside ERB, Haml, and Slim templates measured with cover_views, in each language's own comment syntax or as Ruby comments on a code line.
  • --annotate KIND turns simplecov patch and simplecov uncovered into inline CI annotations for GitHub, GitLab, reviewdog, Azure, TeamCity, and Buildkite, so one CI step can both annotate and gate.
  • Groups that match no files are omitted from the report instead of padding it at 100%, and the rails profile declares its groups alphabetically.
  • cover_views is the only way to measure a template now: a cover glob that matches one warns and leaves it out, and ignore: :eval_generated no longer drops a template's real branches and methods.
  • A file with nothing to cover reports the same percentage in the file list as it does in the source view.

Upgrade notes

  • The minimum supported Ruby is now 3.3. Ruby 3.2 reached end of life in March 2026. JRuby 10 remains supported for line coverage.
  • A group that matched no files disappears from the HTML report, coverage.json, and the history file, and a per-group minimum on it passes silently rather than complaining that the group does not exist.
  • The rails profile's group tabs come out in alphabetical order, so an existing project's tabs move.
  • A never-loaded file with no branches or methods reports 100% for those criteria rather than 0%, so a per-file branch or method threshold that failed such a file passes now. A file the report carries no branch or method table for at all is still unaccounted for, and keeps its 0%.
  • A cover glob matching .erb, .haml, or .slim warns and drops those files from the report. Measure templates with cover_views instead.
  • coverage.json stays at schema 1.3, unchanged by this release.

Breaking Changes

  • Dropped support for Ruby 3.2. The minimum supported Ruby is now 3.3 (required_ruby_version >= 3.3), with JRuby 10 still supported and TruffleRuby exercised only by the nightly unstable build. Prism is bundled with every supported Ruby, so the static coverage extractor stops probing for it: StaticCoverageExtractor.available? and the empty-hash fallbacks for its absence are gone. So is the emulation of Ruby 3.2's constant folding, where parentheses were transparent for every literal and a folded dead arm's branches survived in the branch table.

Enhancements

  • # simplecov:disable and # simplecov:enable work inside ERB, Haml, and Slim templates measured with cover_views, in each language's own comment syntax (<%# simplecov:disable %>, -# simplecov:disable, / simplecov:disable) or as Ruby comments on a code line. A template's directives were never found before: the comment scan tokenizes a file as Ruby, and in ERB %> opens a percent literal that swallowed every comment after the template's first tag, while Haml and Slim comments are not Ruby comments at all and a Slim - # simplecov:disable line even read as an inline directive that disabled only itself. The scan now reads only the Ruby a template holds, at the template's own lines, so a Devise app can disable the confirmable link it never renders instead of carrying it as uncovered. See simplecov-ruby/simplecov#1295.
  • Groups that match no files are omitted from the report instead of appearing as 100% covered with nothing in them. Formatters, coverage.json, and the history file all skip them, so the rails profile's Channels, Mailers, and Views tabs no longer pad the HTML report of an app without those directories, and a project can declare a group per directory it might have (Dir["app/*"].each { |dir| group File.basename(dir).capitalize, dir }) without checking each one for Ruby files first. A minimum_coverage_by_group threshold on a group that matched nothing passes silently, as it did when the empty group reported 100%, rather than complaining that the group does not exist. See simplecov-ruby/simplecov#1293.
  • The rails profile declares its groups in alphabetical order: Channels, Controllers, Helpers, Jobs, Libraries, Mailers, Models, Views. Group tabs render in declaration order, so the report of a Rails app lists them that way instead of in the order they accumulated over the years. Nothing else about the groups changes, and a project that declares its own groups is unaffected.
  • simplecov patch and simplecov uncovered annotate CI hosts natively. --annotate KIND on both commands turns the answer into inline annotations in the host's own channel, one per contiguous missed range with project-relative paths (patch adds one per uncovered touched branch or method when the report measured them): github emits ::warning workflow commands, gitlab a Code Quality report for the codequality artifact, rdjson reviewdog's Diagnostic Format for any host reviewdog posts to, azure ##vso[task.logissue] logging commands, teamcity code inspection service messages, and buildkite the Markdown body for buildkite-agent annotate. uncovered previously offered only github, and its annotations now name the chosen criterion the way patch's do. Nothing else reaches stdout in that mode and patch --minimum still sets the exit status, so one CI step can annotate and gate. Documented under CI annotations in docs/CLI.md.

Bugfixes

  • A file with no branches or no methods reports the same percentage everywhere. A file tracked but never loaded had its empty branch and method sets forced to 0% (simplecov-ruby/simplecov#902), from a time when simulation recorded no tuples for such a file and an empty set really did mean "nobody knows". Simulation has synthesized those tuples statically for a while now, so an empty set is a fact about the file: it has no branches, or a directive skipped the ones it has. Such a file now reports 100% the way a loaded file with none always has, so the file list stops showing 0% beside a source view that says 100%, and a per-file branch or method minimum stops failing a file that has nothing to cover. A file carrying no table at all for the criterion is still unaccounted for, and 0% stands there. The HTML report's source view also takes each header percentage from the report rather than recomputing it from the fraction, so the two views cannot drift again. See simplecov-ruby/simplecov#1296.
  • A cover glob that matches a template warns and leaves it out instead of simulating it. Simulation classifies lines as Ruby and parses for branches, so a swept-in template appeared with a comment counted as a missed line, an #id tag counted as never relevant, and no branches at all. The warning names the templates and points at cover_views, which compiles them and measures the real thing.
  • The deprecated # :nocov: toggle works in a template's own comment syntax (<%# :nocov: %>, -# :nocov:, / :nocov:) and emits its deprecation warning there. The matcher read raw lines and needed the line to begin with #, so those forms were silently ignored while the Ruby-comment form inside an ERB code tag happened to work. The matcher now reads the same extracted Ruby the directives do.
  • ignore: :eval_generated no longer drops a template's real branches and methods. The filter keeps a Coverage entry only when Prism finds a matching construct in the static source, which for a template measured with cover_views meant parsing ERB, Haml, or Slim as Ruby. That usually fails and the entry is kept, but a template whose text happens to parse (a Haml or Slim #id tag reads as a Ruby comment, and so does an ERB text line starting with #) yielded a confident wrong parse, and the template's own conditionals vanished from branch coverage. Templates now skip the parse, since everything a template reports is eval-generated by construction and the filter has nothing to distinguish there.

1.2.0 (2026-09-04)

SimpleCov 1.2 adds change-focused coverage, per-test attribution, production coverage, and a substantially expanded CLI while keeping the existing configuration API working through deprecation aliases.

Highlights

  • track_tests, simplecov tests, and simplecov affected connect covered lines to the tests that exercised them; the HTML report displays the same attribution and simplecov watch uses it for focused reruns.
  • simplecov patch, per-file baselines, missed-count caps, and coverage history make coverage gates useful for both new changes and legacy codebases.
  • SimpleCov::Production records low-overhead production line coverage, while simplecov dead-code and the bundled reports cross it with test coverage.
  • ActionView templates can be measured with cover_views, including ERB, Haml, and Slim source highlighting.

... (truncated)

Commits
  • 9c9ecd1 Bump version to 1.3.0
  • 71bb5ac Name the simulation context by its subject, not by Prism
  • b2aec76 Drop support for Ruby 3.2
  • 5e869ef Report a file with no branches as fully covered everywhere
  • e425d8b Warn and leave out templates a cover glob matches
  • 12d7914 Honor the deprecated nocov toggle in template comments
  • 7d278ea Exempt templates from the eval_generated filter
  • b39506d Honor simplecov directives inside Haml and Slim templates
  • c5233a4 Honor simplecov directives inside ERB templates
  • 5a8f224 Alphabetize the rails profile's groups by name
  • Additional commits viewable in compare view

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 <dependency name> major version will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)
  • @dependabot ignore <dependency name> minor version will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)
  • @dependabot ignore <dependency name> will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)
  • @dependabot unignore <dependency name> will remove all of the ignore conditions of the specified dependency
  • @dependabot unignore <dependency name> <ignore condition> will remove the ignore condition of the specified dependency and ignore conditions

…ith 4 updates

Bumps the dev-dependencies group with 4 updates in the / directory: [rubocop](https://github.com/rubocop/rubocop), [bullet](https://github.com/flyerhzm/bullet), [parallel_tests](https://github.com/grosser/parallel_tests) and [simplecov](https://github.com/simplecov-ruby/simplecov).


Updates `rubocop` from 1.89.0 to 1.91.0
- [Release notes](https://github.com/rubocop/rubocop/releases)
- [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md)
- [Commits](rubocop/rubocop@v1.89.0...v1.91.0)

Updates `bullet` from 8.1.3 to 8.2.0
- [Changelog](https://github.com/flyerhzm/bullet/blob/main/CHANGELOG.md)
- [Commits](flyerhzm/bullet@8.1.3...8.2.0)

Updates `parallel_tests` from 5.7.0 to 5.8.0
- [Changelog](https://github.com/grosser/parallel_tests/blob/master/CHANGELOG.md)
- [Commits](grosser/parallel_tests@v5.7.0...v5.8.0)

Updates `simplecov` from 1.0.0 to 1.3.0
- [Release notes](https://github.com/simplecov-ruby/simplecov/releases)
- [Changelog](https://github.com/simplecov-ruby/simplecov/blob/main/CHANGELOG.md)
- [Commits](simplecov-ruby/simplecov@v1.0.0...v1.3.0)

---
updated-dependencies:
- dependency-name: rubocop
  dependency-version: 1.91.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: dev-dependencies
- dependency-name: bullet
  dependency-version: 8.2.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: dev-dependencies
- dependency-name: parallel_tests
  dependency-version: 5.8.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: dev-dependencies
- dependency-name: simplecov
  dependency-version: 1.3.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: dev-dependencies
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot added Dependencies Pull requests that update a dependency file Ruby Pull requests that update Ruby code labels Sep 21, 2026
@adi-herwana-nus

Copy link
Copy Markdown
Contributor

Additional commits

→ 1.91 introduced Style/DirectiveScope and tightened Layout/ExtraSpacing's
AllowForAlignment, which is what broke rubylint. Fixing that was the entry point; while in
.rubocop_todo.yml I also cleared adjacent entries covering the same files (47 todo lines
removed). Two of those changes are more than style, and are explained below.

Removing spec/support/settings_on_rails.rb

Style/OpenStructUse flagged create_mock_hash. The helper cannot follow the cop's advice:
mock_settings builds a settings object from an arbitrary hash and leans on OpenStruct's dynamic
readers, [], []= and each_pair, plus aliasing settings to []. Replacing OpenStruct there
means reimplementing it by hand.

Tracing the callers showed it has none. mock_settings is the only public entry point, and
nothing outside the file calls it — the sole remaining reference was the
config.include ..., type: :model injecting it into every model spec.

7efa517fc4 ("Refactor course and instance component settings feature", 2017-04-28) is where it
fell out of use: that commit deleted EffectiveSettingsConcern and SettingsConcern along with
their specs, and those two specs were the only callers. ComponentSettingsConcern replaced them
with an approach that never needed the mock, and the helper was left behind. Neither concern nor
either spec exists today, and the only change to the file since was a mechanical lint pass in
2021.

Deleted rather than annotated with a disable directive: it has been dead for nine years, and was
being included into every type: :model spec.

Course::Mailer#user_enrol_requested_email

@recipient was an OpenStruct standing in for a recipient, because this email goes to every
course manager while the layout greets a single name. It is now a named struct:

GroupRecipient = Struct.new(:name)

The risk in that swap is that OpenStruct returns nil for any attribute whereas a Struct raises,
and @recipient is read by mailer views that expect a User (.email, .time_zone). Tracing
this email's own render path rules that out:

  • user_enrol_requested_email.html.slim / .text.erb never reference @recipient — they use
    @enrol_request.user and @course
  • layouts/mailer.html.slim / .text.erb read @recipient.name, and nothing else
  • Course::Mailer declares no layout override, so layout 'mailer' applies, and neither
    template renders _manage_email_subscription — the partial that passes recipient: on to
    views wanting .email and .time_zone

.name is the entire contract. The .email / .time_zone reads live in other mailers, where
@recipient is a real User. It was already duck-typed rather than always a User in any case:
user_invitation_email assigns a Course::UserInvitation to it.

Added a scenario covering it, since the existing examples for this email only assert .to and
.subject and nothing exercised the stand-in:

it 'renders the greeting for the group recipient in both parts' do
  expect(text).to include('common.mailers.greeting')
  expect(html).to include('common.mailers.greeting')
end

Rendering both MIME parts is what exercises @recipient.name, so the example fails with
undefined method 'name' if the stand-in stops answering it (confirmed by mutating the struct).
It asserts the greeting by translation key because I18n returns keys in the test environment —
which is also why no existing example could have caught a broken recipient via the greeting's
text.

Everything else

  • Style/DirectiveScope (new in 1.91): 14 rubocop:disable/enable pairs wrapping a single
    statement rewritten to disable-next.
  • Layout/ExtraSpacing: AllowForAlignment no longer exempts uniform padding that merely
    happens to line up, so 10 double spaces in the gradebook seed tasks are now single.
  • Style/CollectionCompact: reject(&:nil?)compact across all nine programming package
    services, clearing the cop from the todo entirely.
  • Style/ArgumentsForwarding, Style/HashEachMethods, Style/TernaryParentheses,
    Style/FileOpen: small mechanical fixes. Style/FileOpen is fully resolved and out of the todo.
  • Style/OpenStructUse elsewhere: 17 settings-context OpenStructs in specs became
    double(current_course:, key:); the remaining sites were handled case by case. The cop no
    longer appears in the todo.
  • Style/HashAsLastArrayItem deliberately left in the todo — its autocorrect strips braces from
    multi-line hashes without reflowing them, and the current braced form reads better.
  • Fixed try_find_ace / try_find_textarea in spec/support/capybara.rb, which pushed options
    as a trailing positional hash that Capybara 3 rejects. Every failing find in every feature
    spec was reporting ArgumentError: Unused parameters passed to Capybara::Queries::SelectorQuery instead of the real Capybara::ElementNotFound.
  • Two flaky admin feature specs fixed by asserting against records they create, keyed on row id, and
    filter the table down to them.
  • New spec/README.md gained the pitfalls behind this,
    and a new spec/CLAUDE.md records the setup dependencies for running specs.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🟡 Changes recommended

Unresolved RuboCop directive issues and a fixed-delay test wait must be corrected.

Get a fresh assessment by requesting another Copilot review.

Review effort: Lite
Findings: 4 High severity

Open (4)
What changed in this PR

This pull request updates development dependencies and applies related RuboCop refactors across application and specification code.

Changes:

  • Bumps RuboCop, Bullet, parallel_tests, and SimpleCov.
  • Replaces OpenStruct fixtures and modernizes file and collection handling.
  • Updates RuboCop suppressions and improves feature-spec determinism.
  • Adds testing guidance and documentation.

Unresolved findings remain around RuboCop directive scopes and a fixed sleep in the user-management feature spec.

File Description
spec/​uploaders/​image_uploader_spec.rb Uses block-based file handling.
spec/​support/​settings_on_rails.rb Removes an obsolete test helper.
spec/​support/​capybara.rb Updates custom finder behavior.
spec/​services/​course/​user_invitation_service_spec.rb Replaces OpenStruct fixtures.
spec/​services/​course/​assessment/​submission/​statistics_download_service_spec.rb Simplifies file reads.
spec/​services/​course/​assessment/​programming_codaveri_evaluation_service_spec.rb Updates a RuboCop directive.
spec/​services/​course/​assessment/​answer/​programming_codaveri_auto_grading_service_spec.rb Updates a RuboCop directive.
spec/​README.md Documents feature-spec pitfalls.
spec/​models/​course/​settings/​videos_component_spec.rb Replaces an OpenStruct context.
spec/​models/​course/​settings/​survey_component_spec.rb Replaces an OpenStruct context.
spec/​models/​course/​settings/​gradebook_component_spec.rb Replaces OpenStruct contexts.
spec/​models/​course/​settings/​codaveri_component_spec.rb Replaces an OpenStruct context.
spec/​models/​course/​settings/​assessments_component_spec.rb Replaces an OpenStruct context.
spec/​models/​course/​assessment/​assessment_ability_spec.rb Uses session IDs directly.
spec/​mailers/​course/​mailer_spec.rb Tests group-recipient greetings.
spec/​libraries/​materials_spec.rb Uses an explicit test double.
spec/​jobs/​course/​assessment/​answer/​programming_codaveri_feedback_job_spec.rb Updates a RuboCop directive.
spec/​helpers/​course/​achievement/​controller_helper_spec.rb Uses block-based file handling.
spec/​helpers/​consolidated_opening_reminder_mailer_helper_spec.rb Uses a named notification stub.
spec/​helpers/​application_notifications_helper_spec.rb Uses a named notification stub.
spec/​features/​system/​admin/​user_management_spec.rb Makes user filtering deterministic.
spec/​features/​system/​admin/​instance_management_spec.rb Targets the created instance.
spec/​features/​course/​leaderboard_viewing_spec.rb Replaces an OpenStruct context.
spec/​features/​course/​forum/​post_management_spec.rb Replaces OpenStruct contexts.
spec/​controllers/​course/​gradebook_controller_spec.rb Replaces OpenStruct contexts.
spec/​controllers/​course/​external_assessments_controller_spec.rb Replaces OpenStruct contexts.
spec/​controllers/​course/​external_assessment_imports_controller_spec.rb Replaces an OpenStruct context.
spec/​CLAUDE.md Adds operational spec guidance.
lib/​tasks/​coursemology/​seed_gradebook.rake Applies RuboCop style fixes.
lib/​tasks/​coursemology/​seed_600_gradebook.rake Applies RuboCop style fixes.
lib/​autoload/​course/​assessment/​java/​java_programming_test_case_report.rb Updates a RuboCop directive.
Gemfile.lock Locks dependency updates.
Gemfile Updates development dependency constraints.
config/​initializers/​action_cable_acts_as_tenant.rb Updates a RuboCop directive.
app/​services/​course/​gradebook/​external_assessment_import_service.rb Updates a RuboCop suppression.
app/​services/​course/​assessment/​question/​programming/​type_script/​type_script_package_service.rb Uses compact and updates directives.
app/​services/​course/​assessment/​question/​programming/​rust/​rust_package_service.rb Uses compact and updates directives.
app/​services/​course/​assessment/​question/​programming/​r/​r_package_service.rb Uses compact and updates directives.
app/​services/​course/​assessment/​question/​programming/​python/​python_package_service.rb Uses compact.
app/​services/​course/​assessment/​question/​programming/​java/​java_package_service.rb Uses compact.
app/​services/​course/​assessment/​question/​programming/​java_script/​java_script_package_service.rb Uses compact and updates directives.
app/​services/​course/​assessment/​question/​programming/​go/​go_package_service.rb Uses compact and updates directives.
app/​services/​course/​assessment/​question/​programming/​cpp/​cpp_package_service.rb Uses compact.
app/​services/​course/​assessment/​question/​programming/​c_sharp/​c_sharp_package_service.rb Uses compact and updates directives.
app/​models/​course/​external_assessment.rb Updates a RuboCop directive.
app/​mailers/​course/​mailer.rb Adds a group recipient value object.
app/​controllers/​concerns/​course/​assessment/​question_bundle_assignment_concern.rb Modernizes iteration and argument forwarding.
.rubocop_todo.yml Removes resolved exclusions.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

@adi-herwana-nus
adi-herwana-nus merged commit 28cb1b4 into master Sep 22, 2026
14 of 15 checks passed
@adi-herwana-nus
adi-herwana-nus deleted the dependabot/bundler/dev-dependencies-8dc78c3c70 branch September 22, 2026 04:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Dependencies Pull requests that update a dependency file Ruby Pull requests that update Ruby code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants