Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog,
and this project adheres to Semantic Versioning,
and yes, platform and engine support are part of the public API.
Please file a bug if you notice a violation of semantic versioning.
Unreleased
Added
Changed
Deprecated
Removed
Fixed
Security
3.2.3 - 2026-07-26
- TAG: v3.2.3
- COVERAGE: 96.81% – 880/909 lines in 10 files
- BRANCH COVERAGE: 85.17% – 224/263 branches in 10 files
- 36.73% documented
Added
-
Documentation linting now has its generated
yard-lintdependency and severity config available in the local bundle. -
kettle-jem-template-20260726-001 - Projects now include YARD lint
configuration and documentation dependencies so documentation issues fail
before generated docs are refreshed.
Fixed
- Worker stdout that happens to contain
RSPEC_FORMATTER_OUTPUT_IDis now kept
as ordinary output instead of being parsed as an internal formatter message. -
kettle-jem-template-20260726-002 - Generated version files now document their
version namespace and constants, reducing warning-only YARD lint output. - kettle-jem-template-20260726-003 - Coverage upload steps now treat Coveralls,
QLTY, and Codecov as optional, so provider outages do not fail CI when local
coverage thresholds still pass.
Changed
- README guidance now distinguishes the
TurboTestsnamespace from the
publishedturbo_tests2gem and executable names, and its Rake/SimpleCov
examples now useturbo_tests2task filenames while keeping SimpleCov’s
defaultcoverage/base directory.
3.2.2 - 2026-07-25
- TAG: v3.2.2
- COVERAGE: 96.88% – 869/897 lines in 10 files
- BRANCH COVERAGE: 84.44% – 217/257 branches in 10 files
- 34.69% documented
Changed
-
The
turbo_tests2executable startup header is now shown only when
--verboseis passed;-vand--versionstill print just the executable
version and exit. -
kettle-jem-template-20260725-002 - Generated gemspec templates now include
anonymous_loaderas a development dependency, and version specs use it to
execute generatedversion.rbfiles for coverage without redefining package
constants. Managed version specs are removed whenversion_gemis disabled
or incompatible with the project’s runtime Ruby floor.
3.2.1 - 2026-07-25
- TAG: v3.2.1
- COVERAGE: 96.88% – 869/897 lines in 10 files
- BRANCH COVERAGE: 84.44% – 217/257 branches in 10 files
- 34.69% documented
Changed
-
The
turbo_tests2executable now supports-v/--versionand prints a
standard startup header on normal runs. - kettle-jem-template-20260716-001 - Shim gemspec manifests now include
LICENSE.mdinstead of nonexistentLICENSE.txt. - kettle-jem-template-20260716-002 - Generated gemspec manifests now ship fewer
repository-only files by default to reduce downstream distro packaging churn. - kettle-jem-template-20260720-001 - Generated READMEs can now render
template-managed corporate sponsor logos from project or family config. - kettle-jem-template-20260720-002 - Generated development Gemfiles now use the
releasedtree_sitter_language_packgem 1.13.3 or newer by default. - kettle-jem-template-20260720-003 - Generated StructuredMerge Git diff driver
config now uses the installedsmorg-rbRuby driver name. - kettle-jem-template-20260720-004 - Generated multi-engine workflow files now
omit JRuby and TruffleRuby jobs when project config declares MRI-only engines. - kettle-jem-template-20260720-005 - Generated README Support & Community rows
now include a RubyForum help badge. - kettle-jem-template-20260725-001 - Generated JRuby and TruffleRuby workflow
files now run when pull request head branches start withfeature/release,
so release CI monitoring does not report intentionally skipped engine
workflows as failures.
Fixed
- Worker commands now drop project
.rspecpresentation formatter and output
options after preserving the behavioral options needed by each shard,
preventing direct-RSpec formatter output from being replayed alongside the
turbo summary. - Runtime-based runs now silence the preliminary sizing probe, so
Using recorded test runtimeis printed once by the actual grouping pass.
3.2.0 - 2026-07-18
- TAG: v3.2.0
- COVERAGE: 96.88% – 869/897 lines in 10 files
- BRANCH COVERAGE: 84.44% – 217/257 branches in 10 files
- 34.69% documented
Added
-
--countis now accepted as an alias for-n, matching the
parallel_testsprocess-count option while keeping the existing
-w/--workersaliases. - Documented the supported
parallel_testsoption subset and clarified that
unsupported flags are not blindly passed through after--. - Added
--worker-output MODEandTURBO_TESTS2_WORKER_OUTPUTsupport for
selecting raw worker stdout/stderr handling:warnings,stream,buffered,
orquiet. -
--group-by runtime|filesize|foundis now parsed explicitly and mapped to
parallel_testsgrouping modes, including when supplied after the
compatibility--separator. -
--allowed-missing PERCENTand--unknown-runtime SECONDSare now parsed
explicitly and mapped toparallel_testsruntime grouping tuning options,
including when supplied after the compatibility--separator.
Changed
- Pull request engine workflows now keep JRuby and TruffleRuby coverage
available via branch opt-in prefixes:jruby/*runs JRuby workflows,
truffleruby/*runs TruffleRuby workflows, andengines/*runs all engine
workflows. Other pull request branches continue to run MRI checks without the
alternate engine jobs. - The delayed documentation formatter spec now lives under fixtures so the
normal suite does not pay its fixed load-time delay.
Fixed
- Successful non-verbose runs now surface warning and deprecation lines emitted
as raw worker stdout/stderr without dumping all buffered worker output. -
heads.ymlanddep-heads.ymlnow gate JRuby and TruffleRuby PR coverage
at the job level, so non-matching PR branches skip those engine jobs before a
runner is provisioned. - Direct
turbo_tests2runs now refresh the default
tmp/turbo_rspec_runtime.logtiming log, and--runtime-logwrites the
requested timing log even when the run groups by filesize. -
--only-group GROUP_INDEX[,GROUP_INDEX]is now parsed explicitly and runs
only the selected 1-basedparallel_testsgroup index(es), using filesize
grouping by default for selected-group reruns. -
--pattern PATTERNis now parsed explicitly and mapped toparallel_tests
file discovery instead of being treated as a spec file when supplied after
--. -
--exclude-pattern PATTERNis now parsed explicitly and mapped to
parallel_testsfile discovery instead of being treated as a spec file when
supplied after--.
3.1.14 - 2026-07-17
- TAG: v3.1.14
- COVERAGE: 97.30% – 758/779 lines in 10 files
- BRANCH COVERAGE: 88.26% – 188/213 branches in 10 files
- 35.11% documented
Fixed
- Worker commands now override RSpec’s default options file, then explicitly
pass filtered project.rspecoptions. File-discovery options such as
--patternare dropped afterturbo_tests2has already selected each shard,
preventing aggregate suite patterns from making every worker run the full
suite while preserving options like--require spec_helper.
3.1.13 - 2026-07-16
- TAG: v3.1.13
- COVERAGE: 97.50% – 741/760 lines in 10 files
- BRANCH COVERAGE: 88.35% – 182/206 branches in 10 files
- 35.87% documented
Fixed
- Duplicate RSpec
Run options:messages from parallel workers are now
collapsed so they no longer interrupt progress formatter output repeatedly.
3.1.12 - 2026-07-16
- TAG: v3.1.12
- COVERAGE: 97.04% – 722/744 lines in 10 files
- BRANCH COVERAGE: 85.50% – 171/200 branches in 10 files
- 35.87% documented
Fixed
-
file:lineRSpec selectors are now supported when passed toturbo_tests2;
files are grouped by real path and workers receive the original line-filtered
selectors.
3.1.11 - 2026-07-16
- TAG: v3.1.11
- COVERAGE: 97.37% – 704/723 lines in 10 files
- BRANCH COVERAGE: 88.42% – 168/190 branches in 10 files
- 36.67% documented
Fixed
-
No-argument runs once again discover the default
spectree while still
honoring.rspecpattern overrides. -
Default RSpec file discovery now uses Ruby 2.4-compatible path handling.
3.1.10 - 2026-07-15
- TAG: v3.1.10
- COVERAGE: 97.65% – 706/723 lines in 10 files
- BRANCH COVERAGE: 88.95% – 169/190 branches in 10 files
- 36.67% documented
Fixed
- No-argument runs now use RSpec configuration for file discovery, including
.rspec--patternsettings, instead of assuming a top-levelspec/
directory.
3.1.9 - 2026-07-14
- TAG: v3.1.9
- COVERAGE: 97.60% – 692/709 lines in 10 files
- BRANCH COVERAGE: 89.13% – 164/184 branches in 10 files
- 37.08% documented
Fixed
- Buffered non-RSpec worker stdout/stderr so successful parallel runs no longer
leak interleaved coverage formatter output, while still reporting a single
concise coverage summary. - Prevented invalid UTF-8 bytes in worker output from crashing the parent
runner on JRuby after the underlying RSpec examples pass.
3.1.8 - 2026-07-14
- TAG: v3.1.8
- COVERAGE: 97.40% – 636/653 lines in 10 files
- BRANCH COVERAGE: 89.47% – 136/152 branches in 10 files
- 37.08% documented
3.1.7 - 2026-07-11
- TAG: v3.1.7
- COVERAGE: 97.40% – 636/653 lines in 10 files
- BRANCH COVERAGE: 89.47% – 136/152 branches in 10 files
- 37.08% documented
Changed
- Clarified project metadata, README, and CLI help to describe
turbo_tests2
as an RSpec parallel runner built onparallel_tests.
Fixed
- Fixed generated README metadata backticks around
turbo_tests2in the
package description.
3.1.6 - 2026-07-02
- TAG: v3.1.6
- COVERAGE: 97.40% – 636/653 lines in 10 files
- BRANCH COVERAGE: 89.47% – 136/152 branches in 10 files
- 37.08% documented
Fixed
- Package configured license files in gem release file lists.
3.1.5 - 2026-06-23
- TAG: v3.1.5
- COVERAGE: 97.09% – 634/653 lines in 10 files
- BRANCH COVERAGE: 88.82% – 135/152 branches in 10 files
- 37.08% documented
Added
- Added support for JRuby 10.1 and TruffleRuby 34.0.
Changed
- Retemplated project metadata and CI/development automation with
kettle-jemv7.0.0.
Fixed
- Fixed subprocess coverage setup for SimpleCov v1 by starting coverage
explicitly in the spawn shim and detecting active coverage via Ruby’s
Coverage.running?API. -
Fixed SimpleCov boot order so kettle-soup-cover formatter configuration loads
after SimpleCov finishes requiring its defaults. - Added
PARALLEL_PID_FILEtoturbo_tests2 fanworker environments so
SimpleCov parallel result collation does not fail when workers inherit
PARALLEL_TEST_GROUPS. - Made CLI integration specs assert combined stdout/stderr output so older
Ruby engines that emit warnings or RSpec load errors on stderr are covered. - Relaxed CLI load-error detail expectations only on TruffleRuby, where some
supported versions exit nonzero but omit the RSpec load-error summary.
3.1.4 - 2026-06-17
- TAG: v3.1.4
- COVERAGE: 94.33% – 666/706 lines in 16 files
- BRANCH COVERAGE: 79.11% – 125/158 branches in 16 files
- 37.08% documented
Fixed
-
Prevented parallel test runs from hanging when a worker process exits but its
stdout or stderr pipe remains open, a failure mode observed on JRuby
current/head jobs. -
Ensured worker stdout/stderr reader threads are force-stopped after worker
process exit if an engine keeps them blocked after pipe closure, fixing
TruffleRuby 25.0 CI failures in the worker pipe cleanup regression spec.
3.1.3 - 2026-06-14
- TAG: v3.1.3
- COVERAGE: 94.62% – 651/688 lines in 16 files
- BRANCH COVERAGE: 79.33% – 119/150 branches in 16 files
- 37.08% documented
Fixed
- Restored
docs/CNAMEso the generated documentation site keeps its custom domain.
3.1.2 - 2026-06-08
- TAG: v3.1.2
- COVERAGE: 94.62% – 651/688 lines in 16 files
- BRANCH COVERAGE: 79.33% – 119/150 branches in 16 files
- 37.08% documented
Fixed
-
turbo_tests2now generates and reports a global random seed by default,
passes it to every worker process, and supports--order defined/
--no-randomfor ordered runs without a seed. - Worker PID cleanup now uses the
parallel_testspid file path captured when the subprocess starts, avoiding JRuby failures after the pid-file environment is restored.
3.1.1 - 2026-06-02
- TAG: v3.1.1
- COVERAGE: 94.63% – 634/670 lines in 16 files
- BRANCH COVERAGE: 78.17% – 111/142 branches in 16 files
- 36.78% documented
Fixed
- The CLI now honors documented
turbo_tests2:setupandturbo_tests2:cleanup
Rake hooks, while still falling back to legacyturbo_tests:*hooks. -
Worker processes now receive the full
parallel_testsenvironment metadata, so SimpleCov
defers minimum coverage enforcement to the combined final result instead of checking each
shard independently. - Restored Ruby 2.4 compatibility for worker wait-thread cleanup.
- The coverage workflow now runs
kettle-testthrough direct RSpec execution,
so hard coverage thresholds are checked against the complete suite result
while other gems can still useturbo_tests2underkettle-test.
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/--workersaliases 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 withTEST_ENV_NUMBERandPARALLEL_TEST_GROUPSset. -
--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_tests2frames. -
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_hashAPI so CI passes
with RSpec versions where.newis 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-testto use its direct RSpec runner so coverage
aggregation remains stable while testingturbo_tests2itself. - GitHub Actions appraisal jobs now pass explicit parent-directory RSpec paths so direct RSpec
runs execute the real suite instead of finding zero examples fromgemfiles/. - Spawned-process coverage setup now locates
.simplecov_spawn.rbfrom the working directory
instead ofBundler.root, so appraisal gemfiles do not point it atgemfiles/. - 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.0release artifacts.
3.0.0 - 2026-05-22
- TAG: v3.0.0
- COVERAGE: 96.94% – 538/555 lines in 17 files
- BRANCH COVERAGE: 90.35% – 103/114 branches in 17 files
- 37.97% documented
Added
- Initial release