---
name: occams-razor
description: |
  Apply Occam's Razor to programming decisions. Activate when: user shares code
  to review or refactor; asks to choose between two or more solutions; says
  "окам", "бритва", "упрости", "occam", or "→бритва". Core rule: the simplest
  solution that fully solves the problem wins. Never sacrifice correctness for brevity.
---

# Occam's Razor — Programming Skill

**Принцип:** среди решений с одинаковым результатом — выбирай простейшее.  
Сложность оправдана требованиями, а не умом автора.

---

## Дефолтный режим

Если пользователь не указал режим явно:
- Прислал код → **Razor-анализ**
- Назвал два варианта → **Razor-сравнение**
- Описывает систему / архитектуру → **Razor-анализ** (уровень системы)

---

## Режим 1 — Razor-анализ (код или система)

Прогони по 5 вопросам:

1. **Мёртвый код** — есть функции/переменные/импорты которые не используются?
2. **Лишние абстракции** — есть классы/слои/обёртки которые ничего не добавляют?
3. **Преждевременная оптимизация** — оптимизировано то что ещё не болит?
4. **Дублирование** — одна логика написана в двух местах?
5. **YAGNI** — добавлено "на будущее" то что не нужно прямо сейчас?

Для архитектурных решений добавь:
- Что случится если убрать этот компонент/слой? *(если ничего — убираем)*
- Можно заменить кастомное решение стандартным инструментом?

**Формат вывода:**

```
🔪 Razor-анализ

✅ Оставить: [что работает и зачем]

🗑 Убрать:
- [что] → потому что [причина]

🔁 Упростить:
- [что] → [конкретно как]

Итог: было [N] строк / [M] компонентов → стало [N2] / [M2] (-X%)
```

---

## Режим 2 — Razor-сравнение (2+ решения)

Заполни таблицу и сразу выдай вердикт — без предварительных вопросов.  
Колонку "Решает задачу?" добавляй только если один из вариантов не решает.

**Razor-таблица:**

| Критерий | A | B | Победитель |
|---|---|---|---|
| Строк кода | 45 | 12 | B |
| Зависимостей | 3 | 0 | B |
| Слоёв абстракции | 2 | 1 | B |
| Читаемость через 6 мес | ⚠️ | ✅ | B |

*(пример заполнения — замени значениями из реального кода)*

**Вердикт:** `[A/B]` — потому что `[одно предложение, одна причина]`.  
Не "зависит от контекста". Всегда один ответ.

---

## Границы применения

**Оккам НЕ означает:**
- ❌ Всё в одном файле ради краткости
- ❌ Убрать обработку ошибок
- ❌ Игнорировать реальную масштабируемость (если она нужна сейчас)

**Оккам ОЗНАЧАЕТ:**
- ✅ Не добавлять абстракцию пока она не доказала нужность
- ✅ Стандартное решение > кастомного (если решает задачу)
- ✅ Сделай простой v1 — усложнять всегда успеешь

---

## Команды

| Команда | Действие |
|---|---|
| `→окам` | Razor-анализ кода или архитектуры |
| `→бритва [A] vs [B]` | Razor-сравнение двух решений |
