Skip to content

v3.1.0

Choose a tag to compare

@pboling pboling released this 28 May 17:53
v3.1.0
849e7fc

3.1.0 - 2026-05-28

  • TAG: v3.1.0
  • COVERAGE: 95.01% -- 609/641 lines in 16 files
  • BRANCH COVERAGE: 77.54% -- 107/138 branches in 16 files
  • 36.78% documented

Added

  • -w / --workers aliases for -n, matching the worker-count terminology used by other
    parallel test runners.
  • turbo_tests2 fan, a generic worker fan-out command that runs an arbitrary command once per
    worker with TEST_ENV_NUMBER and PARALLEL_TEST_GROUPS set.
  • --example-status-log FILE, which converts RSpec example-status persistence data into a
    parallel_tests-compatible runtime log so grouping can use example-level timing history.

Changed

  • Worker subprocess JSON now forwards RSpec deprecation notifications to the parent reporter.
  • Worker subprocess JSON now forwards RSpec profile output to the parent reporter.
  • Fail-fast runs now report spec groups that were stopped before execution.
  • Interrupted runs now report spec groups that had not finished before shutdown.

Fixed

  • Reconstructed failure backtraces now filter internal turbo_tests2 frames.

  • Coverage was refreshed by adding focused specs for the new CLI, reporting, formatter, and
    grouping behaviors.

  • RSpec deprecation notification reconstruction now uses the public from_hash API so CI passes
    with RSpec versions where .new is private.

  • The shim command result object no longer depends on Struct#keyword_init, restoring Ruby 2.4
    compatibility.

  • Backtrace output specs now accept JRuby 9.2's legacy block in <main> frame wording.

  • GitHub Actions test jobs now force kettle-test to use its direct RSpec runner so coverage
    aggregation remains stable while testing turbo_tests2 itself.

  • GitHub Actions appraisal jobs now pass explicit parent-directory RSpec paths so direct RSpec
    runs execute the real suite instead of finding zero examples from gemfiles/.

  • Spawned-process coverage setup now locates .simplecov_spawn.rb from the working directory
    instead of Bundler.root, so appraisal gemfiles do not point it at gemfiles/.

  • The coverage workflow now uses the same hard coverage thresholds as local development.

  • The dedicated coverage workflow now runs RSpec directly so coverage artifacts are written under
    the repository root for upload steps.

  • Removed the advanced CodeQL workflow because GitHub CodeQL default setup is enabled and rejects
    SARIF uploads from advanced configurations.

Security

  • Refreshed pinned GitHub Action SHAs.
  • Added checksums for the v3.0.0 release artifacts.

Official Discord 👉️ Live Chat on Discord

Many paths lead to being a sponsor or a backer of this project. Are you on such a path?

OpenCollective Backers OpenCollective Sponsors Sponsor Me on Github Liberapay Goal Progress Donate on PayPal

Buy me a coffee Donate on Polar Donate to my FLOSS efforts at ko-fi.com Donate to my FLOSS efforts using Patreon