.rubocop.yml:8 declares TargetRubyVersion: 3.2, and README.md:14 tells contributors they need Ruby 3.2+ to build the project. Both statements promise the codebase is held to a 3.2 contract.
.github/workflows/rake.yml:17 pins the only test job to ruby-version: 3.4.9 and runs nothing else. The matrix is a single entry. No job in .github/workflows/ runs the build against 3.2 or 3.3, so a 3.2 or 3.3 regression — a method that exists only on 3.4, a syntactic form 3.2 rejects, a frozen-string change between 3.2 and 3.4 — ships green and breaks every downstream swarm derived from this template that follows the README and installs Ruby 3.2.
The mismatch surfaces silently because .rubocop.yml flags 3.4-only API at lint time but the CI job is itself on 3.4, so RuboCop and the test runner share the same Ruby and never disagree.
Fix: replace the scalar ruby-version: 3.4.9 in rake.yml:17 with a matrix over 3.2, 3.3, and 3.4, or align the README and .rubocop.yml to the actual single version CI exercises. Picking the matrix path keeps the template honest with what it advertises to derived swarms.
.rubocop.yml:8declaresTargetRubyVersion: 3.2, andREADME.md:14tells contributors they need Ruby 3.2+ to build the project. Both statements promise the codebase is held to a 3.2 contract..github/workflows/rake.yml:17pins the only test job toruby-version: 3.4.9and runs nothing else. The matrix is a single entry. No job in.github/workflows/runs the build against 3.2 or 3.3, so a 3.2 or 3.3 regression — a method that exists only on 3.4, a syntactic form 3.2 rejects, a frozen-string change between 3.2 and 3.4 — ships green and breaks every downstream swarm derived from this template that follows the README and installs Ruby 3.2.The mismatch surfaces silently because
.rubocop.ymlflags 3.4-only API at lint time but the CI job is itself on 3.4, so RuboCop and the test runner share the same Ruby and never disagree.Fix: replace the scalar
ruby-version: 3.4.9inrake.yml:17with a matrix over 3.2, 3.3, and 3.4, or align the README and.rubocop.ymlto the actual single version CI exercises. Picking the matrix path keeps the template honest with what it advertises to derived swarms.