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

{
  "context": "Tests whether the agent structures the spec file following RSpec conventions: describe for class/method, context for scenarios, spec path mirroring source path, prefer let over let!, and no 'and' in example descriptions. Also verifies frozen_string_literal pragma and subject definition.",
  "type": "weighted_checklist",
  "checklist": [
    {
      "name": "Spec file at mirrored path",
      "description": "The spec file is placed at spec/services/notifications/user_notifier_spec.rb — mirroring the source path app/services/notifications/user_notifier.rb",
      "max_score": 15
    },
    {
      "name": "RSpec.describe uses module::class",
      "description": "The top-level RSpec.describe references the full constant Notifications::UserNotifier (or described_class equivalent)",
      "max_score": 10
    },
    {
      "name": "describe for method",
      "description": "A describe block is used for the '.call' class method (e.g. describe '.call')",
      "max_score": 10
    },
    {
      "name": "context for scenario variations",
      "description": "At least two context blocks are used to describe scenario variations — phrased with 'when' or 'with' (e.g. 'when event_type is invalid')",
      "max_score": 12
    },
    {
      "name": "let used for test data",
      "description": "Test data (user_id, event_type, params) is set up using let blocks, not bare instance variables or local variables in before hooks",
      "max_score": 10
    },
    {
      "name": "No let! for non-setup data",
      "description": "let! is NOT used for data that does not need to exist unconditionally — only plain let is used for parameters and simple values",
      "max_score": 10
    },
    {
      "name": "No 'and' in example descriptions",
      "description": "No it block description contains ' and ' — each example tests exactly one behavior",
      "max_score": 12
    },
    {
      "name": "Frozen string literal",
      "description": "The spec file begins with # frozen_string_literal: true",
      "max_score": 8
    },
    {
      "name": "Subject defined",
      "description": "A subject or named subject is defined for the main service call (e.g. subject(:result) { described_class.call(...) })",
      "max_score": 8
    },
    {
      "name": "let_it_be NOT used",
      "description": "let_it_be is NOT used anywhere in the spec file (test-prof is not in this project)",
      "max_score": 5
    }
  ]
}

README.md

tile.json