# Refactor

> Use when refactoring code for simplicity, removing duplication, or applying KISS/DRY/SOLID/YAGNI. Triggers on "refactor", "clean up code", "apply DRY".

- Skill: `tomevault-io/refactor-4` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add tomevault-io/refactor-4`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tomevault-io/refactor-4/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: tomevault-io (https://skillmd.com/u/tomevault-io)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/tomevault-io/refactor-4

---


# KISS DRY SOLID YAGNI Refactor

Refactor selected files (or current diff) to align with KISS, DRY, SOLID, and YAGNI while strictly preserving behavior.

## Usage

```
/refactor [file_or_pattern]
```

**Examples:**
```bash
/refactor                              # Refactor current diff
/refactor src/core/*.py                # Refactor specific files
```

## Principles Applied (In Order)

### 1. KISS (Keep It Simple, Stupid)
- Flatten deeply nested control flow with guard clauses
- Remove unnecessary wrapper layers and pass-through indirections
- Replace complex boolean expressions with well-named predicates
- Prefer straightforward data flow over cleverness
- Keep functions small and cohesive
- Inline trivial abstractions that add indirection without reducing complexity

### 2. YAGNI (You Aren't Gonna Need It)
- Remove dead/unreachable code, unused params/locals/imports/exports
- Delete speculative abstractions with single use and no near-term reuse
- Collapse configuration surface to what's actually used
- Keep public APIs stable (SKIP if removal risks breakage)

### 3. DRY (Don't Repeat Yourself)
- Detect duplication: copy/paste blocks, repeated queries/hooks/effects
- Extract shared logic into small, well-named helpers
- Consolidate config/literals into constants
- Remove magic numbers/strings
- Keep helpers close to use-sites unless broadly reusable

### 4. SOLID
- **Single Responsibility**: One function/class = one reason to change
- **Open/Closed**: Prefer extension points over editing core logic (when warranted)
- **Liskov Substitution**: Subtypes uphold base contracts
- **Interface Segregation**: Break wide interfaces into focused ones
- **Dependency Inversion**: Depend on abstractions, inject dependencies

## Constraints

- **Preserve behavior**: No functional changes
- **Preserve side effects**: Logging and error semantics untouched
- **Maintain readability**: No over-abstraction
- **Keep public APIs stable**: Skip changes that risk breakage
- **Same or better performance**: No extra allocations in hot paths
- **Follow repo patterns**: TypeScript types, React hooks rules, Python async-first
- **Honor AIDEV-* comments**: Update when modifying related code
- **No tests unless asked**

## Language Specifics

**React/TypeScript:**
- Prefer small pure utilities, stable hook signatures, typed params/returns
- Don't break Rules of Hooks
- Keep component props stable

**Python:**
- Prefer pure functions and dataclasses
- Keep docstrings/typing intact
- Avoid unnecessary try/except, prefer guard clauses

## Output

Concise rationale summary grouped by principle:

```
## KISS
- Flattened nested if/else in `query.py:process_result` using guard clauses

## YAGNI
- Removed unused `legacy_mode` parameter in `handler.py:handle_request`
- SKIPPED: `config.defaults` removal - used by external clients

## DRY
- Extracted `validate_user_input()` helper in `api.py` (was duplicated 3x)

## SOLID
- Split `UserManager` into `UserReader` and `UserWriter` (SRP)
```

---
> Converted and distributed by [TomeVault](https://tomevault.io/claim/v1-io) — claim your Tome and manage your conversions.
<!-- tomevault:4.0:skill_md:2026-04-13 -->

