CtrlK
BlogDocsLog inGet started
Tessl Logo

igmarin/rails-agent-skills

Curated library of AI agent skills for Ruby on Rails development. Covers code review, architecture, security, testing (RSpec), engines, service objects, DDD patterns, and workflow automation.

98

1.38x
Quality

99%

Does it follow best practices?

Impact

98%

1.38x

Average score across 26 eval scenarios

SecuritybySnyk

Passed

No known issues

Overview
Quality
Evals
Security
Files

criteria.jsonevals/scenario-18/

{
  "context": "Tests whether the agent follows rails-engine-author conventions: using isolate_namespace, providing a configure block with a Configuration class, defining the host-app contract, providing copy generators for migrations (not silent apply), referencing host models via configurable class names, and using a minimal lib/engine.rb structure.",
  "type": "weighted_checklist",
  "checklist": [
    {
      "name": "isolate_namespace used",
      "description": "lib/audit_trail/engine.rb calls isolate_namespace AuditTrail inside the Engine class",
      "max_score": 12
    },
    {
      "name": "configure block pattern",
      "description": "lib/audit_trail.rb defines a self.configure method that yields a Configuration instance (the standard configure do |config| pattern)",
      "max_score": 10
    },
    {
      "name": "Configuration class",
      "description": "lib/audit_trail/configuration.rb defines an AuditTrail::Configuration class with at least one attr_accessor for the host user class or equivalent",
      "max_score": 8
    },
    {
      "name": "Configurable user class",
      "description": "The Configuration class has an attribute for the host app's user class name (e.g. user_class or actor_class) defaulting to a string (e.g. 'User'), NOT a hard-coded constant",
      "max_score": 12
    },
    {
      "name": "No hard-coded host constant",
      "description": "The engine code does NOT reference ::User, ::Employee, or any other host app constant directly — uses the configurable class name or constantize pattern instead",
      "max_score": 10
    },
    {
      "name": "Migrations not auto-applied",
      "description": "lib/audit_trail/engine.rb does NOT call initializer or config block that runs migrations automatically — no db:migrate call in engine code",
      "max_score": 10
    },
    {
      "name": "Host contract documented",
      "description": "host_contract.md exists and describes at minimum: (1) what the host must configure, and (2) what the engine exposes",
      "max_score": 10
    },
    {
      "name": "lib/audit_trail.rb minimal",
      "description": "lib/audit_trail.rb requires version, configuration, and engine — does not contain business logic",
      "max_score": 8
    },
    {
      "name": "Dummy app routes mount engine",
      "description": "spec/dummy/config/routes.rb mounts AuditTrail::Engine at some path",
      "max_score": 8
    },
    {
      "name": "Model namespaced",
      "description": "app/models/audit_trail/audit_event.rb defines AuditTrail::AuditEvent (namespace matches engine isolation)",
      "max_score": 8
    },
    {
      "name": "Engine type justified",
      "description": "host_contract.md or engine.rb comments state the engine type chosen (mountable/full/plain) — OR the engine class correctly inherits from ::Rails::Engine",
      "max_score": 4
    }
  ]
}

README.md

tile.json