Skip to content
Development
Skill

/solid

SOLID design review rules (SRP, OCP, LSP, ISP, DIP) for code reviews: what counts as a real design finding, what is only taste, how to cite it and how severe it is. Use when reviewing a diff, a pull request or recent changes for design problems, when asked for a "SOLID review",

From plugin
claude-plugins
1614 skills1 agent1 command

Claude Code

$ npx -y skills add siva01c/claude-plugins --skill solid --agent claude-code

SKILL.md

solid.SKILL.md
name: solid
description: >
  SOLID design review rules (SRP, OCP, LSP, ISP, DIP) for code reviews: what counts as a real
  design finding, what is only taste, how to cite it and how severe it is. Use when reviewing a
  diff, a pull request or recent changes for design problems, when asked for a "SOLID review",
  "design review", "is this class doing too much", or when a review checklist asks for
  SOLID. Pair it with the dry skill for duplication and with owasp-asvs for security.

SOLID Review

A design finding is worth reporting only when the design **already costs something or will on the next ordinary change** — a bug, an inconsistency, a change that has to touch many places, a unit that cannot be tested. Style, naming taste, "could be more elegant" and textbook purity are never findings.

Scope

Review the changed code and what it calls, read whole — not only the diff hunks. Judge the change against the conventions the repository already follows (its `AGENTS.md`/`CLAUDE.md`, existing seams and patterns). A repo that keeps small scripts procedural is not violating SOLID by doing so.

Rules

SRP — Single Responsibility

One unit (function, class, module, service) has to change for **two unrelated reasons**. Name both reasons in the finding.

  • Finding: an HTTP controller that validates input, builds SQL, renders e-mail and spawns a

child process; a Drupal form submit handler that also syncs to a remote API.

  • Not a finding: a long function that does one thing in several steps.

OCP — Open/Closed

Adding the **next variant** (a check, a backend, a provider, a content type) requires editing a `switch`/`if` chain in **several** places instead of one registration point (a map, a plugin type, a tagged service, an event subscriber).

  • Cite every place the next variant would have to touch.
  • Not a finding: a single `match` in one place that is the registration point.

LSP — Liskov Substitution

An implementation that **throws, no-ops or silently changes meaning** for part of the contract it claims, so that callers must know which concrete class they have (`instanceof` checks, "not supported" exceptions, a subclass that ignores an argument).

ISP — Interface Segregation

Callers are forced to depend on methods they never use, or implementers must stub out half an interface. Cite the unused methods and the stubbing implementers.

DIP — Dependency Inversion

Business logic hard-wired to a concrete I/O dependency (network, filesystem, database, clock, child process, a static `\Drupal::service()` call inside a class that supports injection) so that it cannot be tested or swapped without it — **where the codebase already has a seam** for that dependency elsewhere (DI container, an injected client, a clock service). Without an existing seam, report it only if it already blocks a test the change needs.

Severity

  • `high` — the design problem has **already produced** a bug or an inconsistency you can point

to (two branches of an `if` chain disagree, a stubbed method is called in production).

  • `medium` — default: the next ordinary change will have to touch several places or cannot be

tested without real I/O.

  • `low` — cleanup that would help but costs nothing today.

Reporting a finding

Each finding carries:

  • **rule** — `SRP`, `OCP`, `LSP`, `ISP` or `DIP`;
  • **location** — `file:line` (every location for OCP);
  • **cost** — one sentence: what breaks or what the next change has to do because of it;
  • **fix direction** — the smallest change that removes the cost, preferring a seam the codebase

already has over a new abstraction.

Verify each finding against the code before keeping it: re-read the lines and confirm the cost is real. Fewer, true findings beat a long list. A disagreement with the overall approach of a change is one finding, not a rewrite.

Read more
@siva01c
Ships withclaude-plugins

A curated collection of Claude Code plugins for Drupal development, security, and deployment. Each plugin covers one topic — Drupal itself, DDEV, Docker, CI/CD, git workflows, and security verification — so you install only what you need.

1614 skills1 agent
Get the whole plugin

Stars on GitHub

Momentum

stars in total
16
Star history of siva01c/claude-plugins on GitHub, a chart by star-history.com

Other skills on claude-plugins.

github-actions

github-actions

Use this skill when authoring or debugging GitHub Actions workflows (.github/workflows/*.yml) — e.g. "add CI for this Drupal…

gitlab-ci

gitlab-ci

Use this skill when authoring or debugging GitLab CI/CD pipelines (.gitlab-ci.yml) — e.g. "add a CI pipeline for this Drupal…

docker-compose

docker-compose

Use this skill when authoring or editing Docker Compose files (compose.yaml / docker-compose.yml), running multi-container…

docker-model

docker-model

Use this skill when running local AI models with Docker Model Runner — the `docker model` CLI — e.g. "run an LLM locally with…

More skills from other plugins.

brainstorming
Auto-invoked

brainstorming

You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…

@obra@obraInstall Skill
ask-matt

ask-matt

Ask which skill or flow fits your situation. A router over the skills in this repo.

skills12d309k
@mattpocock@mattpocockInstall Skill
accessibility
Auto-invoked

accessibility

Design, implement, and audit accessible UI to WCAG 2.2 Level AA across Web, iOS, and Android — semantic ARIA roles and labels,…

ecc13d293k
@affaan-m@affaan-mInstall Skill
compiler-commit

compiler-commit

Use when you want to verify compiler changes and commit with the correct convention. Runs tests, lint, and format, then commits…

react3d252k
@facebook@facebookInstall Skill

Questions about solid.

Which coding agents can use solid?
solid installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.