AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
SKILL verified MIT Self-run

Solid Principles

skill-khaledsaeed18-dotclaude-solid-principles · by KhaledSaeed18

Apply the SOLID principles as design diagnostics when writing, reviewing, or refactoring code with classes, modules, or service boundaries - detecting god classes, fragile hierarchies, fat interfaces, and hard-wired dependencies, and prescribing the smallest structural fix. Treats SOLID as a smell detector, not a ceremony to impose. Use when designing a new module or class, reviewing object-orien…

No reviews yet
0 installs
34 views
0.0% view→install

Install

$ agentstack add skill-khaledsaeed18-dotclaude-solid-principles

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-khaledsaeed18-dotclaude-solid-principles)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
2mo ago

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Solid Principles? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

Use SOLID to diagnose, not to decorate. Each principle names a specific way designs rot under change; the skill is recognizing the rot early and making the smallest cut that stops it. The failure mode of SOLID is applying it as ceremony - an interface for every class, a factory for every constructor - which produces the same unmaintainability it was meant to prevent, with more files. Every abstraction this skill recommends must be justified by a change pressure that actually exists in this codebase, not one imagined.

Step 1: Find the change pressure

Before judging any structure, learn what actually changes here:

  • git log --oneline --follow on the files in question: what has forced edits, and do unrelated reasons keep touching the same file?
  • Where have bugs clustered? A class that breaks every time a neighbour changes is telling you where the coupling is.
  • What does the team add regularly (new payment providers, new report types, new integrations)? That axis deserves an extension point; axes that never vary do not.

SOLID violations only matter along axes that change. A "god class" that has been stable for two years is a lower priority than a small class edited weekly by three features.

Step 2: Diagnose against each principle

For each, the smell, the test, and the minimal fix - in the codebase's own idiom (modules and functions count; none of this requires classes).

S - Single responsibility. A unit should have one reason to change.

  • Smell: commits touch the same file for unrelated features; the class name contains "Manager", "Handler", "Util"; you describe it with "and".
  • Test: list the actors/features that force edits to it. More than one - it is doing more than one job.
  • Fix: split along the reasons-to-change, not along method count. Ten cohesive methods are fine; three methods serving three features are not.

O - Open/closed. Add behaviour by adding code, not by editing a growing conditional.

  • Smell: a switch/if-else chain over a type tag that grows a branch with every new variant, duplicated in several places.
  • Test: "when the next variant arrives, how many existing files change?" More than one is the smell; zero or one (plus the new variant file) is the goal.
  • Fix: one extension point - a strategy map, a handler registry, polymorphism - introduced at the second or third variant, not speculatively at the first.

L - Liskov substitution. A subtype must be usable wherever its base is expected, without surprises.

  • Smell: overrides that throw NotImplemented, no-op overrides, instanceof checks on the subtype after receiving the base, subclasses that tighten what inputs they accept.
  • Test: can every caller of the base run unmodified against each subtype and stay correct?
  • Fix: usually the hierarchy is wrong - replace inheritance with composition, or split the base into what all subtypes truly share. (A Square extends Rectangle problem is never fixed inside Square.)

I - Interface segregation. Depend on the methods you use, not on a fat contract.

  • Smell: implementations stubbing methods they do not need; a change to one client's method recompiling/breaking every other client; mocks that stub fifteen methods to test one.
  • Test: group the interface's methods by which clients call them. More than one group - the interface is a bundle.
  • Fix: split by client need (Reader/Writer, not Storage), or in structurally-typed languages, accept the narrow shape the function actually uses.

D - Dependency inversion. Policy should not import mechanism.

  • Smell: business logic constructing its own database client or HTTP client inline; tests that cannot run without real infrastructure; a domain module importing a vendor SDK.
  • Test: can the core logic be exercised in a test with in-memory fakes, without patching module internals?
  • Fix: pass the dependency in (constructor, parameter, factory) behind the narrowest interface the logic needs. Plain function parameters count as injection; a DI framework is not the point.

Step 3: Prescribe proportionately

  • Order findings by cost of leaving them: violations on hot, frequently-edited paths first; stable code last or not at all.
  • Each finding names the principle, the concrete evidence (file, the commits or branches that show the pressure), and the smallest refactor - shown as the target structure in the project's own style, not a pattern name.
  • Say what you would not change. Explicitly bless the simple code that hypothetically "violates" a principle but sits on an axis with no change pressure. Recommending restraint is part of the review.
  • When writing new code rather than reviewing: start concrete, and let the second variant or second consumer trigger the abstraction. Note in the design where that extension point will go when it is earned.

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.