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-3/

{
  "context": "Tests whether the agent correctly implements the Builder (with attribute whitelisting) and Domain Entity (with frozen ATTRIBUTES, SQL query constants, self.fetcher wiring, and sanitize_sql for search) layers, plus FactoryBot hash factories for API response test data.",
  "type": "weighted_checklist",
  "checklist": [
    {
      "name": "Builder initializer attributes",
      "description": "Builder is initialized with an `attributes:` keyword argument stored as an instance variable",
      "max_score": 7
    },
    {
      "name": "Builder attribute filtering",
      "description": "Builder#build uses slice (or equivalent whitelist filter) to restrict output to only the specified attributes — does NOT return all fields from the raw response",
      "max_score": 10
    },
    {
      "name": "Builder response parsing",
      "description": "Builder#build accesses response structure keys (schema/columns and data array) to map rows rather than assuming a flat array",
      "max_score": 7
    },
    {
      "name": "Entity ATTRIBUTES constant",
      "description": "Animal class defines ATTRIBUTES as a frozen array (using .freeze) containing string field names",
      "max_score": 8
    },
    {
      "name": "Entity DEFAULT_QUERY constant",
      "description": "Animal class defines a DEFAULT_QUERY string constant containing a SQL SELECT statement",
      "max_score": 7
    },
    {
      "name": "Entity SEARCH_QUERY constant",
      "description": "Animal class defines a SEARCH_QUERY string constant with a parameterized SQL query (containing a placeholder such as ? or :param)",
      "max_score": 7
    },
    {
      "name": "Entity self.fetcher wiring",
      "description": "Animal defines a self.fetcher class method that instantiates Builder with ATTRIBUTES and Fetcher with the client and builder",
      "max_score": 9
    },
    {
      "name": "sanitize_sql usage",
      "description": "Animal's find/search method uses ActiveRecord::Base.sanitize_sql (or sanitize_sql_array) to construct parameterized queries — does NOT use string interpolation for user input",
      "max_score": 10
    },
    {
      "name": "FactoryBot hash factory",
      "description": "spec/factories/shelter_api/animal_response.rb defines a FactoryBot factory (not a model factory) that produces a hash matching the API response structure",
      "max_score": 10
    },
    {
      "name": "Factory in correct directory",
      "description": "The FactoryBot factory file is located under spec/factories/shelter_api/ (module-namespaced directory), not in spec/factories/ root",
      "max_score": 8
    },
    {
      "name": "ShelterApi module namespace",
      "description": "Both Builder and Animal classes are defined inside the ShelterApi module namespace (matching the existing client.rb and fetcher.rb)",
      "max_score": 8
    },
    {
      "name": "No raw interpolation in queries",
      "description": "Animal's search/find method does NOT use Ruby string interpolation (#{...}) to embed user-supplied values directly into SQL query strings",
      "max_score": 9
    }
  ]
}

README.md

tile.json