# Что такое rules

← [Раздел](README.md) · [Главная](../README.md)

## Цель

Разобрать **формат и механику** правил Cursor (`.mdc`): как они попадают в контекст агента и как их писать читаемо.

## Предварительно

- [04 — Rules](README.md)

## Время

**45–60 минут**

---

## Зачем нужны rules

**Rule** — постоянная инструкция для AI в IDE. Модель не «помнит» прошлые чаты, но **rules подгружаются** в системный контекст (или при работе с файлами по glob).

Примеры политик:

- immutable data structures;
- conventional commits;
- не коммитить без явного запроса;
- 80% test coverage для нового кода;
- параметризованные SQL-запросы.

---

## Файл `.mdc`

Rules хранятся как Markdown с **YAML frontmatter**:

```yaml
---
description: "Краткое описание — видит агент при выборе правила"
alwaysApply: true
globs: "**/*.ts"
---
# Заголовок

Содержимое правила в Markdown...
```

| Поле | Назначение |
|------|------------|
| `description` | Когда правило релевантно (особенно без alwaysApply) |
| `alwaysApply: true` | Правило **всегда** в контексте сессии |
| `globs` | Правило при работе с файлами, matching pattern |

Если `alwaysApply` false и задан `globs` — правило активируется при редактировании matching файлов.

---

## Структура содержимого

Рекомендуемый стиль (как в ECC):

1. **Краткий заголовок** — тема правила.
2. **Императивные пункты** — «ALWAYS», «NEVER» для критичного.
3. **Примеры** — хорошо / плохо (псевдокод допустим).
4. **Чеклист** — перед завершением задачи.

Избегайте романов на 500 строк — rule съедает контекст **каждую** сессию.

---

## Пример: immutability (фрагмент)

```markdown
## Immutability (CRITICAL)

ALWAYS create new objects, NEVER mutate existing ones:

WRONG:  modify(original, field, value)
CORRECT: update(original, field, value) → new copy

Rationale: prevents hidden side effects and eases debugging.
```

Так выглядит реальный фрагмент из ECC `common-coding-style.mdc`.

---

## Размер и гранулярность

| Подход | Плюсы | Минусы |
|--------|-------|--------|
| Одно большое `everything.mdc` | Просто найти | Дорого по токенам |
| Много малых rules | Точечный glob | Нужна дисциплина имён |
| ECC common-* + project-* | Баланс | Требует install |

**Правило большого пальца:** один файл — одна **тема** (git, security, react, go).

---

## Rules и Agent behavior

Rules **не гарантируют** 100% соблюдение — модель может ошибиться. Комбинируйте:

- rules для политики;
- промпт с DoD для задачи;
- CI/lint для enforcement;
- skill `verification-loop` для чеклистов ECC.

---

## Отладка «агент игнорирует rule»

1. `alwaysApply` включён или glob совпадает с файлом?
2. Rule не противоречит другому rule?
3. Промпт не требует обратного («сделай быстро любой ценой»)?
4. Файл в правильной папке `.cursor/rules/`?
5. Новая сессия после добавления rule?

---

## ECC catalog rules

После установки ECC типично появляются:

- `common-coding-style.mdc`
- `common-security.mdc`
- `common-git-workflow.mdc`
- `common-testing.mdc`
- `common-agents.mdc`
- языковые: `typescript.mdc`, `python.mdc`, …

Установка — skill `configure-ecc` (раздел 10 курса, в разработке).

---

## Создание первого rule

1. Создайте `.cursor/rules/my-first-rule.mdc`.
2. Frontmatter с `description` и `alwaysApply: true`.
3. Одно чёткое правило, например: «Ответы пользователю на русском».
4. Новая Agent-сессия — проверка без упоминания в промпте.

---

## Самопроверка

1. Что делает `alwaysApply: true`?
2. Когда нужен `globs` вместо alwaysApply?
3. Почему огромный rule вреден?
4. Назовите три темы из ECC common rules.

## Дальше

→ [User vs project rules](user-vs-project-rules.md)
