Update bundler non-major dependencies to v1.26.0 - #316
Open
renovate[bot] wants to merge 1 commit into
Open
Conversation
renovate
Bot
force-pushed
the
renovate/bundler-minor-patch
branch
from
March 9, 2026 21:27
60551d8 to
3318f4b
Compare
renovate
Bot
force-pushed
the
renovate/bundler-minor-patch
branch
from
March 10, 2026 13:01
3318f4b to
07d0aa1
Compare
renovate
Bot
force-pushed
the
renovate/bundler-minor-patch
branch
from
March 13, 2026 04:40
07d0aa1 to
ccc9475
Compare
renovate
Bot
force-pushed
the
renovate/bundler-minor-patch
branch
from
March 15, 2026 01:36
ccc9475 to
54712b7
Compare
renovate
Bot
force-pushed
the
renovate/bundler-minor-patch
branch
from
March 15, 2026 20:49
54712b7 to
f07dfc1
Compare
renovate
Bot
force-pushed
the
renovate/bundler-minor-patch
branch
from
March 16, 2026 13:30
f07dfc1 to
8a7e287
Compare
renovate
Bot
force-pushed
the
renovate/bundler-minor-patch
branch
from
March 16, 2026 17:14
8a7e287 to
5c4f21f
Compare
renovate
Bot
force-pushed
the
renovate/bundler-minor-patch
branch
from
March 18, 2026 05:43
5c4f21f to
62a683d
Compare
renovate
Bot
force-pushed
the
renovate/bundler-minor-patch
branch
from
March 19, 2026 10:18
62a683d to
3d6be55
Compare
renovate
Bot
force-pushed
the
renovate/bundler-minor-patch
branch
from
March 21, 2026 09:18
3d6be55 to
263d8f0
Compare
renovate
Bot
force-pushed
the
renovate/bundler-minor-patch
branch
from
March 23, 2026 14:11
263d8f0 to
d523fe2
Compare
renovate
Bot
force-pushed
the
renovate/bundler-minor-patch
branch
from
March 23, 2026 18:13
d523fe2 to
693174d
Compare
renovate
Bot
force-pushed
the
renovate/bundler-minor-patch
branch
from
March 25, 2026 13:58
693174d to
d8883fc
Compare
renovate
Bot
force-pushed
the
renovate/bundler-minor-patch
branch
from
March 26, 2026 09:26
d8883fc to
68eab63
Compare
renovate
Bot
force-pushed
the
renovate/bundler-minor-patch
branch
6 times, most recently
from
April 16, 2026 09:41
910bb4e to
55ac502
Compare
renovate
Bot
force-pushed
the
renovate/bundler-minor-patch
branch
5 times, most recently
from
April 22, 2026 21:17
6913954 to
1a7cdfb
Compare
renovate
Bot
force-pushed
the
renovate/bundler-minor-patch
branch
11 times, most recently
from
April 30, 2026 11:41
59777fc to
1e76e7e
Compare
renovate
Bot
force-pushed
the
renovate/bundler-minor-patch
branch
6 times, most recently
from
May 8, 2026 20:27
467a399 to
78f76e7
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
1.24.6→1.26.02.6.7→2.6.1043.6.1→43.6.21.89.0→1.90.01.7.0→1.8.01.26.1→1.27.02.36.0→2.37.06.2.1→6.3.04.46.0→4.48.01.0.3→1.2.02.9.5→2.9.63.26.2→3.26.4Release Notes
rmosolgo/graphql-ruby (graphql)
v2.6.10Compare Source
New features
Execution::Next: Adddataload: { ..., method: }shorthand #5706Bug fixes
AsyncDataloader: Avoid ClosedError race in old fibers #5702AsyncDataloader: fix nested dataloader runs #5703FieldsWillMerge#5704AsyncDataloader: Fix ActiveRecord relation loads in connections #5708Execution::Next: handle SystemStackErrors #5705Float: reject non-finite values #5713v2.6.9Compare Source
Security
v2.6.8Compare Source
New features
quirks_mode: true) #5699Bug fixes
Execution::Next: fix no-method error in mutations #5698rubocop/rubocop (rubocop)
v1.90.0Compare Source
New features
AllowTrailingCommentoption toStyle/DisableCopsWithinSourceCodeDirective. ([@bbatsov][])disable-nextdirectives scoped to the following statement. ([@bbatsov][])--display-suppressedoption to also report offenses suppressed by directive comments, including their--justification in the JSON formatter. ([@bbatsov][])Lint/ArgumentMismatchcop. ([@bbatsov][])Lint/SuperArgumentMismatchcop. ([@bbatsov][])Style/TimeNowcop. ([@Starlexxx][])NumberOfEmptyLinesoption toLayout/EmptyLineAfterMagicCommentto configure the minimum number of empty lines required after magic comments. ([@alejofraga][])--report-unused-todo-entriesto catch rotting todo files. ([@bbatsov][])Style/DirectiveScopecop to flagdisable/enablepairs and disable-onlypush/popscopes that wrap a single statement and can usedisable-nextinstead. ([@bbatsov][])Lint/RedundantCopEnableDirectiveflag# rubocop:popdirectives without a matching# rubocop:push. ([@bbatsov][])Bug fixes
Lint/NameTypoandLint/UnusedPrivateMethodon string literals with invalid encoding. ([@bbatsov][])Lint/OutOfRangeRegexpRefwhen a preceding element access with a non-string literal argument (e.g.hash[:key]) discarded the tracked capture count. ([@koic][])--disable-uncorrectable. ([@bbatsov][])workspace/executeCommandrequest has no document URI in its arguments. ([@koic][])Naming/BinaryOperatorParameterName. ([@bbatsov][])Style/Samplewhenshuffleis given arandom:argument; the offense is still reported but no longer autocorrected, sinceshuffleandsampleconsume a seeded generator differently and would select different elements. ([@koic][])Layout/FirstArgumentIndentationwhenEnforcedStyle: with_fixed_indentationis specified forLayout/ArgumentAlignmentandLayout/FirstMethodArgumentLineBreakis enabled withAllowMultilineFinalElement: true. ([@Starlexxx][])RuboCop::Cop::IgnoredMethodsandRuboCop::Cop::IgnoredPatternbeing unreachable afterrequire 'rubocop'. ([@SeanLF][])Layout/ExtraSpacing. ([@Starlexxx][])Layout/LineLengthwhen a constant path likeHttp::UploadedFilematchesURISchemescase-insensitively. ([@koic][])Lint/UselessConstantScopingwhen assigning withClass.new,Module.new,Struct.new, orData.defineafterprivate. ([@pdobb][])Layout/MultilineMethodCallIndentationwhen a line has multiple single-line blocks before a multiline block. ([@koic][])Lint/ConstantReassignmentwhen a constant is assigned in compact-style namespaces (e.g.module A::B). ([@alex-tan][])Lint/RedundantSafeNavigationwhenInferNonNilReceiveris enabled and the receiver name is rebound by a nested block (itor a shadowed block parameter). ([@koic][])RuboCop::Cop::Registry#freezeto freeze its internal collections, so that registering a lazily loaded cop after the freeze fails fast at the registration site instead of corrupting the registry. ([@koic][])Lint/DuplicateMethodshonorsilence_redefinition_of_methodandredefine_methodas intentional redefinitions. ([@bbatsov][])--display-suppressedreporting aniljustificationwhen the offense is loaded from the result cache. ([@corsonknowles][])Layout/ClassStructureautocorrection producing a wrong order when an element cannot be moved, and make offenses report the category that actually blocks the expected order. ([@koic][])Lint/NameTyporegistering false positives for names provided by a gem whose namespace the project reopens, and for constants read from a namespace with an unresolved ancestor. ([@HoneyryderChuck][])Lint/UnusedPrivateMethodretaining every pastproject_indexobject it has seen (and the index graph reachable from each), rather than only the most recent one. This caused unbounded memory growth in long-lived processes such asrubocop --server. ([@bquorning][])Lint/UselessMethodDefinitionfalse positive for methods with**kwargs. ([@bbatsov][])--lspand--mcpbeing silently ignored when the RuboCop server is running: they now start the protocol server in the current process instead of being forwarded to the server as a lint request. ([@koic][])Excludesettings. ([@bbatsov][])Layout/LineLengthMaxwhen exemptions likeAllowedPatternsmatched the result. ([@bbatsov][])AllCops does not support TargetRailsVersion parameterwhen a plugin declares a customAllCopskey with a nil value and another plugin is loaded after it. ([@koic][])Style/StringConcatenationautocorrect. ([@bbatsov][])rubocop .(and other relative directory arguments) needlessly traversing directories excluded by the configuration, which made it much slower thanrubocopin projects with large ignored trees. ([@bbatsov][])Lint/RedundantCopDisableDirectiveandLint/RedundantCopEnableDirectiveleaving a directive's--reason behind when removing the directive. ([@corsonknowles][])Lint/UnusedPrivateMethodfor private definitions of Ruby runtime hooks likeinheritedandconst_missing. ([@bbatsov][])Lint/MissingCopEnableDirectivesuggest# rubocop:popinstead of# rubocop:enablefor an unclosed# rubocop:push. ([@bbatsov][])Lint/UnusedPrivateMethodwhen a method name is composed with an interpolated symbol or string prefix. ([@bbatsov][])Changes
AllowedCrossFilePathsoption toLint/DuplicateMethodsto skip cross-file duplicates in configured paths. ([@bbatsov][])AllowedNamesandAllowedPatternsoptions toLint/UnusedPrivateMethod. ([@bbatsov][])StyleGuidemetadata for 21 cops and fix four broken style guide links. ([@bbatsov][])Lint/DeprecatedReferenceperformance by short-circuitingdeprecated?. ([@connorshea][])Lint/NameTypoperformance by deferring the literal-name scan. ([@connorshea][])AllowForAlignmentto no longer treat a same-indentation line beyond the enclosing block as an alignment anchor forLayout/ExtraSpacing,Layout/SpaceAroundOperators, andLayout/SpaceBeforeFirstArg. ([@koic][])<testcase>elements only for cops enabled for each inspected file, instead of all cops. ([@koic][])Layout/SpaceAroundOperatorsaware of endless method definitions. ([@koic][])Lint/CopDirectiveSyntaxcatch keyword typos and unknown cop names. ([@bbatsov][])DmitryTsepelev/rubocop-graphql (rubocop-graphql)
v1.8.0Compare Source
GraphQL/FieldDescriptionno longer flags fields built from a resolver, mutation or subscription class, which inherit that class's description ([@corsonknowles][])GraphQL/DisallowedTypescop: flags field and argument types the project has configured as disallowed, with a message explaining what to use instead ([@corsonknowles][])GraphQL/NullabilityMismatchcop: anull: falsefield whose Sorbet resolver signature returns a nilable type raises an invalid null error at runtime ([@corsonknowles][])GraphQL/DefaultForOptionalArgumentcop: an optional argument with no default value in the resolver signature raisesArgumentErrorwhen the client omits it ([@corsonknowles][])GraphQL/ObjectDescriptiononly flags classes and modules that are actually GraphQL types, instead of every class and every module with aninclude([@corsonknowles][])rubocop/rubocop-performance (rubocop-performance)
v1.27.0Compare Source
Bug fixes
Performance/ChainArrayAllocationwhen usingflat_map,filter_map, andcollect_concat. ([@koic][])Changes
rubocop/rubocop-rails (rubocop-rails)
v2.37.0Compare Source
Changes
[].freeze,{}.freeze) as:defaultvalue inRails/AttributeDefaultBlockValue. ([@kuboon][])Rails/HttpPositionalArgumentsperformance by checking forinclude Rack::Test::Methodsonce per file instead of once per HTTP call. ([@moberegger][])scoutapp/scout_apm_ruby (scout_apm)
v6.3.0Compare Source
ActionController::Livestreaming requests (#631)SeleniumHQ/selenium (selenium-webdriver)
v4.48.0Compare Source
=========================
v4.47.0Compare Source
=========================
simplecov-ruby/simplecov (simplecov)
v1.2.0Compare Source
==================
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, andsimplecov affectedconnect covered lines to the tests that exercised them; the HTML report displays the same attribution andsimplecov watchuses 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::Productionrecords low-overhead production line coverage, whilesimplecov dead-codeand the bundled reports cross it with test coverage.cover_views, including ERB, Haml, and Slim source highlighting.Upgrade notes
coverage/.history.jsonfile by default. Sethistory_limit 0to disable it.coverage(:criterion) { ignore ... }andminimum ..., per: .... The legacy forms warn with their exact replacements, anddeprecations :raisecan enforce a completed migration.coverage.jsonadvances additively to schema 1.3 for test-context, history, baseline-error, and production data. Previously published versioned schemas remain frozen for pinned consumers.Enhancements
The HTML report's source view renders the
track_testsrecording. A covered line no recorded test executed drains from green to a slate tint, with a "Covered outside tests" legend chip, so coverage produced only by load time, suite setup, or helpers stops passing for tested code at a glance. Every executed line carries a tests badge naming its count, and clicking it opens an inline panel listing the covering tests, the same ids in the same ordersimplecov tests file:lineprints, each one selectable with a click for handing to a runner. Drained lines explain themselves in the same panel instead of listing nothing. The file header's Line coverage row splits its fraction by the same attribution ("Line coverage: 100.00% 21/30 relevant lines covered by tests, 9/30 relevant lines covered outside tests"), the legend's covered chip splits to match (green "Covered by tests" beside the slate "Covered outside tests"), keyboard access rides on real buttons with the report's focus ring, and the panel closes on Escape without closing the source dialog. The file list draws the same distinction: each line coverage bar splits its fill into the share recorded tests produced (in the usual band colour) and a slate share covered only outside them, in the file rows and the live-filtered totals row alike, and sorting by line coverage breaks ties on the by-tests share, so of two files at 100% the one whose coverage rests on its tests ranks above the one warmed by load time. All of it appears only when the report was generated withtrack_testsenabled, so other reports render exactly as before.simplecov patchreports coverage of just the lines a change touched, the questiondiffdoes not answer. Wherediffcompares two reports and asks whether the overall number moved — which a large or legacy project cannot shift in one pull request —patchreadsgit diff --unified=0 --merge-base <base>, intersects the added and modified line numbers with the current report, and prints line coverage — and, when the report measured branches or methods, branch and method coverage over the branches and methods those lines carry — for only that change, so a project sitting at 40% can still insist that everything it adds is tested.--minimum Nexits non-zero below a floor (every measured criterion must clear it), composing with CI as a per-change gate alongside the existing thresholds;--baseselects the ref to diff against (defaulting to the branch origin's HEAD points at, elsemain; in CI, the target branch or its merge-base);--find-renamesfollows a moved file instead of counting it as all-new; and--jsonemits the rows the other read-only commands do. Only files the report already carries are scored, and a lineLinesClassifierdeems never relevant stays out of the denominator the same way it stays out of a file's total, so a comment-only or whitespace change reads as nothing to cover rather than as a gap. A brand-new file that was nevergit added appears in no diff yet is still the change's work, so untracked files are scored too, every report-known line of them as new. The diff is anchored at the repository root rather than the working directory, so a run from a subdirectory reports the same change, and changed files resolve against the report by exact path, so a lookalike entry elsewhere in the report can never be scored in a changed file's place. A changed line beyond what the report knows for its file draws a staleness warning instead of silently scoring nothing, a git failure reports git's own words rather than a guess, and a path that matches more than one report entry names its candidates, incoverageandteststoo, instead of a bare "no entry". Almost none of this is new machinery: the report already knows which lines are relevant and which were hit, leaving a hunk-header parser and path resolution against the report's root. Prior art isdiff-cover, Codecov's patch status, and theundercovergem, which does this for Ruby but needs its own formatter and a git dependency to get there. See #1262.track_testsrecording got a cost model and the levers to control it. Recording now settles at segment boundaries: consecutive tests share their boundary coverage snapshot (one snapshot closes one test's segment and opens the next, attributing any in-between code to the later test), which halves the per-test sampling cost outright, and the project-root check is memoized per file. On top of that,track_tests granularity: :filerecords one context per test file instead of per test, so the suite pays one snapshot per change of file in run order rather than one per test, and test selection needs no more than file identity anyway. On a real 1,756-test Minitest suite measuring line, branch, and method coverage, the two changes together cut tracking overhead from 52 seconds to 28 at the default granularity and to 13 at:file. The remaining floor is Ruby's ownCoverage.peek_resultcopy, which scales with the criteria the run measures: a millisecond or two under line coverage alone, an order of magnitude more with branch and method tables, which the docs now spell out.simplecov testsanswers which tests cover a file or line, from the terminal. Bare, it lists every test recorded undertrack_tests. With a path it narrows to the tests touching that file, and withpath:lineto one line. Text output is one test id per line and nothing else on stdout, sorted, so the list can feed a runner directly (simplecov tests lib/foo.rb:42 | xargs bundle exec rspec), with empty answers noted on stderr instead.--jsonemits a JSON array, and--inputpicks the report like the other read-only subcommands. It reads thecontextsdata incoverage.json, so it works on any report generated aftertrack_testswas enabled, and explains what to enable when the recording is missing.simplecov tests --redundantlists the tests whose covered lines other tests also cover, the tests contributing no coverage of their own, computed from the sametrack_testsrecording with no new measurement. The flag composes with the narrowing, sosimplecov tests --redundant lib/foo.rblists the redundant tests among those touching the file. The listed ids are candidates for review rather than a delete list: assertions and mutation-killing power are invisible to coverage, and two tests covering exactly the same lines subsume each other, so both are listed and deleting both would lose the lines. An empty answer over a real recording is good news and says so on stderr.simplecov affectedselects the tests that touch changed code. It diffs the working tree against the merge base of a git ref (--base, defaulting to the branch origin's HEAD points at, elsemain) and HEAD, so uncommitted work counts as part of the change while commits that landed on the base after the branch point do not, includes untracked files, and prints the test files whose recorded tests touch the changed files, so the local inner loop can runsimplecov affected --run bundle exec rspecinstead of the whole suite. Everything after--runis the runner command, the selection is appended to it, and the exit status is the command's own. The set intersection is the easy half. The hard half is knowing when to distrust the map, because a test map is stale the moment something changes that no test mentions by name, so any changed file outside the tracked set fails open to the full suite, out loud: a changedGemfile.lock,.simplecov, spec helper, runner configuration, or any file the report has no data for is named on stderr as the trigger, while stdout prints nothing, which a bare runner reads as run everything. Changed or brand-new test files always select themselves, recorded or not, a test file deleted by the change drops out of the answer, and a recorded test whose file no longer exists anywhere else reads as staleness rather than being silently skipped.--jsonemits the selection with itsfull_suiteverdict and triggers for tooling, and--inputpicks the report like the other read-only subcommands. Likepatch, the diff is anchored at the repository root, so a run from a subdirectory selects over the whole change, with--runstarting the runner at that root, and changed files resolve against the report by exact path, so a lookalike entry elsewhere in the report can never stand in for a changed file the report does not carry. Built for the local inner loop first, because a wrong answer in CI is a green build on a broken change. See #1264.track_testsin aSimpleCov.startblock samples coverage around every RSpec example and Minitest test, and stores the map in.resultset.jsonunder a versionedcontextskey beside the merged coverage, exposed asSimpleCov::Result#contextswith acovering(path, line)lookup. The data layer speaks of contexts rather than tests because the mechanism is general and matches the vocabulary a future Coverage library feature would use, while undertrack_testsevery context is one test. Test ids are interned and each test's covered lines are packed into per-file bitmaps, which keeps the naive tests-times-lines storage in hand. Merges union the maps when every merged result recorded one and drop them out loud otherwise, across suites, concurrent runners, parallel workers, andsimplecov collatealike, since a partial map would present one worker's tests as the whole run's. The Minitest wrapper installs through the minitest 5 plugin, and under minitest 6, whose autorun no longer discovers plugins, the momentMinitest::Testis defined. Other runners wrap their own units of work withSimpleCov.track_test. Tests running concurrently in threads inside one process cannot be told apart, because coverage counters are process-global, so such a process warns and stores no map rather than a misattributed one, while process-parallel workers each record their own. The serialized map carries a format version, so a future format reads as absent instead of being misread. The map also flows intocoverage.json, the durable artifact downstream tools build on, as a document-levelcontextsarray plus per-file hex bitmaps, under coverage.json schema 1.1 (schemas/coverage-v1.1.schema.json, with 1.0 staying frozen for pinned integrations, and the new keys optional so documents without recordings stay minimal). Opt-in because sampling around every test costs run time and the map costs space. Needs regular line coverage, so:oneshot_lineis rejected at startup, because a line reports only its first hit ever and every later test's delta would miss it. See #1263.ActionView templates can be part of the report.
cover_viewsin aSimpleCov.startblock turns on eval coverage, which is what measures a template the suite renders, and compiles the templates it never renders so they appear at 0% rather than not at all. Rendering already produced usable data, because ActionView compiles each template withmodule_eval(source, identifier, offset)where the identifier is the template's own path and the offset cancels thedefline its wrapper adds, so the generated code is attributed back to the.erbfile at the template's own line numbers and nothing needs remapping. The gap was the other half: a template no test renders is never compiled, soCoveragenever hears about it, and the views with no coverage were exactly the ones the report omitted.cover_viewsdefaults to a Rails app's views, takes globs of its own for templates that live elsewhere, and honorsskiplike any other file in the report. Therailsprofile gains a matchingViewsgroup, which stays empty in a project that has not opted in. Needs CRuby 3.2 or later, which is what eval coverage needs. See #1265.The source view highlights each file by its own language rather than assuming Ruby. A
.erbtemplate used to be handed to the Ruby grammar, which declines to match markup and left the view almost entirely unhighlighted, so templates now go through an ERB grammar that marks up the tags and highlights what is between them as Ruby. It is a small grammar of SimpleCov's own rather than the one highlight.js ships, whose markup is delegated to a full XML grammar that carries a literal</scriptthe report cannot inline (the whole report is oneindex.htmlwith its JavaScript in a<script>element) and that would have cost around 5KB in every report written. The one shipped costs 627 bytes.The changelog is back at
CHANGELOG.mdin the project root, where the convention documented at keepachangelog.com puts it and where humans and tooling look for it. Moving it underdocs/was never what kept it out of the packaged gem:gem.fileslists what ships, so the file stays unpackaged where it is. The gem'schangelog_urimetadata follows it back, and the pre-0.18 entries stay atdocs/Changelog.old.md. See #1272.cover_viewsreaches Haml and Slim, and its default glob is nowapp/views/**/*.{erb,haml,slim}. Nothing was needed to measure them beyond looking the handler up the way ActionView's own resolver does: both generate Ruby that keeps the template's line structure, so hits land on the lines their authors wrote. The same goes for any other language a project has registered a handler for, which needs only its extension named in a glob. An extension with no registered handler is now left out of the report instead of being compiled through ActionView's raw handler, which would have reported a project that has no Haml a file of static text for every.hamlits default glob happened to match. The source view highlights Haml and Slim as themselves, the second through a small grammar of SimpleCov's own since highlight.js ships none.simplecov watchturns the report into something you look at while writing the test. It serves the report the wayservedoes, polls the tracked files for saves, re-runs the given command when something changes, and pushes a reload to the open tab over server-sent events the moment the report regenerates, with the result line naming the change and the coverage delta ("lib/result.rb changed, running 3 files... 100.00% (+0.40%)"), the number following the report's primary criterion. With atrack_testsrecording in the report a save re-runs only the tests touching the changed files, by the same selection walksimplecov affecteduses and with the same fail-open rule, and without one every save runs the full command. The watched set is the report's own tracked files plus the recorded tests' files, polled by mtime rather than through a filesystem-event dependency, which also keeps report writes from triggering the next run. Child runs get a day-long merge window through the newSIMPLECOV_MERGE_TIMEOUTenvironment variable (honored bymerge_timeoutgenerally), so subset re-runs keep merging into a whole report across a long session. The report on disk stays byte-identical to a plain run's, with the reload listener added only on the way out of the server, and--openpops the report in the default browser on start. See #1269.simplecov show <path>prints annotated source in the terminal, the waygo tool coverandllvm-cov showdo: hit counts in the gutter, a caret marker naming each miss under its line, and branch and method misses annotated the same way when the report measured them.--uncovered-onlycollapses the answer topath:40,52-58,71, a form that greps, fits in a commit message, and hands a coding agent exactly the lines whose tests are missing, and--jsonemits the whole annotation as data (missed lines, per-line hits, marker labels) for editor integrations. With no path,--uncovered-onlysweeps the whole project into onepath:rangesline per file with misses, and a bare--jsonemits the same sweep as data. Colors follow the usualNO_COLOR,FORCE_COLOR, and--no-colorrules. The source comes from the report itself when it embeds one, and otherwise from disk, accepted only while the file's line count still matches the report's, since annotating drifted source would put hit counts on the wrong lines. See #1270.simplecov statusanswers "is this report fresh?" from metadata the artifacts have carried all along: the report's age, the SimpleCov version and run that produced it, the recorded commit and how many commits HEAD has moved since, the measured totals, whether atrack_testsmap is present (and what to enable when it isn't), and the resultset's entries with their ages.--jsonemits the same facts as data. Every staleness question the change-aware commands raise now has a one-command answer.simplecov uncovered --missingappends the missed line ranges to each row (50.00% 5/10 lib/foo.rb missing 4-7,9), following the chosen criterion (zero-hit lines, or the lines missed branches and methods report on), and adds amissingarray to each--jsonrow, so the list says not just where to add tests but which lines they're for.--annotate githubemits::warningworkflow commands instead of rows, one per contiguous missed range, so a plain GitHub Actions workflow gets inline diff annotations with no upload step and no code-scanning permissions.simplecov badgerenders the report's percentage as a flat SVG badge in the shields.io style, to stdout or to a file with--output, so a README or CI artifact can carry the number straight from the local report with no badge service in the loop. The color follows the ladder badge services use for coverage (bright green at 90% and above, stepping down to red below 50%),--criterionpicks the line, branch, or method percentage, and the label names the chosen criterion ("line coverage", "branch coverage", "method coverage") unless--labelreplaces it. The percent comes from the totalscoverage.jsonalready carries, so the badge always matches what the other read-only commands report.simplecov completions fish|bash|zshprints a tab-completion script for the named shell, covering every subcommand with its description and each command's own options. The script is generated from the usage document itself rather than a hand-kept table, so a new command or option appears in completions the moment it is documented.The gem ships a man page,
man/simplecov.1, covering every CLI command and option with the environment variables and files the commands honor. Like the shell completions, it is generated from the usage document (rake manregenerates it) so it cannot drift, and the suite fails when the committed copy is stale. RubyGems does not install man pages ontoMANPATH, so read it withman $(gem contents simplecov | grep man/simplecov.1)or let a system package manager place it.Every CLI command answers
--help/-hwith its own slice of the usage text: the command's row, its options, and the shared options it accepts, instead of the full listing. It also replaces what optparse's built-in handler did before, which was to print a bare option summary under the host program's banner and exit the process from inside the parser.A checked-in per-file coverage baseline that only ratchets up, for legacy codebases where one
minimum_coveragenumber does nothing and oneminimum_coverage_by_filenumber lets the single worst file set the ceiling for the whole policy.simplecov ratchetwrites.simplecov_baseline.ymlfrom the current report, one floor per file per measured criterion, and the exit check fails any listed file that drops below its own floor. Rewriting only ever tightens: files that improved get their floors raised, files that regressed keep the floors they are now below (and are named in the summary), entries for deleted files are pruned, and new files never get an entry, so they answer to the realminimum_per_filestandard (which files with an entry are exempt from, per criterion) rather than to a floor cut at whatever they launched with. The diff on the baseline file becomes the honest record of which direction the codebase moved, reviewable in the same PR as the change that moved it, the way.rubocop_todo.ymlrecords offenses. The issue left open whether a floor should be a percent or a count of uncovered lines, since a percent moves when a file is edited without any coverage change at all. Each floor stores both: the percent is the policy, and the missed count is the dampener, so a violation requires a lower percent and more misses together, and an edit that only reshuffles covered lines fails nothing. A hand-written bare-percent entry (lib/foo.rb: 41.2) is accepted and decided by percent alone until the next ratchet records its missed count, while a malformed baseline fails loudly rather than silently un-enforcing every floor it carried.--initdeliberately regenerates the file from scratch (new files added, floors reset),--dry-runprints without writing,--jsonemits the summary as data, and--baselinenames the file, defaulting to the project'sSimpleCov.baseline_file, which the command reads from.simplecovthe way the read-only commands readcoverage_dir. Baseline violations also land in coverage.json'serrorssection, under schema 1.2 (additive, with 1.1 staying frozen for pinned integrations). See #1268.maximum_missedandmaximum_missed_per_filecap the number of misses instead of demanding a ratio, per criterion: uncovered lines, branch arms, or methods, counted in the criterion's own units. The suite-wide cap is a burn-down number, because "12 uncovered lines left" stays meaningful as the codebase grows and shrinks and is the sentence a team driving to 100% actually says, while the equivalent percentage moves with every edit. The per-file cap says what a per-file percent minimum cannot: a 2,000-line file at 99% hides 20 misses while a 10-line file at 80% fails over 2, so the cap holds every file to the same absolute budget. Both are verbs in thecoverageblock (`coverage(:line) { maximum_missed 12; maximum_missed_Configuration
📅 Schedule: (UTC)
* 0-4,22-23 * * 1-5)* * * * 0,6)🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about these updates again.
This PR was generated by Mend Renovate. View the repository job log.