Use when planning Rails features or breaking down work into PRs - enforces 2-5 file PRs, bug fix separation, and one-sentence scope test
/plugin marketplace add ZempTime/vanilla-rails/plugin install zemptime-vanilla-rails@ZempTime/vanilla-railsThis skill inherits all available tools. When active, it can use any tool Claude has access to.
Each PR = one sentence. Target 2-5 files, max 7-8.
If you can't describe the PR in one sentence, split it.
CRITICAL: If your PR description uses "and", STOP and split it.
Tests go with the functional change, never with styling.
Each of these MUST be its own PR:
pinned_first)Wrong (3 PRs):
Right (5 PRs):
Present tense, no prefixes:
Add hotkeys for triaging cards
Fix HTML injection in webhook titles
Expose card ID on comments
Not: feat:, fix:, WIP:
Stop and split if:
Never bundle bug fixes with feature PRs.
✅ "This PR adds pinning to cards" ❌ "This PR adds pinning, styling, and filters"
If you use "and", split the PR.
| Excuse | Reality |
|---|---|
| "Sorting is part of the model concern" | No. Sorting is a feature that ships separately. Core pinning works without sorting. |
| "Styling and filtering touch the same view" | Different concerns. Filtering is functional, styling is visual. Separate PRs. |
| "More efficient to bundle them" | 37signals values small PRs over efficiency. 2-5 files is the target. |
| "They're logically grouped" | "Logical grouping" is not the test. One sentence without "and" is the test. |
| "Just a few lines of CSS" | Styling ALWAYS separate. Even one line. |
| "Just a tiny partial" | View code goes with controller, not model. Size irrelevant. |
| "It's related functionality" | Each feature = one PR. Even if related. One sentence test applies. |
| "The change is trivial" | Size doesn't matter. Separate concerns = separate PRs. |
Master authentication and authorization patterns including JWT, OAuth2, session management, and RBAC to build secure, scalable access control systems. Use when implementing auth systems, securing APIs, or debugging security issues.