mcpField
U
upgrade-engine

upgrade-engine

github.com/igmarinDevelopment2836 installsUpdated 4w ago
Repository

About upgrade-engine

A skill for planning and verifying Rails engine compatibility across Ruby and Rails versions. It ties claimed support to explicit CI matrix coverage, autoload checks, and full test runs.

Key features

  1. 01Define Ruby and Rails support targets
  2. 02Check Zeitwerk autoloading
  3. 03Review initializer reload behavior
  4. 04Align gemspec bounds with tested versions
  5. 05Verify optional integrations by version
  6. 06Require CI coverage for claimed combinations

Use cases

  1. 01Planning a Rails engine version upgrade
  2. 02Checking compatibility before release
  3. 03Finding overbroad gemspec dependency bounds
  4. 04Building a multi-version CI matrix

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/igmarin/rails-agent-skills --skill upgrade-engine

After installing, type/upgrade-enginein Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

EXAMPLES.md
assets/
ci_matrix.yml
compatibility_matrix.md
zeitwerk_notes.md

Details

From the project README

Upgrade Engine

Core principle: Every claimed Rails/Ruby version must be in the CI matrix. Prefer explicit support targets over accidental compatibility.

HARD-GATE

Before claiming support for a Rails/Ruby version:
  1. bundle exec rake zeitwerk:check        # verify autoloading on each version
  2. bundle exec rspec                       # full suite per matrix version
  3. CI matrix must pass — not just main Rails version

DO NOT ship compatibility changes without verifying both autoloading and full suite.

Core Process

  1. Define supported Ruby and Rails versions — state them in gemspec and README.
  2. Run bundle exec rake zeitwerk:check — file paths must match constant names exactly (e.g. my_engine/widget_policy.rb → MyEngine::WidgetPolicy).
  3. Check initializer behavior across boot and reload — use config.to_prepare for reload-sensitive hooks; hooks placed at load time are reload-unsafe in development.
  4. Verify gemspec dependency bounds match tested versions: spec.add_dependency "rails", ">= 7.0", "< 8.0" — bounds must reflect what CI actually tests. Unbounded or overclaiming constraints (>= 5.2 without testing 5.2/6.x) are silent incompatibilities.
  5. Replace Rails.version branching with feature detection — version checks are brittle across patch releases:
# ❌ Bad — brittle, wrong for patch versions
if Rails.version >= "7.0"
  config.active_support.cache_format_version = 7.0
end

# ✅ Good — detect the capability directly
if ActiveSupport::Cache.respond_to?(:format_version=)
  config.active_support.cache_format_version = 7.0
end
  1. Check optional integrations (jobs, mailers, assets, routes, install generators, dummy-app mounts) per version. State the check even if an integration is absent.
  2. CI matrix must run against each claimed Rails/Ruby combination:
strategy:
  matrix:
    include:
      - { ruby: "3.2", rails: "7.1" }
      - { ruby: "3.3", rails: "7.2" }

Extended Resources

Output Style

  1. State the support matrix being targeted.
  2. List the most likely breakpoints.
  3. Make compatibility changes in isolated, testable seams.
  4. Recommend matrix coverage if it does not exist.
  5. Include an Optional integration matrix with rows for jobs, mailers, assets, routes, generators, and dummy app mount. For each row, state present/absent, the file path checked, and the per-version verification command.
  6. Language — Must be in English unless explicitly requested otherwise.

Integration

SkillWhen to chain
test-engineTest matrix setup, CI configuration, multi-version tests
create-engineEngine structure, host contract, namespace design
release-engineVersioning, changelog, upgrade notes for compatibility changes

Comments

Markdown supported