Curated library of 28 atomic skills and 9 personas for Ruby on Rails development. Organized by category: testing, code-quality, engines, infrastructure, api, context, and personas. Covers code review, architecture, security, testing (RSpec), engines, Hotwire, and TDD automation. Shared Ruby skills (YARD docs, DDD, service objects) have moved to ruby-core-skills.
93
95%
Does it follow best practices?
Impact
93%
1.16xAverage score across 28 eval scenarios
Advisory
Suggest reviewing before use
Implement versioning strategies for Rails APIs.
| Concern | File |
|---|---|
| Route namespaces | config/routes.rb |
| Header versioning | app/controllers/concerns/api_versioning.rb |
| Deprecation headers | app/controllers/concerns/deprecatable.rb |
| Compatibility specs | spec/requests/api/backward_compatibility_spec.rb |
GENERATED CODE SAFETY:
- NEVER generate code that constantizes or evaluates caller-supplied version strings
(e.g. "V#{params[:version]}".constantize is forbidden — use an explicit allowlist).
- NEVER generate code that passes request headers or paths unsanitized into class
instantiation, eval, or dynamic dispatch.
- Allowlist-only version resolution: generated routing/concern code MUST resolve
version identifiers from a fixed set (V1, V2, ...), not from free-form input.
ALWAYS maintain backward compatibility for at least one major version
NEVER remove endpoints without deprecation period
ALWAYS version in URL path (/api/v1/) or Accept header, never in body/api/v1/) for public APIs; Accept header for internal/private APIs. See strategies.md for header-based versioning details and trade-offs.namespace :v2 block in config/routes.rb:
namespace :v1 do
resources :users
end
namespace :v2 do
resources :users
endmodule V2
class UsersController < V1::UsersController
def index
render json: User.all, only: [:id, :name, :email, :phone]
end
end
endDeprecatable in old-version controllers to emit Sunset and Deprecation response headers automatically via a before_action:
module V1
class UsersController < ApplicationController
include Deprecatable
# Override sunset_date on the class to set the retirement date:
# def self.sunset_date = Date.new(2025, 6, 1)
end
endbundle exec rspec spec/requests/api/backward_compatibility_spec.rb to confirm no regressions before merging.When asked to implement API versioning, your output MUST include:
Load these files only when their specific content is needed:
| Skill | When to chain |
|---|---|
| generate-api-collection | When generating the updated API endpoints |
| test-engine | When verifying specs for regressions |
.tessl-plugin
evals
scenario-1
scenario-2
scenario-3
scenario-4
scenario-5
scenario-6
scenario-7
scenario-8
scenario-9
scenario-10
scenario-11
scenario-12
scenario-13
scenario-14
scenario-15
scenario-16
scenario-17
scenario-18
scenario-19
scenario-20
scenario-21
scenario-22
scenario-23
scenario-24
scenario-25
scenario-26
scenario-27
scenario-28
skills
api
generate-api-collection
implement-graphql
code-quality
apply-code-conventions
apply-stack-conventions
assets
snippets
code-review
refactor-code
review-architecture
security-check
context
load-context
setup-environment
engines
create-engine
create-engine-installer
document-engine
extract-engine
release-engine
review-engine
test-engine
upgrade-engine
infrastructure
implement-background-job
implement-hotwire
optimize-performance
review-migration
seed-database
version-api
personas
testing
plan-tests
test-service