ci: verify the supported Rails and Ruby span - #17
Conversation
The gemspec advertises Rails 8.0 or newer on Ruby 3.3 or newer, but CI ran exactly one combination, so the range was a claim rather than a tested guarantee. Add a matrix over Ruby 3.3 and 3.4 against Rails 8.0 and 8.1, pinned through RAILS_VERSION in the Gemfile, and make the release job depend on it. Verified locally that the suite passes against Rails 8.0, which had never been exercised.
Greptile SummaryThe PR adds a Rails/Ruby compatibility matrix, makes releases depend on it, and pins Rails families through Confidence Score: 5/5The PR appears safe to merge. No blocking failure remains. Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart LR
Matrix["Ruby 3.3 / 3.4 × Rails 8.0 / 8.1"] --> Pin["Set RAILS_VERSION"]
Pin --> Bundle["Resolve pinned Rails libraries"]
Bundle --> Tests["Run test suite"]
Tests --> Release["Permit release job"]
Reviews (2): Last reviewed commit: "docs: merge the unreleased changelog sec..." | Re-trigger Greptile |
| - Run compatibility CI across the span the gemspec advertises: Ruby 3.3 and 3.4 | ||
| against Rails 8.0 and 8.1. The suite previously ran on one combination, so | ||
| `>= 8.0` was a claim rather than a tested guarantee. Set `RAILS_VERSION` to | ||
| pin a Rails line locally. | ||
|
|
||
| ## Unreleased |
There was a problem hiding this comment.
The new compatibility entry creates a second consecutive Unreleased section, splitting current changes between identical headings and making release-note generation ambiguous.
| - Run compatibility CI across the span the gemspec advertises: Ruby 3.3 and 3.4 | |
| against Rails 8.0 and 8.1. The suite previously ran on one combination, so | |
| `>= 8.0` was a claim rather than a tested guarantee. Set `RAILS_VERSION` to | |
| pin a Rails line locally. | |
| ## Unreleased | |
| - Run compatibility CI across the span the gemspec advertises: Ruby 3.3 and 3.4 | |
| against Rails 8.0 and 8.1. The suite previously ran on one combination, so | |
| `>= 8.0` was a claim rather than a tested guarantee. Set `RAILS_VERSION` to | |
| pin a Rails line locally. |
Prompt To Fix With AI
This is a comment left during a code review.
Path: CHANGELOG.md
Line: 5-10
Comment:
**Duplicate Unreleased sections**
The new compatibility entry creates a second consecutive `Unreleased` section, splitting current changes between identical headings and making release-note generation ambiguous.
```suggestion
- Run compatibility CI across the span the gemspec advertises: Ruby 3.3 and 3.4
against Rails 8.0 and 8.1. The suite previously ran on one combination, so
`>= 8.0` was a claim rather than a tested guarantee. Set `RAILS_VERSION` to
pin a Rails line locally.
```
---
For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.There was a problem hiding this comment.
Right, main already carried an unreleased section from the wake-up adapter and I added a second. Merged into one so release notes stay unambiguous.
A synchronous lock retry computed its wait from the remaining deadline, which can go negative between the expiry check and the wait, raising ArgumentError instead of the SyncEnqueueTimeout the caller expected. Skip the wait when no interval remains. The new compatibility matrix surfaced this on its first run.
|
@greptileai review |
Roadmap milestone 8, the compatibility half.
The gap
solid_objects.gemspecadvertises Rails>= 8.0on Ruby>= 3.3, but CI ran exactly one combination: Ruby 3.3 with whatever Rails resolved newest. Rails 8.0 had never been exercised, so the supported range was a claim rather than a tested guarantee. This is the kind of gap that surfaces as a user bug report instead of a test failure.The change
A
compatibilityjob over Ruby 3.3 and 3.4 against Rails 8.0 and 8.1, four combinations, withfail-fast: falseso one failure does not hide the others. The release job now depends on it.Pinning works through
RAILS_VERSIONin the Gemfile, which constrains the six Rails libraries the gemspec depends on. No new development dependency: Appraisal would have done this too, but an environment variable and sixgemlines are less machinery for the same result. It also works locally:I ran exactly that before opening this: Rails 8.0 passes, 301 runs, 0 failures. So this PR does not fix a latent incompatibility, it converts an untested claim into a verified one.
On Ruby 4.0
Not in the matrix. I have been developing this gem on Ruby 4.0.5 locally while CI ran 3.3, so it demonstrably works, but the gemspec does not advertise it and adding it would widen the support claim rather than verify the existing one. Recorded in the roadmap as the remaining gap.
Roadmap
Records compatibility CI under "Implemented and tested" and reduces milestone 7 to the security-scanning half, noting Ruby 4.0 is still absent, per the requirement added in #15.
Compatibility
No library change.
RAILS_VERSIONis unset in normal use, sobundle installbehaves exactly as before.Validation
Standard Ruby, RuboCop, RBS, Steep, and Brakeman clean.