.agents/skills/engineering-principles/SKILL.md
Pragmatic coding principles: SOLID, KISS, DRY, YAGNI in balance. Use when writing code, refactoring, reviewing, or designing architecture. Prevents over-engineering while maintaining code quality. Триггеры: "напиши код", "рефактори", "code review", "архитектура", "engineering principles", "SOLID", "KISS", "DRY", "YAGNI", "design this", "how to structure", "разбей на модули", "спроектируй архитектуру", "создай проект", "структура проекта", "объясни архитектуру"
npx skillsauth add kissrosecicd-hub/agents-evolution engineering-principlesInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
| Принцип | Зачем | Стоп-сигнал |
|---------|-------|-------------|
| SRP — одна ответственность | Меняешь одно → не ломает другое | Функция > 40 строк или 3+ причин менять → раздели |
| OCP — расширяй, не меняй | Новая фича → старое работает | Не создавай абстракции "на будущее" (см. YAGNI) |
| LSP — замена без сюрпризов | Подставил реализацию → работает | instanceof, if type → плохой дизайн, переделай |
| ISP — минимум зависимостей | Не тяни лишнее | Интерфейс > 5 методов → разбей |
| DIP — завись от абстракций | Меняешь деталь → бизнес-логика не знает | Не абстрагируй то что не будет меняться |
| KISS — простота | Код понятен с первого чтения | if/else на 3 ветки ≠ нужна фабрика |
| DRY — без дублирования | Баг в одном месте → починил везде | Похожий код, разная логика → НЕ трогай |
| YAGNI — фокус | Не тратишь время на ненужное | "Конфиг на будущее", "generic для всего" → стоп |
Перед финальной реализацией спроси:
✅ Простая коллекция вместо сложной структуры ✅ Одна функция 40 строк понятнее чем 3 по 15 ❌ Фабрика + стратегия + декоратор для if/else на 3 ветки
✅ Одинаковая бизнес-логика в 3 местах → вынеси ❌ Две функции с 2 общими строками → не объединяй ❌ Совпадение структуры ≠ дублирование (accidental duplication)
❌ "Интерфейс пригодится когда будет вторая реализация" ❌ "Generic решение для всех возможных случаев" ❌ "Конфиг на будущее" ✅ Делаешь под задачу → рефакторишь когда задачи меняются
✅ SRP: одна причина менять → один класс/функция ❌ SRP: 10 классов для 10 строк кода → over-engineering ✅ DIP: бизнес-логика не знает про базу данных ❌ DIP: абстракция над каждым console.log ✅ OCP: новый тип через композицию, не правка существующего ❌ OCP: 5 уровней наследования "на всякий случай"
| Principle | Real benefit | |-----------|-------------| | KISS | Readability — understand code on first read | | YAGNI | Focus — spend time on what's needed now, no over-engineering | | DRY | Consistency — fix bugs once, everywhere fixed (when truly duplicated) | | SRP | Stability — change one thing without breaking another | | OCP | Safe extensions — new features don't break old code | | LSP | Predictability — swap implementations without surprises | | ISP | Minimal deps — depend only on what you use | | DIP | Modularity — swap infrastructure freely |
project/
├── src/ # Бизнес-логика, компоненты, сервисы
│ ├── modules/ # Функциональные модули (SRP: один модуль = одна зона)
│ ├── shared/ # Переиспользуемые утилиты (общие helpers, types)
│ └── index # Entry point
├── config/ # Конфигурации (дефолтные, примеры, env templates)
├── scripts/ # Утилиты: билд, деплой, миграции, генераторы
├── tests/ # Тесты: unit, integration, e2e
├── docs/ # Доки: API, архитектура, runbooks
└── .env.example # Шаблон переменных окружения
| Папка | Что внутри | Что НЕ внутри |
|-------|-----------|---------------|
| src/ | Бизнес-логика, компоненты, API handlers | Конфиги, скрипты деплоя, тесты |
| config/ | Дефолтные конфиги, .env.example, templates | Секреты, хардкод значений |
| scripts/ | Автоматизация, CLI-утилиты, генераторы | Бизнес-логика приложения |
| tests/ | Unit, integration, e2e, fixtures, mocks | Production код |
| docs/ | README, API specs, architecture decisions | Устаревшие доки без даты |
index.ts, main.py) = только wiring, без логикиПосле проектирования — объясни:
Решение: X. Причина: Y. Альтернатива Z отвергнута потому что W.A → B → C с пояснением зачем каждый шагCLI (парсинг args) → Config (валидация) → Service (логика) → Output (результат)Компонент X: делает Y. Не делает Z. Зависит от W.Input → [Transform] → Outputмодуль A → модуль B (A зависит от B)Перед написанием кода — пройдись по чеклисту:
После написания — проверь:
| Язык | Команда |
|------|---------|
| JavaScript/Node.js | node -c file.js |
| TypeScript | npx tsc --noEmit |
| Python | python -m py_compile file.py |
| Bash | bash -n script.sh |
| Go | go build ./... |
| Rust | cargo check |
.env.example — шаблон всех переменных с комментариями.env.example показывает структуру, не значения# API ключ (получить на https://example.com/api-keys)
API_KEY=your-api-key-here
# URL базы данных (format: postgresql://user:pass@host:port/db)
DATABASE_URL=postgresql://localhost:5432/mydb
# Порт приложения (default: 3000)
PORT=3000
# Лог уровень: debug, info, warn, error (default: info)
LOG_LEVEL=info
Полный цикл создания проекта/фичи:
tools
KISS reference skill for v2rayA on Arch/Ubuntu/Fedora with TUN, RoutingA, DoH DNS and Outline key import.
testing
Identifies dependencies at heightened risk of exploitation or takeover. Use when assessing supply chain attack surface, evaluating dependency health, or scoping security engagements.
development
Run Semgrep static analysis scan on a codebase using parallel subagents. Supports two scan modes — "run all" (full ruleset coverage) and "important only" (high-confidence security vulnerabilities). Automatically detects and uses Semgrep Pro for cross-file taint analysis when available. Use when asked to scan code for vulnerabilities, run a security audit with Semgrep, find bugs, or perform static analysis. Spawns parallel workers for multi-language codebases.
development
Identifies error-prone APIs, dangerous configurations, and footgun designs that enable security mistakes. Use when reviewing API designs, configuration schemas, cryptographic library ergonomics, or evaluating whether code follows 'secure by default' and 'pit of success' principles. Triggers: footgun, misuse-resistant, secure defaults, API usability, dangerous configuration.